各位大侠,51单片机串口中断接收问题为什么一个一个字节的发,串口都可以接收,而连续发4个十六进制

各位大侠,51单片机串口中断接收问题为什么一个一个字节的发,串口都可以接收,而连续发4个十六进制,第1张

每次进中断你都回发Rbuf[]数组(4个字节),更要命的是你居然还敢在中断函数里面while(TI==0)。

你可以看看在串行中断函数里面浪费了多少时间。

51的串口只有一个移位寄存器。第一次进入中断后你读出了1个字节,然后移位寄存器里面又收到1个字节,剩下的再来就被丢掉了……因为老兄你还在第一次进入的中断里面悠哉悠哉地耍呢。

摘录一段我写的程序供参考:

;------------------相关寄存器定义------------------------

AUXR EQU 8EH ;辅助寄存器

AUXR1 EQU 0A2H ;辅助寄存器1

CLK_DIV EQU 97H ;时钟分频器

S2CON EQU 9AH ;串口2控制寄存器

S2BUF EQU 9BH ;串口2数据缓冲区

BRT EQU 9CH ;波特率寄存器

IE2 EQU 0AFH ;中断控制寄存器2

;-----------------串行初始化程序-------------------------

UART_INIT:

ORL PCON,#80H ;使能波特率倍速位SMOD

MOV SCON,#50H ;8位数据,可变波特率

MOV S2CON,#50H ;8位数据,可变波特率

MOV BRT,#0FAH ;57600bps@110592MHz

ORL AUXR,#14H ;独立波特率发生器时钟为Fosc,即1T

ORL IE2,#01H ;允许串口2中断

ANL AUXR,#03FH ;定时器12时钟为Fosc,即12T

ANL AUXR,#0FEH ;串口1选择定时器1为波特率发生器

MOV TMOD,#21H ;设定定时器1为8位自动重装方式,0为16位定时器

MOV TL1,#0FFH ;57600bps@110592MHz

MOV TH1,#0FFH ;设定定时器重装值

MOV SERGET,#0 ;接收RS232 Pointer is 0

MOV SERPUT,#0 ;取值RS232 Pointer is 0

MOV RXGET,#0 ;接收RS485 Pointer is 0

MOV RXPUT,#0 ;取值RS485 Pointer is 0

CLR P44 ;485处于接收状态

ORL IPH,#10H ;

SETB PS ;串口1中断优先级11为最高

CLR ET1 ;禁止定时器1中断

SETB TR1 ;启动定时器1

CLR BUSY

RET

;-----------------串行通讯2中断服务程序-------------------------

SER2INT:

PUSH ACC

PUSH PSW

MOV A,S2CON

JNB ACC0,SER2INT1 ;S2RI

ANL S2CON,#NOT S2RI

MOV A,S2BUF

MOV B,A

MOV R0,#RXRAM

MOV A,RXPUT

ANL A,#0FH

ORL A,R0

MOV R0,A

MOV A,B

MOV @R0,A

LCALL SENDRXDAT

INC RXPUT

SJMP SERINT2

SER2INT1:

MOV A,S2CON

JNB ACC1,SERINT2 ;S2TI

ANL S2CON,#NOT S2TI

CLR BUSY

SERINT2:

POP PSW

POP ACC

RETI

;-----------------串行通讯1中断服务程序-------------------------

SER1INT:

PUSH ACC

PUSH PSW

PUSH DPL

PUSH DPH

SETB RS0

CLR RS1

JBC RI,SERTIRI1 ;是接收中断,清除此标志,转接收

CLR TI ;是发送中断,清除此标志,中断返回

SJMP SEREND

SERTIRI1:

MOV A,SBUF ;接收(读入)数据

MOV B,A

SERTIRI2:

MOV R0,#SERRAM

MOV A,SERPUT

ANL A,#1FH

ORL A,R0

MOV R0,A

MOV A,B

MOV @R0,A

INC SERPUT

MOV DLY03,A

SETB SERBIT

SEREND:

POP DPH

POP DPL

POP PSW

POP ACC

RETI

以上就是关于各位大侠,51单片机串口中断接收问题为什么一个一个字节的发,串口都可以接收,而连续发4个十六进制全部的内容,包括:各位大侠,51单片机串口中断接收问题为什么一个一个字节的发,串口都可以接收,而连续发4个十六进制、使用stc12c5a60s2双串口单片机时 串口2的中断服务子程序怎么写呢、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9326635.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存