?? remote.asm
字號:
;******************************* 遙控信號接收子程序集 ****************************
;占用: ACC, R0, R1, R2, R3, TIME0中斷
;遙控發送以4個字節為一組, 長按按鍵時, 4個--4個字節連發, 每組(4字節為一組)之間只有3.5ms的間隙
;第1與2字節為用戶碼, 固定不變(用于區別其它的遙控器)
;第3字節為鍵碼, 第4字節為鍵碼的取反碼(用于校驗)
;注:鍵碼不等同于需要的鍵值
;************* 外部變量說明 ********************************
BC_REMOTE BIT P3.3 ;***** 遙控信號讀入腳 *****
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 BC_REMOTE
NOP
NOP
NOP
JNB BC_REMOTE, 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 + -