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

📄 ups300w16f73.asm

📁 工频后备式UPS-300W
💻 ASM
📖 第 1 页 / 共 5 页
字号:
                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 + -