⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rem.asm

📁 SC6121AZ解码程序
💻 ASM
字号:

	
REMTOE:		CLR	EX0
		PUSH	ACC
		PUSH	PSW
		SETB	RS0
		CLR	RS1
		MOV	C,P3.2
		NOP
		NOP
		JNC 	CONREM
		JNC 	CONREM
		NOP
		NOP
BUFF:		AJMP	EXT_1		
;-----------------------------------------------------------------------------------------------	
;对遥控信号的9000微秒的初始低电平信号的识别。
	
CONREM:		MOV 	R4,#10
SB: 		NOP
		NOP
		ACALL	D882		;定时882微秒,即数65536-64654=882
REM2:		MOV	C,P3.2
		NOP
		NOP
		JC	BUFF		;延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序
		NOP
		NOP
		DJNZ	R4,SB		;重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序
;-----------------------------------------------------------------------------------------------	
;对遥控信号的4500微秒的高电平信号的识别

		NOP
		NOP
		MOV	R4,#20
		JNB 	P3.2,$		;等待4.5毫秒高电平引导脉冲
RT6:		MOV	R7,#100		;延时201微秒
		DJNZ	R7,$
		NOP
		NOP
REM3:		MOV	C,P3.2
		JNC	EXT_1
		DJNZ	R4,RT6
		NOP
		NOP
		JB	P3.2,$
		NOP
		NOP
;-----------------------------------------------------------------------------------------------	
;以下是解码部分,解32位码
		
REM4:		MOV 	R0,#1AH 	;设定1AH为起始RAM区
		MOV 	R4,#4 
PP: 		MOV 	R7,#8
JJJJ: 		JNB 	P3.2,$		;等待地址码第一位的高电平信号
		NOP
		NOP
		ACALL	D882		;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
REM6:		MOV 	C,P3.2		;将P3.2引脚此时的电平状态0或1存入C中
		NOP
		NOP
		JNC 	UUU		;如果为0就跳转到UUU
		NOP
		NOP
		JB 	P3.2,$		;如果为1就等待高电平信号结束
UUU: 		NOP
		NOP
		MOV 	A,@R0		;将R0中地址的给A
		RRC 	A		;将C中的值0或1移入A中的最低位
		NOP
		NOP
		MOV 	@R0,A		;将A中的数暂时存放在R0中
		NOP
		NOP
		DJNZ 	R7,JJJJ		;接收地址码的高8位
		INC 	R0		;对R0中的值加1,换成下一个RAM
		NOP
		NOP
		DJNZ 	R4,PP 		;接收完16位地址码和8位数据码和8位数据反码,存放在1AH/1BH/1CH/1DH的RAM中
;-----------------------------------------------------------------------------------------------	
;代码识别

		MOV 	A,1AH
		XRL 	A,#20H		;20H为地址低8位的值于不同的遥控器有不同的地址值
		NOP
		NOP
		JNZ 	EXT_1
		MOV 	A,1BH
		XRL 	A,#0DFH		;0DF为地址高8位的值
		NOP
		NOP
		JNZ 	EXT_1
		MOV 	A,1CH
		CPL 	A
		XRL 	A,1DH		;如果地址码不对或接收到的数据码两单元不反向均当错码本程序当无键按下处理
		NOP
		NOP
		JNZ 	EXT_1
;-----------------------------------------------------------------------------------------------	
;将遥控代码转换成标准键值 0,1,2,3....

		MOV 	R4,#7 		;7为遥控器面板按键数
		MOV 	DPTR,#REM_TAB
LOOKUP_1: 	MOV 	A,R4
		NOP
		NOP
		MOVC 	A,@A+DPTR
		NOP
		NOP
		XRL 	A,1CH
		NOP
		NOP
		JZ 	REM_BAK0
		DJNZ 	R4,LOOKUP_1
		MOV 	TAB_KEY,#0FFH
		SJMP	EXT_1
REM_BAK0: 	DEC	R4
		MOV 	TAB_KEY,R4 	;R4中的值即为标准的键值
EXT_1:		SETB	P3.2
		CLR	RS0
		SETB	EX0
		POP	PSW
		POP	ACC
		RETI
;-----------------------------------------------------------------------------------------------	
;遥控器按键代码

REM_TAB:	DB   00H,   17H,   55H,   11H,   02H,    01H,     12H,     04H
		;           高音   低音   响度   音量+   音量-   输入选择  静音
		
;====================================================================================
;定时882微秒子程序
	
D882:		MOV 	R6,#20 	;延时子程序1,精确延时882微秒
DD1: 		MOV 	R5,#20
		DJNZ 	R5,$
		DJNZ 	R6,DD1 
		RET
	
;-----------------------------------------------------------------------------------------------	
;定时4740微秒子程序
	
D4740:		MOV 	R6,#10 		;延时子程序2,精确延时4740微秒
DD2: 		MOV 	R5,#235
		DJNZ 	R5,$
		DJNZ 	R6,DD2 
		RET

;-----------------------------------------------------------------------------------------------	
;判断在118毫秒内是否有连发码

AA:		MOV 	R0,#25
XX:		ACALL 	D4740		;精确定时4740微秒
REM8:		JNB 	P3.2,HH		;跳转到判断连发代码是否正确的程序段
		DJNZ 	R0,XX
EXT_3:		CLR	BIT_REM		;无连发码BIT_REM为0
EXT_2:		NOP
		NOP
		RET
;-----------------------------------------------------------------------------------------------	
;连发码判断程序

HH:		MOV 	R7,#4
S: 		NOP
		NOP
		ACALL	D882		;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
REM10:		NOP
		NOP
		JB 	P3.2,EXT_3	;延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序
		DJNZ 	R7,S		;重复4次,目的是确认连发码的低电平信号波形
		JNB 	P3.2,$		;等待高电平
		SETB	BIT_REM		;有连发码BIT_REM为1
		NOP
		NOP
		SJMP 	EXT_2
;====================================================================================

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -