- 圖為我實測的波形圖,PT2262一次發(fā)射4組相同的編碼,每組碼之間用同步碼分開,考慮到用A4紙打印,每行只有一組碼,共四行,第五行是把同步碼單獨切出來,方便看。
- /******************************************************************************************
- 項目名稱: 意大利無線門鈴
- 程序功能: PT2262解碼程序
- 晶 振: 4 MHz
- 版 本: V1.0
-
- PT2262震蕩電阻為4.7M,如電阻不一樣需改一下程序時間
- 本程序是用來做無線收發(fā)所用,如果用于紅外發(fā)光管請將震蕩電阻改為430K-470K
- 當然程序里的時間也要改哦
- 我的連接方法是將PT2262的數(shù)據(jù)輸出端經(jīng)過三極管反向后直接接到AT89C2051的P3.2,
- PT2262與AT89C2051同一個5V電源
- PT2262是兩個脈沖代表一位,我解碼是將每個脈沖當成一位,寬的為1,窄的為0,
- 這樣就是24位,解碼結果放在receive[3]里
- 本程序剛剛寫完,用仿真器試解碼結果沒有問題,還沒有接高頻發(fā)射線路試,
- 先把它貼上來再說。
-
- *******************************************************************************/
- #i nclude <reg51.h>
- sbit RemPin = P3^2 ;
- unsigned char receive[3];
- void RemIn(void) interrupt 0 using 1
- {
- unsigned char i,j;
- unsigned int temp;
- EA=0;
- TH0=0;
- TL0=0;
- while (!RemPin); //等待高電平
- TR0=1;
- while (RemPin) //等待低電平
- if (TF0==1) goto RemExit; //超時就退出;
- TR0=0;
- temp=TH0;
- temp=(temp<<8)+TL0;
- if (temp>6000 || temp<4000) //判斷同步碼的寬度
- {
- temp=TH0;
- goto RemExit;
- }
- //同步碼檢測成功
- for (i=0; i<3; i++) //解 3*8=24 位碼
- for (j=0; j<8; j++)
- {
- while (!RemPin); //等待高電平
- TH0=0;
- TL0=0;
- TR0=1;
- while (RemPin) //等待低電平
- if (TF0==1) goto RemExit; //超時就退出
- TR0=0;
- temp=TH0;
- temp=((temp<<8)+TL0);
- // /*
- if (temp>400 && temp<600)
- {
- receive[i]=receive[i]<<1;
- receive[i]=receive[i]+1; //保存 1
- }
- else if (temp>100 && temp<234)
- {
- receive[i]=receive[i]<<1; //保存0
- }
- else goto RemExit;
- }
- temp=0;//在這里設置一個斷點,運行到這里后看看receive里的三個字節(jié)數(shù)據(jù)就是解碼的結果
- RemExit:
- {
- TR0=0;
- EA=1;
- RemPin=1;
- TF0=0;
- return;
- }
- }
- ///*
- main()
- {
- RemPin=1;
- EA=1;
- IT0=1; //設定INT0的觸發(fā)方式為脈沖負邊沿觸發(fā)
- EX0=1; //打開INT0中斷請求
- TMOD=0x01;
- while (1);
- //RemPin=1;
- }
復制代碼
|