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