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

📄 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:
        decfsz  tmr_pled,F      ;DECREMENT TIMER
        return

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

        bcf     pled_img
        btfsc   pled_cmd,7      ;TEST TO SEE THE LED SHOULD BE ON OR NOT
        bsf     pled_img

        andlw   0xff            ;PERFORM A DUMMY OPERATION TO SEE IF W=0
        skpz
        goto    ppledend        ;IF W = TIMER NOT EQUAL 0, UPDATE TIMER
        swapf   pled_cmd,F      ;SWAP THE CURRENT CMD BACK => NO CHANGE
        movlw   0x2             ;SET THE TIMER TO LOW VALUE TO ENABLE FAST
                                ;REFRESHING THE COMMAND
        movwf   tmr_pled        ;RELOAD TIMER
        return
ppledend:
        movw    tmr_pled        ;BLOW UP THE TIMER BY 8 TIMES
        clrc
        rlf     tmr_pled,F
        clrc
        rlf     tmr_pled,F
        clrc
        rlf     tmr_pled,F
        return


;****************************************************************************
;FUNCTION: THE SUBROUTINE IS TO TURN THE SLOW LED OFF OR BLINKING.  THE 
;          F_SLOLED IS EXAMINED AND TURN THE SLOW LED TO OFF IF THE FLAG IS
;          CLEAR AND TURN THE SLOW LED TO BLINKING IF THE FLAG IS SET.  THE
;          LED IS BLINKING AT ABOUT 3 PER SECOND AND IS CONTROLLED BY THE
;          TIMER, TMR_SLOW. 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_SLOLED
;INPUT: NIL
;OUTPUT: SLOW LED CONTROL
;****************************************************************************
;p_sloled:
;        btfsc   f_sloled        ;SEE IF LED TO BE ON        
;        goto    p_sled1         ;PROCESS LED 
;        bcf     sled_img
;        clrf    tmr_sled        ;CLEAR LED FLASH COUNTER
;        return                  ;DO NOTHING IF FLAG IS CLEAR
;p_sled1:
;        incf    tmr_sled,F      ;INCREMENT THE COUNTER UNTIL DIGIT CARRY SET
;        btfsc   tmr_sled,2      ;USE BIT 4 TO CONTROL LED
;        goto    p_sled2
;        bsf     sled_img
;        return
;p_sled2:
;        bcf     sled_img
;        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     f_siointr

        btfss   f_beep
        goto    beep_zero
        
        bsf     buzzer
        goto    show_led

beep_zero:
        bcf     buzzer

show_led:
        bsf     program_led
        btfsc   pled_img
        bcf     program_led

	btfsc	f_set_force
	goto	set_force_led
        bcf	mode_led1
        btfsc	D_A_mode
        bsf	mode_led1
	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:
        return




⌨️ 快捷键说明

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