问答

汇集网友智慧,解决技术难题

21ic问答首页 - 遥控解码程序,弄了一天,哪错了?

遥控 遥控解码 解码程序 RF se rc

遥控解码程序,弄了一天,哪错了?

innere2021-06-10
void T0ISR(void) interrupt 1
{       
        TL0=0x4A;
        TH0=0XFF;
        TF0=0;
        if (!RF)
                {
                ll_w++;old_rc5=0;
                }
        else
                {
                hh_w++;
                if (!old_rc5)
                        {
                        if ((hh_w>=2)&&(hh_w<=8)&&(ll_w>=100)&&(ll_w<=190)&&(!tb_ok))
                                {
                                        ma_x=0;
                                        tb_ok=1;
                                        bma1=bma2=bma3=0;
//                                        LED=~LED;会执行该语句,因为接收模块在无接收信号时,也会有高电平脉冲输出
//                    hh_w=ll_w=0;

                                }
                        else if((tb_ok)&&(ll_w>=11)&&(ll_w<=15))
                                {
                                        ma_x++;
                                        if (ma_x>23)
                                                {
                                                if (!rf_ok1)
                                                        {
                                                        mma1=bma1;mma2=bma2;mma3=bma3;
                                                        rf_ok1=1;
                                                        tb_ok=0;
                                                        s=1000;
                                                        }
                                                else
                                                        {
                                                        mma1=bma1;mma2=bma2;mma3=bma3;
                                                        rf_ok2=1;
                                                        tb_ok=0;
                                                        s=1000;                                                       
                                                        }
                                                }
                                }
                        else if((tb_ok)&&(ll_w>=3)&&(ll_w<=6))
                                {
                                        switch (ma_x)
                                                {
                                                case 0:{bma1=bma1|0x80;break;}
                                                case 1:{bma1=bma1|0x40;break;}
                                                case 2:{bma1=bma1|0x20;break;}
                                                case 3:{bma1=bma1|0x10;break;}
                                                case 4:{bma1=bma1|0x08;break;}
                                                case 5:{bma1=bma1|0x04;break;}
                                                case 6:{bma1=bma1|0x02;break;}
                                                case 7:{bma1=bma1|0x01;break;}
                                               
                                                case 8:{bma2=bma2|0x80;break;}
                                                case 9:{bma2=bma2|0x40;break;}
                                                case 10:{bma2=bma2|0x20;break;}
                                                case 11:{bma2=bma2|0x10;break;}
                                                case 12:{bma2=bma2|0x08;break;}
                                                case 13:{bma2=bma2|0x04;break;}
                                                case 14:{bma2=bma2|0x02;break;}
                                                case 15:{bma2=bma2|0x01;break;}
                                               
                                               
                                                case 16:{bma3=bma3|0x80;break;}
                                                case 17:{bma3=bma3|0x40;break;}
                                                case 18:{bma3=bma3|0x20;break;}
                                                case 19:{bma3=bma3|0x10;break;}
                                                case 20:{bma3=bma3|0x08;break;}
                                                case 21:{bma3=bma3|0x04;break;}
                                                case 22:{bma3=bma3|0x02;break;}
                                                case 23:{bma3=bma3|0x01;
                                                        if (!rf_ok1)
                                                                {
                                                                        tb_ok=0;
                                                                        rf_ok1=1;
                                                                        mma1=bma1;mma2=bma2;mma3=bma3;
                                                                        s=1000;
                                                                        break;
                                                                }
                                                        else
                                                                {       
                                                                        tb_ok=0;
                                                                        rf_ok2=1;
                                                                        mmb1=bma1;mmb2=bma2;mmb3=bma3;
                                                                        s=1000;
                                                                        break;
                                                                }
                                                        }
                                                }
                                        ma_x++;
                                }
                        else
                                {       
                                        ma_x=0;
                                        tb_ok=0;
                                        bma1=bma2=bma3=0;
                                        ll_w=0;hh_w=1;
                                }
                        ll_w=0;hh_w=1;
                        }
                old_rc5=1;
               
                }
        if (rf_ok1)
                {
                        s--;
                        if(!s)        rf_ok1=0;
                        if(rf_ok2)
                                {
                                        if ((mma1==mmb1)&&(mma2==mmb2)&&(mma3=mmb3))
                                                {
                                                        rf_ok=1;
                                                        rf_ok1=0;
                                                        rf_ok2=0;
                                                }
                                        else
                                                {
                                                        rf_ok=0;
                                                        rf_ok1=0;
                                                        rf_ok2=0;
                                                }
                                }
                }
        if (rf_ok)
                {
                        EA=0;
                        rf_ok=0;
//                        D3=!(mma3&0x08);
//                        D2=!(mma3&0x04);
//                        D1=!(mma3&0x02);
//                        D0=!(mma3&0x01);

            D3=mma3&0x08;
                        D2=mma3&0x04;
                        D1=mma3&0x02;
                        D0=mma3&0x01;
                        decode_ok=1;
                        s1=1500;
                        VT=0;
                        EA=1;

                       
                }

        if (decode_ok)
                {
                        s1--;
                        if (!s1)
                                {
                                        decode_ok=0;
                                        VT=1;
                                }
                }
}
       
========================================================
就是用的STC89C52RC,定时器0,100us,基本上照着原样敲的,我要崩溃了
      
      下载视频         
回答 +关注 16
2833人浏览 4人回答问题 分享 举报
4 个回答
  • 为啥要在中断里面搞这么长一串东西 - -!
    你的遥控器是指的红外的那种还是射频的那种,解码方法各不相同。 跟着协议走,就算照抄别人的代码 也要先理解才行啊。
  • 照抄就不用了,我来帮你一把,从思路到源代码,都是我自己写的程序。先搞清楚你的遥控器脉冲宽度通信协议,多长低电平+高电平表示1,多长低电平+高电平表示0?
  • sbit RF =P3^7;
    sbit LED                =        P1^6;           //学习指示灯
                                                                                             
    sbit D0                        =        P1^1;          //解码输出
    sbit D1                        =        P1^2;
    sbit D2                        =        P1^3;
    sbit D3                        =        P1^4;
    sbit D4                  =         P1^5;
    sbit VT                        =        P1^6;
    ==================================
    脚位定义
  • 码宽如图,接收为P27脚

您需要登录后才可以回复 登录 | 注册