部分代码如下:
void int0_init()//外部中断初始化
{
IT0=1;//下降沿触发
EX0=1;
EA=1;
}
void t0() interrupt 1//定时器0定时时间:0.256ms
{
irtime++;
}
void int0() interrupt 0//外部中断服务函数
{
if(flag==1)
{
if(irtime>32&&irtime<63)//检测引导码时间
bitnum=0;
irdate[bitnum]=irtime;
irtime=0;
bitnum++;
if(bitnum==33)
{
bitnum=0;
irok=1;
}
}
else
{
irtime=0;
flag=1;
}
}
短按一下红外遥控器按键时,遥控头收到一个键值码。假设是9MS的低电平触发中断,此时进入中断执行: else
{
irtime=0;
flag=1;
}
然后退出中断函数。下一个0码或者1码到来时,再次进入中断函数。执行:irdate[bitnum]=irtime;
irtime=0;
bitnum++;
按这样的程序,根本无法检测出9MS低电平。但此程序经过验证是可以正常工作的。请高手们指教。 |