📄 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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
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,1DH
CJNE A,#0FFH,IR_OK
AJMP EXIT ;如果不相等说明解码失败退出解码程序
IR_OK:
AJMP BIJIAO ;如果相等说明解码正确
AJMP EXIT ;如果不相等说明解码失败退出解码程序
;判断在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 ir_code,1Ah ;操作原码
mov ir_code_r,1Bh ;操作反码
mov ir_id_code,1Ch ;ID原码
mov ir_id_code_r,1Dh ;ID反码
JB IR_SET_BIT,IR_WORK0
LCALL DIS_IR_OK
;LCALL IR_SEL
JMP EXIT
IR_WORK0:
JMP IR_WORK
;----------------------------
IR_SEL:
MOV A,KEYBUFF
CJNE A,#0,SEL2
MOV IR_ADDR,#20H
LCALL IR_WR24
RET
;
SEL2:
CJNE A,#1,SEL3
MOV IR_ADDR,#24H
LCALL IR_WR24
RET
;
SEL3:
CJNE A,#2,SEL4
MOV IR_ADDR,#28H
LCALL IR_WR24
RET
;
SEL4:
CJNE A,#3,SEL5
MOV IR_ADDR,#2CH
LCALL IR_WR24
RET
;
SEL5:
CJNE A,#4,SEL6
MOV IR_ADDR,#30H
LCALL IR_WR24
RET
;
SEL6:
CJNE A,#5,SEL7
MOV IR_ADDR,#34H
LCALL IR_WR24
RET
;
SEL7:
CJNE A,#6,SEL8
MOV IR_ADDR,#38H
LCALL IR_WR24
RET
;
SEL8:
CJNE A,#7,SEL9
MOV IR_ADDR,#3CH
LCALL IR_WR24
RET
;
SEL9:
CJNE A,#8,SEL10
MOV IR_ADDR,#40H
LCALL IR_WR24
RET
;
SEL10:
CJNE A,#9,SEL11
MOV IR_ADDR,#44H
LCALL IR_WR24
RET
;
SEL11:
CJNE A,#10,SEL12
MOV IR_ADDR,#48H
LCALL IR_WR24
RET
;
SEL12:
CJNE A,#11,SEL13
MOV IR_ADDR,#4CH
LCALL IR_WR24
RET
;
SEL13:
CJNE A,#12,SEL14
MOV IR_ADDR,#50H
LCALL IR_WR24
RET
;
SEL14:
;CJNE A,#13,SEL15
;MOV IR_ADDR,#54H
;LCALL IR_WR24
RET
;
SEL15:
;CJNE A,#14,SEL16
;MOV IR_ADDR,#58H
;LCALL IR_WR24
RET
;
SEL16:
;CJNE A,#15,SEL17
;MOV IR_ADDR,#5CH
;LCALL IR_WR24
RET
SEL17:
RET
;
IR_WR24:
LCALL DELAY10
MOV A,IR_ADDR
MOV B,ir_code;操作原码
LCALL WT24
LCALL DELAY10
MOV A,IR_ADDR
ADD A,#01H
MOV B,ir_code_r;操作反码
LCALL WT24
LCALL DELAY10
MOV A,IR_ADDR
ADD A,#02H
MOV B,ir_id_code;ID原码
LCALL WT24
LCALL DELAY10
MOV A,IR_ADDR
ADD A,#03H
MOV B,ir_id_code_r;ID反码
LCALL WT24
LCALL IR_ID_DISP
RET
;
IR_ID_DISP:
LCALL DIS_IR_SET_OK
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
IR_WORK:
MOV IR_ADDR,#20H
LCALL IR_RD24
MOV A,ir_code
CJNE A,30H,REM_WORK_1
MOV A,ir_code_r
CJNE A,31H,REM_WORK_1
MOV A,ir_id_code
CJNE A,32H,REM_WORK_1
MOV A,ir_id_code_r
CJNE A,33H,REM_WORK_1
;JNB MUTE_BIT,MUTE_IR
;JMP EXIT
;MUTE_IR:
LCALL SET_M_VOL_DOWN
JMP aa;EXIT
;
REM_WORK_1:
MOV IR_ADDR,#24H
LCALL IR_RD24
MOV A,ir_code
CJNE A,30H,REM_WORK_2
MOV A,ir_code_r
CJNE A,31H,REM_WORK_2
MOV A,ir_id_code
CJNE A,32H,REM_WORK_2
MOV A,ir_id_code_r
CJNE A,33H,REM_WORK_2
;JNB MUTE_BIT,MUTE_IR1
;JMP EXIT
;MUTE_IR1:
LCALL SET_M_VOL_UP
JMP AA
;
REM_WORK_2:
MOV IR_ADDR,#28H
LCALL IR_RD24
MOV A,ir_code
CJNE A,30H,REM_WORK_3
MOV A,ir_code_r
CJNE A,31H,REM_WORK_3
MOV A,ir_id_code
CJNE A,32H,REM_WORK_3
MOV A,ir_id_code_r
CJNE A,33H,REM_WORK_3
JNB MUTE_BIT,MUTE_IR2
JMP EXIT
MUTE_IR2:
LCALL SET_BASS_VOL_DOWN
JMP AA
;
REM_WORK_3:
MOV IR_ADDR,#2CH
LCALL IR_RD24
MOV A,ir_code
CJNE A,30H,REM_WORK_4
MOV A,ir_code_r
CJNE A,31H,REM_WORK_4
MOV A,ir_id_code
CJNE A,32H,REM_WORK_4
MOV A,ir_id_code_r
CJNE A,33H,REM_WORK_4
JNB MUTE_BIT,MUTE_IR3
JMP EXIT
MUTE_IR3:
LCALL SET_BASS_VOL_UP
JMP AA
;
REM_WORK_4:
MOV IR_ADDR,#30H
LCALL IR_RD24
MOV A,ir_code
CJNE A,30H,REM_WORK_5
MOV A,ir_code_r
CJNE A,31H,REM_WORK_5
MOV A,ir_id_code
CJNE A,32H,REM_WORK_5
MOV A,ir_id_code_r
CJNE A,33H,REM_WORK_5
JNB MUTE_BIT,MUTE_IR4
JMP EXIT
MUTE_IR4:
LCALL SET_TR_VOL_DOWN
JMP AA
;
REM_WORK_5:
MOV IR_ADDR,#34H
LCALL IR_RD24
MOV A,ir_code
CJNE A,30H,REM_WORK_6
MOV A,ir_code_r
CJNE A,31H,REM_WORK_6
MOV A,ir_id_code
CJNE A,32H,REM_WORK_6
MOV A,ir_id_code_r
CJNE A,33H,REM_WORK_6
JNB MUTE_BIT,MUTE_IR5
JMP EXIT
MUTE_IR5:
LCALL SET_TR_VOL_UP
JMP AA
;
REM_WORK_6:
MOV IR_ADDR,#38H
LCALL IR_RD24
MOV A,ir_code
CJNE A,30H,REM_WORK_7
MOV A,ir_code_r
CJNE A,31H,REM_WORK_7
MOV A,ir_id_code
CJNE A,32H,REM_WORK_7
MOV A,ir_id_code_r
CJNE A,33H,REM_WORK_7
JNB MUTE_BIT,MUTE_IR6
JMP EXIT
MUTE_IR6:
LCALL BALANCE_L
JMP AA
;
REM_WORK_7:
MOV IR_ADDR,#3CH
LCALL IR_RD24
MOV A,ir_code
CJNE A,30H,REM_WORK_8
MOV A,ir_code_r
CJNE A,31H,REM_WORK_8
MOV A,ir_id_code
CJNE A,32H,REM_WORK_8
MOV A,ir_id_code_r
CJNE A,33H,REM_WORK_8
JNB MUTE_BIT,MUTE_IR7
JMP EXIT
MUTE_IR7:
LCALL BALANCE_R
JMP AA
;
REM_WORK_8:
MOV IR_ADDR,#40H
LCALL IR_RD24
MOV A,ir_code
CJNE A,30H,REM_WORK_9
MOV A,ir_code_r
CJNE A,31H,REM_WORK_9
MOV A,ir_id_code
CJNE A,32H,REM_WORK_9
MOV A,ir_id_code_r
CJNE A,33H,REM_WORK_9
JNB MUTE_BIT,MUTE_IR8
JMP EXIT
MUTE_IR8:
MOV IN_BUFF,#1
LCALL INSW
JMP EXIT
;
REM_WORK_9:
MOV IR_ADDR,#44H
LCALL IR_RD24
MOV A,ir_code
CJNE A,30H,REM_WORK_10
MOV A,ir_code_r
CJNE A,31H,REM_WORK_10
MOV A,ir_id_code
CJNE A,32H,REM_WORK_10
MOV A,ir_id_code_r
CJNE A,33H,REM_WORK_10
JNB MUTE_BIT,MUTE_IR9
JMP EXIT
MUTE_IR9:
MOV IN_BUFF,#2
LCALL INSW
JMP EXIT
;
REM_WORK_10:
MOV IR_ADDR,#48H
LCALL IR_RD24
MOV A,ir_code
CJNE A,30H,REM_WORK_11
MOV A,ir_code_r
CJNE A,31H,REM_WORK_11
MOV A,ir_id_code
CJNE A,32H,REM_WORK_11
MOV A,ir_id_code_r
CJNE A,33H,REM_WORK_11
JNB MUTE_BIT,MUTE_IR10
JMP EXIT
MUTE_IR10:
MOV IN_BUFF,#3
LCALL INSW
JMP EXIT
;
REM_WORK_11:
MOV IR_ADDR,#4CH
LCALL IR_RD24
MOV A,ir_code
CJNE A,30H,REM_WORK_12
MOV A,ir_code_r
CJNE A,31H,REM_WORK_12
MOV A,ir_id_code
CJNE A,32H,REM_WORK_12
MOV A,ir_id_code_r
CJNE A,33H,REM_WORK_12
JNB MUTE_BIT,MUTE_IR11
JMP EXIT
MUTE_IR11:
MOV IN_BUFF,#4
LCALL INSW
JMP EXIT
;
REM_WORK_12:
MOV IR_ADDR,#50H
LCALL IR_RD24
MOV A,ir_code
CJNE A,30H,REM_WORK_13
MOV A,ir_code_r
CJNE A,31H,REM_WORK_13
MOV A,ir_id_code
CJNE A,32H,REM_WORK_13
MOV A,ir_id_code_r
CJNE A,33H,REM_WORK_13
CPL MUTE_BIT
LCALL MUTE_ON_OFF
JMP EXIT
;
REM_WORK_13:
;MOV IR_ADDR,#54H
;LCALL IR_RD24
;MOV A,ir_code
;CJNE A,30H,REM_WORK_14
;MOV A,ir_code_r
;CJNE A,31H,REM_WORK_14
;MOV A,ir_id_code
;CJNE A,32H,REM_WORK_14
;MOV A,ir_id_code_r
;CJNE A,33H,REM_WORK_14
;CPL P1.5
JMP EXIT
;
REM_WORK_14:
;MOV IR_ADDR,#58H
;LCALL IR_RD24
;MOV A,ir_code
;CJNE A,30H,REM_WORK_15
;MOV A,ir_code_r
;CJNE A,31H,REM_WORK_15
;MOV A,ir_id_code
;CJNE A,32H,REM_WORK_15
;MOV A,ir_id_code_r
;CJNE A,33H,REM_WORK_15
;CPL P1.6
JMP EXIT
;
REM_WORK_15:
;MOV IR_ADDR,#5CH
;LCALL IR_RD24
;MOV A,ir_code
;CJNE A,30H,REM_WORK_16
;MOV A,ir_code_r
;CJNE A,31H,REM_WORK_16
;MOV A,ir_id_code
;CJNE A,32H,REM_WORK_16
;MOV A,ir_id_code_r
;CJNE A,33H,REM_WORK_16
;CPL P1.7
JMP EXIT
;
REM_WORK_16:
JMP EXIT
;-------------------
IR_RD24:
MOV A,IR_ADDR
LCALL RD24
MOV 30H,A
LCALL DELAY10
MOV A,IR_ADDR
ADD A,#01H
LCALL RD24
MOV 31H,A
LCALL DELAY10
MOV A,IR_ADDR
ADD A,#02H
LCALL RD24
MOV 32H,A
LCALL DELAY10
MOV A,IR_ADDR
ADD A,#03H
LCALL RD24
MOV 33H,A
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -