dbc.asm

来自「VCP201_CODE is a FPGA source code.」· 汇编 代码 · 共 59 行

ASM
59
字号
;****************************************************************************
; 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 + =
减小字号Ctrl + -
显示快捷键?