找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2457|回复: 4
收起左侧

奇怪的单片机RI接收中断标志

[复制链接]
ID:187947 发表于 2020-10-10 14:17 | 显示全部楼层 |阅读模式
本帖最后由 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
51code232.JPG
回复

使用道具 举报

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

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

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

}



回复

使用道具 举报

ID:187947 发表于 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 置位
搞不懂
回复

使用道具 举报

ID:88256 发表于 2020-10-10 19:54 | 显示全部楼层
sddboy 发表于 2020-10-10 17:47
while(RI==0){},如果不置位,RI=0满足条件,等待死循环,没什么问题吧,
照理我发送 任意数据 应该 ...

你这样写总感觉怪怪的,也不好看程序。
发6个字节才能触发RI,应该还是你的程序有问题,波特率是否计算错误?把完整程序发上来看看吧
回复

使用道具 举报

ID:187947 发表于 2020-10-11 08:07 | 显示全部楼层
hhdsdy 发表于 2020-10-10 19:54
你这样写总感觉怪怪的,也不好看程序。
发6个字节才能触发RI,应该还是你的程序有问题,波特率是否计算 ...

单片机 串口代码

51code232.JPG
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表