微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 串口收发多字节问题

串口收发多字节问题

时间:10-02 整理:3721RD 点击:
PC通过串口助手向单片机发送aa 01 bb 指令,如果单片机收到指令后验证是否发来aa 01 bb,若是返回四个字节的数据。
#include<reg52.h>
#include<intrins.h>
unsigned char i;
unsigned char ch[5];
unsigned char flag;
void serial_init()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
SCON=0x50;
PCON=0x00;
EA=1;
ES=1;
TR1=1;
PS=1;
}
void sendN()
{ ES=0;
  
  if((ch[0]==170)&&(ch[1]==1)&&(ch[2]==0xbb))
   { SBUF=187;
    while(TI==0);
           TI=0;
           _nop_();
           SBUF=04;
    while(TI==0);
           TI=0;
           _nop_();
          SBUF=03;
    while(TI==0);
           TI=0;
           _nop_();
     
            SBUF=221;
    while(TI==0);
           TI=0;
           _nop_();
     }
         
   
ES=1;
flag=1;
}
main()
{
serial_init();
while(1)
{
  if(flag==2)
  sendN();
}
}
void rec(void) interrupt 4
{
  if(RI)
  {
          ch[i]=SBUF;
   i++;
   if(i==3)
    {
     i=0;
     flag=2;
    }
   }
  RI=0;
  }

可是PC发aa 01 bb后 ,串口助手接收区没反应,即收不到任何数据。不知道是什么情况,求指教。
还有就是当我在sendN()函数中把if语句改为if((ch[0]==0xaa)&&(ch[1]=1)),即判断两个字节时,就能收到数。不知道为什么?

((ch[0]==0xaa)&&(ch[1]=1)),少了个等于号,还有你定义的是ch[5]所以如果你是连续发送的话空格也会被表示一个字符发送.自己注意逻辑关系.

您好,现在可以返回数据了,就是有一个问题:我把单片机断电,然后重新上电(此时串口助手不关闭),再发指令就不返回;当我把串口助手关了在打开,就能返回了。这是什么情况?按您说的改为ch[3]也是不行。

当你用串口助手发送第一个字节后  单片机断电 然后再上电   你再发送后面的字节 此时收到的数据就全乱了
在多字节接收的时候在你的串口中断函数里面加上字节判断

学习一下!

来找资料!

顶啊顶!谢谢分享!

不错。值得学习!

小编你好 ,你的帖子对我的帮助很大,谢了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top