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

📄 idt.asm

📁 遥控信号的接收程序
💻 ASM
字号:
;******************************* 遥控信号接收子程序集 ****************************
;占用:	ACC, R0, R1, R2, R3, TIME0中断
;遥控发送以4个字节为一组, 长按按键时, 4个--4个字节连发, 每组(4字节为一组)之间只有3.5ms的间隙
;第1与2字节为用户码, 固定不变(用于区别其它的遥控器)
;第3字节为键码, 第4字节为键码的取反码(用于校验)
;注:键码不等同于需要的键值


       ;************* 外部变量说明 ********************************
       	BC_REMOTE	BIT	P3.3	;***** 遥控信号读入脚 *****

	IBC_VOLA	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


;=============================== 公共子程序 (可被C调用) ===============================
;*************** 遥控信号检测, 键值读入 ***************
;******************************************************
;注!!!: 只当主程序中检测到BC_REMOTE脚有低电平时才调用该字程序, 然后再进入键功能程序.
;返回: RKEY_NUM(键值)代表的功能参考-- 表RKEY_TABLE, 值=#CANT_FIND (#0AEH)即为无按键
;      B_RKEY   有remote key时置1, 注:主程序检测该位后清0
;子程序调用分辨率要在1ms之内


GET_REMOTE:
      SETB  IBC_VOLA
      NOP
      NOP
      NOP 
      JNB   IBC_VOLA, GET_REMOTE_P0
      RET

GET_REMOTE_P0:
      MOV   TH0,#000H
      MOV   TL0,#000H

      MOV   A,TMOD
      ANL   A,#0F0H
      SETB  ACC.0
      MOV   TMOD,A    			;timer/counter0 16bit timer/counter

      MOV   A, #0FFH
LBL_P25:
      JNB   BC_REMOTE,LBL_P256      	;get remote key
      DJNZ  ACC, LBL_P25
      RET
      
LBL_P256:
      SETB  TR0 
LBL_P28:
      MOV   A,TH0
      CJNE  A,#014H,LBL_P26   		;10ms
LBL_P26:
      JNC   LBL_P27   			;if >10ms,regard this is a nosie
      JNB   BC_REMOTE,LBL_P28      	;get remote key
      CJNE  A,#005H,LBL_P29   		;2.5ms
LBL_P29:
      JC    LBL_P27   			;if <2.5ms,regard this is a nosie
      MOV   TH0,#000H 
      MOV   TL0,#000H 
LBL_P31:
      MOV   A,TH0
      CJNE  A,#00AH,LBL_P30 
LBL_P30:
      JNC   LBL_P27   			;if >5ms,regard this is a nosie
      JB    BC_REMOTE,LBL_P31      	;get remote key
      CJNE  A,#007H,LBL_P32 
LBL_P32:
      JC    LBL_P33   			;if<3.5ms, 当是连发时
      SJMP  LBL_P34   			;above is the start flag, 当是起始信号时 
LBL_P27:
      RET


LBL_P34:				;****** 是新按下的******
      CLR   A 				;>3.5ms and <5ms
      MOV   R2,#004H  			;4 BYTE
      MOV   R0,#RMBYTE_IN        	;用户码存放地址1
LBL_P41:
      MOV   R1,#008H  			;8bit
LBL_P40:
      MOV   TH0,#000H
      MOV   TL0,#000H 
LBL_P36:
      MOV   R3,TH0
      CJNE  R3,#002H,LBL_P35 
LBL_P35:
      JNC   LBL_P27   			;>1ms
      JNB   BC_REMOTE,LBL_P36      	;get remote key
      MOV   TH0,#000H 
      MOV   TL0,#000H 
LBL_P38:
      MOV   R3,TH0
      CJNE  R3,#004H,LBL_P37 
LBL_P37:
      JNC   LBL_P27   			;>2ms
      JB    BC_REMOTE,LBL_P38      	;get remote key
      CJNE  R3,#002H,LBL_P39  		;>1ms is bit 0,<1ms is bit 1
LBL_P39:
      CPL   C
      RRC   A 				;the data is low bit first
      DJNZ  R1,LBL_P40 
      MOV   @R0,A 
      INC   R0 
      DJNZ  R2,LBL_P41        		;32 bit

      MOV   A,RMBYTE_IN 
      CJNE  A,#USER_CODE1,LBL_P42 
      MOV   A,RMBYTE_IN+01H 
      CJNE  A,#USER_CODE2,LBL_P42 
      MOV   A,RMBYTE_IN+02H
      ADD   A,RMBYTE_IN+03H 
      CJNE  A,#0FFH,LBL_P42   		;后两字节是互补编码,若不是即是出错
;      MOV   R0,#48D          		;******键值表为0-38 ******
;      MOV   DPTR,#RKEY_TABLE
;      MOV   RKEY_SPEED, #00H   		;remote 连发速度, 先设置为最慢
;LBL_P46:
;      MOV   A,R0
;      MOVC  A,@A+DPTR 
;      CJNE  A,RMBYTE_IN+02H,LBL_P43    	;get the low code byte from the table
;      MOV   RKEY_NUM,R0       		;save the offset
       MOV   RKEY_NUM,RMBYTE_IN+02H
      LJMP  LBL_P44   			;get it
;LBL_P43:
;      MOV   A,R0
;      JZ    LBL_P45 
;      DEC   R0 
;      SJMP  LBL_P46 
;LBL_P45:
;      MOV   RKEY_NUM,#CANT_FIND       	;can't find the code
LBL_P42:
      RET




LBL_P33:				;<3.5ms CONTINUES ****** 连发的 *******
      MOV   RKEY_KEEP, #N_RKEY_KEEP	;允许连发的停顿时间 0.2ms
      DJNZ  RKEY_SPEED, LBL_P50 	;remote 灵敏度
LBL_P51:
      MOV   A,RKEY_NUM
      CJNE  A,#CANT_FIND,LBL_P48
LBL_P50:
      RET
LBL_P44:
      MOV   A,RKEY_NUM
      CJNE  A,#CANT_FIND,LBL_P48
      RET     				;can't find the code
LBL_P48:
LBL_P49:
      MOV   RKEY_KEEP, #N_RKEY_KEEP	;允许连发的停顿时间 0.2s
      SETB   B_RKEY			;有按键
      RET
      
;================================= 文件内部子程序 ================================
;	       键码	    功能名称      键值
;RKEY_TABLE:                 ;本表是SRS遥控器各遥控键值
;     DB        19H          ;MUTE	0
;     DB        15H          ;INPUT	1
;     DB        0bH          ;CH-MODE	2
;     DB        1dH          ;MIC1.VOL-	3
;     DB        0fH          ;MIC1.VOL+	4
;     DB        1eH          ;NIGHT	5
;     DB        09H          ;MIC2.VOL-	6 
;     DB        0dH          ;MIC2.VOL+	7
;     DB        11H          ;ECHO+	8
;     DB        12H          ;MIC.TRE-	9
;     DB        16H          ;MIC.TRE+	10
;     DB        0aH          ;ECHO-	11
;     DB        08H          ;MIC.BASS-	12
;     DB        1fH          ;MIC.BASS+  13
;     DB        1bH          ;DELAY      14
;     DB        17H          ;CEN.VOL+   15
;     DB        13H          ;SL.VOL+    16
;     DB        01H          ;SR.VOL+    17
;     DB        10H          ;CEN.VOL-   18
;     DB        04H          ;SL.VOL-    19
;     DB        18H          ;SR.VOL-    20
;     DB        00H	    ;TRE-       21	
;     DB        0CH	    ;TRE+       22	
;     DB        02H          ;DSP        23
;     DB        14H          ;BASS+      24
;     DB        03H          ;VOL+       25
;     DB        1AH          ;BAL R      26
;     DB        06H          ;BASS-      27
;     DB        07H          ;MVOL -     28
;     DB        0EH          ;BAL L      29

⌨️ 快捷键说明

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