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的,显然延时上需要修改,这咋改哦?要不改的话,哪位哥们有更好的算法?
-----红外解码测试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
这里是我没修改延时的测试结果。 遥控器用的是瑜杰的RM-168B万能电视遥控器,扒开看了一下芯片,有一168B,11675字样的牛屎。 22M约为12M的2倍,最简单的方法把所有延时程序调2遍,可能大部分能识别,可靠性较差。 楼上的有道理,这样子就是误差产生叠加了。 sf49ers 发表于 2012-8-10 16:46 static/image/common/back.gif
22M约为12M的2倍,最简单的方法把所有延时程序调2遍,可能大部分能识别,可靠性较差。 ...
刚用您的方法试了一下,还是打出一串000,12M的延时,用两次的话,应该得24M的晶振才准确,22M差得太远了。。。。 所以那个程序结构很次 你程序有问题,第一个for里k值判断怎么<5啊 sf49ers 发表于 2012-8-10 17:32 static/image/common/back.gif
你程序有问题,第一个for里k值判断怎么
呵呵,原来是10,我看了后面的说明改成5的。 gracialee 发表于 2012-8-10 18:38 static/image/common/back.gif
呵呵,原来是10,我看了后面的说明改成5的。
这解码方案真不好……
修改那几个延时函数就行,直接用“单片机小精灵”重新生成延时函数,单片机小精灵下载链接 gracialee 发表于 2012-8-10 18:38 static/image/common/back.gif
呵呵,原来是10,我看了后面的说明改成5的。
else if(k==9) //如果持续了10×0.9ms=9ms的低电平,说明是引导码
可下面判断没跟着改,怎么会执行收数呢 BXAK 发表于 2012-8-10 22:37 static/image/common/back.gif
这解码方案真不好……
修改那几个延时函数就行,直接用“单片机小精灵”重新生成延时函数,单片机小精灵 ...
谢这位哥们,现在能解码了,但不是太精准,同一个按键,有时是07,有时是0B。。。。。。其它的按键也这样,有时候不同的键出同一个值。。。。 直接重新生成DELAY函数
来自:amoBBS 阿莫电子论坛 Android客户端
页:
[1]