标题: 奇怪的单片机RI接收中断标志 [打印本页]

作者: sddboy    时间: 2020-10-10 14:17
标题: 奇怪的单片机RI接收中断标志
本帖最后由 sddboy 于 2020-10-11 08:07 编辑

用串口助手   给单片机    发数据测试

发现  如果第一次 发送   000000 ,六个零 就是    30  30  30  30  30  30  触发 RI 置1


如果第一次 发送 少于 6个0   , 例如4个零,就必须发送两次4个零    才能触发   RI 置1,触发后,随便发 几个零 都能触发 RI  置1


有没有 大佬    知道什么原因 导致的
=====================
单片机 里主要代码


           while(RI==0)
           {
              ;}

           num=SBUF;

           RI=0;


          执行 动作

==========================

RI 标志.JPG (106.21 KB, 下载次数: 70)

RI 标志.JPG

51code232.JPG (33.57 KB, 下载次数: 81)

51code232.JPG

作者: hhdsdy    时间: 2020-10-10 15:54
必须搞清楚,单片机在接收到数据就会自动触发 RI 置1,而不是靠程序,然后要用程序人工 RI 清0。
while(RI==0)这句并不是判断单片机是否收到数据0,RI 只是一个接收到数据的标志,而单片机收到的数据会自动保存在SBUF里,所以你的程序应该稍微改一下(判断num是什么数值,并且这个只是判断一个而不是6个)

if(RI)
{
RI = 0;
num=SBUF;

用num判断数据并执行相应的操作

}




作者: sddboy    时间: 2020-10-10 17:47
hhdsdy 发表于 2020-10-10 15:54
必须搞清楚,单片机在接收到数据就会自动触发 RI 置1,而不是靠程序,然后要用程序人工 RI 清0。
while(RI ...

while(RI==0){},如果不置位,RI=0满足条件,等待死循环,没什么问题吧,
照理我发送 任意数据 应该会触发RI置1啊,可是初次串口通信 我必须发6个字节 才能触发RI 置位
搞不懂

作者: hhdsdy    时间: 2020-10-10 19:54
sddboy 发表于 2020-10-10 17:47
while(RI==0){},如果不置位,RI=0满足条件,等待死循环,没什么问题吧,
照理我发送 任意数据 应该 ...

你这样写总感觉怪怪的,也不好看程序。
发6个字节才能触发RI,应该还是你的程序有问题,波特率是否计算错误?把完整程序发上来看看吧
作者: sddboy    时间: 2020-10-11 08:07
hhdsdy 发表于 2020-10-10 19:54
你这样写总感觉怪怪的,也不好看程序。
发6个字节才能触发RI,应该还是你的程序有问题,波特率是否计算 ...

单片机 串口代码

51code232.JPG (33.57 KB, 下载次数: 92)

51code232.JPG





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1