立即注冊 登錄
返回首頁

uid:72365的個人空間

日志

定時開關插座 315M無線遙控C51解碼程序

已有 1197 次閱讀2015-7-14 13:41 | 開關

315M無線遙控C51解碼程序


/*315M無線解碼程序*/

/*無線碼寬電平脈沖時間1.8ms,低電平脈沖時間600us,同步碼低電平時間18.6ms

P1口接LED顯示接收到的無線碼的最后一字節(jié)數據

 

MCUSTC12C4052,12MHzOSC,調試通過*/

#include <stc12c4052.h>

 

#define  uchar unsigned char

#define WUXIAN P3_2       //無線信號輸入腳

#define _rlcar_(RX)  CY=RX&0X80  //RX帶進位左移1位,數據放入ACC

uchar bdata wx_data0,wx_data1,wx_data2;  //存儲24位無線數據

uchar data wx_code0,wx_code1,wx_code2;

uchar data wx_count,wxcount_buf;   //低電平時間計數器

uchar data wx_bit;       //無線碼位數

uchar data t_10ms;

uchar data t_500ms;

bit tb_flag;        //同步碼接收成功標志

bit wx_ok;         //無線碼接收成功標志

bit wx_sta;         //無線信號輸入腳的高低電平狀態(tài)

 

 

 

void mcu_initialize() {

 WDT_CONTR=0x00;       //關閉看門狗

 AUXR=0;         //定時器01設為傳統(tǒng)8051速度,12分頻

 P1M0=0;P1M1=0x0;      //P1為準雙向口

 P1=0;

 

 P3M0=0x04;P3M1=0x00;     //P3.2設置成輸入腳

 

 TR0=0;

 TH0=0x9c;TL0=0x00;      //100us中斷一次

 

 TMOD|=0x02;        //設置T0為自動裝入的8位定時器

 ET0=1;          //允許T0中斷

 EA=1;

 TR0=1;         //啟動T0

}

 

 

void main() {

 

 mcu_initialize();

 while(1);

 

}

 

 

 

void decode() {

 if(WUXIAN) {           //檢測無線I/O口為高

 

  if(!wx_sta) {

   wx_sta=1;          //無線信號從低變高

   wxcount_buf=wx_count;

  

   if(tb_flag) {         //同步碼標志為1

     if((0x02<wxcount_buf)&&(wxcount_buf<0x08)){           //低電平脈寬范圍在200us800us之間

      CY=1;

    

     }

     else if((0x0d<wxcount_buf)&&(wxcount_buf<0x14)){     //低電平脈寬范圍在1.3ms2ms之間

      CY=0;

     

     }

     else{        //干擾碼

     loop2:wx_count=0;

      wx_bit=0;

      wxcount_buf=0;tb_flag=0;

      return;

     }

    _rlcar_(wx_data0);      //移位寄存器,接收一位數據

    wx_data0=ACC;

    _rlcar_(wx_data1);

    wx_data1=ACC;

    _rlcar_(wx_data2);

    wx_data2=ACC;

 

     

   

    if(++wx_bit==24){      //接收完24位碼,接收成功標志wx_ok1

     tb_flag=0;

     wx_bit=0;

     wx_ok=1;

     wx_code0=wx_data0;wx_code1=wx_data1;wx_code2=wx_data2;

    

     P1=wx_code0;      //p1口接LED顯示數據

    }

     }

     else {

      if((0x87<wxcount_buf)&&(wxcount_buf<0xc8))

    tb_flag=1;        //抵電平脈寬范圍在13.5ms20ms之間,把同步碼標志置1

   else

    goto loop2;

     }

    }

 }

 else {

  if(wx_sta) {

   wx_count=0;         //無線信號從高變低,清零低電平脈寬計數器

   wx_sta=0;

   

   }

 

  else

   wx_count++;         //無線信號為低電平,低電平脈寬計數器加1

    }

}

void timer0_isr() interrupt 1 {

 decode();

 if(++t_10ms>=100){         //P3.7口接的LED0.5s的速度閃爍

  t_10ms=0;

  if(++t_500ms>=50){

   P3_7=!P3_7;

   t_500ms=0;

  }

 }

 

}

 


路過

雞蛋

鮮花

握手

雷人

評論 (0 個評論)

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

返回頂部