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

📄 led.asm

📁 VCP201_CODE is a FPGA source code.
💻 ASM
字号:
;****************************************************************************
;FUNCTION: THIS SUBROUTINE IS TO CONTROL THE PROGRAM LED.  THE PROGRAM LED
;          IS CONTROLLED BY EXAMINING THE PGM_CMD DATA.  THE ROUTINE IS 
;          BACKGROUND ACTIVATED AND REFRESHED EVERY 0.01 SECONDS.  WHEN THE
;          ROUTINE IS ACCESSED, THE TIMER IS UPDATED.  WHEN THE TIME IS UP
;          THE PGM_CMD IS SWAPPED TO GET THE NEXT STATUS.  THE COMMAND
;          CONTAINS TWO DIGITS, THE UPPER DIGIT IS THE NEXT COMMAND AND THE
;          LOWER DIGIT IS THE CURRENT COMMAND. EACH OF THE DIGITS IS DEFINED
;          SUCH THAT:-  BIT 3 = 0 -> LED ON, 1 -> LED OFF
;                       BIT 0 - 2 -> DURATION CONSTANT, 0 => FOREVER
;          THEREFORE, IF PGM_CMD = 88 ==> LED PERMANENT ON
;                        PGM_CMD = B3 ==> LED FLASHING
;                        PGM_CMD = A2 ==> LED FLASHING AT FASTER RATE               
;                        PGM_CMD = 00 ==> LED PERMANENT OFF
;                        PGM_CMD = 84 ==> LED FLASHES ONCE
;FILENAME: C:\PROJECTS\SV363\LED.ASM
;ROUTINE NAME: P_PGMLED
;INPUT: PGM_CMD (SEE ABOVE)
;OUTPUT: LED CONTROL
;RAM AFFECTED:
;SUBROUTINE CALL: NIL
;****************************************************************************
p_pgmled:
	bcf	STATUS,RP0
        decfsz  tmr_pled,F      ;DECREMENT TIMER
        return

        movlw   0x07            ;MASK THE UPPER 5 BITS TO GET THE CURRENT CMD
	bsf	STATUS,RP0
        andwf   pled_cmd,W      ;W NOW CONTAINS THE CURRENT TIMER DURATION
        swapf   pled_cmd,F      ;SWAP THE NEXT AND THE CURRENT COMMAND
	bcf	STATUS,RP0

        bcf     pled_img
        bsf	STATUS,RP0
        btfss   pled_cmd,7      ;TEST TO SEE THE LED SHOULD BE ON OR NOT
	goto	p_led
        bcf	STATUS,RP0
        bsf     pled_img

p_led:
	bcf	STATUS,RP0
        andlw   0xff            ;PERFORM A DUMMY OPERATION TO SEE IF W=0
	btfss	STATUS,Z	;       skpz
        goto    ppledend        ;IF W = TIMER NOT EQUAL 0, UPDATE TIMER
	bsf	STATUS,RP0
        swapf   pled_cmd,F      ;SWAP THE CURRENT CMD BACK => NO CHANGE
	bcf	STATUS,RP0	
        movlw   0x02             ;SET THE TIMER TO LOW VALUE TO ENABLE FAST
                                ;REFRESHING THE COMMAND
        movwf   tmr_pled        ;RELOAD TIMER
        return

ppledend:
        movwf    tmr_pled        ;BLOW UP THE TIMER BY 8 TIMES
	bcf	STATUS,C
        rlf     tmr_pled,F
        bcf	STATUS,C
        rlf     tmr_pled,F
        bcf	STATUS,C
        rlf     tmr_pled,F
        bcf	STATUS,RP0
        return




;****************************************************************************
;FUNCTION: THE SUBROUTINE IS TO TURN THE AUTO LED OFF, ON OR BLINKING.  THE 
;          F_AUTLED1 IS EXAMINED AND TURN THE AUTO LED ON OR OFF IF THE FLAG
;          IS SET OR CLEAR. THE AUTO LED WILL BLINK IF THE F_AUTLED2 IS 1.  
;          AND THE LED WILL BE PERMANENTLY ON IF THE F_AUTLED2 IS 0. THE AUTO
;          LED IS BLINKING AT ABOUT 3 PER SECOND AND IS CONTROLLED BY THE
;          TIMER, TMR_AUTO. THE RATE IS CONTROLLED BY SELECTING WHICH BIT IS
;          USED TO CONTROL THE BLINKING.  FOR EXAMPLE, IF THE THIRD BIT IS 
;          USED, THE LED WILL BLINK EVERY 7 COUNTS WHICH IS EQUAL TO ABOUT
;          0.14 SECONDS.  THIS ROUTINE USES BIT 4 AND THE RATE IS ABOUT 
;          3 BLINKS PER SECOND.
;FILENAME: C:\PROJECTS\SV363\LED.ASM
;ROUTINE NAME: P_AUTLED
;INPUT: NIL
;OUTPUT: SLOW LED CONTROL
;****************************************************************************
p_autled:
        btfsc   f_autled1       ;SEE IF LED TO BE ON        
        goto    p_auto1         ;PROCESS AUTO LED IF FLAG ON
        bcf     aled_img        ;TURN LED OFF IF FLAG OFF
        clrf    tmr_aled        ;CLEAR LED COUNTER
        return                  ;DO NOTHING IF FLAG F_AUTLED1 IS CLEAR
p_auto1:
        btfsc   f_autled2       ;SEE IF LED IS TO PERMANENTLY ON
        goto    p_auto2
        bsf     aled_img        ;TURN AUTO LED ON
        return
p_auto2:
        incf    tmr_aled,F      ;INCREMENT THE COUNTER UNTIL BIT 4 SET
        btfsc   tmr_aled,2      ;USE BIT 4 TO CONTROL LED
        goto    p_auto3
        bsf     aled_img        ;TURN AUTO LED ON IF BIT 4 = 0
        return
p_auto3:
        bcf     aled_img        ;TURN AUTO LED OFF IF BIT 4 = 1
        return


;------------------------------------------------------
; Name : 
; Parm : 
; Retn : 
; Desc : 
;-------------------------------------------------------
p_show_led:
	bcf	STATUS,RP0
        bcf     program_led  	;Off pgm LED
        btfsc   pled_img
        bsf     program_led	;On pgm LED 

        bcf     auto_led	;Off auto led
        btfsc   aled_img
        bsf     auto_led	;On auto LED
        
	btfsc	f_set_force
	goto	set_force_led

	bcf	mode_led1	;mode led (green)
        bcf	mode_led2	;Red led force 
	btfsc	f_prog_mode
	goto	end_p_show_led

        btfsc	D_A_mode
        bsf	mode_led2
	goto	end_p_show_led
	
set_force_led:
	bcf	mode_led1
	bcf	mode_led2
	btfss	f_fire
	goto	end_p_show_led
	btfsc	pforce_0,0
	bsf	mode_led2
	btfsc	pforce_0,1
	bsf	mode_led1	

end_p_show_led:
	bcf	STATUS,RP0
        return




⌨️ 快捷键说明

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