void IrTimer(void)/*660 us diff*/ // 660 us定时中断
{
if (RemoDelay >= 200)
IrKey = 0xFF;
else
RemoDelay++;
}
void InfraRed(void)//单片机的红外检测口.低电平产生中断
{
if (IrKey == 0xFF)
{
if (RemoDelay < 6)
{
IrxBuffer[irbit/8] <<= 1;
if (RemoDelay <= 2)
(IrxBuffer[irbit/8]) &= 0xFE; // make 'low'
else
(IrxBuffer[irbit/8]) |= 0x01; // make 'high'
if(irbit<32)irbit++;
if (irbit == 32)
{
irbit=0;
if((IrxBuffer[1] == 0xFF)
&& (IrxBuffer[0] == ~IrxBuffer[1])
&& (IrxBuffer[2] == ~IrxBuffer[3]) )
IrKey = IrxBuffer[2];
}
}
else
irbit=0;
}
RemoDelay = 0;
}
各位大虾,上述函数小弟基本看懂,唯独还剩个if (RemoDelay < 6) ---这个条件实在搞不明白,望各位大虾指点指点。为啥一定要选6? 6*660us=3960us。 这个在红外协议好像没啥关系啊 |