音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

紅外線解碼程序真的那么難編嗎?

作者:ihafd 欄目:單片機(jī)
紅外線解碼程序真的那么難編嗎?
   我編個紅外解碼程序.用NB9148作為紅外發(fā)射的編碼(帶調(diào)制的),紅外接收頭(帶解調(diào)的)接MCS S51的 外部中斷O .但老是沒法解碼,請指教.
解碼方法如下:
    定時器0的定時時間為0.42ms、定時方式1、INT0為負(fù)沿觸發(fā)。當(dāng)?shù)谝晃粩?shù)據(jù)到來時,觸發(fā)INT0中斷,產(chǎn)生中斷。在INT0中斷服務(wù)程序中關(guān)外中斷0,啟動定時器0,0.42ms后,定時器中斷,讀數(shù)據(jù)。此時正好在該位數(shù)據(jù)的中間,以后定時器定時時間設(shè)定為0.84ms每中斷2次讀一位數(shù)據(jù),讀完12位數(shù)據(jù)后,將數(shù)據(jù)保存在MSB LSB中,延時40位,再讀12位數(shù)據(jù),若讀出的12位數(shù)據(jù)和前面的相同,則進(jìn)行校驗、解碼,。以上任何一步不能通過則放棄此次接收結(jié)果。

程序如下:

// 紅處接收程序 ///
#include<REG51.H>

typedef unsigned CHAR uCHAR;

sbit in=P3^2;      //接紅處接收頭的輸出端。
sbit  symbol=P1^0; //接收失敗標(biāo)志位。
uCHAR bdata MSB, LSB;  //接收寄存器。
sbit DD=MSB^7;     //定時中斷標(biāo)志位。
sbit C1=MSB^3;    
sbit C2=MSB^2;
sbit C3=MSB^1;
sbit H=MSB^0;
sbit S1=LSB^7;
sbit S2=LSB^6;
sbit D1=LSB^5;
sbit D2=LSB^4;
sbit D3=LSB^3;
sbit D4=LSB^2;
sbit D5=LSB^1;
sbit D6=LSB^0;

uCHAR codedata,conut,add; //全局變量。

main()
{
uCHAR tempcode1,tempcode2,tempcode3,tempcode4;
TMOD=0x01;  //定時器0,方式1。
IT0=1; // 外部中斷0, 下降沿觸發(fā)。
IE=0x83;  //允許外部中斷和定時器0中斷。
TH0=0xFE; //1a=0.4219ms 定時; [ 12MHZ 晶振 ]
TL0=0x5A; //
while(1)
{
     while(!IE0); //等待外部中斷的到來。
     for(add=0;add<24;add++)
       {
         DD=1;
         while(DD==1);  //等待定時器中斷。
         TH0=0xFC;   //2a=0.8438ms定時;
         TL0=0xB4;   //
       }
      tempcode1=MSB;
      tempcode2=LSB;
     for(add=0;add<40;add++)
       {
         DD=1;
         while(DD==1);    //等待定時器中斷。
         TH0=0xFC;        //2a=0.8438ms定時
         TL0=0xB4;       //
       }
     for(add=0;add<24;add++)
       {
         DD=1;
         while(DD==1);   //等待定時器中斷。
         TH0=0xFC;     //2a=0.8438ms定時。  
         TL0=0xB4;     //
       }
       tempcode3=MSB;
       tempcode4=LSB;  
       if((tempcode1==tempcode3)&(tempcode2==tempcode4))  //較驗接收的正吳。
        {
         codedata=tempcode2;
         P2=codedata;  //若接收正確,在P2口作指示。
        }
       else
        symbol=0;   //接收失敗標(biāo)專。
       EX0=1;
       while(1);
  }
}

void int0() interrupt 0     //外部中斷子程序。
{
TR0=1;    //打開定時器0
EX0=0;     //關(guān)閉外部中斷。
}


void time0() interrupt 1    //定時器0中斷子程序。
  {
         SWITCH(add)
           {
             case 0:C1=in;break;
             case 2:C2=in;break;
             case 4:C3=in;break;
             case 6:H=in;break;
             case 8:S1=in;break;
             case 10:S2=in;break;
             case 12:D1=in;break;
             case 14:D2=in;break;
             case 16:D3=in;break;
             case 18:D4=in;break;
             case 20:D5=in;break;
             case 22:D6=in;break;
             default:break;
           }
       DD=0;
  }


2樓: >>參與討論
滌綸
/轉(zhuǎn)
到這里看看吧

* - 本貼最后修改時間:2006-4-12 18:43:42 修改者:滌綸

http://www.cxjr.21ic.org/more.asp?NAME=cxjr&id=4896

3樓: >>參與討論
ihafd
滌綸
謝謝你!
匠人的那個基于狀態(tài)機(jī)的紅外線解碼程序我看不懂啊!!
還有其它嗎?

4樓: >>參與討論
ihafd
請大家?guī)蛶兔?
謝謝.

5樓: >>參與討論
lufeijian
樓主的思路和方向就不對了!
 
6樓: >>參與討論
dcp
這樣能解出來就厲害了
 
7樓: >>參與討論
ihafd
請問思路應(yīng)該怎樣才對.
謝謝!

8樓: >>參與討論
djx
不要定時器計時,直接用循環(huán)延時.
 
9樓: >>參與討論
wswh2o
定時器也行吧.
 
10樓: >>參與討論
voynich
定時器可以的1
定時時間要在不影響程序運(yùn)行的情況下,足夠的小,否則解碼的誤碼率偏高!

11樓: >>參與討論
dcp
用定時器做個133us的定時中斷
 
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
請問十進(jìn)制帶小數(shù)怎么轉(zhuǎn)浮點數(shù)?
新手:大家能推薦一款64x8位5v靜態(tài)讀寫的ram嗎?
ULN2801A問題
6116的讀寫問題
我的簡易操作系統(tǒng),希望能體現(xiàn)所長的編程思想
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號