菜鸟发一个自认为不错的串口接收指令的程序!!严重欢迎拍砖、指教!!!

2020-01-25 15:32发布

main()
{   
    while(1){
    if(Receiver_Count>0)         //如果串口中断接收到数据,侧马上进入接收剩余数据的等待
       {       
        Time20msCnt=0;
        while(Time20msCnt<5)     //根据要接收的数据多少和波特率,确定大概的等待时间
             {
               if((Data_Buffer[0]==0x12)&&(Data_Buffer[1]==0x21)){      //收到固定的指令数据0x12 0x21后,
                                                                                               //给指令标志ack赋特定的值 并且马上结束等待
                    ack=1;
                    Data_Buffer[0]=0;
                    Data_Buffer[1]=0;
                    break;
                  }
               if(Data_Buffer[0]==0x30&Data_Buffer[1]==0x31){
                    ack=2;
                    Data_Buffer[0]=0;
                    Data_Buffer[1]=0;
                    break;
                  }       
             }
       Receiver_Count=0;
      }
   }
}

void UARTInterrupt(void) interrupt 4            //串口中断  
{
  if(RI)
    {        
      if(Receiver_Count<5)
        {
             Data_Buffer[Receiver_Count++]=SBUF;
        }
      RI = 0;
    }
  else    return;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
37条回答
ledatou
1楼-- · 2020-01-27 07:58
标记下!!!
19001579
2楼-- · 2020-01-27 08:10
找个mp3文件,中间插入一个有用帧,以57600bps的速度发送,如果你的单片机能在数MB的杂乱数据中发现这一帧,并正确解析,那么就强大了。


呵呵,这个好像很容易的,下一个3D AND ZEN 高清的那种,然后在里面搞一帧正确的数据,把他找出来就OK了
CoolBird007
3楼-- · 2020-01-27 11:13
 精彩回答 2  元偷偷看……
whhityang
4楼-- · 2020-01-27 12:03
回复【11楼】huayuliang 花生
楼主没弄过协议。。
-----------------------------------------------------------------------

额 比较同意。楼主可以看看modbus之类协议的接收例程学习下。
TILUO
5楼-- · 2020-01-27 15:22
自己定个协议要好些
trent5145
6楼-- · 2020-01-27 15:53
协议一般情况下是[帧头][ID][功能][数据长度][若干数据][校验][帧尾]
中断里判断帧头,ID,功能,长度就可以了,另外收到帧尾和校验通过都要把相应的标志置位,其他的事情就在主程序处理

一周热门 更多>