⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 auto.asm

📁 VCP201_CODE is a FPGA source code.
💻 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 + -