新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機系統中的紅外通信接口

        單片機系統中的紅外通信接口

        作者: 時間:2011-02-27 來源:網絡 收藏

        摘要:本文結合復費率電能表中紅外通信的設計實從事貿易,介紹了系統中紅外通信的軟硬件設計方法,并給出了具體的電路原理和通信源程序。

        關鍵詞:,紅外通信,遙控

        在許多基于的應用系統中,系統需要實現遙控功能,而紅外通信則是被采用較多的一種方法。一般市場上的搖控器協議簡單、保密性不強、抗干擾能力較弱。這里,我們介紹一種基于字節傳輸的紅外遙控系統,可以適合于各種復雜的應用場合。

        紅外通信的基本原理

        紅外通信的基本原理是發送端將基帶二進制信號調制為一系列的脈沖串信號,通過紅外發射管發射紅外信號。常用的有通過脈沖寬度來實現信號調制的脈寬調制(PWM)和通過脈沖串之間的時間間隔來實現信號調制的脈時調制(PPM)兩種方法。本系統采用的為永時市制方法。數據比特的傳送仿照不帶奇側校驗的RS232通信,首先產生一個同步頭,然后接著8位數據比特


        硬件電路設計

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


        軟件設計

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

        在程序設計時,應該注意的中斷方式采用下降沿觸發:接收端通過T0計數值來判斷發送比特,一般采用硬判決,即取0和1比特時寬的平均值為竟決門限A,當T0值大于A時判接收信號為0,小于A時判為1。

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

        結語

        以上設計方案在復費率電能表中應用后,效果良好,達至了設計要求。整個系統外圍元件少,調試方便;軟件工作量也較小。如果應用來傳送大量數據時,還可以根據需要改變相應的編碼形式,提高數據傳送速率。

        通信源程序
        #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 ∥接收紅外信號
        {
        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)
        ∥基本循環程序
        while(1) {

        .(略)

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

        .(略)

        }
        }
        }

        紅外遙控器相關文章:紅外遙控器原理
        電能表相關文章:電能表原理
        脈寬調制相關文章:脈寬調制原理


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 厦门市| 柳河县| 叶城县| 宁明县| 吴江市| 赤城县| 庆云县| 西畴县| 若羌县| 河津市| 白玉县| 内江市| 新巴尔虎右旗| 临桂县| 黄冈市| 文昌市| 文登市| 井冈山市| 通城县| 额尔古纳市| 庐江县| 阳新县| 鄂尔多斯市| 康平县| 晋宁县| 漳浦县| 广南县| 合肥市| 镇巴县| 迁安市| 郁南县| 永昌县| 金平| 德惠市| 新津县| 易门县| 富川| 涿鹿县| 乾安县| 屯门区| 喀喇沁旗|