📄 fp888_120v_1208.asm
字号:
;------------------------------------------------------------------------------------------------------;
CALL DELAY_100MS ;
;------------------------------------------------------------------------------------------------------;
BCF PORTB,BUZZ_OUT ;
RETLW 00H ;
;------------------------------------------------------------------------------------------------------;
POWER_OFF_ON:
MOVLW 0FH ;
MOVWF DEL_COUNT ;
;-------------------------------;
POWER_OFF_ON_CHECK:
CLRWDT ;
BCF POWER_SIGN,ON_S ;
CLRF KEY_SIGN ;
CALL AD_KEY ;
BTFSS KEY_SIGN,ON_OFF_S
GOTO POWER_OFF_ON_END;
DECFSZ DEL_COUNT,1 ;
GOTO POWER_OFF_ON_CHECK
;------------------------------------------------------------------------------------------------------;
POWER_OFF_ON_WAIT:
CLRWDT ;
CLRF KEY_SIGN ;
CALL AD_KEY ;
BTFSC KEY_SIGN,ON_OFF_S
GOTO POWER_OFF_ON_WAIT
;------------------------------------------------------------------------------------------------------;
CALL BUZZER_RUN ;
;------------------------------------------------------------------------------------------------------;
POWER_OFF_ON_ON:
CALL POWER_OFF_OFF ;
BSF POWER_SIGN,ON_S ;
;------------------------------------------------------------------------------------------------------;
POWER_OFF_ON_END:
RETLW 00h
;------------------------------------------------------------------------------------------------------;
POWER_OFF_OFF:
CLRWDT ;
BSF PORTB,LED_POWER_OUT
BCF PORTB,LED_PULSE_OUT
BCF PORTB,LED_LOW_OUT
BCF PORTB,LED_HIGH_OUT
BCF PORTB,LOW_OUT ;
BCF PORTB,HIGH_OUT ;
BCF PORTB,COM_OUT ;
BSF PORTA,MOTOR_OUT ;
RETLW 00H ;
;------------------------------------------------------------------------------------------------------;
POWER_OFF_ALL:
CLRWDT ;
CLRF PORTB ;
RETLW 00H ;
;-----------------------------------------------;
;***********************************************;
START:
CLRWDT ;
;-------------------------------;
BSF STATUS,5 ;
MOVLW 0BH ;B'00001011'
MOVWF TRISA ;
;-------------------------------;
BCF STATUS,5 ;
CLRF PORTA ;
;-------------------------------;
BSF STATUS,5 ;
MOVLW 00H ;B'00000000'
MOVWF TRISB ;
;-------------------------------;
BCF STATUS,5 ;
CLRF PORTB ;
;------------------------------------------------------------------------------------------------------;
BSF STATUS,5 ;
MOVLW 07H ;B'00000111'
MOVWF OPTION_ ;
;------------------------------------------------------------------------------------------------------;
MOVLW 020H ;00100000
MOVWF INTCON ;
;-------------------------------------------------------------------------------------------------------;
;A0、A1 IS AD PORT
;------------------------------------------------------------------------------------------------------;
BSF STATUS,5 ;
MOVLW 0FFH ;
MOVWF ADCON1 ;
;------------------------------------------------------------------------------------------------------;
BCF STATUS,5 ;
;-----------------------------------------------;
;CLEAN ALL RAM ;
;-----------------------------------------------;
MEM_CLEAN: ;
MOVLW 20H ;
MOVWF FSR ;
MEM_CLEAN_WAIT: ;
CLRWDT ;
CLRF INDF ;
INCF FSR,1 ;
MOVLW 4FH ;
XORWF FSR,0 ;
BTFSS STATUS,2 ;
GOTO MEM_CLEAN_WAIT ;
CLRF INDF ;
;-----------------------------------------------;
GOTO FIRST_RUN ;
;***********************************************;
FIRST_RUN:
;--------------------------------------------;
movlw 00eh ;test is 1, practicality is 9
movwf fan_90s
call fan_delay_start
;---------------------------------------------;
first_run_1:
btfsc fan_sign,stop_sign
call fan_stop
CLRF KEY_COUNT ;
CLRWDT ;
FIRST_RUN_WAIT:
BTFSC PORTA,POWER_IN ;
GOTO first_run_1 ;
CALL DELAY_50uS ;
BTFSC PORTA,POWER_IN ;
GOTO first_run_1 ;
INCF KEY_COUNT,1 ;
MOVLW 0FAH ;
SUBWF KEY_COUNT,0 ;
BTFSS STATUS,0 ;
GOTO FIRST_RUN_WAIT ;
CALL POWER_OFF_OFF ;
;-----------------------------------------------;
;OUT ONE SECOND BUZZER
;-----------------------------------------------;
BSF PORTB,BUZZ_OUT ;
;-------------------------------;
MOVLW 0AH ;
MOVWF DEL_COUNT ;
;-------------------------------;
BUZZER_RUN_WAIT:
CALL DELAY_100MS ;
DECFSZ DEL_COUNT,1 ;
GOTO BUZZER_RUN_WAIT ;
;-------------------------------;
BCF PORTB,BUZZ_OUT ;
;-------------------------------;
call fan_delay_start
;--------------------------------;
GOTO MAIN_RUN ;
;***********************************************;
;-----------------------------------------------;
MAIN_RUN:
CLRWDT ;
;-----------------------------------------------;
CALL AD_KEY ;110
;-------------------------------;
BTFSC KEY_SIGN,ON_OFF_S ;1
GOTO POWER_OFF_S ;
BTFSC KEY_SIGN,PULSE_S; ;1
GOTO POWER_PULSE_S ;
BTFSC KEY_SIGN,LOW_S ; ;1
GOTO POWER_LOW_S ;
BTFSC KEY_SIGN,HIGH_S ; ;1
GOTO POWER_HIGH_S ;
BTFSC PORTA,POWER_IN ;
GOTO POWER_RUN_S ;
btfsc fan_sign,stop_sign
call fan_stop
GOTO MAIN_RUN ; 2
;-----------------------------------------------;
fan_stop:
bcf intcon,7
bcf porta,motor_out
bcf fan_sign,stop_sign
retlw 00h
fan_delay_start:
movlw 00eh ; test is 1 practicality is 14(14*5=70s)practicality 93s
movwf fan_90s
bcf status,5
movlw 03CH ;
movwf TMR0 ;
movlw 020H ;00100000
movwf INTCON ;
bsf intcon,7
retlw 00h
;-----------------------------------------------;
POWER_OFF_S:
CALL TIME_END_RUN ;
CALL POWER_OFF_ON ;
BTFSS POWER_SIGN,ON_S ;
GOTO POWER_OFF_S_END ;
;-------------------------------;
CALL BUZZER_RUN ;
;-------------------------------;
BTFSS RUN_SIGN,RUN_S ;
GOTO POWER_OFF_S_RUN ;
;-------------------------------;
POWER_OFF_S_RUN_OFF:
CLRF RUN_SIGN ;
CALL POWER_OFF_OFF ;
GOTO POWER_BRAKE_RUN ;
;-------------------------------;
POWER_OFF_S_RUN:
CLRF RUN_SIGN ;
CALL POWER_OFF_OFF ;
CLRF POWER_SIGN ;
;-------------------------------;
POWER_OFF_S_END:
call fan_delay_start
GOTO MAIN_RUN ;
;-----------------------------------------------;
;-----------------------------------------------;
POWER_PULSE_S:
CALL TIME_END_RUN ;
MOVLW 1FH ;
MOVWF DEL_COUNT ;
;-------------------------------;
POWER_PULSE:
CLRWDT ;
CALL AD_KEY ;
BTFSS KEY_SIGN,PULSE_S ;
GOTO POWER_PULSE_END ;
DECFSZ DEL_COUNT,1 ;
GOTO POWER_PULSE ;
;-------------------------------;
CALL BUZZER_RUN ;
;-------------------------------;
CALL TIME_FIRST_RUN ;
;-------------------------------;
;PULSE OUT STATUS
;-------------------------------;
POWER_PULSE_OUT:
CLRF RUN_SIGN ;
BSF PORTB,LED_POWER_OUT
BSF PORTB,LED_PULSE_OUT
BCF PORTB,LED_LOW_OUT
BCF PORTB,LED_HIGH_OUT
BCF PORTB,LOW_OUT ;
BSF PORTB,HIGH_OUT ;
BCF PORTB,COM_OUT ;
bsf porta,motor_out
;-------------------------------;
CLRF KEY_COUNT ;
;-------------------------------;
POWER_PULSE_KEY_SAMPLE:
CALL AD_KEY ;
;-------------------------------;
CALL POWER_S ;
SUBLW 55H ;
BTFSC STATUS,2 ;
GOTO POWER_S_BREAK ;
;-------------------------------;
BTFSC KEY_SIGN,ON_OFF_S
BSF KEY_SIGN,USER_S ;
BTFSC KEY_SIGN,LOW_S;
BSF KEY_SIGN,USER_S ;
BTFSC KEY_SIGN,HIGH_S ;
BSF KEY_SIGN,USER_S ;
BTFSS KEY_SIGN,USER_S ;
GOTO POWER_PULSE_KEY_END
;-------------------------------;
INCF KEY_COUNT,1 ;
MOVLW 0FH ;
SUBWF KEY_COUNT,0 ;
BTFSS STATUS,0 ;
GOTO POWER_PULSE_KEY_SAMPLE
;-------------------------------;
BTFSC KEY_SIGN,ON_OFF_S
GOTO POWER_OFF_S ;
BTFSC KEY_SIGN,LOW_S ;
GOTO POWER_LOW_S ;
BTFSC KEY_SIGN,HIGH_S ;
GOTO POWER_HIGH_S ;
;-------------------------------;
POWER_PULSE_KEY_END:
CLRF CURRENT_COUNT ;
;-------------------------------;
;WAIT 1S CURRENT CHECK
;-------------------------------;
BTFSC STATUS_SIGN,R_CURRENT_S
GOTO POWER_PULSE_CURRENT_MAX
BTFSS TIME_SIGN,T_1S ;
GOTO POWER_PULSE_RUN ;
CALL TIME_END_RUN ;
BSF STATUS_SIGN,R_CURRENT_S
;-------------------------------;
POWER_PULSE_CURRENT_MAX:
CALL AD_CURRENT ;
;-------------------------------;
;CURRENT MAX I > 10.6A ?
;-------------------------------;
CALL AD_CURRENT_MAX ;
BTFSS CURRENT_SIGN,HI_S
GOTO POWER_PULSE_RUN ;
;-------------------------------;
INCF CURRENT_COUNT,1 ;
MOVLW 0FH ;
SUBWF CURRENT_COUNT,0 ;
BTFSS STATUS,0 ;
GOTO POWER_PULSE_CURRENT_MAX
GOTO POWER_PROTECT_RUN
;-------------------------------;
POWER_PULSE_RUN:
CLRWDT ;
CALL AD_KEY ;
BTFSC KEY_SIGN,PULSE_S;
CLRF DEL_COUNT ;
;-------------------------------;
INCF DEL_COUNT,1 ;
MOVLW 1FH ;
SUBWF DEL_COUNT,0 ;
BTFSS STATUS,0 ;
GOTO POWER_PULSE_OUT ;
;-------------------------------;
BSF PORTB,LED_POWER_OUT
BCF PORTB,LED_PULSE_OUT
BCF PORTB,LED_LOW_OUT
BCF PORTB,LED_HIGH_OUT
BCF PORTB,LOW_OUT ;
BCF PORTB,HIGH_OUT ;
BCF PORTB,COM_OUT ;
GOTO POWER_BRAKE_RUN ;
;-------------------------------;
POWER_PULSE_END:
call fan_delay_start
GOTO MAIN_RUN ;
;-----------------------------------------------;
;-----------------------------------------------;
POWER_LOW_S:
CALL TIME_END_RUN ;
MOVLW 0FH ;
MOVWF DEL_COUNT ;
;-------------------------------;
POWER_LOW:
CLRWDT ;
CALL AD_KEY ;
BTFSS KEY_SIGN,LOW_S ;
GOTO POWER_LOW_END ;
DECFSZ DEL_COUNT,1 ;
GOTO POWER_LOW ;
;-------------------------------;
POWER_LOW_WAIT:
CLRWDT ;
CALL AD_KEY ;
BTFSC KEY_SIGN,LOW_S ;
GOTO POWER_LOW_WAIT ;
;-------------------------------;
CALL BUZZER_RUN ;
;-------------------------------;
CALL TIME_FIRST_RUN ;
;-------------------------------;
POWER_LOW_OUT:
CLRWDT ;
;-------------------------------;
;LOW OUT STATUS
;-------------------------------;
CLRF RUN_SIGN ;
BSF RUN_SIGN,RUN_S ;
BSF RUN_SIGN,R_LOW_S;
BSF PORTB,LED_POWER_OUT
BCF PORTB,LED_PULSE_OUT
BSF PORTB,LED_LOW_OUT
BCF PORTB,LED_HIGH_OUT
BSF PORTB,LOW_OUT ;
BCF PORTB,HIGH_OUT ;
BCF PORTB,COM_OUT ;
bsf porta,motor_out
;-------------------------------;
CLRF KEY_COUNT ;
;-------------------------------;
POWER_LOW_KEY_SAMPLE:
CALL AD_KEY ;
;-------------------------------;
CALL POWER_S ;
SUBLW 55H ;
BTFSC STATUS,2 ;
GOTO POWER_S_BREAK ;
;-------------------------------;
BTFSC KEY_SIGN,ON_OFF_S
BSF KEY_SIGN,USER_S ;
BTFSC KEY_SIGN,PULSE_S;
BSF KEY_SIGN,USER_S ;
BTFSC KEY_SIGN,HIGH_S ;
BSF KEY_SIGN,USER_S ;
BTFSC KEY_SIGN,LOW_S ;
BSF KEY_SIGN,USER_S ;
BTFSS KEY_SIGN,USER_S ;
GOTO POWER_LOW_KEY_END
;-------------------------------;
INCF KEY_COUNT,1 ;
MOVLW 0FH ;
SUBWF KEY_COUNT,0 ;
BTFSS STATUS,0 ;
GOTO POWER_LOW_KEY_SAMPLE
;-------------------------------;
BTFSC KEY_SIGN,ON_OFF_S
GOTO POWER_OFF_S ;
BTFSC KEY_SIGN,PULSE_S;
GOTO POWER_PULSE_S ;
BTFSC KEY_SIGN,HIGH_S ;
GOTO POWER_HIGH_S ;
BTFSC KEY_SIGN,LOW_S ;
GOTO POWER_LOW_WAIT ;
;-------------------------------;
POWER_LOW_KEY_END:
;-------------------------------;
CLRF CURRENT_COUNT ;
;-------------------------------;
;WAIT 1S CURRENT CHECK
;-------------------------------;
BTFSC STATUS_SIGN,R_CURRENT_S
GOTO POWER_LOW_CURRENT_MAX1
BTFSS TIME_SIGN,T_1S ;
GOTO POWER_LOW_RUN ;
CALL TIME_END_RUN ;
BSF STATUS_SIGN,R_CURRENT_S
;-------------------------------;
POWER_LOW_CURRENT_MAX1:
CALL AD_CURRENT ;
;-------------------------------;
;CURRENT MAX I > 10.6A ?
;-------------------------------;
CALL AD_CURRENT_MAX ;
BTFSS CURRENT_SIGN,HI_S
GOTO POWER_LOW_OUT_END
;-------------------------------;
INCF CURRENT_COUNT,1 ;
MOVLW 0FH ;
SUBWF CURRENT_COUNT,0 ;
BTFSS STATUS,0 ;
GOTO POWER_LOW_CURRENT_MAX1
GOTO POWER_PROTECT_RUN
;-------------------------------;
POWER_LOW_OUT_END:
CLRF CURRENT_COUNT ;
;-------------------------------;
;CURRENT 3.2 > I > 1.4A ?
;-------------------------------;
POWER_LOW_RUN:
CALL AD_CURRENT ;
;-------------------------------;
CALL AD_CURRENT_1_4A ;
BTFSS CURRENT_SIGN,MI_S
CALL TIME_END_RUN ;
BTFSS CURRENT_SIGN,MI_S
GOTO POWER_LOW_OUT ;
;-------------------------------;
INCF CURRENT_COUNT,1 ;
MOVLW 0FH ;
SUBWF CURRENT_COUNT,0 ;
BTFSS STATUS,0 ;
GOTO POWER_LOW_RUN ;
;-------------------------------;
;TIME FIRST ?
;-------------------------------;
BTFSS TIME_SIGN,T_FIRST
CALL TIME_FIRST_RUN ;
;-------------------------------;
;TIME > 3S ?
;-------------------------------;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -