📄 ups300w16f73.asm
字号:
AcNotNormal
MOVLW FOUR_SECOND
MOVWF ACDly_Timer
RETURN
DET_VIN_REG
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
MOVLW BUZPS_LONG
MOVWF BuzpsStataus
MOVLW PWM_INIT
MOVWF PWMStartFlag
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_235V
SUBWF VIn_ADValue,W
BTFSS STATUS,C
GOTO DET_RELAY1_209V
MOVLW RelayReg1
MOVWF RelayState
RETURN
DET_RELAY1_209V
MOVLW VIN_208V
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_242V
SUBWF VIn_ADValue,W
BTFSS STATUS,C
GOTO DET_RELAY2_209V
MOVLW RelayReg1
MOVWF RelayState
RETURN
DET_RELAY2_209V
MOVLW VIN_208V
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
RETURN
MOVF TestStataus,W
XORLW TEST_ON
BTFSS STATUS,Z
GOTO DET_CONV_CONT
MOVF Test_Timer,F
BTFSS STATUS,Z
RETURN
MOVLW TEST_OFF
MOVWF TestStataus
BCF UserFlag,TestFlag
DET_CONV_CONT
MOVLW VIN_265V
SUBWF VIn_ADValue,W
BTFSS STATUS,C
GOTO DET_VIN_180V
CONFAIL_HIGH
MOVLW VOLT_HIGH
MOVWF Volt_Prot
MOVLW POWER_CONVERT
MOVWF PowConvStataus
RETURN
DET_VIN_180V
MOVLW VIN_175V
SUBWF VIn_ADValue,W
BTFSS STATUS,C
GOTO CONFAIL_LOW
MOVF PowConvStataus,W
XORLW CONV_TO_AC
BTFSC STATUS,Z
GOTO DET_CONV_TEST
MOVLW CONV_TO_AC
MOVWF PowConvStataus
MOVLW SIX_SECOND
MOVWF ConvDly_Timer
RETURN
;*******************************************
DET_CONV_TEST:
MOVF ConvDly_Timer,W ;启动DC----->AC 供电
BTFSC STATUS,Z
GOTO DET_VIN_REG ;开始检测输出电压
RETURN
;*****************************************
CONFAIL_LOW
MOVLW VOLT_LOW
MOVWF Volt_Prot
; MOVLW VIN_NO_REGULATE
; MOVWF Volt_Reg
MOVLW POWER_CONVERT
MOVWF PowConvStataus
RETURN
;=========================================
DET_POWER_CONV
MOVF SystemStataus,W
XORLW SYSTEM_NORMAL
BTFSS STATUS,Z
GOTO CONV_BATT_EXIT
MOVF Pow_Stataus,W
XORLW POWER_220VAC
BTFSC STATUS,Z
GOTO CONV_BATT_EXIT
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
MOVLW PWM_INIT
MOVWF PWMStartFlag
MOVLW TEST_OFF
MOVWF TestStataus
MOVLW POWER_220VAC
MOVWF Pow_Stataus
BCF UserFlag,TestFlag
MOVLW BUZPS_LONG
MOVWF BuzpsStataus
BSF PORTB,_LOAD_REG
BSF PORTC,_PWM1
BSF PORTC,_PWM2
GOTO CONV_BATT_EXIT
DET_CONV_START
MOVF PWMStartFlag,W
XORLW PWM_START ;Detect load state after convert
BTFSS STATUS,Z
RETURN
CALL DET_CONV_VOLT
CALL DET_VOUT_REG
CALL DET_BATT_VOLT
RETURN
CONV_BATT_EXIT
CALL DET_BATT_VOLT
RETURN
TURN_OFF_EXIT
CALL DET_CONV_VOLT ;当电池欠压保护待机状态时等待市电恢复。
RETURN
;========================================
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 ;乘数低位
BSF PCLATH,3
CALL MULL_16Bit ;(WR7,WR6)*(WR1,WR0)=(WR5,WR4)
BCF PCLATH,3
;除以10
MOVLW 0FFH
MOVWF WR0
CLRF WR1
MOVF WR4,0
MOVWF WR6
MOVF WR5,0
MOVWF WR7
BSF PCLATH,3
CALL Div_16Bit
BCF PCLATH,3
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 .1
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
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_11V5
SUBWF VBatt_ADValue,W
BTFSS STATUS,C
GOTO DET_BATT_STATE2
MOVLW BATT_11V8
SUBWF VBatt_ADValue,W
BTFSS STATUS,C
GOTO DET_BATT_STATE3
MOVLW BATT_12V5
SUBWF VBatt_ADValue,W
BTFSS STATUS,C
GOTO DET_BATT_STATE4
GOTO DET_BATT_STATE5
DET_BATT_STATE3
MOVLW 04H
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 08H
MOVWF BattDLY_State
GOTO DET_BATT_NORMAL
DET_BATT_STATE5
MOVLW 10H
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 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
MOVLW BATT_LOW
MOVWF Batt_Stataus
MOVLW TURN_ON
MOVWF TurnOffFlag
RETURN
DET_BATT_STATE2
MOVLW 02H
MOVWF BattDLY_State
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
RETURN
;-----------------------------------------------
DET_LOAD_VOLT
MOVF Pow_Stataus,W
XORLW POWER_220VAC
BTFSS STATUS,Z
GOTO DecideConLoad
;市电时负载处理.
MOVLW .30 ;市电短路数据
SUBWF CurrentAvgValue,W
BTFSC STATUS,C
GOTO AC_Short_Load
MOVLW .14 ;市电过载参数
SUBWF CurrentAvgValue,W
BTFSC STATUS,C
GOTO DetLoad67
BTFSS UserFlag,AC_OverLoad
GOTO Load_Normal
MOVLW .12 ;市电过载恢复参数
SUBWF CurrentAvgValue,W
BTFSC STATUS,C
GOTO DetLoad67
Load_Normal
BCF UserFlag,Full_Load
BCF UserFlag,AC_OverLoad
; BCF UserFlag,DC_OverLoad
MOVLW .250
MOVWF OverLoad_DelayProtectTime
MOVLW .10
MOVWF OverExtLoadTime
RETURN
DetLoad67
BCF UserFlag,Full_Load
BSF UserFlag,AC_OverLoad
RETURN
DecideConLoad
MOVLW .15
SUBWF CurrentAvgValue,W ;立即关机
BTFSC STATUS,C
GOTO Setting_DC_OverLoad
MOVLW .14 ;逆变过载参数
SUBWF CurrentAvgValue,W
BTFSS STATUS,C
GOTO Load_Normal ;负载正常
MOVF OverLoad_DelayProtectTime,F ;延时关机
BTFSC STATUS,Z
GOTO Setting_DC_OverLoad
UPS_Output_FullLoad
MOVLW .10
MOVWF OverExtLoadTime ;2秒关机
BSF UserFlag,Full_Load
RETURN
Setting_DC_OverLoad
MOVF OverExtLoadTime,F
BTFSC STATUS,Z
GOTO DC_OverLoadProtect
BSF UserFlag,Full_Load
RETURN
DC_OverLoadProtect
BSF UserFlag,DC_OverLoad ;过载关机
RETURN
AC_Short_Load
RETURN
;--------------------------------------------------------
;60Hz负载载处理程序
;--------------------------------------------------------
;----------------------------------------------------------
;;;;;;;;;;;;;;;;;;;;;;;;;;FD=TAG-09R0-ET9
Display_module:
MOVF SystemStataus,W ;2BH
XORLW SYSTEM_NORMAL
BTFSC STATUS,Z
GOTO DLY_PROCESS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -