你這是紅外遙控還是串口,紅外遙控是在外部中斷的,那是要接收完整數據的
如果是串口通訊,可以在上位機或者遙控程序中加入起始信號和停止信號收到起始信號開始保存到數組中,收到結束信號之后開始判斷接收的信息,不需要每次都檢測,那串口不累壞了
你參考一下:
void Uart1_Isr() interrupt 4 //串口1中斷函數,這里要參考數據手冊來編寫代碼
{
char *p,Uart_S[20];
static unsigned char RX_Count=0x0;
if(TI) //如果是發(fā)送中斷觸發(fā),就處理發(fā)送中斷
{
TI=0; //發(fā)送中斷
busy=0;
}
if(RI)
{
RI=0; //清除中斷接收標示位
Uart_S[RX_Count]=SBUF;
if(SBUF==0xff)end_str++; //檢測結束符
else if (end_str>0)end_str--;
if((Uart_S[RX_Count]==0xe8)&&(Uart_S[RX_Count-1]==0xc9)) //檢測開始接收到"設"字
{
RX_Count=1;
Uart_S[0]=0xc9;
Uart_S[1]=0xe8;
}
RX_Count++;
if(RX_Count>=20)RX_Count=0;//防止數組溢出
if(end_str>2)
{
p=strstr(Uart_S,"設開機"); //查找指令
if(NULL!=p)//如果接收到"設開機"字符串,指針返回值不為"空"
{
//處理部分
}
}
end_str=0;
RX_Count=0;
memset(&Uart_S,0,sizeof(Uart_S)); //串口接收數據歸零
}
}
}
|