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

📄 ups600w16f73.asm

📁 工频后备式UPS-600W
💻 ASM
📖 第 1 页 / 共 5 页
字号:
        BTFSS   STATUS,C
        GOTO    SetMinuteHigh
        INCF    TwoMinuteCounterLow
        GOTO    timer_j61
SetMinuteHigh
        CLRF    TwoMinuteCounterLow 
        INCF    TwoMinuteCounterHigh
timer_j61
        MOVF    TwoMinuteCounterLow1,w
        SUBLW   THIRTY_SECOND
        BTFSS   STATUS,C
        GOTO    SetMinuteHigh1
        INCF    TwoMinuteCounterLow1,F
        GOTO    timer_j6
SetMinuteHigh1
        CLRF    TwoMinuteCounterLow1 
        INCF    TwoMinuteCounterHigh1,F


timer_j6 
        MOVF    Test_Timer,F
        BTFSS   STATUS,Z
        DECF    Test_Timer,F
timer_j7 
        MOVF    ConvDly_Timer,F
        BTFSS   STATUS,Z
        DECF    ConvDly_Timer,F
timer_j8 
        MOVF    ConvStart_Timer,F
        BTFSS   STATUS,Z
        DECF    ConvStart_Timer,F
timer_j9 
        MOVF    LoadTest_Timer,F
        BTFSS   STATUS,Z
        DECF    LoadTest_Timer,F
timer_j10
        MOVF    ACDly_Timer,F
        BTFSS   STATUS,Z
        DECF    ACDly_Timer,F
timer_j11

        BSF     STATUS,RP0
        MOVLW   .30
        SUBWF   Dotm_Timer,W
        BTFSC   STATUS,C	
        GOTO    timer_jm0	;30*138ms=8.28s
        INCF    Dotm_Timer,F
	GOTO	RESUME_INT
;------------------------------------------------------
timer_jm0 
        BSF     PCLATH,3
        GOTO    timer_skip

DC_BASE	EQU	.99
DC_DIM		EQU	.13
;-------------------------Fast start
FAST_START_ADC: 

        BSF     STATUS,RP0
        CLRF    ADCON1
        BCF     STATUS,RP0
        MOVLW   65H                  ;P0.4  V_ADC, Clock=Fosc/4
        MOVWF   ADCON0

FAST_Conv_loop 
        BTFSC   ADCON0,2             ;Check EOC bit
        GOTO    FAST_Conv_loop

        MOVF    ADRES,W
        MOVWF   WR13

FAST_NEXT
	MOVF	WR13,W
        SUBLW   DC_BASE
        BTFSC   STATUS,C
        GOTO    FAST_COMP_LOW		;下半周
	MOVLW	.33
        MOVWF	DOWN_LOWTIME
 ;       CLRF	ON_HIGETIME
        MOVF    WR13,W
        SUBLW   DC_BASE+DC_DIM
        BTFSS   STATUS,C
        GOTO    FAST_START_EXIT
        INCF   FastStartFlagH,F
        
        RETURN

FAST_COMP_LOW

	CLRF	DOWN_LOWTIME
;        INCF	ON_HIGETIME,F 
        MOVF    WR13,W
        SUBLW   DC_BASE-DC_DIM
        BTFSC   STATUS,C
        GOTO    FAST_START_EXIT
        INCF    FastStartFlagH,F
        RETURN			
FAST_START_EXIT

        CLRF    FastStartFlagH
	RETURN
;===================================================


FastShortAdc:
	movf	ConvStart_Timer,W
	btfss	STATUS,Z
	return
	
	MOVLW	.8
	MOVWF	WR0
	CLRF	WR1
	clrf	WR2	
	
	
test_short_do

        BCF     INTCON,GIE

        BSF     STATUS,RP0
        CLRF    ADCON1
        BCF     STATUS,RP0
        MOVLW   85H ;10000101                 ;RA0  V_ADC, Clock=Fosc/4
        MOVWF   ADCON0

FASTADDO 
        BTFSC   ADCON0,2             ;Check EOC bit
        GOTO    FASTADDO

        MOVF    ADRES,W
        BSF     INTCON,GIE        
        ADDWF	WR1,F
        BTFSC	STATUS,C
        INCF	WR2,F
        CALL	Delay_test
	DECFSZ	WR0,F        
	GOTO	test_short_do
	
	BCF	STATUS,C
	RRF	WR2
	RRF	WR1
	BCF	STATUS,C
	RRF	WR2
	RRF	WR1
	
	BCF	STATUS,C
	RRF	WR2
	RRF	WR1
	MOVF	WR1,W
	SUBLW	SHORT_AD
	BTFSC	STATUS,C
	GOTO	test_continue_do
	INCF	FastShortTime,F
	MOVF	FastShortTime,W
	SUBLW	.5
	BTFSS	STATUS,Z
	return
	CLRF	TwoMinuteCounterHigh
	CLRF	TwoMinuteCounterLow
	BSF     UserFlag,1
	RETURN
test_continue_do
	CLRF	FastShortTime
	

	RETURN
	
	
	
;--------------------------Safety_module
Safety_module:
        BSF     STATUS,RP0
        MOVLW   88H
        MOVWF   OPTION_REG
        BCF     STATUS,RP0
        MOVLW   01H                    ;Enable timer1
        MOVWF   T1CON

        BSF     STATUS,RP0
        BSF     PIE1,TMR1IE
        BCF     STATUS,RP0
        MOVLW   0F0H
        IORWF   INTCON,F


        RETURN
;--------------------------Input_module
Input_module: 
        CALL    Key_Input
        MOVF    Startup_Timer,F
        BTFSS   STATUS,Z
        GOTO    IN_MOD_EXIT
        BTFSC   UserFlag,5
        GOTO    IN_MOD_EXIT
        BTFSC   UserFlag,1
        GOTO	IN_MOD_EXIT
        CALL    INPUT_VOLT_ADC
        MOVF    Pow_Stataus,W
        XORLW   POWER_220VAC
        BTFSC   STATUS,Z
        GOTO    ADC_EXIT
        BTFSS   UserFlag,3		;市电正常时不采反馈值及短路值.
        GOTO	ADC_EXIT     
        CALL    OUTPUT_VOLT_ADC
        CALL	FastShortAdc		;检测逆变时短路信号

ADC_EXIT
		 
        CALL    BATT_VOLT_ADC
                
IN_MOD_EXIT 
        
        RETURN
;------------------------Key_Input
Key_Input 
        BCF     STATUS,RP0
        MOVF    KeyInput_Timer,W
        BTFSC   STATUS,Z
        GOTO    KEY_INPUT_EXIT
        MOVF    KeyInput_Timer,W
        MOVWF   WR0
        MOVLW   THREE_SECOND
        SUBWF   WR0,W
        BTFSC   STATUS,C
        GOTO    LONG_PRESS_KEY
        BTFSC   PORTC,_KEY_INPUT
        GOTO    KEY_INPUT_EXIT
        CLRF    KeyInput_Timer
        MOVLW   KEY_SHORT
        MOVWF   KeyCode
        RETURN
LONG_PRESS_KEY 
	CLRF	Control_Time
        BTFSC   PORTC,_KEY_INPUT
        GOTO    LONG_PRESS_COUN
        MOVF    KeyCode,W
        XORLW   KEY_CLR
        BTFSS   STATUS,Z
        GOTO    LONG_PRESS_CLR
        MOVLW   KEY_LONG
        MOVWF   KeyCode
        CLRF    KeyInput_Timer
        RETURN
LONG_PRESS_CLR 
        MOVLW   KEY_CLR
        MOVWF   KeyCode
        CLRF    KeyInput_Timer
        RETURN
LONG_PRESS_COUN 
        MOVF    KeyCode,W
        XORLW   KEY_CLR
        BTFSS   STATUS,Z
        GOTO    LONG_PRESS_REP
        MOVLW   KEY_LONG
        MOVWF   KeyCode
        RETURN
LONG_PRESS_REP 
        MOVLW   KEY_REPEAT
        MOVWF   KeyCode
        RETURN
KEY_INPUT_EXIT 
        MOVLW   KEY_CLR
        MOVWF   KeyCode
        RETURN

;---------------------------------------------------------------------
;Including Input volt AD detect,output volt AD detect,battery volt
;AD detect;现改为采样市电一周(2004-12-2)
;---------------------------------------------------------------------
INPUT_VOLT_ADC:
	BTFSS	UserFlag,3
	GOTO	Normal_SampleAC
	movf 	WenBatWorkAcSampTime,W		;逆变工作时减少采样次数,(原因:影响输出采样数值)
	btfss	STATUS,Z
	return	
	movlw	FOUR_SECOND
	movwf	WenBatWorkAcSampTime	
Normal_SampleAC 
        MOVLW   10H
        MOVWF   WR3		;
       
        CLRF    WR7		;采样值累加高位
        CLRF    WR6		;低位
        
        CLRF	WR1		;采样点数高位        
        CLRF    WR0		;低位
        
VIn_loop
	
        BCF     INTCON,GIE
        BSF     STATUS,RP0
        CLRF    ADCON1
        BCF     STATUS,RP0
        MOVLW   65H
        MOVWF   ADCON0               ;P0.4  V_ADC, Clock=Fosc/8


VIn_Conv_loop 
        BTFSC   ADCON0,GO            ;Check EOC bit
        GOTO    VIn_Conv_loop

        MOVF    ADRES,W
        MOVWF   VIn_ADValue
        BSF     INTCON,GIE
	
        MOVF    VIn_ADValue,W         ;小信号判断
        SUBLW   VOLT_DC_HIGH	;LIMIT_2VHI
        MOVWF	WR2
        BTFSC   STATUS,C
        GOTO   	Compare_c
	COMF	WR2
	INCF	WR2,F
Compare_c
	
	MOVF	WR2,W
	SUBLW	.3
	BTFSS	STATUS,C
	GOTO	not_base_point
	BTFSS	WR3,4
	GOTO	is_end_point
	
	CLRF	WR3

is_end_point

	MOVLW	HIGH MIN_SAMPLE_TIM
	SUBWF	WR1,W
	BTFSC	STATUS,Z
	GOTO	Low_bitComp
	BTFSS	STATUS,C
	GOTO	is_continue_sum
	GOTO	set_adc_over
Low_bitComp	;高位相等比较低位			     
	MOVLW	LOW MIN_SAMPLE_TIM
	SUBWF	WR0,W
	BTFSS	STATUS,C
	GOTO	is_continue_sum
	GOTO	set_adc_over
	
not_base_point

	BTFSC	WR3,4
	GOTO	VIn_loop

	
is_continue_sum
	
	
	MOVLW	VOLT_2VDC
	SUBWF	VIn_ADValue,F
	BTFSC	STATUS,C
	GOTO	add_ccongn
	COMF	VIn_ADValue
	INCF	VIn_ADValue,F
add_ccongn

	MOVF	VIn_ADValue,W
	ADDWF	WR6,F
	BTFSC	STATUS,C
	INCF	WR7,F
loading_sampSecon
	INCF	WR0,F
	BTFSC	STATUS,Z
	INCF	WR1,F		;次数累加
	CALL	Delay_test

	GOTO	VIn_loop


set_adc_over
	MOVF	WR0,W
	XORWF	WR1,W
	BTFSS	STATUS,Z
	GOTO	End_ACSample
_is_return_zero
	CLRF	VIn_ADValue
	RETURN
		
End_ACSample
;	BSF	PCLATH,3
	BCF	STATUS,C
	RRF	WR1
	RRF	WR0	
	CALL	Div_16Bit	;(WR7,WR6)/(WR1,WR0)=(WR3,WR2)
;	BCF	PCLATH,3
	MOVF	WR2,W
	MOVWF	VIn_ADValue
	MOVF	WR3,W
	MOVWF	VIn_ADValueH
 			               
        RETURN
;==================================================
OUTPUT_VOLT_ADC:

find_ZERO
	
	MOVF	VoutSamlp_Point,W
	XORWF	PWMDuty_Timer,W
	BTFSS	STATUS,Z
	GOTO	find_ZERO
find_Out_volt
;	CALL	Delay_test
	CALL	Delay_test
	MOVLW   .8
        MOVWF   WR1        
        CLRF    WR2
        CLRF	WR3
        CLRF	WR4
	
VOut_loop

        BCF     STATUS,RP0
        BCF     INTCON,GIE
        BSF     STATUS,RP0
        CLRF    ADCON1
        BCF     STATUS,RP0
        MOVLW   8DH                    ;P0.5  V_ADC, Clock=Fosc/32
        MOVWF   ADCON0


VOut_Conv_loop 
	


        BTFSC   ADCON0,GO            ;Check EOC bit
        GOTO    VOut_Conv_loop

        MOVF    ADRES,0             ;Save high 8-bit
        MOVWF   VOut_ADValue           ;First clear ADValue High/Low byte
        BCF     STATUS,RP0
        BSF     INTCON,GIE

        SUBWF   WR4,0
        BTFSC   STATUS,C
        GOTO    VOUT_ADC_NEXT
        
VOUT_ADC_EXCH 
        MOVF    VOut_ADValue,0
        MOVWF   WR4
VOUT_ADC_NEXT

        DECFSZ  WR1
        GOTO    VOut_loop

        MOVF    WR4,0
        MOVWF   VOut_ADValue
        

        RETURN



;--------------------------------------------------------
BATT_VOLT_ADC 
        MOVLW   7
        MOVWF   WR2
        MOVLW   ADC_Buffer
        MOVWF   WR0
        MOVWF   FSR
VBatt_loop 
        BCF     INTCON,GIE
        BSF     STATUS,RP0
        CLRF    ADCON1
        BCF     STATUS,RP0
        MOVLW   5DH
        MOVWF   ADCON0

VBatt_Conv_loop 
        BTFSC   ADCON0,GO
        GOTO    VBatt_Conv_loop

        MOVF    ADRES,W
        MOVWF   VBatt_ADValue
        BSF     INTCON,GIE
        MOVF    VBatt_ADValue,W
        MOVWF   INDF
        INCF    FSR,F
        DECFSZ  WR2,F
        GOTO    VBatt_loop
        CALL    GET_MIDDLE
        
        MOVF    WR4,W
        MOVWF   VBatt_ADValue
	CALL	Batt_Voltage_Ture
	MOVF	WR2,W
	MOVWF	VBatt_ADValue
        RETURN
;============================================
GET_MIDDLE 
       
        MOVLW   ADC_Buffer
        MOVWF   WR0
        MOVWF   WR1
        INCF    WR1,F
        MOVLW   6
        MOVWF   WR9

SORT_NEXT_CLE 
        MOVF    WR9,W
        MOVWF   WR8

SORT_NEXT_DATA      
        MOVF    WR0,W
        MOVWF   FSR
        MOVF    INDF,W
        MOVWF   WR4
        MOVF    WR1,W
        MOVWF   FSR
        MOVF    INDF,W
        MOVWF   WR5
        SUBWF   WR4,W
        BTFSC   STATUS,C
        GOTO    SORT_SKIP
               
SORT_EXCHANGE 
        MOVF    WR0,W
        MOVWF   FSR
        MOVF    WR5,W
        MOVWF   INDF
        MOVF    WR1,W
        MOVWF   FSR
        MOVF    WR4,W
        MOVWF   INDF
SORT_SKIP 
        INCF    WR1,F
        DECFSZ  WR8,F
        GOTO    SORT_NEXT_DATA

        INCF    WR0,F
        MOVF    WR0,W
        MOVWF   WR1
        INCF    WR1,F
        DECFSZ  WR9,F

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -