头像-330398

I Miss You

  • 单片机、RF/无线
  • 消费电子

个人成就

获得 0 次赞

帮助过0人

单片机解码EV1527 433Mhz模块失败,帮忙看下程序

..............#define RF    P00unsigned char RF_Code[3];      //遥控码值bit RF_SyncFlag;               //同步信号标志,为1表示已接受到同步信号//unsigned char RF;           unsigned char Decode_ok;               //解码成功unsigned char High_WidthLow_Width;    //高低电平宽度unsigned char RF_BitCount;           //接收到第几位编码unsigned char bma1bma2bma3bma4;    //接收编码unsigned char mma1mma2mma3mma4;    //用于接收过程存放遥控编码,编码比较两次,这是第一次unsigned char mmb1mmb2mmb3mmb4;    //用于接收过程存放遥控编码,这是第二次unsigned char rf_ok1rf_ok2rf_ok;   //解码过程中的临时接收成功编码标志,接收到一个完整的遥控命令后置1,通知解码程序可以解码了unsigned char Last_state;           //保存上一个查询到的电平状态unsigned char temp_htemp_l;#define  LED1     P03#define  LED2     P01bit bt_auto;unsigned ss1;void RF_MainLoop(void){   TMOD=0x10;   TH1=0xff;   TL1=0x88;    ET1=1;    TR1=1;    EA=1;     if(Decode_ok==1)  {        if(RF_Code[0]==0xc8) {           LED1=0;           Delay_ms(50); }   if(RF_Code[1]==0xc4) {    LED1=1;           Delay_ms(50); }      if(RF_Code[2]==0xc2) {    LED2=0;           Delay_ms(50); } if(RF_Code[3]==0xc1) {    LED2=1;           Delay_ms(50); }   }  }void Timer1 (void) interrupt 3{ if(!bt_auto) { TL1=0x70; TH1=0xfb; } else { TL1=temp_l; TH1=temp_h; } TF1=0;               // 清除T1中断标志 if(!RF)                   { Low_Width++; Last_state=0;        // 检测到低电平 低电平时间加1记录本次电平状态 } else                   // 检测到高电平   { High_Width++;               if(!Last_state)       // 检测到从低到高的跳变已检测到一个完整(高-低)电平周期 { if(((High_Width>=2)&&(High_Width<=8))&&((Low_Width>=50)&&(Low_Width<=190)))     //判同步码   2/5 110/140 { if((Low_Width>=110)&&(Low_Width<=140))                 //根据不同 同步码 宽度,T0加载不同初值 { RF_BitCount=0; RF_SyncFlag=1; bma1=0; bma2=0; bma3=0; bt_auto=0; } else { if((Low_Width>=140)&&(Low_Width<=160)) { RF_BitCount=0; RF_SyncFlag=1; bma1=0; bma2=0; bma3=0; bt_auto=0; temp_h=0xfe; temp_l=0x6b; } else { if((Low_Width>=160)&&(Low_Width<=190)) { RF_BitCount=0; RF_SyncFlag=1; bma1=0; bma2=0; bma3=0; bt_auto=0; temp_h=0xfd; temp_l=0xdc; } else { if((Low_Width>=70)&&(Low_Width<=90)) { RF_BitCount=0; RF_SyncFlag=1; bma1=0; bma2=0; bma3=0; bt_auto=0; temp_h=0xff; temp_l=0x30; }       else {   if((Low_Width>=90)&&(Low_Width<=110)) { RF_BitCount=0; RF_SyncFlag=1; bma1=0; bma2=0; bma3=0; bt_auto=0; temp_h=0xff; temp_l=0x00; } else { if((Low_Width>=50)&&(Low_Width<=70)) { RF_BitCount=0; RF_SyncFlag=1; bma1=0; bma2=0; bma3=0; bt_auto=0; temp_h=0xff; temp_l=0x7a; }                       }       }     }     }            } } else if ((RF_SyncFlag)&&((Low_Width>=10)&&(Low_Width<=14)))       //   10/14 { RF_BitCount++;           //已经接收到同步码判0 if(RF_BitCount==24) { if(!rf_ok1) { mma1=bma1;mma2=bma2;mma3=bma3;mma4=bma4;       //将接收到的编码复制到解码寄存器中      rf_ok1=1;                                    // 通知解码子程序可以解码了      RF_SyncFlag=0; bt_auto=0; s=1500; } else  { if(!rf_ok2)                                        mmb1=bma1;mmb2=bma2;mmb3=bma3;mmb4=bma4;       //将接收到的编码复制到解码寄存器中       rf_ok2=1;                                   // 通知解码子程序可以解码了      RF_SyncFlag=0; bt_auto=0; } }   } else if((RF_SyncFlag)&&((Low_Width>=2)&&(Low_Width<=8)))         //   3/5 { switch(RF_BitCount) {            case 0 : { bma1=bma1 | 0x80; break; }//遥控编码第1位                       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: { bma4=bma4 | 0x80; break; }//按键状态第1位                       case 21: { bma4=bma4 | 0x40; break; }                       case 22: { bma4=bma4 | 0x20; break; }                       case 23: { bma4=bma4 | 0x10;           if(!rf_ok1)   {   mma1=bma1;mma2=bma2;mma3=bma3;mma4=bma4;//将接收到的编码复制到解码寄存器中                                                                rf_ok1=1;                                // 通知解码子程序可以解码了                                   RF_SyncFlag=0;   bt_auto=0;   s=1500;   break; } else {   mmb1=bma1;mmb2=bma2;mmb3=bma3;mmb4=bma4;//将再次接收到的编码复制到解码寄存器中,                                                                rf_ok2=1;                                // 通知解码子程序可以解码了                                   RF_SyncFlag=0;   bt_auto=0;   break; }                                                                    }                     }                     RF_BitCount++;                   }            else { RF_BitCount=0; RF_SyncFlag=0; bt_auto=0;bma1=0; bma2=0; bma3=0; bma4=0; High_Width=1; Low_Width=0;       }      //接收到不符合的高-低电平序列                 Low_Width=0;High_Width=1;   }           Last_state=1;      // 记录本次电平状态       } if(rf_ok1) //规定时间内接受到2帧相同的编码数据才有效 { s--; if(!s) rf_ok1=0; if(rf_ok2)  {   if((mma1==mmb1)&&(mma2==mmb2)&&(mma3==mmb3)&&(mma4==mmb4))   {   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;                     RF_Code[0]=mma4&0x80; //取按键码           RF_Code[1]=mma4&0x40;            RF_Code[2]=mma4&0x20;            RF_Code[3]=mma4&0x10;   Decode_ok=1; EA=1; } }