找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1494|回复: 8
打印 上一主题 下一主题
收起左侧

请教单片机串口通讯问题,最后置标志位语句不是每次都能执行

[复制链接]
跳转到指定楼层
楼主
ID:565803 发表于 2019-6-18 16:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

用C8051F410, 需要从串口接收两个字节,收到后置标志位,程序如下

vvoid comm0_rx(void) interrupt 4   

{

        m=0;

  while(m<2)

   {

          if(RI0)                  

         {

            RI0=0;                  

            recdata[m]=SBUF0;

           m++;

         }

     }

        

              m=0;

       while(m<2)               

           {

                  SBUF0=recdata[m];

                    while(!TI0);           

                    TI0=0;               

                   m++;

           }

            flag0=1;        

            flag1=1;        

           ES0=0;                 

}

     程序运行后,接收及发送都没问题,但就是最后置标志位语句不是每次都能执行,偶尔接收一次就能执行,大多数要接收好几次才能置位(次数不定)。开始时接收和发送是在一起,后来分开,甚至置位语句放在接收与发送之间也没用。哪位大侠遇到过这种问题?

   

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:94031 发表于 2019-6-19 08:14 | 只看该作者
不能把中断处理程序搞得这么复杂,会影响串口接收的,中断里设标志,复杂处理中断外执行。
回复

使用道具 举报

板凳
ID:10947 发表于 2019-6-19 10:14 | 只看该作者
因为你有好几个判断,满足了判断条件才会执行到最后,间隔时间相对来说很长了
回复

使用道具 举报

地板
ID:565803 发表于 2019-6-19 10:26 | 只看该作者
xuyaqi 发表于 2019-6-19 08:14
不能把中断处理程序搞得这么复杂,会影响串口接收的,中断里设标志,复杂处理中断外执行。

已经尽力精简了,收到数据后置标志位,然后禁止串口通信,主程序执行完相应的任务后再重开串口
回复

使用道具 举报

5#
ID:565803 发表于 2019-6-19 10:29 | 只看该作者
xuyaqi 发表于 2019-6-19 08:14
不能把中断处理程序搞得这么复杂,会影响串口接收的,中断里设标志,复杂处理中断外执行。

不管中断程序效率如何,总不能漏掉语句吧,这才是我不理解的地方
回复

使用道具 举报

6#
ID:94031 发表于 2019-6-19 11:07 | 只看该作者
liuzanshui 发表于 2019-6-19 10:26
已经尽力精简了,收到数据后置标志位,然后禁止串口通信,主程序执行完相应的任务后再重开串口

“收到数据后置标志位,然后禁止串口通信”怎么能禁止串口通信,对方发送你不是漏掉了嘛,你应该在接收中断里照章全收,在中断外处理这样才不会漏数据。
回复

使用道具 举报

7#
ID:565803 发表于 2019-6-19 13:20 | 只看该作者
xuyaqi 发表于 2019-6-19 11:07
“收到数据后置标志位,然后禁止串口通信”怎么能禁止串口通信,对方发送你不是漏掉了嘛,你应该在接收中 ...

开始是将ES0=0语句放在中断外,现在放在中断的结尾,结果都一样。我是先接收和发送完数据,退出中断前禁止串口
回复

使用道具 举报

8#
ID:123289 发表于 2019-6-19 15:50 | 只看该作者
你能照着沙发的意义去做,脑子就够用了。
你自己把你现在的程序画成流程图看看,走得通走不通?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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