⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ups600w16f73.asm

📁 工频后备式UPS-600W
💻 ASM
📖 第 1 页 / 共 5 页
字号:
        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 + -