📄 ups300w16f73.asm
字号:
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 PORTC,_PWM1
BSF PORTC,_PWM2 ;220V AC supply the power
BSF PORTB,_LOAD_REG
; BSF PORTB,_RELAY3
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 .250
MOVWF OverLoad_DelayProtectTime
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
;--------------------------------------------
;INIT_LCD
MOVLW NORMAL_MODE
CALL WriteCommand
CALL GO_WRIT_LCDCOMM
MOVLW BIAS_1_3_COM4
CALL WriteCommand
CALL GO_WRIT_LCDCOMM
MOVLW RC_256K
CALL WriteCommand
CALL GO_WRIT_LCDCOMM
MOVLW WDT_DIS
CALL WriteCommand
CALL GO_WRIT_LCDCOMM
MOVLW TIMER_DIS
CALL WriteCommand
CALL GO_WRIT_LCDCOMM
MOVLW IRQ_DIS
CALL WriteCommand
CALL GO_WRIT_LCDCOMM
MOVLW TONE_OFF
CALL WriteCommand
CALL GO_WRIT_LCDCOMM
MOVLW SYS_EN
CALL WriteCommand
CALL GO_WRIT_LCDCOMM
setting_outFreq
MOVLW .12
MOVWF Crurrent_X
movlw PWM_DUTY_50Hz
movwf OutputFreq
MOVLW PWM_MAX_RATE50Hz
MOVWF PWM_MAX_RATE
INITIME_JUDGE
MOVLW LCD_ON
CALL WriteCommand
CALL GO_WRIT_LCDCOMM
Main_loop:
CALL Safety_module
CALL Input_module
CALL Detect_module
CALL Output_module
CALL Convert_module
CALL Display_module
CALL ShutDown_module
BSF PCLATH,3
CALL Commu_module
CALL Shut_module
CALL CurrSum
BCF PCLATH,3
CALL DET_LOAD_VOLT
GOTO Main_loop
;--------------------------------------------
INT_SERVICE
BCF STATUS,RP0
BTFSC INTCON,T0IF ;TMR0未溢出?
GOTO timer0_int
BTFSC INTCON,INTF ;禁止外部中断?
GOTO INT_EXTERN
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 ;有新数据送入TXREG?
GOTO INT_TRAX
BTFSC PIR1,TMR1IF ;TMR1无中断允许?
GOTO timer1_int
SWAPF StatusSave,W
MOVWF STATUS
SWAPF WSave,W
RETFIE
;----------------------------------------------------
INT_EXTERN:
BCF INTCON,INTF
BTFSC UserFlag,StartCntFreq
GOTO set_act_freqency
BSF UserFlag,StartCntFreq ;开始测频率
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 ;(1bit)1有溢出错,0无溢了错
GOTO RECI_OERR
BTFSC ComReg1,FERR ;(2bit)0无帧格式错,1帧格式错
GOTO RECI_FERR
MOVF ReciCounter,W
MOVWF FSR
MOVF ComReg2,W
MOVWF INDF
XORLW ASCII_CR ;not finish?
BTFSC STATUS,Z
GOTO RECI_FINISH
INCF ReciCounter,F
RECI_OERR
BCF STATUS,RP0
RECI_EXIT
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 ;(2bit)0无帧格式错,1帧格式错。
GOTO RECI_OERR
RECI_FINISH
MOVLW RECI_END ;0aah
MOVWF ReciStatus
BCF PIE1,RCIE
BCF 0B6H,4
BCF STATUS,RP0 ;*
GOTO RECI_EXIT
RECI_ECHO
MOVLW RECI_ECHO
MOVWF ReciStatus
BCF PIE1,RCIE
BCF STATUS,RP0
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 ;5fh
ADDWF TMR0,F
MOVF PWMRate_Timer,F
BTFSS STATUS,Z
DECF PWMRate_Timer,F
MOVF PWMDuty_Timer,F
BTFSS STATUS,Z
DECF PWMDuty_Timer,F
MOVF PWMStartFlag,W
XORLW PWM_START
BTFSS STATUS,Z
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
MOVF SystemStataus,W
XORLW SYSTEM_NORMAL
BTFSS STATUS,Z
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 PORTB,_RELAY1
MOVF FrequencyCnt,W
MOVWF Catch_RAM
MOVF FrequencyCnt+1,W
MOVWF Catch_RAMH
CLRF FastStartFlagH
MOVLW PWM_START
MOVWF PWMStartFlag
MOVLW PWM_INIT
MOVWF PWMStataus
MOVLW POWER_CONVERT
MOVWF Pow_Stataus
MOVLW FOUR_SECOND
MOVWF ACDly_Timer
MOVLW PWM_FAST_RATE
MOVWF PWMRegValue
MOVLW .61
SUBWF FrequencyCnt,F
BTFSS STATUS,C
DECF FrequencyCnt+1
MOVLW .52
MOVWF PWMST_Timer
GOTO timer1_j3
;--------------------------------------------------------------------
; Timer1 interrupt occurs at 2ms 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
RESUME_INT
BCF STATUS,RP0
BTFSC UserFlag,BankSave
BSF STATUS,RP0
MOVF PchSave,W
MOVWF PCLATH
SWAPF StatusSave,W
MOVWF STATUS
SWAPF WSave,W
RETFIE
;------------------------------------------------------
timer_j1
MOVLW SYS_TIME
MOVWF System_Timer
MOVF Startup_Timer,F
BTFSC STATUS,Z
GOTO timer_j2
DECF Startup_Timer,F
timer_j2
BTFSS PORTB,_KEY_INPUT
GOTO timer_j5
INCF KeyInput_Timer,F
timer_j5
MOVF Buzps_Timer,F ;蜂鸣器鸣叫计时
BTFSS STATUS,Z
DECF Buzps_Timer,F
MOVF OverLoad_DelayProtectTime,F ;过载保护延时
BTFSS STATUS,Z
DECF OverLoad_DelayProtectTime,F
MOVF OverExtLoadTime,F
BTFSS STATUS,Z
DECF OverExtLoadTime,F
;++++++++++++++++++++++++++++++
timer_j11
BSF STATUS,RP0
MOVF OUT_CO,W
BTFSS STATUS,Z
DECF OUT_CO,F
BCF STATUS,RP0
INCF chargTime,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_j12
BSF STATUS,RP0
MOVLW .30
SUBWF Dotm_Timer,W
BTFSC STATUS,C
GOTO timer_jm0
INCF Dotm_Timer,F
GOTO RESUME_INT
;------------------------------------------------------
timer_jm0
BSF PCLATH,3
GOTO timer_skip
DC_BASE EQU .99
DC_DIM EQU .16
;-------------------------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
; MOVWF WR12
FAST_NEXT
SUBLW DC_BASE
BTFSC STATUS,C
GOTO FAST_COMP_LOW
MOVF WR13,W
SUBLW DC_BASE+DC_DIM
BTFSS STATUS,C
GOTO FAST_START_EXIT
INCF FastStartFlagH,F
RETURN;GOTO detect_detak
FAST_COMP_LOW
MOVF WR13,W
SUBLW DC_BASE-DC_DIM
BTFSC STATUS,C
GOTO FAST_START_EXIT
INCF FastStartFlagH,F
RETURN;GOTO detect_detak
FAST_START_EXIT
FAST_LOW_EXIT
CLRF FastStartFlagH
detect_detak:;
RETURN
;===================================================
SHORT_AD EQU .45 ;2.53VDC
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -