新聞中心

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

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

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

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

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

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 平陆县| 收藏| 乐昌市| 台东县| 淳化县| 湖州市| 永济市| 团风县| 富裕县| 大关县| 巴彦淖尔市| 霍山县| 嘉禾县| 平安县| 宁河县| 高碑店市| 惠州市| 鹤壁市| 九江县| 文昌市| 恩平市| 博罗县| 柘荣县| 车险| 工布江达县| 崇明县| 成安县| 溆浦县| 崇仁县| 靖州| 德庆县| 辛集市| 广元市| 新闻| 青州市| 盈江县| 抚宁县| 潜山县| 团风县| 兰州市| 青海省|