您当前的位置:五五电子网电子知识单片机-工控设备51单片机红外遥控器软件解码原理和程序 正文
红外遥控器软件解码原理和程序

红外遥控器软件解码原理和程序

点击数:7820 次   录入时间:03-04 11:46:23   整理:http://www.55dianzi.com   51单片机
        if(TF0)goto exit;                //检查有没超时,如果超时则退出
   };
   EXF2=0;                               //将EXF2清零
   if(!TH0)                            //判断是否是长低电平脉冲过来了
   {                                     //不是长低电平脉冲而是短低电平
      if(F0)count.b++;                      //短脉冲数加一
      temp.a[0]=RCAP2H;                  //将捕捉数临时存放起来
      temp.a[1]=RCAP2L;
      goto loop;                         //返回继续查询
   }
   else{                                 //是低电平脉冲,则进行处理

       F0=0;
       *ir=temp.a[0];       //把连续的短脉冲总时间记录下来
       ir++;
       *ir=temp.a[1];
       ir++;
       *ir=RCAP2H;          //把长电平脉冲时间记录下来
       ir++;
       *ir=RCAP2L;
       ir++;
       if(ir>=0xda) {
                 goto exit;    //判断是否溢出缓冲,如果溢出则失败退出
       }
       goto loop;         //返回继续查询
       }
exit:
       ir_flag=1;       //置ir_flag为1表示接收成功
end:
       ;
}


void rs232(void)   interrupt  4{
     static unsigned char sbuf1,sbuf2,rsbuf1,rsbuf2;      //sbuf1,sbuf2用来接收
发送临时用,rsbuf1,rsbuf2用来分别用来存放接收发送的半字节
     EA=0;                                         //禁止中断
     if(RI){
         RI=0;                                     //清除接收中断标志位
         sbuf1=SBUF;                               //将接收缓冲的字符复制到sbuf1
         if(sbuf1==HEAD){                                  //判断是否帧开头
                         state1=10;                 //是则把state赋值为10
                         buf1=RECEIVE;              //初始化接收地
址                        
         }
         else{
         switch(state1){
         case 10:sbuf2=sbuf1>>4;                   //把高半字节右移到的半字节
                 sbuf2=~sbuf2;                     //把低半字节取反
                 if((sbuf2&0x0f)!=(sbuf1&0x0f))    //判断接收是否正确
                      {                            //接收错误,有可能接收的是数
据帧尾,也有可能是接收错误
                       if(sbuf1==TAIL)             //判断是否接收到数据帧尾
                            {                      //是接收到数据帧尾
                                buf1=RECEIVE;      //初始化接收的地址
                                if(*buf1==RESET)   //判断是否为复位命令
                                     {

上一页  [1] [2] [3] [4] [5]  下一页


本文关键字:程序  遥控器  软件  51单片机单片机-工控设备 - 51单片机

上一篇:AT89cxx加密原理