设置一个缓存数组和串口接收完成标志
unsigned char rec_buf[3];
bit flag=0;
void UARTInterrupt() interrupt 4
{
static unsigned char num=0; //静态变量
RI=0; //接收中断请求标志位清0
rec_buf[num]=SBUF; //保存SBUF接收到的数据
if(rec_buf[0]=='T') //验证数据头正确继续接收后续数据
{ //否则被下一个数据覆盖并再次验证
num++;
if(num>=3) //字符串长度
{
flag=1; //接收完成标志置1
num=0;
}
}
}
再在主函数中验证全部数据是否正确
if(flag==1)
{
flag=0;
if(rec_buf[0]=='T' && rec_buf[1]=='Z' && rec_buf[2]=='F')
{
//OK,执行任务
for(i=0;i<3;i++)//缓存清0,为下次接收准备
rec_buf[i]=0;
}
else
{
//ERROR 发送重传数据请求
for(i=0;i<3;i++)//缓存清0,为下次接收准备
rec_buf[i]=0;
}
} |