打印

一个红外接收函数(NEC码)的问题

[复制链接]
2456|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Nec_Mcu|  楼主 | 2013-5-3 00:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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。 这个在红外协议好像没啥关系啊

相关帖子

沙发
Nec_Mcu|  楼主 | 2013-5-3 10:15 | 只看该作者
咋不见回应啊?是不是问题太过简单了,高手们不屑回答啊?

使用特权

评论回复
板凳
xyz769| | 2013-5-3 11:23 | 只看该作者
过滤干扰,重新接收。
6是考虑了误差的折中值。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝