📄 remote.asm
字号:
REMOTEIN BIT P3.2 ;遥控输入
ir_code data 40H ;操作码
ir_code_R data 41h ;操作码反码
ir_ID_code data 42h ;用户码
ir_id_code_r data 43h ;操作反码
IR_ADDR DATA 44H
;----------------
VOL_UP EQU 1FH
VOL_DOWN EQU 1BH
BASS_UP EQU 1EH
BASS_DOWN EQU 0FH
TR_UP EQU 16H
TR_DOWN EQU 07H
BAL_UP EQU 1AH
BAL_DOWN EQU 0BH
MUTE_CON EQU 08H
VCD_CON EQU 40H
DVD_CON EQU 48H
CD_CON EQU 4CH
TAPE_CON EQU 44H
LOUD_CON EQU 04H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
REMOTE:
push acc ;定时1中断子程序
push psw
CLR EX0 ;INT0请求中断
SETB rs1 ;选择寄存器组
clr rs0
MOV R5,#1
SB:
MOV R4,#203;220;转到882微秒延时判断子程序
irD0:
JB REMOTEIN,EXIT
DJNZ R4,irD0 ;延时882微秒中判断P3.3脚是否出现高电平如果有就退出解码程序
DJNZ R5, SB ;重复'R6次,目的是检测在8820微秒内如果出现高电平就退出解码程序
;以上完成对遥控信号的9000微秒的初始低电平信号的识别。
JNB REMOTEIN, $ ;等待高电平避开9毫秒低电平引导脉冲
ACALL YS2 ;延时4.74毫秒判断是否连发
;JB REMOTEIN,EXIT ;
MOV R1,#1AH ;设定1AH为起始RAM区
MOV R2,#4 ;接收从1AH到1DH的4个内存,用于存放操作码和操作反码
PP: ;
MOV R3,#8 ;每组数据为8位
JJJJ: ;
JNB REMOTEIN,$ ;等待地址码第一位的高电平信号
LCALL YS1 ;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
MOV C,REMOTEIN ;将P3.2引脚此时的电平状态0或1存入C中
JNC UUU ;如果为0就跳转到UUU
LCALL YS3;JB P3.2,$ ;检测到高电平1的话延时882微秒等待脉冲高电平结束
UUU: ;
MOV A,@R1 ;将R1中地址的给A
RRC A ;将C中的值0或1移入A中的最低位
MOV @R1,A ;将A中的数暂时存放在R1数值的内存中
DJNZ R3,JJJJ ;接收满8位换一个内存
INC R1 ;对R1中的值加1,换下一个RAM
DJNZ R2,PP ;接收完8位数据码和8位数据反码,存放在1AH/1BH/1CH/1DH中
;以下对代码是否正确和定义进行识别
MOV A,1AH;比较高8位地址码
XRL A,#00000000B ;判断1AH的值是否等于00000000,相等的话A为0
JNZ EXIT;如果不相等说明解码失败退出解码程序
MOV A,1BH;比较低8位地址
XRL A,#11111111B ;再判断高8位地址是否正确
JNZ EXIT;如果不相等说明解码失败退出解码程序
MOV A,1CH;比较数据码和数据反码是否正确?
CPL A
XRL A,1DH ;将1CH的值取反后和1DH比较 不同则无效丢弃,核对数据是否准确
JNZ EXIT;如果不相等说明解码失败退出解码程序
AJMP BIJIAO
;判断在118毫秒内是否有连发码
AA:
LCALL DELAY10
MOV R3,#25
XX:
ACALL YS2
JNB REMOTEIN,HH;跳转到判断连发代码是否正确的程序段
DJNZ R3,XX
;JNB REMOTEIN,HH;跳转到判断连发代码是否正确的程序段
JMP EXIT
;连发码判断程序段-----------
HH: MOV R4,#4
S:
ACALL YS1;调用882微秒延时子程序
JB REMOTEIN,EXIT;延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序
DJNZ R4, S;重复4次,目的是确认连发码的低电平信号波形
JMP BIJIAO
JNB REMOTEIN, $ ;等待高电平
JMP AA
EXIT:
SETB EX0 ;INT0请求中断
SETB REMOTEIN
pop psw
pop acc
RETI
;-------------------------------------
YS1:
MOV R6,#18 ;精确延时882微秒(18:11.059M,20:12M)
D1:
MOV R7,#20
DJNZ R7,$
DJNZ R6,D1
RET
;
YS2:
MOV R6,#9 ;精确延时4740微秒(9:11.059M,10:12M)
D2:
MOV R7,#235
DJNZ R7,$
DJNZ R6,D2
RET
;
YS3:
MOV R6,#2 ;延时子程序3,精确延时1000微秒
D3:
MOV R7,#248
DJNZ R7,$
DJNZ R6,D3
RET
;
YS4:
MOV R6,#255 ;延时子程序3,精确延时4740微秒
D4:
MOV R7,#255
DJNZ R7,$
DJNZ R6,D4
RET
;-----------------------------------------------
BIJIAO:
MOV A,1CH
CJNE A,#VOL_UP,CON1
LCALL SET_M_VOL_DOWN
JMP aa;EXIT
;
CON1:
CJNE A,#VOL_DOWN,CON2
LCALL SET_M_VOL_UP
JMP AA
;
CON2:
CJNE A,#BASS_DOWN,CON3
JNB MUTE_BIT,MUTE_IR2
JMP EXIT
MUTE_IR2:
LCALL SET_BASS_VOL_DOWN
JMP AA
;
CON3:
CJNE A,#BASS_UP,CON4
JNB MUTE_BIT,MUTE_IR3
JMP EXIT
MUTE_IR3:
LCALL SET_BASS_VOL_UP
JMP AA
;
CON4:
CJNE A,#TR_UP,CON5
JNB MUTE_BIT,MUTE_IR4
JMP EXIT
MUTE_IR4:
LCALL SET_TR_VOL_UP
JMP AA
;
CON5:
CJNE A,#TR_DOWN,CON6
JNB MUTE_BIT,MUTE_IR5
JMP EXIT
MUTE_IR5:
LCALL SET_TR_VOL_DOWN
JMP AA
;
CON6:
CJNE A,#BAL_DOWN,CON7
JNB MUTE_BIT,MUTE_IR6
JMP EXIT
MUTE_IR6:
LCALL BALANCE_L
JMP AA
;
CON7:
CJNE A,#BAL_UP,CON8
JNB MUTE_BIT,MUTE_IR7
JMP EXIT
MUTE_IR7:
LCALL BALANCE_R
JMP AA
;
CON8:
CJNE A,#TAPE_CON,CON9
JNB MUTE_BIT,MUTE_IR8
JMP EXIT
MUTE_IR8:
MOV IN_BUFF,#1
LCALL INSW
JMP EXIT
;
CON9:
CJNE A,#CD_CON,CON10
JNB MUTE_BIT,MUTE_IR9
JMP EXIT
MUTE_IR9:
MOV IN_BUFF,#2
LCALL INSW
JMP EXIT
;
CON10:
CJNE A,#VCD_CON,CON11
JNB MUTE_BIT,MUTE_IR10
JMP EXIT
MUTE_IR10:
MOV IN_BUFF,#3
LCALL INSW
JMP EXIT
;
CON11:
CJNE A,#DVD_CON,CON12
JNB MUTE_BIT,MUTE_IR11
JMP EXIT
MUTE_IR11:
MOV IN_BUFF,#4
LCALL INSW
JMP EXIT
;
CON12:
CJNE A,#MUTE_CON,CON13
CPL MUTE_BIT
LCALL MUTE_ON_OFF
JMP EXIT
;
CON13:
CJNE A,#LOUD_CON,CON14
CPL LOUD_BIT
LCALL LOUD_ON
JMP EXIT
;
CON14:
JMP EXIT
;-------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -