• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

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

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

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

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

    本文引用地址:http://www.czjhyjcfj.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 串口通信

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 长岛县| 兴海县| 满城县| 阜平县| 临沧市| 惠安县| 库车县| 卓资县| 德清县| 新和县| 大邑县| 龙门县| 桃园县| 工布江达县| 淄博市| 昌图县| 治多县| 布拖县| 孟州市| 冀州市| 阜康市| 津市市| 喀什市| 七台河市| 龙江县| 万宁市| 丰原市| 类乌齐县| 新安县| 溆浦县| 巢湖市| 昌图县| 荆州市| 萍乡市| 忻城县| 丰顺县| 张掖市| 古田县| 安多县| 梧州市| 江油市|