|
-
- GICR &= ~_BV(INT2);
- for(k=0;k<10;k++)
- {
- _delay_us(900);
- if (RF ==1){ //如果9ms后IRsignal=1,说明不是引导码
- k=10;break;
- }else if(k==9) //如果持续了10×0.9ms=9ms的低电平,说明是引导码
- {
- while(RF==0);
- _delay_ms(4.5); //跳过持续4.5ms的高电平
- for(i=0;i<4;i++) //分别读取4个字节
- {
- for(j=1;j<=8;j++) //每个字节8个bit的判断
- {
- while(RF==0); //等待上升沿
- _delay_us(800); //从上升沿那一时刻开始延时0.9ms,再判断IRsignal
- if((PINB & _BV(PB2))) //如果IRsignal是"1",则向右移入一位"1"
- {
- CodeTemp=CodeTemp|0x80;
- if(j<8) CodeTemp=CodeTemp>>1;
- while(RF==1);
- }else if(j<8){CodeTemp=CodeTemp>>1;}//如果IRsignal是"0",则向右移一位,自动补"0"
- }
- IRcode[i]=CodeTemp;
- CodeTemp=0;
- }
- GICR |= _BV(INT2);
- _delay_ms(50);
- }
复制代码 标准:当一个键按下超过 36ms ,振荡器使芯片激活,将发射一组 108ms 的编码脉冲,这 108ms 发射代码
由一个起始码( 9ms 的高电平) , 一个结果码( 4.5ms 低电平) , 低 8 位地址码( 9~18ms ) , 高 8 位地 址码( 9~18ms ) ,8 位数据码( 9~18ms )
和这 8 位数据码的反码( 9~18ms )组成。数据串行发送, 低位( bit0 )在前,高位 (bit7) 在后
这是我的遥控解码代码,用的中断触发的。我非常非常的郁闷,为什么我的的数据后俩个不是一对,就是说源码和反码。 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|