📄 hongwai.txt
字号:
红外线遥控器解码程序
ORG 0000H
MOV 50H,#00
MOV 51H,#00
MOV P3,#00
MOV P1,#00
SETB P3.3
START:
;------------------------ ;对遥控信号的9000微秒的初始低电平信号的识别
JNB P3.3,$ ;等待遥控信号出现
MOV R6,#10
SB: ACALL YS1 ;延时882微秒
JB P3.3,START ;延时882微秒后判断P3.3脚是否出现高电平如果有就退出解码程序
DJNZ R6, SB ;重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序
;------------避开4.5毫秒
JNB P3.3, $ ;等待高电平避开9毫秒低电平引导脉冲
ACALL YS2 ;延时4.74毫秒避开4.5毫秒的结果码
;------------开始解码
MOV R1,#1AH ;设定1AH为起始RAM区
MOV R2,#4 ;接收从1AH到1DH的4个内存,用于存用户识别码和反码,放操作码和反码
PP: MOV R3,#8 ;每组数据为8位
JJJJ: JNB P3.3,$ ;等待地址码第一位的高电平信号
LCALL YS1 ;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
MOV C,P3.3 ;将P3.3引脚此时的电平状态0或1存入C中
JNC UUU ;如果为0就跳转到UUU
JB P3.3,$ ;如果为1就等待
UUU: MOV A,@R1 ;将A中的数暂时存放在R1数值的内存中
RRC A
MOV @R1,A
DJNZ R3,JJJJ;接收满8位换一个内存
INC R1 ;对R1中的值加1,换下一个RAM
DJNZ R2,PP ;接收完8位数据码和8位数据反码,存放在1AH/1DH中
AJMP BIJIAO
;--------------------;判断在118毫秒内是否有连发码
AA: MOV R1,#25
XX: ACALL YS2
JNB P3.3,HH
DJNZ R1,XX
;-------------------- ;连发码判断程序段
HH: MOV R6,#4
S: ACALL YS1
JB P3.3,EXIT
DJNZ R6, S
JNB P3.3, $
AJMP AA
;**********************************;比较编码程序
BIJIAO:
MOV A,1CH
MOV P1,A
TT1: CJNE A,#00010111B,TT2 ; 开关机键
MOV A,50H
JNZ OFF
MOV 50H,#01
SETB P3.0 ;开机
SETB P3.1
AJMP EXIT
OFF: MOV 50H,#00
CLR P3.0 ;关机
CLR P3.1
TT2: CJNE A,#00001101B,TT3 ;1键
SETB P3.0
CLR P3.1
TT3: CJNE A,#00000010B,TT4 ;2键
SETB P3.0
SETB P3.1
TT4: CJNE A,#00001111B,TT5 ;3键
MOV A,51H
JNZ OFF
MOV 51H,#01
SETB P3.2 ;开摇头
AJMP EXIT
OFF: MOV 51H,#00
CLR P3.2 ;关摇头
OK: AJMP AA
;*********************************************
EXIT:
AJMP START
;*********************************************;延时子程
YS1: MOV R4,#20 ;延时子程序1,精确延时882微秒
D1: MOV R5,#20
DJNZ R5,$
DJNZ R4,D1
RET
YS2: MOV R4,#10 ;延时子程序2,精确延时4740微秒
D2: MOV R5,#235
DJNZ R5,$
DJNZ R4,D2
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -