gracialee 发表于 2012-8-10 16:16:52

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

参考程序是基于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=CodeTemp;
               CodeTemp=0;
                     }
                   Delay();
                        Delay();
         }
                aa=1;
      }
      EA=1;
}
上面有可多延时,而我用的晶振是22.1184M的,显然延时上需要修改,这咋改哦?要不改的话,哪位哥们有更好的算法?

gracialee 发表于 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   

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

gracialee 发表于 2012-8-10 16:30:01

遥控器用的是瑜杰的RM-168B万能电视遥控器,扒开看了一下芯片,有一168B,11675字样的牛屎。

sf49ers 发表于 2012-8-10 16:46:52

22M约为12M的2倍,最简单的方法把所有延时程序调2遍,可能大部分能识别,可靠性较差。

gracialee 发表于 2012-8-10 16:57:03

楼上的有道理,这样子就是误差产生叠加了。

gracialee 发表于 2012-8-10 17:03:28

sf49ers 发表于 2012-8-10 16:46 static/image/common/back.gif
22M约为12M的2倍,最简单的方法把所有延时程序调2遍,可能大部分能识别,可靠性较差。 ...

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

sf49ers 发表于 2012-8-10 17:09:55

所以那个程序结构很次

sf49ers 发表于 2012-8-10 17:32:26

你程序有问题,第一个for里k值判断怎么<5啊

gracialee 发表于 2012-8-10 18:38:27

sf49ers 发表于 2012-8-10 17:32 static/image/common/back.gif
你程序有问题,第一个for里k值判断怎么

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

BXAK 发表于 2012-8-10 22:37:29

gracialee 发表于 2012-8-10 18:38 static/image/common/back.gif
呵呵,原来是10,我看了后面的说明改成5的。

这解码方案真不好……

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

sf49ers 发表于 2012-8-10 23:27:13

gracialee 发表于 2012-8-10 18:38 static/image/common/back.gif
呵呵,原来是10,我看了后面的说明改成5的。

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

gracialee 发表于 2012-8-11 10:51:14

BXAK 发表于 2012-8-10 22:37 static/image/common/back.gif
这解码方案真不好……

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

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

gaoyichuan000 发表于 2012-8-13 19:36:38

直接重新生成DELAY函数
来自:amoBBS 阿莫电子论坛 Android客户端
页: [1]
查看完整版本: 22M晶振的红外遥控的解码,用了12M的程序,如何修改?