?? ups600w16f73.asm
字號:
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 + -