zly1980 发表于 2008-10-31 10:09

飞利蒲RC5编码遥控器C51解码

网上找了一些都感觉不怎么好用,写了个比较短小精悍的,测试遥控器就是那些CDM3,4那些转盘用的遥控器:
//rc5.h
#ifndef                __RC5_H_
#define                __RC5_H_
#ifdef                __RC5SRC__
/*
remote control ic:M34280MK-345FP
d d dddddd dddddd
d=889*2
bit0:1_0
bit1:0_1
X-12.00000M
*/
unsigned int                currentRecvkey;
unsigned char                ir_int_pos;
bit                         NextBitVal;
bit                        IR_NewKey;
unsigned int                IR_KeyVal;
unsigned char                IR_Temp;
void                         IrInit();
#else
extern bit                IR_NewKey;
extern unsigned int        IR_KeyVal;
extern void                 IrInit();
#endif
#endif

//RC5.c
#include <AT89X52.h>
#include <intrins.h>
#define __RC5SRC__
#include <rc5.h>
//----------------------------------------------------------
void IrInit()
{               
    TMOD=0x11;//实际只用到timer0(16位定时器由应用程序控制)
    TR0=0;ET0=0;TH0=0xfc;TL0=0x91;
    //这里产生一个889us的中断,减掉外中断跳转需要的11us
    EX0=1;
    EA=1;
}
//----------------------------------------------------------
void timer0() interrupt 1
{               
    TL0=0x2e;TH0=0xf9;
    //这里产生一个1778us的中断,减掉定时中断跳转需要的33us
    currentRecvkey=currentRecvkey<<1;
    if(NextBitVal)
          currentRecvkey++;
    ir_int_pos++;
    if(ir_int_pos>13){       
      currentRecvkey=currentRecvkey&0X1FFF;
      if(currentRecvkey>0){
                  IR_KeyVal=currentRecvkey;
          IR_NewKey=1;
      }
      IrInit();
    }
    else
    NextBitVal=P3_2;
}
//----------------------------------------------------------
void exint0() interrupt       0        //下降边沿触发
{
        TR0=1;ET0=1;        //启动T0
        EX0=0;                //关闭EX0
        ir_int_pos=0;
        NextBitVal=1;
        currentRecvkey=0;
        IR_Temp=0;
        //jitter
        while(P3_2==0&&IR_Temp<16){
                IR_Temp++;
        }
        if(IR_Temp<15){
                IrInit();
        }
}
//--------------------------------------------------------
IR_NewKey=1时候说明有新的按键收到了,数据在IR_KeyVal
页: [1]
查看完整版本: 飞利蒲RC5编码遥控器C51解码