?? pt2262.c
字號:
/******************************************************************************************
項目名稱: 意大利無線門鈴
程序功能: PT2262解碼程序
晶 振: 4 MHz
作 者: 123mcu
電子郵箱: 123mcu@163.com
QQ : 104076687
日 期: 2007-03-19
版 本: V1.0
PT2262震蕩電阻為4.7M,如電阻不一樣需改一下程序時間
本程序是用來做無線收發所用,如果用于紅外發光管請將震蕩電阻改為430K-470K
當然程序里的時間也要改哦
我的連接方法是將PT2262的數據輸出端經過三極管反向后直接接到AT89C2051的P3.2,
PT2262與AT89C2051同一個5V電源
PT2262是兩個脈沖代表一位,我解碼是將每個脈沖當成一位,寬的為1,窄的為0,
這樣就是24位,解碼結果放在receive[3]里
本程序剛剛寫完,用仿真器試解碼結果沒有問題,還沒有接高頻發射線路試,
先把它貼上來再說。
*******************************************************************************/
#include <reg51.h>
sbit RemPin = P3^2 ;
unsigned char receive[3],RemValue,*PRemValue;
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;
}
//解碼完成,判斷和轉換鍵值
PRemValue=&RemValue;
if ((receive[0] ^ receive[1])!=0) goto RemExit;
else if (receive[2] == 0xf3)
{
*PRemValue = 1; //鍵值為0
}
else if (receive[2] == 0xfc)
{
*PRemValue = 2; //鍵值為1
}
RemExit:
{
TR0=0;
EA=1;
RemPin=1;
TF0=0;
return;
}
}
///*
main()
{
RemPin=1;
EA=1;
IT0=1; //設定INT0的觸發方式為脈沖負邊沿觸發
EX0=1; //打開INT0中斷請求
TMOD=0x01;
while (1);
//RemPin=1;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -