Serial port 串行通信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

我正在研究使用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
    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中断标志