一.TC9012
TC9012是一塊紅外遙控系統(tǒng)專用的發(fā)射集成電路.可以外接32個按鍵.提供8種用戶編碼,3種雙重按鍵功能.下圖片是一塊TC9012及其內(nèi)部結(jié)構(gòu). 二.編碼方式 TC9012一幀含32位碼,包含兩個8位用戶碼,8個數(shù)據(jù)碼和8位數(shù)據(jù)碼的反碼以及最后位的同步位. 引導(dǎo)碼由4.5ms的載波和4.5ms的載波關(guān)斷波形所構(gòu)成.同步位SY是最后一位編碼是0或1的標(biāo)識位.它只有0.56ms.發(fā)射碼的格式如下:
三.脈沖位置調(diào)制方式 這種方式是通過脈沖之間的間隔時間來判斷發(fā)送的是0還是1 .如下圖片所示
則紅外發(fā)射端輸出的波形即如下圖
四.紅外譯碼程式
紅外接受端接在P3^4外部終端0引腳.程式如下:
#include<reg52.c>
#define uchar unsigned char
#define uint unsigned int
uchar irtime,startflag; //記錄中斷時間間隔長,和開始標(biāo)志
uchar irdata[33],bitnum; //存認(rèn)33個外部中斷時間
uchar irreceok; //接收成功標(biāo)志
uchar ircode[4]; //用于存儲解碼后的四個值
void temer0init() //計時器初始化
{
TMOD=0x02;
TH0=0x00;
TL0=0x00;
ET0=1;
EA=1;
TR0=1;
}
void int0init() //外部中斷0初始化
{
IT0=1;
EX0=1;
EA=1;
} void irpros() //根據(jù)記錄的中斷間隔時長解碼
{
uchar k,j,value;
k:=1;
for(j=0;j<4;j++) //解碼成四個字節(jié)
{
for(i=0;i<8;i++)
{
value=value>>1; if (irdata[k]>6) //間隔時間》6的表示為1.否則為0
value=value|0x80;
k++;
}
ircode[j]=value; //記錄解碼后的數(shù)據(jù)。
}
} void main()
{
temer0init()
int0init()
while(1)
{ 這里處理收來的數(shù)據(jù); }
}
void timer0() interrupt 1 //計時器中斷服務(wù)程序,記錄紅外中斷時長
{
irtime++; //255
} void int0() interrupt 0 //外部中斷0服務(wù)程序
{
if(startflag) //起始標(biāo)志
{
if (irtime>32) //檢測引導(dǎo)碼,
bitnum=0;
irdata[bitnum]=irtime; //記錄沒個下降沿的間隔時間長
irtime=0;
bitnum++;
if (bitnum==33) //最后一個
{
bitnum=0;
irreceok=1; //標(biāo)志收完了
}
}
}
else //如果沒有起始標(biāo)志.這認(rèn)為這個脈沖是引導(dǎo)碼,開始計數(shù)收數(shù)據(jù).
{
startflag=1;
irtime=0;
}
}
|