打印
[51单片机]

求大佬解释为什么我TI没有置0还一直发送数据

[复制链接]
1714|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
741283585|  楼主 | 2019-4-5 20:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
xuyaqi| | 2019-4-6 09:05 | 只看该作者
你在循环里一直 SBUF=2; 当然要一直发送数据了。

使用特权

评论回复
板凳
airwill| | 2019-4-6 09:51 | 只看该作者
循环里一直写 SBUF=2;  串口根本来不及发送完数据, 这样的写法一定是有问题的

使用特权

评论回复
地板
741283585|  楼主 | 2019-4-6 10:28 | 只看该作者
xuyaqi 发表于 2019-4-6 09:05
你在循环里一直 SBUF=2; 当然要一直发送数据了。

但是不是发送完一个字符后,TI会置1吗,然后进入中断没有置0,这样正常的话不是只发送一个asc码2吗

使用特权

评论回复
5
741283585|  楼主 | 2019-4-6 10:28 | 只看该作者
airwill 发表于 2019-4-6 09:51
循环里一直写 SBUF=2;  串口根本来不及发送完数据, 这样的写法一定是有问题的 ...

但是不是发送完一个字符后,TI会置1吗,然后进入中断没有置0,这样正常的话不是只发送一个asc码2吗

使用特权

评论回复
6
airwill| | 2019-4-6 10:46 | 只看该作者
TI 应该会置1, 但并不能阻止进一步发送数据吧.
写 SBUF=2; 并不是 ASC 码的 2,  而是 十六进制的 0x02

使用特权

评论回复
7
741283585|  楼主 | 2019-4-6 15:18 | 只看该作者
airwill 发表于 2019-4-6 10:46
TI 应该会置1, 但并不能阻止进一步发送数据吧.
写 SBUF=2; 并不是 ASC 码的 2,  而是 十六进制的 0x02 ...

我知道2得发送51,我是觉得TI=1,还能发送数据的话就有些奇怪的了,请问你知不知道这原因呢;就好像是理论与现实差距挺大的,还是我漏了些什么知识点

使用特权

评论回复
8
xuyaqi| | 2019-4-6 21:44 | 只看该作者
741283585 发表于 2019-4-6 10:28
但是不是发送完一个字符后,TI会置1吗,然后进入中断没有置0,这样正常的话不是只发送一个asc码2吗 ...

中断没有置0,只是不再次发中断,不影响串口发送,串口不是非用中断才能发送。

使用特权

评论回复
9
741283585|  楼主 | 2019-4-6 23:59 | 只看该作者
xuyaqi 发表于 2019-4-6 21:44
中断没有置0,只是不再次发中断,不影响串口发送,串口不是非用中断才能发送。 ...

我又懵了,TI没有置0的话,TI=1这样子还能发送数据的话;那岂不是永远在发送数据。因为好像没有什么可以限制啊

使用特权

评论回复
10
linqing171| | 2019-4-7 00:11 | 只看该作者
SBUF接到了移位寄存器。
SBUF寄存器的写信号,也就是微机原理里面intel总线的wr信号,和SBUF的cs或之后的信号,触发了串口状态机。
串口状态机允许一个已经设置好的时钟来驱动移位寄存器输出内容。
输出完了start+8+1个后,移位寄存器空了,状态机会把TI会置位,会把移位寄存器的时钟停掉。

所以,发不发和TI没有关系,只和你写不写有关系。

使用特权

评论回复
11
airwill| | 2019-4-7 07:01 | 只看该作者
推荐软件中断清除这个标志.
每次发送完都能去清掉这个标志, 那么这个标志就有了作用了.
也知道什么时候该再次去写 SBUF 了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

10

帖子

0

粉丝