|
参考程序是基于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, 杜汶泽)
|