標(biāo)題:
PT2262 解碼程序-C語言
[打印本頁]
作者:
wudawei
時(shí)間:
2014-12-31 13:15
標(biāo)題:
PT2262 解碼程序-C語言
圖為我實(shí)測(cè)的波形圖,PT2262一次發(fā)射4組相同的編碼,每組碼之間用同步碼分開,考慮到用A4紙打印,每行只有一組碼,共四行,第五行是把同步碼單獨(dú)切出來,方便看。
/******************************************************************************************
項(xiàng)目名稱: 意大利無線門鈴
程序功能: PT2262解碼程序
晶 振: 4 MHz
版 本: V1.0
PT2262震蕩電阻為4.7M,如電阻不一樣需改一下程序時(shí)間
本程序是用來做無線收發(fā)所用,如果用于紅外發(fā)光管請(qǐng)將震蕩電阻改為430K-470K
當(dāng)然程序里的時(shí)間也要改哦
我的連接方法是將PT2262的數(shù)據(jù)輸出端經(jīng)過三極管反向后直接接到AT89C2051的P3.2,
PT2262與AT89C2051同一個(gè)5V電源
PT2262是兩個(gè)脈沖代表一位,我解碼是將每個(gè)脈沖當(dāng)成一位,寬的為1,窄的為0,
這樣就是24位,解碼結(jié)果放在receive[3]里
本程序剛剛寫完,用仿真器試解碼結(jié)果沒有問題,還沒有接高頻發(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; //超時(shí)就退出;
TR0=0;
temp=TH0;
temp=(temp<<8)+TL0;
if (temp>6000 || temp<4000) //判斷同步碼的寬度
{
temp=TH0;
goto RemExit;
}
//同步碼檢測(cè)成功
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; //超時(shí)就退出
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;//在這里設(shè)置一個(gè)斷點(diǎn),運(yùn)行到這里后看看receive里的三個(gè)字節(jié)數(shù)據(jù)就是解碼的結(jié)果
RemExit:
{
TR0=0;
EA=1;
RemPin=1;
TF0=0;
return;
}
}
///*
main()
{
RemPin=1;
EA=1;
IT0=1; //設(shè)定INT0的觸發(fā)方式為脈沖負(fù)邊沿觸發(fā)
EX0=1; //打開INT0中斷請(qǐng)求
TMOD=0x01;
while (1);
//RemPin=1;
}
復(fù)制代碼
作者:
追求是為真理
時(shí)間:
2015-10-17 10:25
頂樓主,不錯(cuò)
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1