📄 dbc.asm
字号:
;****************************************************************************
; DBC.asm 2109 ASIC
;FUNCTION: THIS ROUTINE IS TO CHECK DEBOUNCE COUNTER AND SET F_KEYSTB FLAG.
; NORMALLY ONLY THE FUNCTION BUTTONS ARE CHECKED UNLESS THE FLAG
; F_DBCPB IS SET, THE FIRE BUTTON WILL THEN BE DEBOUNCED ALSO.
;OUTPUT: F_KEYSTB WILL BE SET IF DEBOUNCE TIME IS UP, OTHERWISE THE TIMER
; WILL BE UPDATED.
;****************************************************************************
;
p_dbc:
swapf fn_button,W ;STORE THE FN_BUTTON TO BUFFER TO CHECK
subwf fn_button,W ;IF THE UPPER AND THE LOWER DIGIT EQUAL
btfss STATUS,Z ;IF EQUAL CHECK FIRE BUTTON NEED UPDATE
goto pdbcreld ;IF NOT EQUAL, RELOAD TIMER
btfss f_dbcpb ;
goto pdbctime ;IF NOT INCLUDE FIRE BUTTON, UPDATE TIMER
swapf pb_l3_r3,W ;STORE THE FN_BUTTON TO BUFFER TO CHECK
subwf pb_l3_r3,W ;IF THE UPPER AND THE LOWER DIGIT EQUAL
btfss STATUS,Z ;IF EQUAL CHECK FIRE BUTTON NEED UPDATE
goto pdbcreld ;IF NOT EQUAL, RELOAD TIMER
movf pb_raw0,W ;COMPARE LOWER FIRE BUTTON RAW WITH OLD
subwf pb_old0,W
btfss STATUS,Z ; skpz
goto pdbcreld ;IF NOT EQUAL, RELOAD TIMER
movf pb_raw1,W ;COMPARE HIGHER FIRE BUTTON RAW WITH OLD
subwf pb_old1,W
btfss STATUS,Z ; skpz
goto pdbcreld ;IF NOT EQUAL, RELOAD TIMER
pdbctime:
decfsz tmr_dbc,F ;DECREMENT TIMER AND UPDATE F_KEYSTB IF NEED
goto pdb_2
bsf f_keystb
goto pdb_1
pdbcreld:
bcf f_keystb
movlw 0x0f ;LOAD THE UPPER DIGIT TO LOWER DIGIT
iorwf fn_button,F ;WHICH MEANS LOAD RAW TO OLD
iorwf pb_l3_r3,F
swapf fn_button,W
andwf fn_button,F ;NOW FN_BUTTON OLD DIGIT = RAW DIGIT
swapf pb_l3_r3,W
andwf pb_l3_r3,F ;NOW FN_BUTTON OLD DIGIT = RAW DIGIT
btfss f_dbcpb ;ALSO UPDATE FIRE BUTTON OLD TO RAW
goto pdb_1 ;IF F_DBCPB IS SET
movf pb_raw0,W
movwf pb_old0
movf pb_raw1,W
movwf pb_old1
pdb_1:
movf dur_dbc,W ;RELOAD TIMER WITH DEBOUNCE CONSTANT
movwf tmr_dbc
pdb_2:
return
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -