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

📄 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
;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:
	clrf	pwmduty		;clear PWM DUTY
        bcf	s_motor		;Stop Small MOTOR
	bcf     f_autled1       ;TURN AUTO LED OFF DURING SETTING
	bsf     f_dbcpb         ;INCLUDE FIRE BUTTON DEBOUNCE

auto_lp1:
        bsf	PCLATH,3
	call	readport
	bcf	PCLATH,3
	
        call	read_sen
        nop
        call	scalesen

	bsf	PCLATH,3
	call    p_timer
	bcf	PCLATH,3
	
	btfss   f_keystb        ;WAIT UNTIL KEY STABLE
	goto    auto_lp1
	btfsc   auto_bit        ;EXIT IF AUTO BUTTON RELEASED
	goto    auto_end1
	bsf	PCLATH,3
	call    countkey
	bcf	PCLATH,3
	btfsc	STATUS,Z	;skpnz;LOOP BACK IF NO FIRE KEY DETECTED
	goto    auto_lp1
	sublw   0x01             ;LOOP BACK IF MORE THAN ONE KEY PRESSED
	btfss	STATUS,Z	;skpz
	goto    auto_lp1
;        
	movf   	pb_old0,W         ;PB_AUTO = !(PB_OLD XOR PB_AUTO)
	xorwf   pb_auto0,F      ;
	comf    pb_auto0,F
	movf   	pb_old1,W         
	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

auto_bit_1st_bit:
	movlw	b'00000001'
	movwf	temp_buf1

auto_bit_test_lp1:	
	movf	temp_buf1,W
	andwf	pb_old0,W
	btfss	STATUS,Z
	goto	auto_bit_shift1
	
	movf	temp_buf1,W
	andwf	pb_auto0,W
	btfss	STATUS,Z
	goto	led_blink
	goto	led_off

auto_bit_shift1:	
	bcf	STATUS,C
	rlf	temp_buf1,F
	btfss	STATUS,C		; 8 bit finish
	goto	auto_bit_test_lp1

auto_bit_2nd_test:
	movlw	b'00000001'
	movwf	temp_buf1
	movlw	d'6'			; LT to E2
	movwf	temp_buf2

auto_bit_test_lp2:	
	movf	temp_buf1,W
	andwf	pb_old1,W
	btfss	STATUS,Z
	goto	auto_bit_shift2
	
	movf	temp_buf1,W
	andwf	pb_auto1,W
	btfss	STATUS,Z
	goto	led_blink
	goto	led_off

auto_bit_shift2:	
	bcf	STATUS,C
	rlf	temp_buf1,F
	decfsz	temp_buf2,F
	goto	auto_bit_test_lp2
	goto	pa_wait_lp
	
;
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

        bsf	PCLATH,3
	call	readport
	bcf	PCLATH,3
        	
        call	read_sen
        nop
        call	scalesen

	bsf	PCLATH,3
	call    p_timer
        bcf	PCLATH,3

	btfss   f_keystb        ;WAIT UNTIL KEY STABLE
	goto    pa_wait_lp
	btfsc   auto_bit        ;EXIT IF AUTO BUTTON RELEASED
	goto    auto_end1
        bsf	PCLATH,3
	call    countkey
        bcf	PCLATH,3
	
	btfss	STATUS,Z	;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
	btfss	STATUS,Z	;skpz
	goto    auto_end2
	tstf    pb_auto1
	btfss	STATUS,Z	;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:
	bsf	pwmctrl,7 	;enable PWM
	return








	
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -