首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >串行通信8051

串行通信8051
EN

Stack Overflow用户
提问于 2013-05-31 17:22:49
回答 1查看 477关注 0票数 0

我正在学习8051中使用UART和中断的串行通信。今天,我偶然看到这段代码,其中作者说他不断地传输来自端口0的数据。传输的方式,我认为是无效的串行通信规则在8051。

代码语言:javascript
复制
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会发送正确的数据吗?

问候

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-07 14:46:22

你绝对是对的,后面标签里的代码应该重写如下:

代码语言:javascript
复制
back:
    jb TI,$
    mov A,P0
    mov SBUF,A
    sjmp back

像我之前做的那样编码SBUF标签可以保证你不会将任何数据移动到back,直到它完成最后一个数据的发送。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16853979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档