[其他ST产品] 51单片机232串口通信,一个发送,一个接收,一直循环下去

[复制链接]
2540|5
 楼主| 小叶三千 发表于 2016-8-21 21:33 | 显示全部楼层 |阅读模式
功能就是上电,单片机发30,计算机回80,单片机会发02,然后又发0c。到这里都没问题,然后计算机给回3e,单片机就开始无限发oc,怎么回事
我只是想让0c-3e,0c-3e,这样一直可以循环下去
1.png
2.png
shisizai 发表于 2016-8-21 21:40 | 显示全部楼层
你的receiveData没有复位,它的值一旦变成0x3e就一直是0x3e,所以就一直发0x0c了
最后的if里面加一个receiveData=0就可以了
 楼主| 小叶三千 发表于 2016-8-22 08:36 来自手机 | 显示全部楼层
shisizai 发表于 2016-8-21 21:40
你的receiveData没有复位,它的值一旦变成0x3e就一直是0x3e,所以就一直发0x0c了
最后的if里面加一个receiv ...

那为什么es=2的时候,发80可以正常呢
shisizai 发表于 2016-8-22 08:53 | 显示全部楼层
小叶三千 发表于 2016-8-22 08:36
那为什么es=2的时候,发80可以正常呢

在es=2之前 receiveData没有初值,应该是一个未定数,所以能判断if;从es=2之后receiveData的值就一直是0x80,但是你的ex变成了3,而且永远不会变成2,所以跟receiveData的值也没管关系了
suntechnology 发表于 2016-8-22 16:32 | 显示全部楼层
程序最后es没有复位,运行到最后es=4,程序就回到
else if(es==4)
{
      ...;
}
因此单片机会不断发送oc
可以将程序最后的es=4改为es=1
steven_fae 发表于 2016-8-22 18:23 | 显示全部楼层
小叶三千 发表于 2016-8-22 08:36
那为什么es=2的时候,发80可以正常呢

你可以把es==2改一下,看不会进入重发oc,很可能,要么计算机数据发错了,要么单片机接收错了。
else if(es==2)
{
      receiveData=ox80;
      if(receiveData==0x8)
     {
            RI=0;es++;
      }

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

本版积分规则

认证:清智科技嵌入式工程师
简介:单片机嵌入式底层开发,汽车电子

49

主题

515

帖子

18

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