×
单片机 > 单片机程序设计 > 详情

以51单片机为例,一个简单的串口通信协议C程序

发布时间:2020-05-23 发布时间:
|
/**************************************************
 文件说明:以51单片机为例,一个简单的串口通信协议C程序,
 协议以0XAA开头,以0XCC,0X33,0XC3,0X3C结尾,数据长度不一定 
 
  *************************************************/
 #define uchar unsigned char
 #define uint  unsigned int 
 bit  RXAAOK;        //接收到0XAA开头标志
 bit  RXFRMOK;       //接收一帧完整数据标
                     //接收中断中如果是完整一条数据置位,主函数中
      //处理完毕清零
 uchar RXBUF[32];    //接收缓存
 uchar RX_P;         //数据个数
 
 void UARTO_ISR() interrupt 4  //接收中断,不同处理器可能是不同的函数声明
 {
    uchar i;         //用处提取接收缓冲器的字符  
   if(RI)  
   { i=SBUF;      //提取字符
     RI=0;
  if(RXFRMOK==0)   //判断是否接收到起始字符0XAA
  {  if(RXAAOK)    //如果接收到0XAA,继续接收后面的字符
      { RXBUF[RX_P]=i; //字符存入数组
    if((RX_P>3)&&(RXBUF[RX_P-3]==0xcc) 
          &&(RXBUF[RX_P-2]==0x33)&&(RXBUF[RX_P-1]==0xc3)
                &&(RXBUF[RX_P]==0x3c) )  //判断是是否接收完毕一帧数据
    { RXFRMOK=1;             //如果接收完成,置位RXFRMOK;
      RXAAOK=0;              //清零开始标志位RXAAOK
    }
                  RX_P++;                //接收计数器加一
      }
    if(!RXAAOK&&(i==0xaa))  
      {RXAAOK=1;
       RX_P=0;
    }
     }
    } 
 }
 void main() //主程序
 {
    while(1)
    {
  if(RXFRMOK)
  { 
   if(RXBUF[0]==0X78)
   {//加入自己的处理函数即可
   }
   if(RXBUF[0]==0X7C)
   {//加入自己的处理函数即可
   }   
   RXBUFMOK=0; //处理完毕,清除消息
   }  
 }  
 }
关键字:51单片机  串口通信协议

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C51 特殊功能寄存器SFR的名称和地址