📄 auto.asm
字号:
;****************************************************************************
;FUNCTION: THIS SUBROUTINE IS TO DETECT AND UPDATE AUTO FIRE FUNCTION FOR
; EACH BUTTON. WHEN AUTO FIRE FOR ANY ONE OF THE BUTTON IS SET, THE
; AUTO LED FLAG, F_AUTLED1, WILL BE SET. WHEN AUTO BUTTON IS PRESSED
; THE LED WILL BE OFF TO ALLOW AUTO FIRE STATUS FOR EACH BUTTON TO
; SEEN. PRESSING A FIRE BUTTON WILL TOGGLE AUTO FIRE FUNCTION OF
; THAT BUTTON AND THE STATUS WILL BE DISPLAYED AS LONG AS THE BUTTON
; IS PRESSED. THE STATUS WILL BE AS BELOW:-
; AUTO FIRE ON - AUTO LED FLASHING
; AUTO FIRE OFF - AUTO LED EXTINGUISHED
; THE CORRESPONDING AUTO FIRE FLAG OF THAT BUTTON WILL BE UPDATED.
; ON EXIT, THE AUTO LED WILL BE DISPLAYED AS ON OR OFF. IF IT IS ON
; THERE IS AT LEAST ONE BUTTON SET TO AUTO FIRE. IF IT IS OFF, THERE
; IS NO AUTO FIRE SET. AT POWER ON, ALL AUTO FIRE WILL BE DISABLE.
;FILENAME: C:\PROJECTS\SV363\AUTO.ASM
;ROUTINE NAME: PROCAUTO
;INPUT:
;OUTPUT: AUTO FIRE FLAGS UPDATED AS:-
; F_AUTLED1 = 0 --> NO AUTO FIRE FOR ANY FIRE BUTTON
; F_AUTLED1 = 1 --> AT LEAST ONE BUTTON HAS BEEN SET TO AUTO
; F_AUTLED2 = 0 --> AUTO LED TO BE PERMANENTLY ON
; F_AUTLED2 = 1 --> AUTO LED TO BE FLASHING
; PB_AUTO0, PB_AUTO1 EACH BIT REPRESENTS AUTO FIRE STATUS OF
; EACH BUTTON, 1 = AUTO FIRE SET, 0 = AUTO FIRE NO SET
;RAM AFFECTED: NIL
;SUBROUTINE CALL: P_TIMER, COUNTKEY
;****************************************************************************
;
procauto:
bcf f_autled1 ;TURN AUTO LED OFF DURING SETTING
bsf f_dbcpb ;INCLUDE FIRE BUTTON DEBOUNCE
auto_lp1:
call readport
call p_timer
btfss f_keystb ;WAIT UNTIL KEY STABLE
goto auto_lp1
btfsc auto_bit ;EXIT IF AUTO BUTTON RELEASED
goto auto_end1
call countkey
skpnz ;LOOP BACK IF NO FIRE KEY DETECTED
goto auto_lp1
sublw 0x1 ;LOOP BACK IF MORE THAN ONE KEY PRESSED
skpz
goto auto_lp1
;
movfw pb_old0 ;PB_AUTO = !(PB_OLD XOR PB_AUTO)
xorwf pb_auto0,F ;
comf pb_auto0,F
movfw pb_old1
xorwf pb_auto1,F
comf pb_auto1,F
bcf pb_auto1,6 ;CLEAR BITS 6 & 7 OF PB_AUTO1 AS THEY ARE
bcf pb_auto1,7 ;DUMMY BITS
; ;LOCATE WHICH BIT CLEAR
btfsc pb_old0,0 ;TEST BIT TO SEE IF PRESSED
goto bit_test1 ;TEST NEXT BIT
btfsc pb_auto0,0 ;SEE IT THE CORRESPONDING AUTO BIT ON
goto led_blink ;TURN LED BLINK IF PRESSED IS NOW AUTO OFF
goto led_off ;TURN LED OFF IF PRESSED IS NOW AUTO OFF
bit_test1:
btfsc pb_old0,1 ;TEST BIT TO SEE IF PRESSED
goto bit_test2 ;TEST NEXT BIT
btfsc pb_auto0,1 ;SEE IT THE CORRESPONDING AUTO BIT ON
goto led_blink ;TURN LED BLINK IF PRESSED IS NOW AUTO OFF
goto led_off ;TURN LED OFF IF PRESSED IS NOW AUTO OFF
bit_test2:
btfsc pb_old0,2 ;TEST BIT TO SEE IF PRESSED
goto bit_test3 ;TEST NEXT BIT
btfsc pb_auto0,2 ;SEE IT THE CORRESPONDING AUTO BIT ON
goto led_blink ;TURN LED BLINK IF PRESSED IS NOW AUTO OFF
goto led_off ;TURN LED OFF IF PRESSED IS NOW AUTO OFF
bit_test3:
btfsc pb_old0,3 ;TEST BIT TO SEE IF PRESSED
goto bit_test4 ;TEST NEXT BIT
btfsc pb_auto0,3 ;SEE IT THE CORRESPONDING AUTO BIT ON
goto led_blink ;TURN LED BLINK IF PRESSED IS NOW AUTO OFF
goto led_off ;TURN LED OFF IF PRESSED IS NOW AUTO OFF
bit_test4:
btfsc pb_old0,4 ;TEST BIT TO SEE IF PRESSED
goto bit_test5 ;TEST NEXT BIT
btfsc pb_auto0,4 ;SEE IT THE CORRESPONDING AUTO BIT ON
goto led_blink ;TURN LED BLINK IF PRESSED IS NOW AUTO OFF
goto led_off ;TURN LED OFF IF PRESSED IS NOW AUTO OFF
bit_test5:
btfsc pb_old0,5 ;TEST BIT TO SEE IF PRESSED
goto bit_test6 ;TEST NEXT BIT
btfsc pb_auto0,5 ;SEE IT THE CORRESPONDING AUTO BIT ON
goto led_blink ;TURN LED BLINK IF PRESSED IS NOW AUTO OFF
goto led_off ;TURN LED OFF IF PRESSED IS NOW AUTO OFF
bit_test6:
btfsc pb_old0,6 ;TEST BIT TO SEE IF PRESSED
goto bit_test7 ;TEST NEXT BIT
btfsc pb_auto0,6 ;SEE IT THE CORRESPONDING AUTO BIT ON
goto led_blink ;TURN LED BLINK IF PRESSED IS NOW AUTO OFF
goto led_off ;TURN LED OFF IF PRESSED IS NOW AUTO OFF
bit_test7:
btfsc pb_old0,7 ;TEST BIT TO SEE IF PRESSED
goto bit_test8 ;TEST NEXT BIT
btfsc pb_auto0,7 ;SEE IT THE CORRESPONDING AUTO BIT ON
goto led_blink ;TURN LED BLINK IF PRESSED IS NOW AUTO OFF
goto led_off ;TURN LED OFF IF PRESSED IS NOW AUTO OFF
bit_test8:
btfsc pb_old1,0 ;TEST BIT TO SEE IF PRESSED
goto bit_test9 ;TEST NEXT BIT
btfsc pb_auto1,0 ;SEE IT THE CORRESPONDING AUTO BIT ON
goto led_blink ;TURN LED BLINK IF PRESSED IS NOW AUTO OFF
goto led_off ;TURN LED OFF IF PRESSED IS NOW AUTO OFF
bit_test9:
btfsc pb_old1,1 ;TEST BIT TO SEE IF PRESSED
goto bit_test10 ;TEST NEXT BIT
btfsc pb_auto1,1 ;SEE IT THE CORRESPONDING AUTO BIT ON
goto led_blink ;TURN LED BLINK IF PRESSED IS NOW AUTO OFF
goto led_off ;TURN LED OFF IF PRESSED IS NOW AUTO OFF
bit_test10:
btfsc pb_old1,2 ;TEST BIT TO SEE IF PRESSED
goto bit_test11 ;TEST NEXT BIT
btfsc pb_auto1,2 ;SEE IT THE CORRESPONDING AUTO BIT ON
goto led_blink ;TURN LED BLINK IF PRESSED IS NOW AUTO OFF
goto led_off ;TURN LED OFF IF PRESSED IS NOW AUTO OFF
bit_test11:
btfsc pb_old1,3 ;TEST BIT TO SEE IF PRESSED
goto bit_test12 ;TEST NEXT BIT
btfsc pb_auto1,3 ;SEE IT THE CORRESPONDING AUTO BIT ON
goto led_blink ;TURN LED BLINK IF PRESSED IS NOW AUTO OFF
goto led_off ;TURN LED OFF IF PRESSED IS NOW AUTO OFF
bit_test12:
btfsc pb_old1,4 ;TEST BIT TO SEE IF PRESSED
goto bit_test13 ;TEST NEXT BIT
btfsc pb_auto1,4 ;SEE IT THE CORRESPONDING AUTO BIT ON
goto led_blink ;TURN LED BLINK IF PRESSED IS NOW AUTO OFF
goto led_off ;TURN LED OFF IF PRESSED IS NOW AUTO OFF
bit_test13:
btfsc pb_auto1,5 ;SEE IT THE CORRESPONDING AUTO BIT ON
goto led_blink ;TURN LED BLINK IF PRESSED IS NOW AUTO OFF
goto led_off ;TURN LED OFF IF PRESSED IS NOW AUTO OFF
;
led_blink:
bsf f_autled2 ;F_AUTLED2 = 1 & F_AUTLED1 = 1 => BLINK
bsf f_autled1
goto pa_wait_lp
led_off:
bcf f_autled1 ;F_AUTLED1 = 0 => LED OFF
;
pa_wait_lp: ;WAIT UNTIL FIRE BUTTON OFF
call readport
call p_timer
btfss f_keystb ;WAIT UNTIL KEY STABLE
goto pa_wait_lp
btfsc auto_bit ;EXIT IF AUTO BUTTON RELEASED
goto auto_end1
call countkey
skpz ;LOOP BACK IF NO FIRE KEY DETECTED
goto pa_wait_lp
bcf f_autled1 ;TURN LED OFF WHEN FIRE BUTTON RELEASED
goto auto_lp1
;
auto_end1:
bcf f_autled2 ;STOP LED BLINKING AND SET TO PERMANENTLY ON
tstf pb_auto0
skpz
goto auto_end2
tstf pb_auto1
skpz
goto auto_end2
bcf f_autled1 ;DISABLE LED AND SHOW THAT NO AUTO SET
goto auto_end3
auto_end2:
bsf f_autled1 ;ENABLE LED TO INDICATE AUTO FIRE SET
auto_end3:
return
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -