[51单片机]

使用单片机解码红外遥控信号

[复制链接]
1269|3
手机看帖
扫描二维码
随时随地手机跟帖
skw168|  楼主 | 2018-8-9 16:22 | 显示全部楼层 |阅读模式
本帖最后由 skw168 于 2019-4-6 09:35 编辑

最近一段时间在研究解码红外无线信号,现将心得记录在此,欢迎探讨!

1.首先需要了解红外无线信号的组成:
      a.引导码
        整个引导码时间约为9+4.5ms
      b.32位实际码
     (包含地址码:8bit  地址反码:8bit  数据码:8bit  数据反码:8bit)

2.单片机如何识别
      a.打开外部中断,下降沿触发
      b.触发时,用定时器开始计时,下一个触发到来时,计时结束,判断这段时间,如果时间约为1.125ms,此位为0;如果时间约为2.25ms,此位为1;
      c.依次保存触发时间间隔,组成32bit实际码值
      d.校验用户码和数据码     

  注意事项:
                ①引导码为1位,时间约为13.5ms,可以单独判断
                ②连发码也需要判断
                ③码值保存过程中若发生异常,需要返回引导码重新判断


最后是程序基本框架:


void interrupt()
{
    flag_rm = 1;
}
void timer0()
{
    count++;
}


void main()
{
        if(flag_rm)
        {
                flag_rm = 0;
                if(count_rm == 0)
                {
                        count_rm = 1;
                }
                else if(count_rm == 1)  
                {
                        此处识别引导码;
                        count_rm = 2;
                }
                else if(count_rm == 2)
                {
                        此处识别用户码的每一位;
                        依次保存32位数据;
                        接收完成后,开始校验用户码;
                        count_rm = 0;
                }
        }               
}

PS:
2019年4月6日 09:32:05
今日发现一个新问题,在定时器中断里面计数时,不能被其他中断干扰,否则计数值会不准,影响解码

         



相关帖子

xxdcq| | 2018-8-13 15:44 | 显示全部楼层
你这个只能解NEC的红外编码,局限性太大了!实际上现在红外遥控用的编码格式有数千种之多,还有空调遥控编码都是各空调厂家自己定的,没有一个统一的格式和标准

使用特权

评论回复
mailshichao| | 2018-8-13 15:56 | 显示全部楼层
xxdcq 发表于 2018-8-13 15:44
你这个只能解NEC的红外编码,局限性太大了!实际上现在红外遥控用的编码格式有数千种之多,还有空调遥控编 ...

但是思路是类似的吧,都是通过单片机外部下沿中断,然后用定时器计时脉宽

使用特权

评论回复
skw168|  楼主 | 2018-8-15 17:28 | 显示全部楼层
市面上的遥控协议众多,无法做到全部兼容,此贴仅仅提供编程思路

使用特权

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

本版积分规则

36

主题

132

帖子

6

粉丝