?? idt.asm
字號:
;******************************* 遙控信號接收子程序集 ****************************
;占用: ACC, R0, R1, R2, R3, TIME0中斷
;遙控發(fā)送以4個(gè)字節(jié)為一組, 長按按鍵時(shí), 4個(gè)--4個(gè)字節(jié)連發(fā), 每組(4字節(jié)為一組)之間只有3.5ms的間隙
;第1與2字節(jié)為用戶碼, 固定不變(用于區(qū)別其它的遙控器)
;第3字節(jié)為鍵碼, 第4字節(jié)為鍵碼的取反碼(用于校驗(yàn))
;注:鍵碼不等同于需要的鍵值
;************* 外部變量說明 ********************************
BC_REMOTE BIT P3.3 ;***** 遙控信號讀入腳 *****
IBC_VOLA BIT P3.5 ;*** VOL+ 輸入腳
IBC_VOLS BIT P2.0 ;*** VOL- 輸入腳
EXTRN BIT(ICW2_FLG) ;正轉(zhuǎn)到位標(biāo)志位(*作為函數(shù)返回值), 開機(jī)時(shí)清0 !!!
EXTRN BIT(ICCW2_FLG) ;反轉(zhuǎn)到位標(biāo)志位(*作為函數(shù)返回值), 開機(jī)時(shí)清0 !!!
EXTRN BIT(ICW1_FLG) ;正轉(zhuǎn)起始標(biāo)志位, 開機(jī)時(shí)清0 !!!
EXTRN BIT(ICCW1_FLG) ;反轉(zhuǎn)起始標(biāo)志位, 開機(jī)時(shí)清0 !!!
EXTRN DATA(IROTE_DIRECT) ;=1 為正向,=2為反向, 方向暫存
EXTRN DATA(RKEY_NUM) ;現(xiàn)鍵值寄存
EXTRN BIT(B_RKEY) ;有remote key時(shí)置1, 注:主程序檢測該位后清0
EXTRN DATA(RKEY_SPEED) ;連發(fā)靈敏度計(jì)數(shù), 開機(jī)時(shí)初始化
EXTRN DATA(RKEY_KEEP) ;連發(fā)的監(jiān)控計(jì)時(shí)數(shù)
;遙控完整讀入的4個(gè)字節(jié)存放數(shù)組 uchar rmbyte_in[4]
EXTRN DATA(RMBYTE_IN) ;第1字節(jié) -- 用戶碼1存放 ,RMBYTE_IN
;第2字節(jié) -- 用戶碼2存放 ,RMBYTE_IN+01H
;第3字節(jié) -- 鍵碼存放 ,RMBYTE_IN+02H
;第4字節(jié) -- 鍵碼的反碼存放 ,RMBYTE_IN+03H
;************ 公共變量定義 ****************
PUBLIC GET_REMOTE
;************** 常數(shù)定義 ******************
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(無鍵標(biāo)識)
N_RKEY_KEEP EQU 02H ;允許連發(fā)的停頓時(shí)間 0.2ms
;=============================== 公共子程序 (可被C調(diào)用) ===============================
;*************** 遙控信號檢測, 鍵值讀入 ***************
;******************************************************
;注!!!: 只當(dāng)主程序中檢測到BC_REMOTE腳有低電平時(shí)才調(diào)用該字程序, 然后再進(jìn)入鍵功能程序.
;返回: RKEY_NUM(鍵值)代表的功能參考-- 表RKEY_TABLE, 值=#CANT_FIND (#0AEH)即為無按鍵
; B_RKEY 有remote key時(shí)置1, 注:主程序檢測該位后清0
;子程序調(diào)用分辨率要在1ms之內(nèi)
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, 當(dāng)是連發(fā)時(shí)
SJMP LBL_P34 ;above is the start flag, 當(dāng)是起始信號時(shí)
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 ;后兩字節(jié)是互補(bǔ)編碼,若不是即是出錯(cuò)
; MOV R0,#48D ;******鍵值表為0-38 ******
; MOV DPTR,#RKEY_TABLE
; MOV RKEY_SPEED, #00H ;remote 連發(fā)速度, 先設(shè)置為最慢
;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 ****** 連發(fā)的 *******
MOV RKEY_KEEP, #N_RKEY_KEEP ;允許連發(fā)的停頓時(shí)間 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 ;允許連發(fā)的停頓時(shí)間 0.2s
SETB B_RKEY ;有按鍵
RET
;================================= 文件內(nèi)部子程序 ================================
; 鍵碼 功能名稱 鍵值
;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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -