串行通信8051

时间:2013-05-31 09:22:49

标签: 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
    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会发送正确的数据吗?

此致

1 个答案:

答案 0 :(得分:1)

你是对的,后面标签里面的代码应该像这样重写:

back:
    jb TI,$
    mov A,P0
    mov SBUF,A
    sjmp back

像我之前编写的 back 标签保证您在完成最后一次数据发送之前不会将任何数据移动到SBUF。

此处有一个细节需要考虑,请记住 串口中断 (通过接收或传输) 不会自动清除 ,所以在我假设您手动清除TI中断标志之前的代码中。