📄 led.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 + -