📄 ups600w16f73.asm
字号:
GOTO SORT_NEXT_CLE
MOVLW ADC_Buffer+3
MOVWF FSR
MOVF INDF,W
MOVWF WR4
RETURN
;-------------------------------------------------------
Detect_module:
MOVF Startup_Timer,F
BTFSS STATUS,Z
GOTO DETECT_MOD_EXIT
BTFSC UserFlag,5
GOTO DETECT_MOD_EXIT
BTFSC UserFlag,1
GOTO DETECT_MOD_EXIT ;过载/短路不在检测
CALL DET_AC_INPUT
CALL DET_POWER_CONV
DETECT_MOD_EXIT
RETURN
;===========================================
DET_AC_INPUT
MOVF Pow_Stataus,W
XORLW POWER_220VAC
BTFSS STATUS,Z
GOTO DET_AC_EXIT
MOVLW Vin_125
SUBWF VIn_ADValue,W
BTFSS STATUS,C
GOTO DET_VIN_165V
goto DET_VIN_LOW
DET_AC_EXIT
RETURN
;==========================================
DET_VIN_RELAY3
MOVLW Vin_95
SUBWF VIn_ADValue,W
BTFSC STATUS,C
GOTO DET_RELAY3_239V
MOVLW RelayReg3
MOVWF RelayState
RETURN
DET_RELAY3_239V
MOVLW Vin_110
SUBWF VIn_ADValue,W
BTFSC STATUS,C
GOTO DET_RELAY3_HIGH
MOVLW RelayReg2
MOVWF RelayState
RETURN
DET_RELAY3_HIGH
MOVLW RelayReg1
MOVWF RelayState
RETURN
;======================================
DET_VIN_165V
MOVLW Vin_75
SUBWF VIn_ADValue,W
BTFSC STATUS,C
GOTO DET_VIN_REG
DET_VIN_LOW
MOVF ACDly_Timer,W
btfss STATUS,Z
goto Relay_CutInputRlay
MOVLW VOLT_LOW
MOVWF Volt_Prot
MOVLW POWER_CONVERT
MOVWF Pow_Stataus
MOVLW CUT_START
MOVWF CutFlag
MOVLW FOUR_SECOND
MOVWF ACDly_Timer
Relay_CutInputRlay
RETURN
DET_VIN_REG
MOVF ConvDly_Timer,F ;启动DC----->AC 供电
BTFSS STATUS,Z
GOTO Relay_CutInputRlay
; GOTO DET_VIN_REG ;开始转为市电并进行调压
CLRF TwoMinuteCounterLow
CLRF TwoMinuteCounterHigh
MOVLW CONV_START_OFF
MOVWF ConvStartFlag
MOVLW POWER_220VAC
MOVWF Pow_Stataus
MOVLW CUT_NOT
MOVWF CutFlag
MOVLW PWM_REG_RATE
MOVWF PWMRegValue
MOVLW TURN_ON
MOVWF TurnOffFlag
MOVLW VOLT_NORMAL
MOVWF Volt_Prot
; MOVWF Volt_Reg
; MOVLW LOADOVER_DIS
; MOVWF LoadProtENA
BCF UserFlag,3
MOVF RelayState,W
XORLW RelayReg3
BTFSC STATUS,Z
GOTO DET_VIN_RELAY3
MOVF RelayState,W
XORLW RelayReg2
BTFSC STATUS,Z
GOTO DET_VIN_RELAY2
MOVLW Vin_105
SUBWF VIn_ADValue,W
BTFSS STATUS,C
GOTO DET_RELAY1_209V
MOVLW RelayReg1
MOVWF RelayState
RETURN
DET_RELAY1_209V
MOVLW Vin_90
SUBWF VIn_ADValue,W
BTFSS STATUS,C
GOTO DET_RELAY1_LOW
MOVLW RelayReg2
MOVWF RelayState
RETURN
DET_RELAY1_LOW
MOVLW RelayReg3
MOVWF RelayState
RETURN
;====================================
DET_VIN_RELAY2
MOVLW Vin_110
SUBWF VIn_ADValue,W
BTFSS STATUS,C
GOTO DET_RELAY2_209V
MOVLW RelayReg1
MOVWF RelayState
RETURN
DET_RELAY2_209V
MOVLW Vin_90
SUBWF VIn_ADValue,W
BTFSS STATUS,C
GOTO DET_RELAY2_LOW
MOVLW RelayReg2
MOVWF RelayState
RETURN
DET_RELAY2_LOW
MOVLW RelayReg3
MOVWF RelayState
RETURN
;=====================================
DET_CONV_VOLT
MOVF Pow_Stataus,W
XORLW POWER_CONVERT
BTFSS STATUS,Z
GOTO DET_CONV_EXIT
MOVF TestStataus,W
XORLW TEST_ON
BTFSS STATUS,Z
GOTO DET_CONV_CONT
MOVF Test_Timer,F
BTFSS STATUS,Z
GOTO DET_CONV_EXIT
MOVLW TEST_OFF
MOVWF TestStataus
; BCF UserFlag,7
;从逆变恢复到市电时处理。
DET_CONV_CONT
MOVLW Vin_120
SUBWF VIn_ADValue,W
BTFSS STATUS,C
GOTO DET_VIN_180V
CONFAIL_HIGH
MOVLW VOLT_HIGH
MOVWF Volt_Prot
; MOVLW VIN_NO_REGULATE
; MOVWF Volt_Reg
MOVLW POWER_CONVERT
MOVWF PowConvStataus
DET_CONV_EXIT
RETURN
DET_VIN_180V
MOVLW Vin_80
SUBWF VIn_ADValue,W
BTFSS STATUS,C
GOTO CONFAIL_LOW
MOVF PowConvStataus,W
XORLW CONV_TO_AC
BTFSC STATUS,Z
GOTO DET_VIN_REG
MOVLW CONV_TO_AC
MOVWF PowConvStataus
MOVLW SIX_SECOND
MOVWF ConvDly_Timer
; BSF INTCON,INTE
RETURN
;*******************************************
DET_CONV_TEST:
;*****************************************
CONFAIL_LOW
MOVLW VOLT_LOW
MOVWF Volt_Prot
MOVLW POWER_CONVERT
MOVWF PowConvStataus
RETURN
;=========================================
DET_POWER_CONV
BTFSS UserFlag,4
GOTO CONV_BATT_EXIT
MOVF Pow_Stataus,W
XORLW POWER_220VAC
BTFSC STATUS,Z
GOTO CONV_BATT_EXIT1
MOVF TurnOffFlag,W
XORLW TURN_OFF
BTFSC STATUS,Z
GOTO TURN_OFF_EXIT
MOVF TestStataus,W
XORLW TEST_ON ;TEST DEAL
BTFSS STATUS,Z
GOTO DET_CONV_START
MOVF Test_Timer,F
BTFSS STATUS,Z
GOTO DET_CONV_START
MOVF Volt_Prot,W
XORLW VOLT_NORMAL
BTFSS STATUS,Z
GOTO DET_CONV_START
BCF UserFlag,3
MOVLW TEST_OFF
MOVWF TestStataus
MOVLW POWER_220VAC
MOVWF Pow_Stataus
; BCF UserFlag,7
BSF PORTB,_LOAD_REG
BSF PORTB,_PWM1
BSF PORTB,_PWM2
GOTO CONV_BATT_EXIT
DET_CONV_START
BTFSS UserFlag,3
GOTO CONV_START_EXIT
CALL DET_CONV_VOLT
CALL DET_VOUT_REG
CALL DET_BATT_VOLT
bsf PCLATH,3
CALL DET_LOAD_VOLT
BCF PCLATH,3
CONV_START_EXIT
RETURN
CONV_BATT_EXIT1
bsf PCLATH,3
CALL DET_LOAD_VOLT
BCF PCLATH,3
CONV_BATT_EXIT
CALL DET_BATT_VOLT
RETURN
TURN_OFF_EXIT
CALL DET_CONV_VOLT
RETURN
;========================================
;逆变输出PWM处理程序.
;---------------------------------------
DET_VOUT_REG
MOVF ConvStartFlag,W
XORLW CONVERT_START
BTFSS STATUS,Z
GOTO VOUT_PROCESS
MOVLW CONV_START_OFF
MOVWF ConvStartFlag
MOVLW TWO_SECOND ;电池开机时PWM逐渐展开时间.
MOVWF ConvStart_Timer
;CLRF PWMRegStataus
MOVLW PWM_START_RATE
MOVWF PWMRegValue
RETURN
VOUT_PROCESS
MOVF PowConvStataus,W
XORLW POWER_220VAC
BTFSS STATUS,Z
GOTO DET_VOUT_START
MOVLW TWO_SECOND ;市电测试时,
MOVWF LoadTest_Timer
MOVLW POWER_CONVERT
MOVWF PowConvStataus
DET_VOUT_START
;改为采用公式计算PWM来源(U=Up√2Ton/T)
MOVLW HIGH_LIMIT
SUBWF VOut_ADValue,W;
BTFSC STATUS,C
GOTO set_min_pwm ;
;输出电压很小,设置最大脉宽
;逆变输出脉宽计算:(120V输出反馈常量/反馈变量)的平方/256。
;122V对应常量为135,
CLRF WR1
MOVF VOut_ADValue,W
MOVWF WR0 ;载入除数
MOVLW PWM_DUTY_50Hz
XORWF OutputFreq,0
BTFSC STATUS,Z
GOTO Load_50HzDateACC
;OutPuT122V60HzValue EQU 3980H
;OutPuT122V50HzValue EQU 3E58H
MOVLW LOW OutPuT122V60HzValue ;载入被除数2905(6A9H)
MOVWF WR6
MOVLW HIGH OutPuT122V60HzValue ;载入被除数
MOVWF WR7 ;被除数高位
DEL_PWM_Start
; BSF PCLATH,3
CALL Div_16Bit ;(WR7,WR6)/(WR1,WR0)=(WR3,WR2)
; BCF PCLATH,3
;平方运算
MOVF WR2,0
MOVWF WR6
MOVWF WR0 ;乘数高位
MOVF WR3,0
MOVWF WR7
MOVWF WR1 ;乘数低位
CALL MULL_16Bit ;(WR7,WR6)*(WR1,WR0)=(WR5,WR4)
;除以10
MOVLW 0FFH
MOVWF WR0
CLRF WR1
MOVF WR4,0
MOVWF WR6
MOVF WR5,0
MOVWF WR7
CALL Div_16Bit
MOVF ConvStart_Timer,W
BTFSS STATUS,Z
GOTO DET_CONV_INIT
MOVF PWM_MAX_RATE,W
SUBWF WR2,W ;60Hz=100,50Hz=118
BTFSC STATUS,C
GOTO set_max_pwm
MOVF WR2,W
SUBLW .20
BTFSC STATUS,C
GOTO set_min_pwm
MOVF PWMRegValue,W ;上次数与此次比较
SUBWF WR2,W
BTFSC STATUS,Z
GOTO CUN_PWM_Date_Exit ;与上次相等退出
MOVWF WR0
BTFSC STATUS,C ;大于上次
GOTO DATA_COUNT
COMF WR0
INCF WR0,F
DATA_COUNT
MOVLW .2
SUBWF WR0,W
BTFSS STATUS,C
GOTO CUN_PWM_Date_Exit
MOVF ConvStart_Timer,W
BTFSS STATUS,Z
GOTO DET_CONV_INIT
MOVF WR2,W
MOVWF PWMRegValue
CUN_PWM_Date_Exit
RETURN
Load_50HzDateACC
MOVLW LOW OutPuT122V50HzValue ;载入被除数3222(6A9H)
MOVWF WR6
MOVLW HIGH OutPuT122V50HzValue ;载入被除数
MOVWF WR7 ;被除数高位
GOTO DEL_PWM_Start
set_max_pwm
MOVF PWM_MAX_RATE,W
MOVWF PWMRegValue
RETURN
set_min_pwm
MOVLW PWM_START_RATE
MOVWF PWMRegValue
RETURN
DET_CONV_INIT
INCF PWMRegValue,F
MOVF WR2,W
SUBWF PWMRegValue,W
BTFSS STATUS,C
GOTO CONV_INIT_EXIT
MOVF WR2,W
MOVWF PWMRegValue
CONV_INIT_EXIT
RETURN
;===================================
;========================================
DET_BATT_VOLT
btfsc LoadFlag,1
return
movlw ChargeVolHigh
subwf VBatt_ADValue,W
btfsc STATUS,C
GOTO ChargeVoltHigh
movlw ChargeVolLow
subwf VBatt_ADValue,W
btfss STATUS,C
goto ChargeVoltHigh
MOVLW BATT_10V
SUBWF VBatt_ADValue,W
BTFSS STATUS,C
GOTO DET_BATT_FAILED
MOVLW BATT_11V
SUBWF VBatt_ADValue,W
BTFSS STATUS,C
GOTO DET_BATT_LOW
MOVLW BATT_11V8
SUBWF VBatt_ADValue,W
BTFSS STATUS,C
GOTO DET_BATT_STATE3
MOVLW BATT_12V8
SUBWF VBatt_ADValue,W
BTFSS STATUS,C
GOTO DET_BATT_STATE4
GOTO DET_BATT_STATE5
ChargeVoltHigh
BSF LoadFlag,1
return
DET_BATT_STATE3
MOVLW 02H
MOVWF BattDLY_State
MOVLW BATT_11V5
SUBWF VBatt_ADValue,W
BTFSC STATUS,C
GOTO DET_BATT_BASE
GOTO DET_BATT_NORMAL
DET_BATT_BASE
GOTO DET_BATT_NORMAL
DET_BATT_STATE4
MOVLW 03H
MOVWF BattDLY_State
GOTO DET_BATT_NORMAL
DET_BATT_STATE5
MOVLW 04H
MOVWF BattDLY_State
DET_BATT_NORMAL
MOVLW BATT_LOW
XORWF Batt_Stataus,W
BTFSC STATUS,Z
GOTO check_if_still_low
det_batt_ee
MOVLW BATT_NORMAL
MOVWF Batt_Stataus
MOVLW BUZPS_LONG
MOVWF Buzz_Status1
MOVLW TURN_ON
MOVWF TurnOffFlag
RETURN
check_if_still_low:
MOVLW BATT_11V5 ;电池恢复正常电压
SUBWF VBatt_ADValue,W
BTFSC STATUS,C
GOTO det_batt_ee
DET_BATT_LOW
MOVLW 01H
MOVWF BattDLY_State
CLRF TwoMinuteCounterHigh
MOVWF Batt_Stataus
MOVLW BATT_LOW
MOVWF Batt_Stataus
MOVLW BUZPS_SHORT
MOVWF Buzz_Status1
MOVLW TURN_ON
MOVWF TurnOffFlag
RETURN
DET_BATT_FAILED
INCF Batt_JumpValue
MOVF Batt_JumpValue,W
SUBLW .30
BTFSC STATUS,C
RETURN
CLRF Batt_JumpValue
CLRF BattDLY_State
MOVLW BATT_FAILED
MOVWF Batt_Stataus
MOVLW TURN_OFF
MOVWF TurnOffFlag
; MOVLW BUZPS_STOP
; MOVWF BuzpsStataus
RETURN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -