搜索
bottom↓
回复: 12

22M晶振的红外遥控的解码,用了12M的程序,如何修改?

[复制链接]

出0入0汤圆

发表于 2012-8-10 16:16:52 | 显示全部楼层 |阅读模式
参考程序是基于12M的晶振,红外接收口用了3.2,用INT0捕捉中断,下降沿触发,程序如下:
/************************中断0解码服务子程序**********************/
//void int0(void) interrupt 0 using 2      
void int0(void) interrupt 2 using 2      
{
        EA=0;
        for(k=0;k<5;k++)     //不同型号请改成5/10
        {
                Delay0_9ms();
           if (IR==1)         //如果0.9ms后IRsignal=1,说明不是引导码
           {
                        k=10;break;
                }
           else if(k==9)           //如果持续了10×0.9ms=9ms的低电平,说明是引导码
           {
                        while(IR==0);
              Delay4_5ms();        //跳过持续4.5ms的高电平
              for(i=0;i<4;i++)       //分别读取4个字节
              {
                                for(j=1;j<=8;j++)      //每个字节8个bit的判断
                 {
                                        while(IR==0);       //等待上升沿
                    Delay0_9ms();      //从上升沿那一时刻开始延时0.9ms,再判断IRsignal
                    if(IR==1)     //如果IRsignal是"1",则向右移入一位"1"
                    {
                                                Delay1ms();
                       CodeTemp=CodeTemp|0x80;
                       if(j<8) CodeTemp=CodeTemp>>1;
                    }
                    else
                              if(j<8)CodeTemp=CodeTemp>>1;//如果IRsignal是"0",则向右移一位,自动补"0"
                                }
//                 IRcode=CodeTemp;
                 IRcode[0]=CodeTemp;
                 CodeTemp=0;
                     }
                   Delay();
                        Delay();
           }
                aa=1;
        }
        EA=1;
}
上面有可多延时,而我用的晶振是22.1184M的,显然延时上需要修改,这咋改哦?要不改的话,哪位哥们有更好的算法?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2012-8-10 16:20:17 | 显示全部楼层

-----红外解码测试1.0------
用户码  反码  操作码  反码
  00     00     00     00   
  00     00     00     00   
  00     00     00     00   
  00     00     00     00   
  00     00     00     00   
  00     00     00     00   
  00     00     00     00   
  00     00     00     00   
  00     00     00     00   
  00     00     00     00   
  00     00     00     00   
  00     00     00     00   

这里是我没修改延时的测试结果。

出0入0汤圆

 楼主| 发表于 2012-8-10 16:30:01 | 显示全部楼层
遥控器用的是瑜杰的RM-168B万能电视遥控器,扒开看了一下芯片,有一168B,11675字样的牛屎。

出0入0汤圆

发表于 2012-8-10 16:46:52 | 显示全部楼层
22M约为12M的2倍,最简单的方法把所有延时程序调2遍,可能大部分能识别,可靠性较差。

出0入0汤圆

 楼主| 发表于 2012-8-10 16:57:03 | 显示全部楼层
楼上的有道理,这样子就是误差产生叠加了。

出0入0汤圆

 楼主| 发表于 2012-8-10 17:03:28 | 显示全部楼层
sf49ers 发表于 2012-8-10 16:46
22M约为12M的2倍,最简单的方法把所有延时程序调2遍,可能大部分能识别,可靠性较差。 ...

刚用您的方法试了一下,还是打出一串000,12M的延时,用两次的话,应该得24M的晶振才准确,22M差得太远了。。。。

出0入0汤圆

发表于 2012-8-10 17:09:55 | 显示全部楼层
所以那个程序结构很次

出0入0汤圆

发表于 2012-8-10 17:32:26 | 显示全部楼层
你程序有问题,第一个for里k值判断怎么<5啊

出0入0汤圆

 楼主| 发表于 2012-8-10 18:38:27 | 显示全部楼层
sf49ers 发表于 2012-8-10 17:32
你程序有问题,第一个for里k值判断怎么

呵呵,原来是10,我看了后面的说明改成5的。

出0入0汤圆

发表于 2012-8-10 22:37:29 | 显示全部楼层
gracialee 发表于 2012-8-10 18:38
呵呵,原来是10,我看了后面的说明改成5的。


这解码方案真不好……

修改那几个延时函数就行,直接用“单片机小精灵”重新生成延时函数,单片机小精灵下载链接

出0入0汤圆

发表于 2012-8-10 23:27:13 | 显示全部楼层
gracialee 发表于 2012-8-10 18:38
呵呵,原来是10,我看了后面的说明改成5的。

else if(k==9)           //如果持续了10×0.9ms=9ms的低电平,说明是引导码
可下面判断没跟着改,怎么会执行收数呢

出0入0汤圆

 楼主| 发表于 2012-8-11 10:51:14 | 显示全部楼层
BXAK 发表于 2012-8-10 22:37
这解码方案真不好……

修改那几个延时函数就行,直接用“单片机小精灵”重新生成延时函数,单片机小精灵 ...

谢这位哥们,现在能解码了,但不是太精准,同一个按键,有时是07,有时是0B。。。。。。其它的按键也这样,有时候不同的键出同一个值。。。。

出0入0汤圆

发表于 2012-8-13 19:36:38 来自手机 | 显示全部楼层
直接重新生成DELAY函数
来自:amoBBS 阿莫电子论坛 Android客户端
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 22:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表