下面是一个对51试验板配套的红外线遥控器的解码程序,它能够把红外遥控器每一个按键的键值读出来,而且经过试验板上P1口的8个LED显示出来,在解码成功的一起而且能宣布“嘀嘀嘀”的提示音。
;=================================================
; 红外遥控接纳
;=================================================
; ew51仿真编程器 配套试验板学习例程
;
; 中山单片机学习网 智佳科技 逸风
;
; http://www.zsMCU.com
; E-mail:info@zsmcu.com
;=================================================
ORG 0000H
MAIN:
JNB P2.2,IR ;遥控扫描
LJMP MAIN ;在正常无遥控信号时,一体化红外接纳头输出是高电平,程序一直在循环。
;=================================================
; 解码程序
IR:
;以下对遥控信号的9000微秒的初始低电平信号的辨认,波形见图5。
MOV R6,#10
IR_SB:
ACALL DELAY882 ;调用882微秒延时子程序
JB P2.2,IR_ERROR ;延时882微秒后判别P2.2脚是否呈现高电平假如有就退出解码程序
DJNZ R6,IR_SB ;重复10次,意图是检测在8820微秒内假如呈现高电平就退出解码程序
;辨认连发码,和越过4.5ma的高电平。
JNB P2.2, $ ;等候高电平避开9毫秒低电平引导脉冲
ACALL DELAY2400
JNB P2.2,IR_Rp ;这儿为低电平,认为是连发码信号,见图6。
ACALL DELAY2400 ;延时4.74毫秒避开4.5毫秒的成果码
;以下32数据码的读取 ,0和1的辨认 请看图2
MOV R1,#1AH ;设定1AH为开端RAM区
MOV R2,#4
IR_4BYTE:
MOV R3,#8
IR_8BIT:
JNB P2.2,$ ;等候地址码第一位的高电平信号
LCALL DELAY882 ;高电平开端后用882微秒的时刻尺去判别信号此刻的凹凸电平状况
MOV C,P2.2 ;将P2.2引脚此刻的电平状况0或1存入C中
JNC IR_8BIT_0 ;假如为0就跳转到IR_8BIT_0
LCALL DELAY1000
IR_8BIT_0:
MOV A,@R1 ;将R1中地址的给A
RRC A ;将C中的值0或1移入A中的最低位
MOV @R1,A ;将A中的数暂时存放在R1中
DJNZ R3,IR_8BIT ;接纳地址码的高8位
INC R1 ;对R1中的值加1,换下一个RAM
DJNZ R2,IR_4BYTE ;接纳完16位地址码和8位数据码和8位数据,
;存放在1AH/1BH/1CH/1DH的RAM中
;解码成功
JMP IR_GOTO
IR_Rp:
;这儿为重复码履行处
;按住遥控按键时,每过108ms就到这儿来
JMP IR_GOTO
IR_ERROR:
;错语退出
LJMP MAIN ;退出解码子程序
;=================================================
;遥控履行部份
IR_GOTO:
;这儿还要判别1AH和1BH 两个体系码或用户码,用于辨认不同的遥控器
;MOV A,1AH
;CJNE A,#xxH,IR_ERROR ;用户码1不对则退出
;MOV A,1BH
;CJNE A,#xxH,IR_ERROR ;用户码2不对则退出
;判别两个数据码是否相反
MOV A,1CH
CPL A
CJNE A,1DH,IR_ERROR ;两个数据码不相反则退出
;遥控履行部份
;MOV A,1DH ;判别对应按键
;CJNE A,#xxH,{1}6
;LJMP -à跳到对应按键履行处
;CJNE A,#xxH,{1}6
;LJMP -à跳到对应按键履行处
;。
MOV P1,1DH ;将按键的键值经过P1口的8个LED显示出来!
CLR P2.3 ;蜂鸣器鸣响-嘀嘀嘀-的声响,表明解码成功
LCALL DELAY2400
LCALL DELAY2400
LCALL DELAY2400
SETB P2.3 ;蜂鸣器中止
;铲除遥控值使连按失效
MOV 1AH,#00H
MOV 1BH,#00H
MOV 1CH,#00H
MOV 1DH,#00H
LJMP MAIN
;=================================================
; 延时子程序
;=============================882
DELAY882: ;1.085x ((202×4)+5)=882
MOV R7,#202
DELAY882_A:
NOP
NOP
DJNZ R7,DELAY882_A
RET
;=============================1000
DELAY1000: ;1.085x ((229×4)+5)=999.285
MOV R7,#229
DELAY1000_A:
NOP
NOP
DJNZ R7,DELAY1000_A
RET
;=============================2400
DELAY2400: ;1.085x ((245×9)+5)=2397.85
MOV R7,#245
DELAY2400_A:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R7,DELAY2400_A
RET
END
来历;21ic