📄 dbc.asm
字号:
;****************************************************************************
;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.
;FILENAME: C:\PROJECTS\SV363\DBC.ASM
;ROUTINE: P_DBC
;INPUT: F_DBCPB
;OUTPUT: F_KEYSTB WILL BE SET IF DEBOUNCE TIME IS UP, OTHERWISE THE TIMER
; WILL BE UPDATED.
;RAM AFFECTED: NIL
;SUBROUTINE CALL: NIL
;****************************************************************************
;
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
skpz ;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
movfw pb_raw0 ;COMPARE LOWER FIRE BUTTON RAW WITH OLD
subwf pb_old0,W
skpz
goto pdbcreld ;IF NOT EQUAL, RELOAD TIMER
movfw pb_raw1 ;COMPARE HIGHER FIRE BUTTON RAW WITH OLD
subwf pb_old1,W
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
;------ added on 12 Oct 99
; bcf f_auto_en
; bcf f_auto_dis
; bcf f_auto_press
; btfss auto_en_bit
; bsf f_auto_en
; btfss auto_dis_bit
; bsf f_auto_dis
btfss f_dbcpb
goto pdb_1
; btfss pb_raw1,7
; bsf f_auto_press
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
swapf fn_button,W
andwf fn_button,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
movfw pb_raw0
movw pb_old0
movfw pb_raw1
movw pb_old1
pdb_1:
movfw dur_dbc ;RELOAD TIMER WITH DEBOUNCE CONSTANT
movw tmr_dbc
pdb_2:
return
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -