Serial port 串行通信8051
我正在研究使用UART和中断的8051串行通信。今天我遇到了这段代码,作者说他一直在传输来自端口0的数据。传输发生的方式,我认为是8051中串行通信的规则Serial port 串行通信8051,serial-port,8051,Serial Port,8051,我正在研究使用UART和中断的8051串行通信。今天我遇到了这段代码,作者说他一直在传输来自端口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
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寄存器上写入数据,这是一条规则,即在发送以前的数据之前(由TI标志通知),我们不应该在SBUF上写入数据
在上述代码中不断在SBUF寄存器上写入数据是否有效?UART会发送正确的数据吗
关于您肯定是对的,背面标签内的代码应该重写如下:
back:
jb TI,$
mov A,P0
mov SBUF,A
sjmp back
像我以前做的那样编写back
标签可以保证在SBUF完成最后一次数据发送之前,不会将任何数据移动到SBUF
这里有一个细节需要考虑,请记住,串行端口中断(通过接收或发送)不是自动清除的,因此在之前的代码中,我假设您手动清除了TI中断标志