找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4519|回復: 3
打印 上一主題 下一主題
收起左側(cè)

用P89LPC903單片機實現(xiàn)紅外線遙控電源插座

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:105323 發(fā)表于 2016-2-24 21:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
(一)、概述




上面圖片就是我做的電視遙控器控制電源插座的實物圖。
  紅外線遙控是目前使用最廣泛的一種通信和遙控方式。由于紅外線遙控裝置具有體積小、功耗低、功能強、成本低等特點,因而在家用電器以及玩具等其它小型電器裝置上廣泛采用紅外線遙控。工業(yè)設(shè)備中,在高電壓、有輻射、有毒氣體、粉塵等環(huán)境下,采用紅外線遙控不僅可靠而且能起到有效地隔離作用。下圖表示了紅外發(fā)射和接收的工作框圖。


紅外線遙控器一般由電源、鍵盤、編碼、調(diào)制電路、三極管和紅外線發(fā)射管組成。接收端接收到紅外信號后進行放大、解調(diào)、然后送到專門的芯片去進行解碼輸出。
(二)、紅外遙控器解碼電路組成
      1、單片機

單片機選用PILLIPS 公司的8 個管腳的P89LPC903 芯片,P89LPC903 是一單片封裝的微控制器如下圖,適用于許多要求高集成度、低成本的場合,可以滿足多方面的性能要求。它采用了高性能的處理器結(jié)構(gòu),指令執(zhí)行時間只需2 到4 個時鐘周期,6 倍于標準的80C51 器件,此外還集成了許多系統(tǒng)級的功能,可以大大減少元件的數(shù)目和電路板的面積并降低系統(tǒng)的成本。其基本內(nèi)核是常用的C51內(nèi)核,絕大部分指令系統(tǒng)與C51 相同,使用時注意I/O口的定義如下圖。



P89LPC903的儲器空間如下:
DATA 128字節(jié)的內(nèi)部數(shù)據(jù)存儲空間(00h--7Fh)。可利用除MOVX和MOVC之外的指令直接或間接尋址。
SFR 特殊功能寄存器。選擇的CPU寄存器和外設(shè)控制和狀態(tài)寄存器,只可通過直接尋址訪問。
CODE 1KB的代碼存儲空間。作為程序執(zhí)行部分,通過MOVC指令訪問。
P89LPC903可選擇片內(nèi)看門狗振蕩器和片內(nèi)RC振蕩器作為CPU時鐘源。
P89LPC901/902/903 具有一個6 位TRIM 寄存器,可對RC 振蕩器的頻率進行調(diào)整。在復位時,TRIM;的值初始化為出廠時預編程值以將振蕩器頻率調(diào)整為7.373MHz,±2.5%。用戶程序可修改TRIM 寄存器將RC 振蕩器調(diào)整為其它頻率。
2、紅外接收電路:
紅外接收電路通常被廠家集成在一個元件中,成為一體化紅外接收頭。 內(nèi)部電路包括紅外監(jiān)測二極管,放大器,限副器,帶通濾波器,積分電路,比較器等。紅外監(jiān)測二極管監(jiān)測到紅外信號,然后把信號送到放大器和限幅器,限幅器把脈沖幅度控制在一定的水平,而不論紅外發(fā)射器和接收器的距離遠近。交流信號進入帶通濾波器,帶通濾波器可以通過30khz到60khz的負載波,通過解調(diào)電路和積分電路進入比較器,比較器輸出高低電平,還原出發(fā)射端的信號波形。注意輸出的高低電平和發(fā)射端是反相的,這樣的目的是為了提高接收的靈敏度。

 紅外接收頭的種類很多,引腳定義也不相同,一般都有三個引腳,包括供電腳,接地和信號輸出腳。根據(jù)發(fā)射端調(diào)制載波的不同應選用相應解調(diào)頻率的接收頭。
紅外接收頭內(nèi)部放大器的增益很大,很容易引起干擾,因此在接收頭的供電腳上須加上濾波電容,一般在22uf以上。HS0038B是一款壓模的紅外線接收模塊,應用比較廣泛.紅外線接收頭容易受到陽光及38KHZ或者其它頻率的持續(xù)信號的干擾。
3、用P89LPC903單片機實現(xiàn)紅外線遙控插座的電路


如上圖單片機的P0.5口接一體化的紅外接收頭。P0.4控制繼電器,P0.2接指示燈。
()、紅外遙控器解碼原理
   我們以uPD1621芯片的編碼方式來講解紅外解碼的過程,uPD6121G產(chǎn)生的遙控編碼是連續(xù)的32位二進制碼組,其中前16位為用戶識別碼,能區(qū)別不同的電器設(shè)備,防止不同機種遙控碼互相干擾。后16位為8位操作碼(功能碼)及其反碼。uPD6121G最多達128種不同組合的編碼。遙控器在按鍵按下后,周期性地發(fā)出同一種32位二進制碼,周期約為108ms。一組碼本身的持續(xù)時間隨它包含的二進制“0”和“1”的個數(shù)不同而不同,大約在4563ms之間,下圖為發(fā)射波形圖。

   當發(fā)射端一個鍵按下超過36ms,振蕩器使芯片激活,將發(fā)射一組108ms的編碼脈沖,這108ms發(fā)射代碼由一個起始碼(9ms),一個結(jié)果碼(4.5ms),低8位地址碼(9ms-18ms),高8位地址碼(9ms-18ms),8位數(shù)據(jù)碼(9ms-18ms)和這8位數(shù)據(jù)的反碼(9ms-18ms)組成。如果鍵按下超過108ms仍未松開,接下來發(fā)射的代碼(連發(fā)代碼)將僅由起始碼(9ms)和結(jié)束碼(2.5ms)組成。


  我們要用單片機來解碼,關(guān)鍵在于如何識別“0”和“1”,由下圖可見“0”、“1”均以0.56ms的低電平開始,不同的是高電平的寬度不同,“0”為0.56ms,“1”為1.68ms,可以根據(jù)高電平的寬度區(qū)別“0”和“1”


 根據(jù)碼的格式,我們解碼前應該等待9ms的起始碼和4.5ms的結(jié)果碼(稱之為引導碼)完成后才能開始讀碼。


                       
單片機程序:
;設(shè)定內(nèi)部時鐘為7.373MHZ,工作速度是同頻2051的6倍,機頂盒遙控器數(shù)據(jù)“1”=1642微妙,“0“=514微妙,用定時器計數(shù)”1“=1F51H"  0="09E1H"
                ORG0000H     
               AJMPMAIN      
                ORG0023H     
              ; AJMPRcv_ISR   
                ORG006BH      ;6BH是串口發(fā)送中斷地址  53h看門狗  33h ic2總線   3BHKBI中斷43H是比較器中斷
               ; AJMP Send_ISR  ;73HADC
             P0M1 DATA  84H   
             P0M2 EQU   85H
             P1M1 EQU   91H
             P1M2 EQU   92H
             SSTAT EQU  0BAH
             BRGCON EQU 0BDH
             BRGR0 EQU  0BEH
             BRGR1 EQU  0BFH
             KEY EQU P0.5
           WDL    EQU 0C1H
             WFEED1  EQU 0C2H
             WFEED2  EQU 0C3H
             WDCON  EQU 0A7H


               ORG 0080H
MAIN:   MOVP0M1,#00H   ;P0設(shè)置為準雙向
;          ANL P0M1,#0FCH ;TXDRXD設(shè)置為準雙向
           MOV P0M2,#00H ;端口初始化
           MOV P1M1,#0   ;TXDRXD設(shè)置為準雙向
;          ANL P1M1,#0FCH ;TXDRXD設(shè)置為準雙向
           MOVP1M2,#0 ;端口初始化
           MOV SCON,#50H ;使能接收選擇串口模式1
           MOV SSTAT,#0E0H ;選擇獨立的Tx/Rx中斷
           MOV BRGR0,#0F0H;@7.373Mhz
           MOV BRGR1,#17H  ;02H;7372800/1200-16=6144-16=6128D=17F0H,所以BRGR0,#0f0H,  BRGR1,#17H,波特率=1200
         ;MOV BRGR0,#0x70 ;19200 baud @7.373Mhz ;
         ; MOV BRGR1,#0x01
         ; MOV BRGR0,#0x30 ;115200 baud @7.373Mhz ;7.3738/6=1.2288
          ; MOV BRGR1,#0x00
           MOV BRGCON,#03H ;使能BRG
           MOV A,#90H
           MOVIE,A       ;SETB ESR;ESR=Enable Serial Recieve (EA EWDRT EBO ES/ESR ET1 - ET0-)
           MOV A,#40H
           MOV0E8H,A    ;SETB EST ;EST=Enable Serial Transmit  (- EST - -- EC EKBI -)  EC=1
           MOV TMOD, #11H  ;用作“定時器”功能時,每經(jīng)過一個PCLK,寄存器值加1
          ACALLWDINT
           LCALL YS
           CPL P0.2
           LCALL YS
           CPL P0.2
QL:          MOV A,#00H
               MOVR2,#66D     ;清數(shù)據(jù)區(qū);;
               MOVR0,#18H
QRAM:     MOV @R0,  A
              INC R0
               CLR A
              DJNZ R2,  QRAM
M1:         ACALL CLRWDT;ACALL MAIN_L1
              JNB P1.1,M2
              JB KEY,M1
              AJMP SS
M2:         CPL P0.4
              CPLP0.2
              AJMP M1
   SS:    ;JB P0.4,MAIN
         MOV R6,#17
SS1:   JB  KEY, SS1 ;躲過引導碼及16位用戶識別碼
         JNB KEY,$
         DJNZR6,SS1
         MOV R0,#1AH
         MOV R1,#18H
         MOV R2,#2
         JB  KEY, $
S01:    MOV   R6,#8        ;判斷高電平時間常數(shù),識別數(shù)據(jù)碼
S0:    MOV   8DH,#00H     ;定時器1時間常數(shù)
         MOV   8BH, #00H
S2:     JNB  KEY,S2           ;為低等待
         SETB TR1              ;為高計時
         JB  KEY,$        ;等待變變低
         CLR  TR1
S3:     MOV  A,TH1        ;測量高電平時間
         MOV @R0,A
          INC R0
         SUBB  A,#10H         ;與晶振頻率有關(guān)6mhz時,起始位9ms計時TH1=11,TL1=A3,數(shù)據(jù)“1=1.6msTH1=03H,TL1=41H
         JC   JS1             ;數(shù)據(jù)“0=0.5MS,TH1=01TL1=0F,所以用高電平持續(xù)時間來判斷“1”還是“0
        SETBC            ;TH1=31,TL1=1為“0”所以TH1減去2,不借位就是“1”。
        AJMP JS3
JS1:   CLR C
JS3:   MOV  A,@R1
        RLC A
        MOV   @R1, A
JS2:   DJNZ R6,S0
        INC R1
        DJNZ R2,S01
        MOVA,19H
        CPLA;1AH取反后和1BH比較
       CJNE A,18H,J3 ;如果不等表示接收數(shù)據(jù)發(fā)生錯誤,放棄
SSS:   CLR P0.2;  LED燈亮表示解碼成功
       LCALL YS
        LCALLYS
        SETBP0.2  ;LED燈滅
        MOV A,18H
        XRL A,#02H   ;
        JNZ J01
        CLR P0.4
        SETB P0.2
        AJMP J3
J01:     MOV A,18H
        XRL A,#0DAH  ;游戲
        JNZ J1
        SETB P0.2
        CLR P1.0
        AJMP J3
J1:    MOVA,18H
        XRLA,#22H    ;
        JNZ J2
        SETB P0.4
        CLR P0.2
J2:    MOVA,18H
        XRLA,#52H    ;點播
        JNZ J3
        CLR P0.2
        SETB P1.0
  J3:  LJMP MAIN

YS:    MOV     7EH,   #64H
YS1:   MOV     7FH,   #0ffH
YS2:   ACALL CLRWDT
       DJNZ    7FH,   YS2
       DJNZ    7EH,   YS1
       RET
WDINT:  MOV ACC, WDCON ;讀取WD控制器
       SETB ACC.2
       MOVWDL,#0FFH    ;設(shè)置8位倒計時計數(shù)器 ;配置字ucfg1=c0
       MOVWDCON,A    ;啟動看門狗
       MOV WFEED1,#0A5H  ;0
       MOV WFEED2,#5AH
       RET

CLRWDT:CLREA
      MOV WFEED1,#0A5H  ;0
       MOVWFEED2,#5AH
       SETB EA
       RET
              ORG 0300H
DB 48H  ;0 有線電視機頂盒遙控器數(shù)據(jù)
DB 90H  ;1
DB 0B8H ;2
DB 0F8H ;3
DB 0B0H ;4
DB 98H  ;5
DB 0D8H ;6
DB 88H  ;7
DB 0A8H ;8
DB 0E8H ;9
DB 38H  ;待機0A
DB 0ffH ;電源0B
DB 00H  ;0C
DB 02H  ;0D
DB 50H  ;0E
DB 22H  ;0F
;衛(wèi)星接收遙控器數(shù)據(jù)
DB 08H  ;10
DB 88H  ;11
DB 48H ;12
DB 0C8H ;13
DB 28H ;14
DB 0A8H  ;15
DB 68H ;16
DB 0E8H  ;17
DB 18H ;18
DB 98H ;19
DB 00H  ;待機1A
DB 0ffH ;電源1B
DB 24H  ;1C
DB 0A4H  ;1D
DB 64H  ; 1E
DB 0E4H  ; 正確1F
         END



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:106029 發(fā)表于 2016-2-24 22:56 | 只看該作者
厲害 我是看著匯編就頭大
回復

使用道具 舉報

板凳
ID:100985 發(fā)表于 2016-2-25 18:33 來自手機 | 只看該作者
贊一個!
回復

使用道具 舉報

地板
ID:453582 發(fā)表于 2018-12-24 16:11 | 只看該作者
樓主有資料沒有呢
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表