谁能看看串口通信部分接受多字节的部分程序对吗,为什么我的程序接收不到数据呢。

2019-07-15 14:03发布

部分程序如下:
RI=0;
       while(1)         //等待接收第1个字节,触摸后,每组第1字节一定是0A0H
         {
         while(RI==0);
         RI=0;
         if(SBUF==0xA0) break;
         };
       while(RI==0);
       RI=0;
       x=SBUF;          //接收第2个字节,低4位是X坐标的D9-D6位,高4位为0.
       while(RI==0);
       RI=0;
       x=(x<<6)|SBUF;   //收第3个字节,低6位时X坐标的D5-D0位,高2位为0.
       while(RI==0);
       RI=0;
       y=SBUF;          //接收第4个字节,低4位时Y坐标的D9-D6位,高4位为0.
       while(RI==0);
       RI=0;
       y=(y<<6)|SBUF;   //接收第5个字节,低6位时Y坐标的D5-D0位,高2位为0.

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
寒758264068
1楼-- · 2019-07-15 18:41
while(1)         //等待接收第1个字节,触摸后,每组第1字节一定是0A0H
         {
         while(RI==0);
         RI=0;
         if(SBUF==0xA0) break;
       while(RI==0);
       RI=0;
       x=SBUF;          //接收第2个字节,低4位是X坐标的D9-D6位,高4位为0.
       while(RI==0);
       RI=0;
       x=(x<<6)|SBUF;   //收第3个字节,低6位时X坐标的D5-D0位,高2位为0.
       while(RI==0);
       RI=0;
       y=SBUF;          //接收第4个字节,低4位时Y坐标的D9-D6位,高4位为0.
       while(RI==0);
       RI=0;
       y=(y<<6)|SBUF;   //接收第5个字节,低6位时Y坐标的D5-D0位,高2位为0.
     };
试试,都不知道你要干嘛的。 最佳答案
寒758264068
2楼-- · 2019-07-15 22:38
while(1)         //等待接收第1个字节,触摸后,每组第1字节一定是0A0H
         {
         while(RI==0);
         RI=0;
         if(SBUF==0xA0) break;
         };
这个之后能跳出来吗????
烈焰123
3楼-- · 2019-07-16 00:45
寒758264068 发表于 2016-5-8 22:30
while(1)         //等待接收第1个字节,触摸后,每组第1字节一定是0A0H
         {
         while(RI==0);

我不太清楚,因为这部分是网上找的,而且编的程序其他部分都对着呢除了这部分,但是不清楚这部分到底哪出错了,第一次写关于串行接收的程序,没经验,能给个串行接收多字节的程序最好。
烈焰123
4楼-- · 2019-07-16 03:40
 精彩回答 2  元偷偷看……
寒758264068
5楼-- · 2019-07-16 05:49
是,RI需要手动清零。不需要重新初始化串口程序。定时器是自动重装载TMOD=0x20;
jxaujy
6楼-- · 2019-07-16 09:23
支持支持,谢谢谢

一周热门 更多>