我正在学习8051中使用UART和中断的串行通信。今天,我偶然看到这段代码,其中作者说他不断地传输来自端口0的数据。传输的方式,我认为是无效的串行通信规则在8051。
org 00h
ljmp main
org 23h
ljmp serial_ISR
org 30h
main:
mov TMOD,#20h
mov TH1,#-03h
mov SCON,#50h
setb IE.7
setb IE.4
setb TR1
back:
mov A,P0
mov SBUF,A
sjmp back
serial_ISR:
jb TI,trans
mov R0,SBUF
clr RI
RETI
trans:
clr TI
RETI让我感到困惑的是,在back标签中,我们不断地写入SBUF寄存器,这使我们在发送之前不应该写入SBUF的规则无效(这是由TI标志通知的)。
在上述代码中不断向SBUF寄存器写入数据是否有效?UART会发送正确的数据吗?
问候
发布于 2013-06-07 14:46:22
你绝对是对的,后面标签里的代码应该重写如下:
back:
jb TI,$
mov A,P0
mov SBUF,A
sjmp back像我之前做的那样编码SBUF标签可以保证你不会将任何数据移动到back,直到它完成最后一个数据的发送。
这里有一个细节需要考虑,请记住,串口中断(通过接收或发送)不会自动清除,所以在我之前的代码中,我假设您手动清除了TI中断标志。
https://stackoverflow.com/questions/16853979
复制相似问题