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

📄 5048.asm

📁 完整功放的控制程序
💻 ASM
字号:

     	P_REMOTE	BIT	P3.5	;*** VOL+ 输入脚
       	IBC_VOLS	BIT	P2.0	;*** VOL- 输入脚
       	
	EXTRN	BIT(ICW2_FLG)     	;正转到位标志位(*作为函数返回值), 开机时清0 !!!
	EXTRN	BIT(ICCW2_FLG)           ;反转到位标志位(*作为函数返回值), 开机时清0 !!!
	EXTRN	BIT(ICW1_FLG)      	;正转起始标志位, 		  开机时清0 !!!
	EXTRN	BIT(ICCW1_FLG)           ;反转起始标志位, 		  开机时清0 !!!

	EXTRN	DATA(IROTE_DIRECT)       ;=1 为正向,=2为反向, 方向暂存

       	
	EXTRN	DATA(RKEY_NUM)          ;现键值寄存
	EXTRN	BIT(B_RKEY)          	;有remote key时置1, 注:主程序检测该位后清0

	EXTRN	DATA(RKEY_SPEED)     	;连发灵敏度计数, 开机时初始化
	EXTRN	DATA(RKEY_KEEP)     	;连发的监控计时数


	;遥控完整读入的4个字节存放数组  uchar rmbyte_in[4]
	EXTRN	DATA(RMBYTE_IN)    	;第1字节 -- 用户码1存放 	,RMBYTE_IN
					;第2字节 -- 用户码2存放		,RMBYTE_IN+01H
					;第3字节 -- 键码存放		,RMBYTE_IN+02H
					;第4字节 -- 键码的反码存放	,RMBYTE_IN+03H


	;************ 公共变量定义 ****************
	PUBLIC	GET_REMOTE

	;************** 常数定义 ******************
	USER_CODE1    EQU   20H         ;remote user_code low 8bit(用户码1)
	USER_CODE2    EQU   0DFH        ;remote user_code high 8bit(用户码2)

	CANT_FIND     EQU   0AEH        ;remote key not find(无键标识)
	N_RKEY_KEEP   EQU   02H        	;允许连发的停顿时间 0.2ms

;;====================================================================
;;		REMOTE	READ
;;====================================================================
REMO_READ:
		CLR	EA
		CLR	ERR_DATA
READ_9MS:
		MOV	TH0,#00H
		MOV	TL0,#00H
		SETB	TR0
JUDGE2:
		MOV	A,TH0
		CJNE	A,#4,GREAT2		;;2MS
GREAT2:
		JNC	REMO_EXIT		;; T>2MS EXIT
		SETB	P_REMOTE
		NOP
		JNB	P_REMOTE,JUDGE2		;;P_REMOTE=0 WAIT
		MOV	TH0,#0H
		MOV	TL0,#0H
JUDGE5:
		MOV	A,TH0
		CJNE	A,#04H,GREAT2		;;~=1MS;;06H=1.536MS
GREAT2:
		JNC	REMO_EXIT
		JNB	P_REMOTE,JUDGE5
		JNB	F_REMOTE_P,REMO_EXIT
		CLR	TR0
		MOV	PRO_K_DELAY,#0FH
		LJMP	REMO_PRO
NEW_JUD:
		CLR	ERR_DATA
CODE1_READ:
		LCALL	READ_DATA
		JB	ERR_DATA,REMO_EXIT
		MOV	A,REMO_BUF
CHECK_CUS:
		CJNE	A,#CUS_CODE,REMO_EXIT
CODE2_READ:
		LCALL	READ_DATA
		JB	ERR_DATA,REMO_EXIT
		MOV	A,REMO_BUF
CHECK_CODE:
		CPL	A
		CJNE	A,#CUS_CODE,REMO_EXIT
DATA1_READ:
		LCALL	READ_DATA
		JB	ERR_DATA,REMO_EXIT
		MOV	REMO_DATA,REMO_BUF
DATA2_READ:
		LCALL	READ_DATA
		JB	ERR_DATA,REMO_EXIT
		MOV	A,REMO_BUF
CHECK_DATA:
		CPL	A
		CJNE	A,REMO_DATA,REMO_EXIT
		CLR	TR0
		CLR	F_REMOTE_P
		SETB	RK_S
		SJMP	REMO_PRO
REMO_EXIT:
		SETB	ERR_DATA
		CLR	TR0
		RET
;;====================================================================
;;		READ	DATA
;;====================================================================
READ_DATA:
		MOV 	B,#08H
READ_BYTE:
		CLR	TR0
		MOV	TH0,#00H		;;256US TIMING
		MOV	TL0,#00H		;;1US TIMING
		SETB	TR0			;;START CT1
		JB	P_REMOTE,ERR_READ
JUDGE1:
		MOV	A,TH0
		CJNE	A,#04H,F_READ		;;1.0--1.3MS
F_READ:
		JNC	ERR_READ		;;>=1.2MS ERR_READ
		JNB	P_REMOTE,JUDGE1
		MOV	TH0,#0H
		MOV	TL0,#0H
JUDGE2:
		MOV	A,TH0
		CJNE	A,#09H,F1_READ		;;2.0--2.3MS
F1_READ:
		JNC	ERR_READ		;;>=2.3MS ERR_READ
		JB	P_REMOTE,JUDGE2
		MOV	A,TH0			;;1.0--1.3MS
		CJNE	A,#04H,F0_READ		;;<=1.0MS READ0
F0_READ:
		JC	READ0
READ1:
		SETB  	C			;;1.0<T<2.3 READ1
		SJMP	WRITEBUF
READ0:
		CLR	C
WRITEBUF:
		MOV	A,REMO_BUF
		RRC	A
		MOV 	REMO_BUF,A
		DJNZ	B,READ_BYTE
		RET
ERR_READ:
		SETB	ERR_DATA
		RET

⌨️ 快捷键说明

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