設置一個緩存數組和串口接收完成標志
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;
}
} |