|
- //紅外接收
- void IRC_read(void)
- {
- unsigned char t,i,j;
- WDTFLG = 0x5A;
- //EINT0 = 0; //關(guān)閉中斷
- t = 10; // 0.793ms延時(shí),運(yùn)行10次,處理無(wú)效紅外信號(hào),防止干擾
- while(--t)
- {
- // 定時(shí)0.793*10ms 處理無(wú)效紅外信號(hào)
- TH0 = 0xfb;
- TL0 = 0xdf;
- TR0 = 1;
- while(!TF0);
- TF0 = 0;
- TR0 = 0;
-
- //P32變高電平,無(wú)效紅外信號(hào),跳出函數(shù)
- if(P32)
- {
- EINT0 = 1; //中斷開啟
- return ;
- }
- }
-
- while(!P32); // 等待9ms低電平過(guò)去
-
- //刷新最后2ms左右的低電平 處理長(zhǎng)按的
- TH0 = 0xf3; //3072/FFFF-C00 (16m@hz)
- TL0 = 0xff; //
- TR0 = 1;
- while(!TF0);
- TF0 = 0;
- TR0 = 0; //延時(shí)2.305ms 即3072/FFFF-C00 (16m@hz)
-
- //處理長(zhǎng)按
- if(!P32)
- {
- EINT0=1; //中斷0打開
- return;
- }
- //等待4.5ms高電平的過(guò)去
- while(P32);
-
- //開始接收用戶碼
- for(i=0; i<4; i++)
- {
- for(j=0; j<8; j++)
- {
- while(!P32); //等待低電平過(guò)去 低電平相同不用計(jì)時(shí)
- Data[i] >>= 1; //把上次的數(shù)據(jù)位右移一位
-
-
- //延時(shí)0.793ms (>0.56ms)
- TH0 = 0xfb;
- TL0 = 0xdf;
- TR0 = 1;
- while(!TF0);
- TR0=0;
- TF0=0;
-
- // 若為數(shù)據(jù)"1",則延時(shí)后P32為高電平
- if(P32)
- {
- Data[i] |= 0x80; // 所有數(shù)據(jù)位1放最高位
- while(P32); // 等待高電平過(guò)去
- }
- }
- }
- return;
- }
- 這是搬大佬的紅外接收代碼使用
復(fù)制代碼 |
|