📄 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:
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 + -