?? ups600w16f73.asm
字號:
BCF Seg0RAM,Normal
ENDIF
ENDM
BATTDLY MACRO iii
IF iii==ON
BSF Seg1RAM,Battery
ELSE
BCF Seg1RAM,Battery
ENDIF
ENDM
CHARGEDLY MACRO III
IF III==ON
BSF Seg2RAM,Charge
ELSE
BCF Seg2RAM,Charge
ENDIF
ENDM
OVERLOAD MACRO III
IF III==ON
BSF Seg3RAM,OverLoad
ELSE
BCF Seg3RAM,OverLoad
ENDIF
ENDM
;
FAULTDLY MACRO III
IF III==ON
BSF Seg4RAM,Fault
ELSE
BCF Seg4RAM,Fault
ENDIF
ENDM
;---------------------Startup
ORG 00H
GOTO START
;---------------------INTERRUPT VECTER ADDRESS
INTER ORG 04H
MOVWF WSave ;Save W
SWAPF WSave,F
SWAPF STATUS,W
MOVWF StatusSave ;Save STATUS
MOVF PCLATH,W
MOVWF PchSave
BCF PCLATH,3
BTFSC STATUS,RP0
GOTO INT_DEAL
BCF UserFlag,2
GOTO INT_SERVICE
INT_DEAL
BCF STATUS,RP0
BSF UserFlag,2
GOTO INT_SERVICE
START:
CLRF INTCON
;--------------------Port setting
BCF STATUS,IRP
BSF STATUS,RP0
MOVLW 0FFH
MOVWF TRISA
MOVLW 01H
MOVWF TRISB
MOVLW 88H
MOVWF TRISC
BCF STATUS,RP0
MOVLW 0C8H ;Setting _LOAD_REG high
MOVWF PORTB
CLRF PORTC
CLRF PORTA
;---------------------TimeR0 Setting
BSF STATUS,RP0
MOVLW 88H ;INT 下降沿觸發
MOVWF OPTION_REG
BCF STATUS,RP0
MOVLW TMR0_VALUE
MOVWF TMR0
;------------------------RAM clear
BCF STATUS,RP0
MOVLW 20H
MOVWF FSR
RAM_CLRL
CLRF INDF
INCF FSR,F
MOVLW 80H
SUBWF FSR,W
BTFSS STATUS,C
GOTO RAM_CLRL
MOVLW 0A0H
MOVWF FSR
RAM_CLRH
CLRF INDF
INCF FSR,F
MOVLW 0FFH
SUBWF FSR,W
BTFSS STATUS,C
GOTO RAM_CLRH
;--------------------------Initiation
BCF STATUS,RP0
MOVLW ONE_SECOND
MOVWF Startup_Timer
BSF PORTB,_PWM1
BSF PORTB,_PWM2 ;220V AC supply the power
BSF PORTB,_LOAD_REG
BCF PORTC,_RELAY3
BCF LoadFlag,5
BCF LoadFlag,2
BCF LoadFlag,3
BCF LoadFlag,4
CLRF CurrSumLow
CLRF CurrSumHi
MOVLW POWER_220VAC
MOVWF Pow_Stataus
MOVWF PowConvStataus
MOVLW BATT_NOT_SURE
MOVWF Batt_Stataus
MOVLW PWM_INIT
MOVWF PWMStataus
MOVLW PWM_START_RATE
MOVWF PWMRegValue
;CLRF PWMRegStataus
; MOVLW VOUT_INIT
; MOVWF VOutReg
MOVLW RelayReg2
MOVWF RelayState
MOVLW CONVERT_START
MOVWF ConvStartFlag
MOVLW SYS_TIME
MOVWF System_Timer
;-------------------- Timer 1 Setting
BCF STATUS,RP0
MOVLW 00H ;Enable timer1
MOVWF T1CON
MOVLW HIGH TMR1_VALUE
MOVWF TMR1H
MOVLW LOW TMR1_VALUE
MOVWF TMR1L
BSF STATUS,RP0
CLRF PIE1
BSF PIE1,TMR1IE
BCF STATUS,RP0
MOVLW 0F0H
MOVWF INTCON
BSF T1CON,TMR1ON
;串行通信設置-----SCI RX Setting
BSF STATUS,RP0
MOVLW 33H
MOVWF SPBRG
MOVLW COM_Buffer
MOVWF ReciCounter
BCF STATUS,RP0
BSF RCSTA,SPEN ;允許串口工作
BSF STATUS,RP0
BCF TXSTA,SYNC ;異步方式
BSF PIE1,RCIE ;允許接收中斷.
BCF STATUS,RP0
BSF RCSTA,CREN ;允許接收
BSF STATUS,RP0 ;SCI TX Setting
BCF TXSTA,BRGH ;低速
BSF PIE1,TXIE ;允許發送中斷
BCF STATUS,RP0
movlw .3
movwf Buzps_Timer
Run_loop01:
MOVLW BUZPS_ON
MOVWF BuzpsStataus
MOVLW NORMAL_MODE
CALL WriteCommand
MOVLW BIAS_1_3_COM4
CALL WriteCommand
MOVLW RC_256K
CALL WriteCommand
MOVLW WDT_DIS
CALL WriteCommand
MOVLW TIMER_DIS
CALL WriteCommand
MOVLW IRQ_DIS
CALL WriteCommand
MOVLW TONE_OFF
CALL WriteCommand
MOVLW SYS_EN
CALL WriteCommand
MOVLW LCD_ON
CALL WriteCommand
;add frequency test of AC input(2004-9-21)
CALL INPUT_VOLT_ADC
MOVF VIn_ADValue,W
sublw VIN_DOT
btfss STATUS,C
goto setting_outFreq
setting50Hz
movlw PWM_DUTY_50Hz
movwf OutputFreq
movlw .118
movwf VoutSamlp_Point
MOVLW PWM_MAX_RATE50Hz
MOVWF PWM_MAX_RATE
goto INITIME_JUDGE
setting_outFreq
movf Frequency,W
sublw .219
btfss STATUS,C
goto setting50Hz
movlw PWM_DUTY_60Hz
movwf OutputFreq
MOVLW PWM_MAX_RATE60Hz
MOVWF PWM_MAX_RATE
movlw .98
movwf VoutSamlp_Point
INITIME_JUDGE
MOVF Buzps_Timer,W
BTFSS STATUS,Z
GOTO Run_loop01
Main_loop:
BCF STATUS,IRP
CALL Safety_module
CALL Input_module
CALL Detect_module
CALL Output_module
CALL Convert_module
CALL Display_module
CALL CurrSum
BSF PCLATH,3
CALL ShutDown_module
CALL Commu_module
CALL Shut_module
BCF PCLATH,3
GOTO Main_loop
;--------------------------------------------
INT_SERVICE
;BCF STATUS,RP0
BTFSC INTCON,T0IF
GOTO timer0_int
BTFSC INTCON,INTF
GOTO INT_EXTERN
BCF STATUS,RP0
BTFSS PIR1,RCIF
GOTO INT_NEXT
BCF STATUS,RP0 ;允許接收中斷?
MOVF RCSTA,W
BSF STATUS,RP0
MOVWF ComReg1
BCF STATUS,RP0
MOVF RCREG,W ;讀出接收數據.
BSF STATUS,RP0
MOVWF ComReg2
GOTO INT_RECI
INT_NEXT
BTFSC PIR1,TXIF
GOTO INT_TRAX
BTFSC PIR1,TMR1IF
GOTO timer1_int
GOTO RESUME_INT
RETFIE
;----------------------------------------------------
INT_EXTERN:
BCF INTCON,INTF
BTFSC UserFlag,0
GOTO set_act_freqency
BSF UserFlag,0 ;開始測頻率
CLRF FrequencyCnt
CLRF FrequencyCnt+1
GOTO RESUME_INT
set_act_freqency ;確定測定的頻率
MOVF FrequencyCnt,W
MOVWF Frequency
MOVF FrequencyCnt+1,W
MOVWF Frequency+1
CLRF FrequencyCnt
CLRF FrequencyCnt+1
GOTO RESUME_INT ;恢復中斷保存數據
INT_RECI
; BCF PIR1,RCIF
BSF STATUS,RP0
MOVF FSR,W
MOVWF FSREG
BTFSC ComReg1,OERR
GOTO RECI_OERR
BTFSC ComReg1,FERR
GOTO RECI_FERR
MOVF ReciCounter,W
MOVWF FSR
MOVF ComReg2,W
MOVWF INDF
XORLW ASCII_CR
BTFSC STATUS,Z
GOTO RECI_FINISH
INCF ReciCounter,F ;Here Will Occur A Error! BUG Fix
MOVLW COM_Buffer+.10
SUBWF ReciCounter,W
BTFSC STATUS,C
GOTO commumication_recive_error ;超過最大接收字符,通信出錯,
RECI_OERR
RECI_EXIT
BCF STATUS,RP0
BCF RCSTA,CREN ;禁止接收
BSF RCSTA,CREN ;允許接收
BSF STATUS,RP0
MOVF FSREG,W
MOVWF FSR
GOTO RESUME_INT
RECI_FERR
BCF STATUS,RP0
BCF RCSTA,FERR
GOTO RECI_OERR
RECI_FINISH
MOVLW RECI_END
MOVWF ReciStatus
BCF PIE1,RCIE
; BCF STATUS,RP0 ;*
GOTO RECI_EXIT
commumication_recive_error:
;通信接收錯時僅復位接收指針.
MOVLW COM_Buffer
MOVWF ReciCounter
GOTO RECI_EXIT
;----------------------------------------------------
INT_TRAX
; BCF PIR1,TXIF
BSF STATUS,RP0 ;*
MOVF FSR,W
MOVWF FSREG
INCF SendCounter,F
MOVF SendCounter,W
MOVWF FSR
SUBWF SendLength,W
BTFSS STATUS,C
GOTO TRAX_FINISH
BCF STATUS,RP0
MOVF INDF,W
MOVWF TXREG
TRAX_EXIT
BSF STATUS,RP0
MOVF FSREG,W
MOVWF FSR
GOTO RESUME_INT
TRAX_FINISH
BSF STATUS,RP0
BCF TXSTA,TXEN
BSF PIE1,RCIE
MOVLW COM_Buffer
MOVWF ReciCounter
BCF STATUS,RP0
BCF RCSTA,CREN
BSF RCSTA,CREN
GOTO TRAX_EXIT
;--------------------------------------------------------------------
; timer0 interrupt occurs at 384us intervel peroid. Use for PWM output
;--------------------------------------------------------------------
timer0_int:
BCF INTCON,T0IF
BCF PIR1,TMR2IF
MOVLW TMR0_VALUE
ADDWF TMR0,F
MOVF PWMRate_Timer,F
BTFSS STATUS,Z
DECF PWMRate_Timer,F
MOVF SampCurr10MS,F
BTFSS STATUS,Z
DECF SampCurr10MS,F
MOVF PWMDuty_Timer,F
BTFSS STATUS,Z
DECF PWMDuty_Timer,F
BTFSS UserFlag,3
GOTO timer1_j2 ;有市電時
MOVF PWMST_Timer,F
BTFSC STATUS,Z
CALL CONVERT_DEAL
GOTO timer1_j3
timer1_j2
INCF FrequencyCnt,F
BTFSC STATUS,Z
INCF FrequencyCnt+1,F
BTFSS UserFlag,4
GOTO timer1_j3
MOVF FastStartFlagH,W
SUBLW .3
BTFSS STATUS,C
GOTO timer1_j4
timer1_j3
MOVF PWMST_Timer,F
BTFSS STATUS,Z
DECF PWMST_Timer,F
MOVF Delay_Timer,F
BTFSS STATUS,Z
DECF Delay_Timer,F
timer1_je
GOTO RESUME_INT
;------------------
timer1_j4
BCF UserFlag,5
BCF PORTC,_RELAY1
MOVF FrequencyCnt,W
MOVWF Catch_RAM
MOVF FrequencyCnt+1,W
MOVWF Catch_RAMH
CLRF FastStartFlagH
BSF UserFlag,3
clrf direction_Value
MOVLW PWM_INIT
MOVWF PWMStataus
MOVLW POWER_CONVERT
MOVWF Pow_Stataus
MOVLW PWM_FAST_RATE
MOVWF PWMRegValue
MOVLW .50
MOVWF PWMST_Timer
GOTO timer1_j3
;--------------------------------------------------------------------
; Timer1 interrupt occurs at 1ms intervel peroid. Use for system timer
;--------------------------------------------------------------------
timer1_int:
BCF PIR1,TMR1IF
MOVLW HIGH TMR1_VALUE
MOVWF TMR1H
MOVLW LOW TMR1_VALUE
MOVWF TMR1L
MOVF Pow_Stataus,0
XORLW POWER_CONVERT
BTFSS STATUS,Z
CALL FAST_START_ADC
timer_j0
DECF System_Timer,F
BTFSC STATUS,Z
GOTO timer_j1 ;138ms
RESUME_INT
BCF STATUS,RP0
BTFSC UserFlag,2
BSF STATUS,RP0
MOVF PchSave,W
MOVWF PCLATH
SWAPF StatusSave,W
MOVWF STATUS
SWAPF WSave,W
RETFIE
;------------------------------------------------------
timer_j1
BCF STATUS,RP0
INCF AC_Battery_Timer,F
MOVLW SYS_TIME
MOVWF System_Timer
MOVF Startup_Timer,F
BTFSC STATUS,Z
GOTO timer_j2
DECF Startup_Timer,F
timer_j2
BTFSS PORTC,_KEY_INPUT
GOTO timer_j5
INCF KeyInput_Timer,F
timer_j5
MOVF Load_LinkTime,F
BTFSS STATUS,Z
DECF Load_LinkTime,F
MOVF Buzps_Timer,F
BTFSS STATUS,Z
DECF Buzps_Timer,F
movf WenBatWorkAcSampTime,F
btfss STATUS,Z
decf WenBatWorkAcSampTime,F
MOVF TwoMinuteCounterLow,w
SUBLW THIRTY_SECOND
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -