基于单片 机的通用红外遥控接收 器
基于单片机的通用红外遥控接收器设计
清华-华录信息技术研究所 朱纯益
摘 要 简单介绍了红外遥控接收系统原理,给出了用8051作遥控接收系统解码器的一种
巧妙实现方
,以及完整的51汇编程序代码。
关键词 8051 红外遥控 遥控码
MOV TMOD,#00010001B
;T0:计数器 T1:计数器?
MOV TCON,#00000101B
; EXINT0和EXINT1下降沿有效
MOV LENG,#00H ;清码长
CLR (29H).0 ;清起始码标志
CLR (29H).1 ;清用户码标志
SETB EA
SETB ET0
SETB TR0
SETB EX0
SETB EX1
INFRAR:
JNB (29H).0,R_NEW ;
起始码标志
MOV A,LENG
SUBB A,#20H
JB CY,NR ;LENG<32跳转
MOV A,BUF2
XRL A,#0FFH
MOV BUF2,A
CJNE A,BUF3,R_NEW ;用户码Ok
MOV A,BUF3
CJNE A,#01H,R_NEW
SETB (29H).1 ;设用户码标志
USER:
MOV A,BUF0XRL A,#0FFH
MOV BUF0,A
CJNE A,BUF1,R_NEW ;操作码OK
MOV A,BUF1
MOV 42H,A ;操作码保存到[42H]
R_NEW:
MOV LENG,#00H
CLR (29H).0
CLR (29H).1
NR:
POP ACC
POP PSW
RETI
INT0中断服务程序
INT0中断服务程序的功能比较单一,它完成清计数器0、置位其运行控制位TR0和允
许INTI中断等工作。计数器0由INT0中断服务程序来启劢,而由INTl中断服务程序来关
闭。它所定时计数的值是INT1引脚上正脉冲的宽度。 EXINT0:
PUSH PSW
PUSH ACC
MOV TH0,#00H ;清计数器0
MOV TL0,#00H
SETB TR0 ;起劢计数器0
SETB ET0
SETB EA
POP ACC
POP PSW
RETI
INTI中断服务程序
a,对收到的二进制位数进行计数。
b,读出计数器T0的计数值,判断它是对应于二进制的“0”,还是“1”,并据此将进
位位清~或置1。如定时计数值大于1,792ms,则置位码间隔标志(29H).1。
c,通过累加器连同CY的循环右移操作、累加器与缓冲单元BUF0间的数据传送操作
以及解码所得的二进制位逐一存入BUF0,BUF3缓存单元内。
EXINT1:
PUSH PSW
PUSH ACC
CLR EX0
CLR TR0
CLR ET0 ;关计数器0
CLR EA
JNB (29H).0,BG
INC LENG ;码长加,
BG:
CLR CY
MOV A,TH0 ;脉冲间隔 >=0.256ms ?
SUBB A,#01H
JB CY,ERROR
CLR CY
MOV A,TH0 ; 脉冲间隔<=0.768ms ?
SUBB A,#03H
JNB CY,GE07MS
CLR CY
REC0:
MOV A,BUF0 ;A <-- BUF0
RRC A ;A带CY循环右移
MOV BUF0,A ;BUF0 <-- A
MOV A,BUF1
RRC A
MOV BUF1,A ;BUF1 <-- A
MOV A,BUF2
RRC A
MOV BUF2,A ;BUF2 <-- A
MOV A,BUF3
RRC A
MOV BUF3,A ;BUF3 <-- A
AJMP NORM
GE07MS:
CLR CY
MOV A,TH0 ; 脉冲间隔>=1.28ms ?
SUBB A,#05H
JB CY,ERROR
CLR CY
MOV A,TH0 ; 脉冲间隔<=1.792ms ?
SUBB A,#07H
JB CY,REC1
SETB (29H).0 ;设起始码标志
MOV LENG,#00H ;清码长
AJMP NORM
REC1:
SETB CY
AJMP REC0
ERROR:
CLR (29H).0
CLR (29H).1
MOV LENG,#00H
NORM:
POP ACC
POP PSW
SETB EX0
SETB ET0
SETB TR0
SETB EA
RETI