|
#define _1_HighCap
#define _1_LowFroor
#define _0_HighCap
#define _0_LowFroor
#define Head_Cap
#define Head_Froor
#define IRDA_Read() //讀出IRDA引腳的電平的方法
// 當(dāng)高電平的時(shí)間在 _1_LowFroor和_1_HighCap之間時(shí)認(rèn)為接收到 1
//當(dāng)高電平時(shí)間在 _0_LowFroor 和 _0_HighCap 之間時(shí)認(rèn)為就收到 0
uint16_t Get_LowTime(void)
{
//實(shí)現(xiàn)一個(gè)獲取高電平的時(shí)間的函數(shù)
}
uint16_t Get_HighTime(void)
{
//實(shí)現(xiàn)一個(gè)回去低電平時(shí)間的函數(shù)
}
void Test(void)
{
uint8_t HeadCode=0; //第七位為 1表示接收到頭碼 [6:0]位 用來存儲(chǔ) 接收到的電平個(gè)數(shù)
uint8_t Irad_Buff[4]; //0-7 地址碼 8-15 地址碼反碼 16-23 數(shù)據(jù)碼 24-31 數(shù)據(jù)碼反碼
uint8_t Byte,Bit;
uint16_t HighTime;
while(1)
{
if(!IRDA_Read())//出現(xiàn)了低電平
{
if(!(HeadCode&0x80))//如果沒有接受到頭碼
{
Get_LowTime();//過濾低電平
HighTime=Get_HighTime();
if(HighTime>Head_Froor&&HighTime<Head_Cap) //如果高電平的時(shí)間在這兩個(gè)數(shù)之間 就
認(rèn)為頭碼來了 {
HeadCode|=0x80;//標(biāo)記頭碼來了
}
}
else
{
for(Byte=0;Byte<4;Byte++)
{
for(Bit=0;Bit<8;Bit++)
{
Get_LowTime();//過濾低電平
HighTime=Get_HighTime();
if(HighTime>_1_LowFroor&&HighTime<_1_HighCap)
{
Irad_Buff[Byte]>>=1;
Irad_Buff[Byte]|=0x80;
HeadCode++;
}
if(HighTime>_0_LowFroor&&HighTime<_0_HighCap)
{
Irad_Buff[Byte]>>=1;
Irad_Buff[Byte]&=0x7f;
HeadCode++;
}
}
}
HeadCode&=0x7f;
if(HeadCode==32&&Irad_Buff[0]+Irad_Buff[1]==0xff&&Irad_Buff[2]+Irad_Buff[3]==0xff)
{
HeadCode=0;
//解碼正確 得到的編碼就是Irad_Buff[2]
}
else
{
//錯(cuò)誤
HeadCode=0;
}
}
}
}
}
|
|