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

📄 ups600w16f73.asm

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