這是一個(gè)用軟件來解碼pt2262信號(hào)的c51程序,經(jīng)過測(cè)試是可以使用的,要注意接受模塊要遠(yuǎn)離單片機(jī)的晶振 不然干擾太嚴(yán)重?zé)o法解碼的 或者距離很近.
/*------------------------------------------------------------------------------ ; Copyright (C) 2006 WangChanghong INTEGRATED PRODUCTS, INC. ; All rights reserved. ; MCU:AT89s52 ,晶體頻率:12MHz : 作者:汪長(zhǎng)洪 : 時(shí)間:2006年08月01日 ; 地點(diǎn):威海 ;----------------------------315M無線遙控解碼程序------------------------------*/ #include <AT89X52.H> #define uchar unsigned char #define uint unsigned int /*---------------------------------變量列表------------------------------------*/ uchar ReadCode[3],GetCode; /*---------------------------------函數(shù)列表------------------------------------*/ void delay_200(void); //200us精確延時(shí) void delay_250(void); //250us精確延時(shí) void delay_131(void); //131ms精確延時(shí) void init(void); //初始化子程序 void INT0_intrupt(); //中斷處理子程序(解碼程序) /*-----------------------------主程序入口--------------------------------------*/ main() { init(); while(1) { P2=~GetCode|0xf0; } } /*---------------------------------初始化子程序--------------------------------*/ void init(void) { EA=1; //打開CPU總中斷請(qǐng)求 EX0=1; //打開INT0中斷請(qǐng)求 IT0=1; //設(shè)定INT0的觸發(fā)方式為脈沖負(fù)邊沿觸發(fā) } /*-------------------------------200us精確延時(shí)---------------------------------*/ void delay_200(void) { uchar i,j; for(i=0x05;i>0;i--) for(j=0x12;j>0;j--); } /*-------------------------------250us精確延時(shí)---------------------------------*/ void delay_250(void) { uchar i,j; for(i=0x05;i>0;i--) for(j=0x17;j>0;j--); } /*-------------------------------131ms精確延時(shí)--------------------------------*/ void delay_131(void) { uchar i,j; for(i=0xfe;i>0;i--) for(j=0xfe;j>0;j--); } /*-------------------------外部中斷0子程序(解碼程序)---------------------------*/ void INT0_intrupt(void) interrupt 0 using 1 { uchar i,j; bit BitState_2; EX0=0; //////////////////////////////找起始位////////////////////////////////////////// for(i=0;i<50;i++); if(P3_2==1) goto kk; while(P3_2==0); for(i=0;i<50;i++); if(P3_2==0) goto kk; delay_200(); if(P3_2==1) goto kk; for(i=15;i>0;i--) //重復(fù)20次,檢測(cè)在3750微秒內(nèi)出現(xiàn)高電平就退出解碼程序 { delay_200(); if(P3_2==1) goto kk; } while(P3_2==0); ///////////////////////////////接收數(shù)據(jù)/////////////////////////////////////////// for(j=0;j<3;j++) { for(i=0;i<8;i++) { delay_250(); BitState_2=P3_2; ReadCode[j]=ReadCode[j]<<1; ReadCode[j]=ReadCode[j]|BitState_2; if(P3_2==1) while(P3_2==1); while(P3_2==0); } } ////////////////////////////////校驗(yàn)及運(yùn)算數(shù)據(jù)///////////////////////////////////// for(i=0;i<3;i++) { if((~(ReadCode[i]|0x55))&((ReadCode[i]&0x55)<<1)!=0x00) goto kk; //校驗(yàn) } GetCode=0x00; for(i=0;i<8;i++) { GetCode |=((ReadCode[2]>>i)&(ReadCode[2]>>(i+1))&0x01<<i); //運(yùn)算 } ////////////////////////////////////////////////////////////////////////////////// delay_131(); delay_131(); delay_131(); delay_131(); kk: EX0=1; }