(一)、概述



上面圖片就是我做的電視遙控器控制電源插座的實物圖。
紅外線遙控是目前使用最廣泛的一種通信和遙控方式。由于紅外線遙控裝置具有體積小、功耗低、功能強、成本低等特點,因而在家用電器以及玩具等其它小型電器裝置上廣泛采用紅外線遙控。工業(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ù)不同而不同,大約在45~63ms之間,下圖為發(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總線 3BH是KBI中斷43H是比較器中斷
; AJMP Send_ISR ;73H是ADC
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 ;把TXD和RXD設(shè)置為準雙向
MOV P0M2,#00H ;端口初始化
MOV P1M1,#0 ;把TXD和RXD設(shè)置為準雙向
; ANL P1M1,#0FCH ;把TXD和RXD設(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=01,TL1=0F,所以用高電平持續(xù)時間來判斷“1”還是“0”
SETBC ;TH1=3為1,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
|