[51单片机] 求大佬解释为什么我TI没有置0还一直发送数据

[复制链接]
792|10
 楼主 | 2019-4-5 20:34 | 显示全部楼层 |阅读模式
void main()
{
   chushi();

   while(1)
    {
        SBUF=2;
  
    }
}










void chushi()

{
TH1=0Xf3;
TL1=0xf3;
TMOD=0X20;
SCON=0X50;
PCON=0X80;
ES=1;
EA=1;
TR1=1;
}






void chuankpu()interrupt 4
{
   

}

使用特权

评论回复
| 2019-4-6 09:05 | 显示全部楼层
你在循环里一直 SBUF=2; 当然要一直发送数据了。

使用特权

评论回复
| 2019-4-6 09:51 | 显示全部楼层
循环里一直写 SBUF=2;  串口根本来不及发送完数据, 这样的写法一定是有问题的

使用特权

评论回复
 楼主 | 2019-4-6 10:28 | 显示全部楼层
xuyaqi 发表于 2019-4-6 09:05
你在循环里一直 SBUF=2; 当然要一直发送数据了。

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

使用特权

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

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

使用特权

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

使用特权

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

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

使用特权

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

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

使用特权

评论回复
 楼主 | 2019-4-6 23:59 | 显示全部楼层
xuyaqi 发表于 2019-4-6 21:44
中断没有置0,只是不再次发中断,不影响串口发送,串口不是非用中断才能发送。 ...

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

使用特权

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

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

使用特权

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

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

热门推荐上一条 /5 下一条

在线客服 快速回复 返回顶部 返回列表