- 积分
- 3538
- 下载分
- 分
- 威望
- 点
- 原创币
- 点
- 下载
- 次
- 上传
- 次
- 注册时间
- 2014-11-13
- 精华
|
马上注册,获取阅读精华内容及下载权限
您需要 登录 才可以下载或查看,没有帐号?注册
x
(一)、概述
上面图片就是我做的电视遥控器控制电源插座的实物图。
红外线遥控是目前使用最广泛的一种通信和遥控方式。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而在家用电器以及玩具等其它小型电器装置上广泛采用红外线遥控。工业设备中,在高电压、有辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅可靠而且能起到有效地隔离作用。下图表示了红外发射和接收的工作框图。
红外线遥控器一般由电源、键盘、编码、调制电路、三极管和红外线发射管组成。接收端接收到红外信号后进行放大、解调、然后送到专门的芯片去进行解码输出。
(二)、红外遥控器解码电路组成
1、单片机
单片机选用PILLIPS 公司的8 个管脚的P89LPC903 芯片,P89LPC903 是一单片封装的微控制器如下图,适用于许多要求高集成度、低成本的场合,可以满足多方面的性能要求。它采用了高性能的处理器结构,指令执行时间只需2 到4 个时钟周期,6 倍于标准的80C51 器件,此外还集成了许多系统级的功能,可以大大减少元件的数目和电路板的面积并降低系统的成本。其基本内核是常用的C51内核,绝大部分指令系统与C51 相同,使用时注意I/O口的定义如下图。
P89LPC903的储器空间如下:
DATA 128字节的内部数据存储空间(00h--7Fh)。可利用除MOVX和MOVC之外的指令直接或间接寻址。
SFR 特殊功能寄存器。选择的CPU寄存器和外设控制和状态寄存器,只可通过直接寻址访问。
CODE 1KB的代码存储空间。作为程序执行部分,通过MOVC指令访问。
P89LPC903可选择片内看门狗振荡器和片内RC振荡器作为CPU时钟源。
P89LPC901/902/903 具有一个6 位TRIM 寄存器,可对RC 振荡器的频率进行调整。在复位时,TRIM;的值初始化为出厂时预编程值以将振荡器频率调整为7.373MHz,±2.5%。用户程序可修改TRIM 寄存器将RC 振荡器调整为其它频率。
2、红外接收电路:
红外接收电路通常被厂家集成在一个元件中,成为一体化红外接收头。 内部电路包括红外监测二极管,放大器,限副器,带通滤波器,积分电路,比较器等。红外监测二极管监测到红外信号,然后把信号送到放大器和限幅器,限幅器把脉冲幅度控制在一定的水平,而不论红外发射器和接收器的距离远近。交流信号进入带通滤波器,带通滤波器可以通过30khz到60khz的负载波,通过解调电路和积分电路进入比较器,比较器输出高低电平,还原出发射端的信号波形。注意输出的高低电平和发射端是反相的,这样的目的是为了提高接收的灵敏度。
红外接收头的种类很多,引脚定义也不相同,一般都有三个引脚,包括供电脚,接地和信号输出脚。根据发射端调制载波的不同应选用相应解调频率的接收头。
红外接收头内部放大器的增益很大,很容易引起干扰,因此在接收头的供电脚上须加上滤波电容,一般在22uf以上。HS0038B是一款压模的红外线接收模块,应用比较广泛.红外线接收头容易受到阳光及38KHZ或者其它频率的持续信号的干扰。
3、用P89LPC903单片机实现红外线遥控插座的电路
如上图单片机的P0.5口接一体化的红外接收头。P0.4控制继电器,P0.2接指示灯。
(三)、红外遥控器解码原理
我们以uPD1621芯片的编码方式来讲解红外解码的过程,uPD6121G产生的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。后16位为8位操作码(功能码)及其反码。uPD6121G最多达128种不同组合的编码。遥控器在按键按下后,周期性地发出同一种32位二进制码,周期约为108ms。一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同,大约在45~63ms之间,下图为发射波形图。
当发射端一个键按下超过36ms,振荡器使芯片激活,将发射一组108ms的编码脉冲,这108ms发射代码由一个起始码(9ms),一个结果码(4.5ms),低8位地址码(9ms-18ms),高8位地址码(9ms-18ms),8位数据码(9ms-18ms)和这8位数据的反码(9ms-18ms)组成。如果键按下超过108ms仍未松开,接下来发射的代码(连发代码)将仅由起始码(9ms)和结束码(2.5ms)组成。
我们要用单片机来解码,关键在于如何识别“0”和“1”,由下图可见“0”、“1”均以0.56ms的低电平开始,不同的是高电平的宽度不同,“0”为0.56ms,“1”为1.68ms,可以根据高电平的宽度区别“0”和“1”。
根据码的格式,我们解码前应该等待9ms的起始码和4.5ms的结果码(称之为引导码)完成后才能开始读码。
单片机程序:
;设定内部时钟为7.373MHZ,工作速度是同频2051的6倍,机顶盒遥控器数据“1”=1642微妙,“0“=514微妙,用定时器计数”1“=1F51H" 0="09E1H"
ORG0000H
AJMPMAIN
ORG0023H
; AJMPRcv_ISR
ORG006BH ;6BH是串口发送中断地址 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设置为准双向
; ANL P0M1,#0FCH ;把TXD和RXD设置为准双向
MOV P0M2,#00H ;端口初始化
MOV P1M1,#0 ;把TXD和RXD设置为准双向
; ANL P1M1,#0FCH ;把TXD和RXD设置为准双向
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 ;用作“定时器”功能时,每经过一个PCLK,寄存器值加1
ACALLWDINT
LCALL YS
CPL P0.2
LCALL YS
CPL P0.2
QL: MOV A,#00H
MOVR2,#66D ;清数据区;;
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 ;判断高电平时间常数,识别数据码
S0: MOV 8DH,#00H ;定时器1时间常数
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 ;与晶振频率有关6mhz时,起始位9ms计时TH1=11,TL1=A3,数据“1”=1.6msTH1=03H,TL1=41H
JC JS1 ;数据“0”=0.5MS,TH1=01,TL1=0F,所以用高电平持续时间来判断“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 ;如果不等表示接收数据发生错误,放弃
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 ;设置8位倒计时计数器 ;配置字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 有线电视机顶盒遥控器数据
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
;卫星接收遥控器数据
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
|
|