//外部中断服务程序
void EXTI1_IRQHandler(void)
{
u8 res=0;
u8 OK=0;
u8 RODATA=0;
while(1)
{
if(RDATA)//有高脉冲出现
{
res=Pulse_Width_Check();//获得此次高脉冲宽度
if(res==250)
break;//非有用信号
if(res>=200&&res<250)
OK=1; //获得前导位(4.5ms)
else if(res>=85&&res<200) //按键次数加一(2ms)
{
Remote_Rdy=1;//接受到一个数据
Remote_Cnt++;//按键次数增加
break;
}
else if(res>=50&&res<85)RODATA=1;//1.5ms
else if(res>=10&&res<50)RODATA=0;//500us
if(OK)
{
Remote_Odr<<=1;
Remote_Odr+=RODATA;
Remote_Cnt=0; //按键次数清零
}
}
}
EXTI_ClearITPendingBit(EXTI_Line1); //清除EXTI1线路挂起位
}
上面的函数为MINI版红外遥控实验中的中断处理函数,有一个小疑问。我说说我对这段程序的理解哈,大家看一下第二个break,这里不就是相当于接收到一个数据之后就跳出while循环吗?这里的Remote_Cnt值永远只能为1啊。怎么达到显示按键次数的目的啊?由于我的红外接收头已经报废了,所以还请各位大虾帮忙看看。
|