/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *本文引用地点: http://www .
文件说明:以51单片机为例,通过简单的串行通信协议c程序,
协议以0XAA开始,以0XCC、0x33、0XCC和0XCC结束,数据长度不是恒定的
*****************************
#define uchar unsigned char
#define uint unsigned int
bit RXAAOK; 接收到0XAA开头标志
bit RXFRMOK; 接收//1帧的完整数据标记
//如果在接收中断过程中是完整的一个数据集,则在主函数中输入
//处理完成后清除
uchar RXBUF[32]; //接收缓存
uchar RX_P; //数据数
voiduarto_ISR(interrupt4//接收中断可能是函数声明,具体取决于处理器
{
uchar i; //有用地提取接收缓冲区的字符
是if(ri )
{ i=SBUF; //提取字符
RI=0;
判断是否接收到if(rxfrmok==0)//开头字符0XAA
收到{if(rxaaok ) 0XAA后,继续接收下一个字符
{ RXBUF[RX_P]=i; //将字符放入数组
if () rx_P3 ) ) 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; //在接收计数器上加1
}
if (! rxaaok(I==0xaa ) )
{RXAAOK=1;
RX_P=0;
}
}
}
}
void main ()//主程序
{
while(1)。
{
是射频(rxfrmok )
{
if(rxbuf[0]==0x78 ) ) ) ) )。
//输入自己的处理函数即可
}
if(rxbuf[0]==0x7c ) ) ) ) )。
//输入自己的处理函数即可
}
RXBUFMOK=0; //处理完成,清除信息
}
}
}