您的位置 首页 方案

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

/**************************************************文件说明:以51单片机为例,一个简单的串口通信协议C程序,协议以0XAA开头,

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

  文件阐明:以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; //处理结束,铲除音讯

  }

  }

  }

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/299170.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部