a一级爱做片免费观看欧美,久久国产一区二区,日本一二三区免费,久草视频手机在线观看

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > 以51單片機為例,一個簡單的串口通信協議C程序

以51單片機為例,一個簡單的串口通信協議C程序

作者: 時間:2016-09-16 來源:網絡 收藏

  /**************************************************

本文引用地址:http://www.j9360.com/article/201609/297026.htm

  文件說明:以單片機為例,一個簡單的協議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 串口通信

評論


相關推薦

技術專區

關閉