新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)系統(tǒng)中的紅外通信接口

        單片機(jī)系統(tǒng)中的紅外通信接口

        作者: 時(shí)間:2011-02-27 來源:網(wǎng)絡(luò) 收藏

        摘要:本文結(jié)合復(fù)費(fèi)率電能表中紅外通信的設(shè)計(jì)實(shí)從事貿(mào)易,介紹了系統(tǒng)中紅外通信的軟硬件設(shè)計(jì)方法,并給出了具體的電路原理和通信源程序。

        關(guān)鍵詞:,紅外通信,遙控

        在許多基于的應(yīng)用系統(tǒng)中,系統(tǒng)需要實(shí)現(xiàn)遙控功能,而紅外通信則是被采用較多的一種方法。一般市場(chǎng)上的搖控器協(xié)議簡(jiǎn)單、保密性不強(qiáng)、抗干擾能力較弱。這里,我們介紹一種基于字節(jié)傳輸?shù)募t外遙控系統(tǒng),可以適合于各種復(fù)雜的應(yīng)用場(chǎng)合。

        紅外通信的基本原理

        紅外通信的基本原理是發(fā)送端將基帶二進(jìn)制信號(hào)調(diào)制為一系列的脈沖串信號(hào),通過紅外發(fā)射管發(fā)射紅外信號(hào)。常用的有通過脈沖寬度來實(shí)現(xiàn)信號(hào)調(diào)制的脈寬調(diào)制(PWM)和通過脈沖串之間的時(shí)間間隔來實(shí)現(xiàn)信號(hào)調(diào)制的脈時(shí)調(diào)制(PPM)兩種方法。本系統(tǒng)采用的為永時(shí)市制方法。數(shù)據(jù)比特的傳送仿照不帶奇?zhèn)刃r?yàn)的RS232通信,首先產(chǎn)生一個(gè)同步頭,然后接著8位數(shù)據(jù)比特


        硬件電路設(shè)計(jì)

        復(fù)費(fèi)率電能表系統(tǒng)可分為手持遙控器和復(fù)費(fèi)率電能表兩部分.手持遙控器為發(fā)射部分,其基本電路如圖2所示。采用塑封的SE303ANC-發(fā)射二極管,波長為940nm。CPU按照協(xié)議規(guī)定導(dǎo)通或截止發(fā)射二極管,從而產(chǎn)生特定頻率的發(fā)射信號(hào),這里選用的頻率為38.9kHz。復(fù)費(fèi)率電能表紅外接收部分的基本電路如圖3所示。接收管采用日本光電子公司的PIC-12034,其接收頻率為37.9kHz,它直接將37.9kHz的調(diào)制信號(hào)解調(diào)為基帶信號(hào),提供緞帶接收CPU。該芯片接收靈敏度高,性能穩(wěn)定。其基本工作過程為:當(dāng)接收至37.9kHz信號(hào)時(shí),輸出低電平,否則輸出為高電平。電能表部分采用的是51系列單片機(jī),以中斷方式檢測(cè)接收信號(hào)。這里的非門對(duì)收信號(hào)起整形作用。


        軟件設(shè)計(jì)

        發(fā)射部分的程序相對(duì)來說非常簡(jiǎn)單,主要是生產(chǎn)不同時(shí)間間隔的37.9kHz脈沖串信號(hào)控制發(fā)射管的通斷。在發(fā)射端,CPU不斷掃描鍵盤,一旦發(fā)現(xiàn)有鍵按下,即啟動(dòng)發(fā)射子程序?qū)⑾鄳?yīng)的數(shù)值發(fā)送出。在我們的設(shè)計(jì)中,采用的是4×4的小鍵盤,正如和0~F編碼對(duì)應(yīng),為了提高可靠性,采用最簡(jiǎn)單的糾錯(cuò)編碼――將每位數(shù)重復(fù)發(fā)送一次,即和鍵盤數(shù)字對(duì)應(yīng)的編碼為00~FF。這樣,一個(gè)鍵值要發(fā)送8比特。接收端接收滿8比特信號(hào)后,再進(jìn)行糾錯(cuò)處理,不正確的碥碼認(rèn)為無效。收足規(guī)定的號(hào)碼后,即調(diào)用號(hào)碼分析程序進(jìn)行處理。當(dāng)每收至一個(gè)脈沖串信號(hào)后即啟動(dòng)一個(gè)定時(shí)器。下次中斷發(fā)生時(shí),通過定時(shí)器的計(jì)數(shù)值判斷是0還是1。如果定時(shí)器溢出,則清除本次接收的號(hào)碼,恢復(fù)到接收初始狀態(tài)。接收部分的基本程序流程如圖4所示。

        在程序設(shè)計(jì)時(shí),應(yīng)該注意的中斷方式采用下降沿觸發(fā):接收端通過T0計(jì)數(shù)值來判斷發(fā)送比特,一般采用硬判決,即取0和1比特時(shí)寬的平均值為竟決門限A,當(dāng)T0值大于A時(shí)判接收信號(hào)為0,小于A時(shí)判為1。

        復(fù)費(fèi)率電能表中的紅外接收程序(為Intel 8052,采用C語言編寫)見程序清單。

        結(jié)語

        以上設(shè)計(jì)方案在復(fù)費(fèi)率電能表中應(yīng)用后,效果良好,達(dá)至了設(shè)計(jì)要求。整個(gè)系統(tǒng)外圍元件少,調(diào)試方便;軟件工作量也較小。如果應(yīng)用來傳送大量數(shù)據(jù)時(shí),還可以根據(jù)需要改變相應(yīng)的編碼形式,提高數(shù)據(jù)傳送速率。

        通信源程序
        #includereg52.h>
        #includeintrins.h>
        #includeabsacc.h>
        #pragma OPTIMIZE(5,SPEED)
        sbit RECV=P3^3;
        bdata unsigned char SIGN,RECVBYTE;
        sbit RECVBG=SING^0;
        sbit US1AT=SIGN^6;
        sbit RECVBITO=RECVBYTE^0;
        unsigned char RECVBIT;

        timer0() interrupt 1 ∥entrance:8*n+3=0Bh;
        {
        IE=0x8d; ∥1(EA)0(X)0(X)0(X)-1(ET1)1(EX1)0(ET0)1(EX0)
        RECVBG=0;
        }

        EX-INT1() interrupt 2 ∥接收紅外信號(hào)
        {
        TCON=0x45; ∥0(TF1)1(TR1)0(TF0)1(TR0)-0(IE1)1(IT1)0(IE0)1(IT0)
        If(RECVBG==0) {RECVBG=1;
        RECVBIT=8;
        }
        eles{BECVBYTE=RECVBYTE1;
        if(TH0=4)RECVBIT0=1;
        else RECVBIT0=0;
        RECVBIT--;
        If(RECVBIT==0) {RECVBG=0;
        US1AT=1;
        }
        }
        TH0=0;
        TL0=0;
        TCON=0x55; ∥0(TF1)1(TR1)0(TF0)1(TR0)-0(IE1)1(IT1)0(IE0)1(IT0)
        IE=0x8f; ∥Enable the timer0 interrupt
        }

        void main(){
        RECVBYTE=O;
        SIGN=O;
        TMOD=0x11;
        TCON=0x55; ∥0(TF1)1(TR1)0(TF0)1(TR0)-0(IE1)1(IT1)0(IE0)1(IT0)
        IP=0x00;
        IE=0x8d; ∥1(EA)0(X)0(X)0(X)-1(ET1)1(EX1)0(ET0)1(EX0)
        ∥基本循環(huán)程序
        while(1) {

        .(略)

        if(US1AT==1{∥紅外接收處理

        .(略)

        }
        }
        }

        電能表相關(guān)文章:電能表原理
        紅外遙控器相關(guān)文章:紅外遙控器原理
        脈寬調(diào)制相關(guān)文章:脈寬調(diào)制原理


        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 淮北市| 保德县| 赤水市| 齐齐哈尔市| 雅安市| 唐海县| 夏邑县| 沁水县| 盈江县| 青龙| 常山县| 横山县| 新闻| 宁蒗| 苏尼特左旗| 缙云县| 宁安市| 綦江县| 黄梅县| 辰溪县| 永靖县| 水城县| 大埔县| 湛江市| 即墨市| 松江区| 新巴尔虎右旗| 苍梧县| 资溪县| 运城市| 河源市| 灌云县| 民乐县| 玉溪市| 贵溪市| 金阳县| 健康| 翼城县| 青州市| 江油市| 福海县|