你这是红外遥控还是串口,红外遥控是在外部中断的,那是要接收完整数据的
如果是串口通讯,可以在上位机或者遥控程序中加入起始信号和停止信号收到起始信号开始保存到数组中,收到结束信号之后开始判断接收的信息,不需要每次都检测,那串口不累坏了
你参考一下:
void Uart1_Isr() interrupt 4 //串口1中断函数,这里要参考数据手册来编写代码
{
char *p,Uart_S[20];
static unsigned char RX_Count=0x0;
if(TI) //如果是发送中断触发,就处理发送中断
{
TI=0; //发送中断
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)); //串口接收数据归零
}
}
}
|