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

📄 ups300w16f73.asm

📁 工频后备式UPS-300W
💻 ASM
📖 第 1 页 / 共 5 页
字号:
FastShortAdc:
	movf	ConvStart_Timer,W
	btfss	STATUS,Z
	return
	
	MOVLW	.8
	MOVWF	WR0
	CLRF	WR1
	clrf	WR2	
	
	
test_short_do
	BSF	PORTC,0	
        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
	BCF	PORTC,0
	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
	BSF     UserFlag,ConvertShort
	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,DC_OverLoad
        GOTO    IN_MOD_EXIT
        BTFSC	UserFlag,ConvertShort
        GOTO	IN_MOD_EXIT
        CALL    INPUT_VOLT_ADC
        MOVF    Pow_Stataus,W
        XORLW   POWER_220VAC
        BTFSC   STATUS,Z
        GOTO    ADC_EXIT
        MOVF    PWMStartFlag,W
        XORLW   PWM_START
        BTFSS   STATUS,Z
        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   PORTB,_KEY_INPUT
        GOTO    KEY_INPUT_EXIT
        CLRF    KeyInput_Timer
        MOVLW   KEY_SHORT
        MOVWF   KeyCode
        RETURN
LONG_PRESS_KEY 
        BTFSC   PORTB,_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
;---------------------------------------------------------------------
INPUT_VOLT_ADC:

	
        MOVLW   10H
        MOVWF   WR3		;
        
 
        CLRF	WR8             ;进入采样总次数高位
        CLRF	WR9		;低位
        
        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	.2
	BTFSS	STATUS,C
	GOTO	not_base_point
	BTFSS	WR3,4
	GOTO	is_end_point

	CLRF	WR3
	CLRF	WR8
	CLRF	WR9

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
	bcf	STATUS,C
	rrf	WR1
	RRF	WR0
	BSF	PCLATH,3	
	CALL	Div_16Bit	;(WR7,WR6)/(WR1,WR0)=(WR3,WR2)
	BCF	PCLATH,3
	MOVF	WR2,W
	MOVWF	VIn_ADValue
         
        RETURN
;---------------------------------------------------------
OUTPUT_VOLT_ADC: 
VOut_loop_next
        MOVLW   0AH
        MOVWF   WR1
        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/4
        MOVWF   ADCON0


VOut_Conv_loop 
;        CALL    Delay_us
        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 
        CALL    Delay_1ms
        DECFSZ  WR1
        GOTO    VOut_loop

        MOVF    WR4,0
        MOVWF   VOut_ADValue
        

        RETURN

;--------------------------------------------------------
BATT_VOLT_ADC 
        MOVLW   7
        MOVWF   WR2
        MOVLW   ADC_Buffer	;06bh
        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		;6bh~71h
        INCF    FSR,F
        DECFSZ  WR2,F
        GOTO    VBatt_loop
        CALL    GET_MIDDLE
        MOVF    WR4,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	;WR4>WR5?
        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
        GOTO    SORT_NEXT_CLE
        MOVLW   ADC_Buffer+3
        MOVWF   FSR
        MOVF    INDF,W
        MOVWF   WR4
        RETURN
;-------------------------------------------------------
;每1秒钟运行一次,在无过载及无短路时对市电输入进行检测.
Detect_module: 
        MOVF    Startup_Timer,F
        BTFSS   STATUS,Z
        GOTO    DETECT_MOD_EXIT
        BTFSC	UserFlag,DC_OverLoad
        GOTO    DETECT_MOD_EXIT
        
        BTFSC	UserFlag,ConvertShort
        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
        RETURN
        MOVLW   VIN_275V
        SUBWF   VIn_ADValue,W
        BTFSS   STATUS,C
        GOTO    DET_VIN_165V
DET_VIN_HIGH 
        MOVLW   VOLT_HIGH
        MOVWF   Volt_Prot
        MOVLW   POWER_CONVERT
        MOVWF   Pow_Stataus
        MOVLW   CUT_START
        MOVWF   CutFlag
        BSF     UserFlag,AcTurnOff

        MOVLW   FOUR_SECOND
        MOVWF   ACDly_Timer

DET_AC_EXIT 
        RETURN
;==========================================
DET_VIN_RELAY3 
        MOVLW   VIN_212V
        SUBWF   VIn_ADValue,W
        BTFSC   STATUS,C
        GOTO    DET_RELAY3_239V
        MOVLW   RelayReg3
        MOVWF   RelayState
        RETURN

DET_RELAY3_239V 
        MOVLW   VIN_242V
        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_165V
        SUBWF   VIn_ADValue,W
        BTFSC   STATUS,C
        GOTO    DET_VIN_REG
DET_VIN_LOW 
        MOVLW   VOLT_LOW
        MOVWF   Volt_Prot
        MOVLW   POWER_CONVERT
        MOVWF   Pow_Stataus
        MOVLW   CUT_START
        MOVWF   CutFlag
	MOVF    VIn_ADValue,W
	XORLW   .0
	BTFSS   STATUS,Z
	GOTO    AcMoreLow
	BCF     UserFlag,AcTurnOff
	GOTO    AcNotNormal
AcMoreLow
	BSF     UserFlag,AcTurnOff

⌨️ 快捷键说明

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