|
你這是紅外遙控還是串口,紅外遙控是在外部中斷的,那是要接收完整數(shù)據(jù)的
如果是串口通訊,可以在上位機(jī)或者遙控程序中加入起始信號(hào)和停止信號(hào)收到起始信號(hào)開(kāi)始保存到數(shù)組中,收到結(jié)束信號(hào)之后開(kāi)始判斷接收的信息,不需要每次都檢測(cè),那串口不累壞了
你參考一下:
void Uart1_Isr() interrupt 4 //串口1中斷函數(shù),這里要參考數(shù)據(jù)手冊(cè)來(lái)編寫(xiě)代碼
{
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; //清除中斷接收標(biāo)示位
Uart_S[RX_Count]=SBUF;
if(SBUF==0xff)end_str++; //檢測(cè)結(jié)束符
else if (end_str>0)end_str--;
if((Uart_S[RX_Count]==0xe8)&&(Uart_S[RX_Count-1]==0xc9)) //檢測(cè)開(kāi)始接收到"設(shè)"字
{
RX_Count=1;
Uart_S[0]=0xc9;
Uart_S[1]=0xe8;
}
RX_Count++;
if(RX_Count>=20)RX_Count=0;//防止數(shù)組溢出
if(end_str>2)
{
p=strstr(Uart_S,"設(shè)開(kāi)機(jī)"); //查找指令
if(NULL!=p)//如果接收到"設(shè)開(kāi)機(jī)"字符串,指針?lè)祷刂挡粸?quot;空"
{
//處理部分
}
}
end_str=0;
RX_Count=0;
memset(&Uart_S,0,sizeof(Uart_S)); //串口接收數(shù)據(jù)歸零
}
}
}
|
|