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

📄 ups390w r23.asm

📁 工频后备式UPS-390W
💻 ASM
📖 第 1 页 / 共 5 页
字号:
	mov	a,90
	sub	a,Frequency_data
	sz	c
	jmp	set_PWM01Start
	mov	a,170
	sub	a,Frequency_data
	sz	c
	jmp	set_PWM03Start
	jmp	set_PWM01Start
dow_ACcut_set:
	mov	a,90
	sub	a,AC_Direction
	sz	c
	jmp	set_PWM01Start		;上半周
	mov	a,170
	sub	a,AC_Direction
	sz	c
	jmp	set_PWM03Start		;开通下半周

set_PWM01Start:
	
	mov	a,0
	mov	PWM_Flag,a
	jmp	Share_Timer
set_PWM03Start:
	mov	a,2
	mov	PWM_Flag,a
	jmp	Share_Timer

	;判断市电相位(需插入)。
;----------------------------------
;系统故障处理
System_Fault_int:
	
	PWM_Switch_off
	CUT_InputAC
	clr	Adc_OUT_Time
	jmp	Share_Timer		
;市电正常工作紧急处理。
Ac_working_int:
		
	PWM_Switch_off

;	clr	pb7
	
Fast_AcSample:
			
	inc	Coun_Timer1ms
	mov	a,7
	sub	a,Coun_Timer1ms
	sz	c
	jmp	Share_Timer
	clr	Coun_Timer1ms
	clr	pb7	
Fast_AcSampleGO:
	Samp_IN_set
	ADC_RUN_start

Sample_FastIN_loop:
	sz 	EOCB	
	jmp 	Sample_FastIN_loop 

	mov	a,ADRH
	sub	a,AC_Zero_Point
	sz	c
	jmp	compare_farc
	cpl	acc
	inc	acc
compare_farc:
		
	sub	a,41
	snz	c
	jmp	ACLowerCount
	clr	Ac_ZeroCount
	set	pb7
exit_interr00:
	
	clr	AC_FastCut_flag
	jmp	exit_meseege			
ACLowerCount:
;	clr	pb7	
	inc	Ac_ZeroCount
	mov	a,Ac_ZeroCount
	sub	a,13
	snz	c
	jmp	exit_interr00
	CUT_InputAC
	set	AC_FastCut_flag
	clr	Ac_ZeroCount
	set	Ac_Status_Flag
	mov	a,3
	mov	Start_Run_Time,a
		;开逆变初始的窄脉冲。
	
	mov	a,Frequency_dataBuffer
	mov	AC_Direction,a
	mov	AC_Direction_buffer,a
	jmp	Share_Timer

set_pwmOff:
	
	PWM_Switch_off
	jmp	Share_Timer
	
Start_INV_int:
	mov	a,PWM_on_data
	sub	a,skip_PWM_data		;逆变过度脉宽与实际计算脉宽比较,小于则加1(逐渐展开)
	snz	c
	inc	skip_PWM_data			
	mov	a,skip_PWM_data
	mov	PWM_on_data,a	
	jmp	Start_Norma_INV
INV_Working_int:
	
	CUT_InputAC
	SZ	Adc_OUT_Time
	dec	Adc_OUT_Time
	
	sz	Start_INV_Time
	jmp	Start_INV_int
	
Start_Norma_INV:
	SZ	Out_Load_Short
	jmp	set_pwmOff	
	snz	system_POWER
	jmp	set_pwmOff
;	snz	PB6
;	jmp	set_pwmOff		;------作调试用,!!!!!!!!!!!!
	
	mov	a,PWM_CycleTime
	sub	a,PWM_on_data
	mov	PWM_off_data,a		;得到开通脉宽数据及关断脉宽数据.
		
	sz	PWM_Flag
	jmp	Next_testPwm
	jmp	PWM_0run
Next_testPwm:
	mov	a,PWM_Flag
	xor	a,1
	snz	Z
	jmp	Next_testPwm1
PWM_ZeroPoint:	
	sz	PWM_off_time
	jmp	PWM_0Point_Running
	jmp	PWM_next_ON
Next_testPwm1:
	mov	a,PWM_Flag
	xor	a,2
	snz	Z
	jmp	PWM_ZeroPoint
	jmp	PWM_1run
PWM_1run:	
	sz	PWM_on_time
	jmp	PWM1_Runing
	jmp	PWM_0Point_on
PWM_0run:
	sz	PWM_on_time
	jmp	PWM0_Runing
PWM_0Point_on:
	inc	PWM_Flag
	mov	a,PWM_off_data
	mov	PWM_off_time,a
	jmp	Share_Timer
PWM_next_ON:
	inc	PWM_Flag
	mov	a,3
	sub	a,PWM_Flag
	snz	c
	clr	PWM_Flag
	mov	a,PWM_on_data
	mov	PWM_on_time,a
	
	jmp	Share_Timer
PWM0_Runing:
	dec	PWM_on_time
	clr	pc0
	set	pc1
	set	pa0
	jmp	Share_Timer
PWM1_Runing:
	dec	PWM_on_time
	set	pc0
	clr	pc1
	set	pa0
	jmp	Share_Timer
PWM_0Point_Running:
	dec	PWM_off_time
	set	pc0
	set	pc1
	clr	pa0
Share_Timer:
	
	SZ	Start_Run_Time
	dec	Start_Run_Time
	sz	SampDelaytime
	dec	SampDelaytime	
	sz	ShareTime_1ms			
	jmp	Timer_1ms
	mov	a,10			;1ms
	mov	ShareTime_1ms,a
	
	sz	Start_INV_Time
	dec	Start_INV_Time
	
	sz	TurnOn_StartDelay
	dec	TurnOn_StartDelay	
	sz	ShareTime_100ms
	jmp	Timer_100ms
	mov	a,100
	mov	ShareTime_100ms,a
	inc	LoadFullShineTime
	sz	pd0			;未按键
	inc	Key_DelayTime
	
	sz	LEDBlink_Timer
	dec	LEDBlink_Timer
	
	sz	AC_RelayDelayTime
	dec	AC_RelayDelayTime
	
	sz	Buzzer_CryTime
	dec	Buzzer_CryTime
	
	inc	Ac_Charge_KineTime
	sz	ShareTime_1s
	jmp	Timer_1s
	mov	a,8
	mov	ShareTime_1s,a
	sz	Soft_ShutDownTS		;秒关机
	dec	Soft_ShutDownTS
	sz	Timer_1Mimuter
	jmp	Timer_1M
	mov	A,60
	mov	Timer_1Mimuter,A
	sz	Soft_ShutDownTM		;分关机
	dec	Soft_ShutDownTM
Timer_1m02:	
	;1s计时
	sz	TestInvTime
	dec	TestInvTime
		
	sz	Cut_Power_Time
	dec	Cut_Power_Time
	
	jmp	exit_meseege
Timer_1M:
	dec	Timer_1Mimuter
	jmp	Timer_1m02
Timer_1s:
	dec	ShareTime_1s
	jmp	exit_meseege
Timer_100ms:
	dec	ShareTime_100ms
	jmp	exit_meseege
	
Timer_1ms:
		
	dec	ShareTime_1ms

	
exit_meseege:

	mov	a,status_save
	mov	STATUS,a
	mov	a,a_back
	

interrup_IIC:
	reti
;逆变器控制开关,只用调试程序(按下开关时关逆变,反之)。

;**************************************************************************
;Ton={变压器220V对应反馈常量(220Vp对应采样值*100)/当前反馈采样Vp}的平方/100.
;为了提高计算精度,首先把常量乘以100倍,在最后的结果上除以100得出实际的
;PWM宽度。
;******************************************************************************
inverter_deal		PROC

	snz	system_POWER		;电源系统开了才去处理逆变。
	jmp	INV_exit
	snz	Ac_Status_Flag
	jmp	INV_exit
	sz	Out_Load_Short
	jmp	INV_exit
	sz	Over_Load
	jmp	INV_exit
	call	ADC_Output
	jmp	Load_CurrenPWM
	


;开机时脉宽逐渐展开
INI_PWM_DATA:
	mov	a,wr0
	SUB	A,PWM_on_data
	snz	c
	set	Inverter_INI
	
	inc	PWM_on_data
	jmp	exit_pwmMake
	
Load_CurrenPWM:
	
	snz	Inverter_INI		;初始逆变?
	jmp	count_start
		
	mov	a,INV_VoltMAX_SetPWM%256
	sub	a,OUT_ADValueL
	mov	a,INV_VoltMAX_SetPWM/256
	sbc	a,OUT_ADValueH	
	snz	c		;小于此数(151H变压器的最大调整率)时为最大脉宽.
	jmp	count_start
	sz	DC_Status_Flag  ;正常逆变时检测是否有短路.
	jmp	INV_exit
	mov	a,30
	mov	Cut_Power_Time,a
	
	set	Out_Load_Short
	set	System_Stat_Flag

INV_exit:	
	ret
	
	
;**********除以Vp反馈当前值***********************
count_start:
	clr	wr0
	mov	a,INV_OUT_VOLT_220V%256		;8413h
	mov	tmp5,a
	mov	a,INV_OUT_VOLT_220V/256
	mov	tmp4,a			;载入被除数。
	mov	a,OUT_ADValueH		;
	mov	Lh2,a			;载入除数。
	mov	a,OUT_ADValueL
	mov	Ll2,a
	call	DIV_OF_16Bit		;商=(Lh,Ll)
	
	
	mov	a,Ll
	mov	Ll2,a			;载入乘数
	mov	a,Lh
	mov	Lh2,a
	call	MULL_OF_16Bit		;平方
	
	mov	a,Lh
	mov	tmp4,a
	mov	a,Ll
	mov	tmp5,a
	mov	a,64
	mov	Ll2,a
	mov	a,0
	mov	Lh2,a
	call	DIV_OF_16Bit		;缩小100倍
	
	mov	a,Ll
	mov	wr0,a
	
	mov	a,98
	sub	a,Ll		;最大允许脉宽
	
	mov	a,0
	sbc	a,Lh
	
	sz	c
	jmp	PWM_Data_Deal
	mov	a,97
	mov	wr0,a
PWM_Data_Deal:
	snz	Inverter_INI
	jmp	INI_PWM_DATA
	mov	a,wr0
	mov	PWM_on_data,a
	jmp	exit_pwmMake
	


exit_pwmMake:

	ret
inverter_deal		endp

;**********************************
CLR_KEY		EQU	22H
RESET_KEY	EQU	33H
Long_Key	equ	44h
Short_Key	equ	55h
Short_Key_Time	equ	20
Long_Key_Time	equ	60
;***********************************
Key_Status_Disposal	PROC
	call	Key_Deal_press
	sz	Power_Switch
	jmp	PressKey_AfterSysNormal
	mov	a,Long_Key
	xor	a,KEY_STATUS
	snz	Z
	jmp	exit_Key_progarm
	
	set	system_DisSwitch
	set	system_POWER
	set	Power_Switch
	set	pd1
	ret

PressKey_AfterSysNormal:
	mov	a,CLR_KEY
	xor	a,KEY_STATUS
	sz	Z
	jmp	exit_Key_progarm
	mov	a,RESET_KEY
	xor	a,KEY_STATUS
	sz	Z
	jmp	exit_Key_progarm
	mov	a,Long_Key
	xor	a,KEY_STATUS
	sz	Z
	jmp	LongKey_Cheng
Short_KeyDeal:
	snz	system_POWER
	jmp	AC_TurnOff
	
If_Working_INV:
	snz	Ac_Status_Flag
	jmp	Rest_Key_TestBatt
	
	cpl	Buzzer_Cry_Sta
	ret
Rest_Key_TestBatt:
	set	Normal_INV_Test		;置按键测试逆变器标志。
	mov	a,Test_INV_DelayTime
	mov	TestInvTime,a
	ret
LongKey_Cheng:

	snz	Ac_Status_Flag
	jmp	AC_TurnOff
	set	pa0
	set	pc0
	set	pc1
	
AC_TurnOff:
	
	clr	system_DisSwitch
	clr	Power_Switch
	clr	pd1		
exit_Key_progarm:
	ret
Key_Status_Disposal		endp
;---------------------------------
Key_Deal_press		proc
	sz	Key_DelayTime
	jmp	Key_Press
	jmp	exit_KeyPRESS
Key_Press:
	mov	a,Short_Key_Time
	sub	a,Key_DelayTime
	snz	c
	jmp	Long_Key_Press
	sz	pd0
	jmp	exit_KeyPRESS
	clr	Key_DelayTime
	mov	a,Short_Key
	mov	KEY_STATUS,a
	ret		
exit_KeyPRESS:
	mov	a,CLR_KEY
	mov	KEY_STATUS,a
	RET
Long_Key_Press:
	sz	pd0
	jmp	Long_goonPress
	mov	a,CLR_KEY
	xor	a,KEY_STATUS
	snz	Z
	jmp	Clr_Long_Key
	clr	Key_DelayTime
	mov	a,Long_Key
	mov	KEY_STATUS,a
	ret
Clr_Long_Key:
	mov	a,CLR_KEY
	mov	KEY_STATUS,a
	clr	Key_DelayTime
	ret
Long_goonPress:
	mov	a,CLR_KEY
	xor	a,KEY_STATUS
	snz	Z
	jmp	Set_ResetKey
;	clr	Key_DelayTime
	mov	a,Long_Key
	mov	KEY_STATUS,a
	ret
Set_ResetKey:
	mov	a,RESET_KEY
	mov	KEY_STATUS,a
	ret
Key_Deal_press		ENDP		
	

;*********************************
ADC_Output	proc


	snz	Ac_Status_Flag
	jmp	OutPut_Sample_Exit
	snz	system_POWER
	jmp	OutPut_Sample_Exit
	


	clr	ADC_ValueL
	clr	ADC_ValueH
	mov	a,100
	mov	Adc_OUT_Time,a
	
ADC_Out_loop:
	
	Samp_Out_set	
	ADC_RUN_start		
	
Sample_Out_loop:
	sz 	EOCB 		
	jmp 	Sample_Out_loop 
	mov	a,ADRH
	mov	wr4,a	;4DH
	mov	a,ADRL
	and	a,0C0H	;4EH
	mov	wr5,a
	mov	a,wr4
	sub	a,ADC_ValueL	;采样值与上次比
	sz	c		;小于上次采样值跳
	jmp	Comp_lowBit	;大于或等于上次采样值.
	jmp	ADC_Out_next
Comp_lowBit:
	mov	a,wr4
	SUB	a,ADC_ValueL
	snz	Z
	jmp	Load_cren_value
	mov	a,wr5
	sub	a,ADC_ValueH
	snz	c
	jmp	ADC_Out_next	
	
	
Load_cren_value:
	
	mov	a,wr4
	mov	ADC_ValueL,a
	mov	a,wr5
	mov	ADC_ValueH,a
		
ADC_Out_next:

	sz	Adc_OUT_Time
	jmp	ADC_Out_loop

	call	ADC_Value_Deal
save_data:
	mov	a,ADC_ValueH	
	mov	OUT_ADValueH,a
	mov	a,ADC_ValueL
	mov	OUT_ADValueL,a
OutPut_Sample_Exit:
	ret
ADC_Output	endp
;*************input sample*************

ADC_Input	proc

	set	START_ADC
	clr	wr8
	clr	wr9
	set	BasePoint

	clr	wr4
	clr	wr5
	clr	wr6
	clr	wr7

wait_adc_act_over:


	Samp_IN_set
	ADC_RUN_start

Sample_IN_loop:
	sz 	EOCB 		
	jmp 	Sample_IN_loop 
	
	mov	a,ADRH
	mov	wr0,a
	mov	a,ADRL
	mov	wr1,a

	mov	a,wr0
	sub	a,AC_Zero_Point
	sz	c
	jmp	compare_c
;	sz	BasePoint
;	jmp	wait_adc_act_over
	cpl	acc
	inc	acc

compare_c:

	sub	a,4
	sz	c
	jmp	not_base_point
	snz	BasePoint
	jmp	is_end_point		; 第二个零点
	clr	BasePoint
	clr	wr6
	clr	wr7
	clr	wr8
	clr	wr9
	
	jmp	compare_next_p	
is_end_point:
	
	mov	a,MIN_SAMPLE_TIME%256
	sub	a,wr9
	mov	a,MIN_SAMPLE_TIME/256
	sbc	a,wr8
	sz	c
	jmp	is_continue_sum

	jmp	set_adc_over	
not_base_point:	
	
	sz	BasePoint
	jmp	compare_next_p
is_continue_sum:
;	sub	a,9
;	snz	c
;	jmp	compare_next_p

	mov	a,wr0
	mov	ADC_ValueL,a
	mov	a,wr1
	mov	ADC_ValueH,A
	call	ADC_Value_Deal	
	mov	A,ADC_ValueH
	mov	wr3,A
	mov	A,ADC_ValueL
	mov	wr0,a

	mov	a,AC_setcunt_Point%256
	subm	a,wr0
	mov	a,AC_setcunt_Point/256
	sbcm	a,wr3
	sz	c
	jmp	add_ccongn
	
	cpl	wr3
	cpl	wr0
	mov	a,1
	addm	a,wr0
	mov	a,0
	adcm	a,wr3
add_ccongn:

	mov	a,wr0
	addm	a,wr5
	mov	a,wr3
	adcm	a,wr4

loading_sampSecon:
	inc	wr7
	sz	Z
	inc	wr6

compare_next_p:
	inc	wr9
	snz	Z
	jmp	sikip_hgekjhte
	inc	wr8	
sikip_hgekjhte:	

	mov	a,MAX_SAMPLE_TIME/256		;在此数内没有采样到0点,结束采样.
	sub	a,wr8
	mov	a,MAX_SAMPLE_TIME%256
	sbc	a,wr9
	sz	c

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -