?? 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 + -