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

📄 ups300w46r23.asm

📁 工频后备式UPS-300W
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;             **********************************************************  
;	      *芯    片: HT46R23-28PIN                                 *		
;             *电气参数:390W/220-230V/50Hz                                *
;             *通信方式:智能通信UPSilon2000 			       *             

;             **********************************************************
;	      *                       掩膜设置                         *
;             *1,PA口:PA0-7全设为Non-wake-up;PA0,PA4,PA5(Pull-High)   *
;	      *2,PB口:全设为(Non-Pull-High).                         *
;	      *3,PC口:全设为(Pull-High)                              *
;	      *4,PD口:全设为(Non-Pull-High)                         *
;	      *5,其它功能禁用。                                        *
;	      *6,频率:8MHz;电压5V				       *
;	      **********************************************************
;                                           优化记录
; ————————————————————————————————————————————————————————————————————————————————————————————————————————

		include"HT46R23.INC"
		
		
RAM_define  .SECTION  AT 40H 'DATA'		
wr0			DB	1	;40	
wr1			DB	1	;41
wr2			DB	1	;42
wr3			DB	1	;43
wr4			DB	1	;44
wr5			DB	1	;45
wr6			DB	1	;46
wr7			DB	1	;47
wr8			DB	1	;48
wr9			DB	1	;49
PWM_off_data		DB	1	;4A
PWM_Flag		DB	1	;4B
Power_Flag		DB	1	;4C
ADC_ValueH		DB	1	;4D
ADC_ValueL		DB	1	;4E
OUT_ADValueH		DB	1	;4F
OUT_ADValueL		DB	1	;50H
In_ADValueH		DB	1	;51H
In_ADValueL		DB	1	;52H
BAT_ADValueH		DB	1	;53H
BAT_ADValueL		DB	1	;54H
SHORT_ADValueH		DB	1	;55H
SHORT_ADValueL		DB	1	;56H
Command_dataH		DB	1	;57H
Command_dataL		DB	1	;58H
delay_500usRAM		DB	1	;59H
ceg0ram			DB	1	;5AH	
ceg1ram			DB	1	;5bH
ceg2ram			DB	1	;5cH
delay_10ms_timer	DB	1	;5DH
old_PWM_DATA		DB	1	;5EH
Adc_OUT_Time		DB	1	;5FH
Start_Run_Time		DB	1	;60H			
status_save		DB	1	;61H
a_back			DB	1	;62H
PWM_on_time		DB	1	;63H
PWM_off_time		DB	1	;64H
PWM_on_data		DB	1	;65H
Relay_Flag		DB	1	;66H
system_flag		DB	1	;67H
Ac_ZeroCount		DB	1	;68H
wr00			DB	1	;69H
wr01			db	1	;6ah
Shor_Count		db	1	;6bh
Coun_Timer1ms		db	1	;6ch
Send_DataBit		db	1	;6dh		;发送位数计数
Send_DataBuffer		db	1	;6eh		;发送数据暂存
Save_ADRL		db	1	;6fh
AC_RelayDelayTime	db	1	;70h
Frequency_dataBuffer	db	1	;71h
Frequency_data		DB	1	;72H
ShareTime_1ms		db	1	;73h
ShareTime_100ms		db	1	;74h
TurnOn_StartDelay	db	1	;75h
AC_Direction		db	1	;76h
AC_Direction_buffer	db	1	;77H
KEY_STATUS		db	1	;78h
Key_DelayTime		db	1	;79h
System_fault_Flag	db	1	;7ah
Cut_Power_Time		db	1	;7bh
ShareTime_1s		db	1	;7ch
Ac_Charge_KineTime	db	1	;7dh
Battery_Low_Cunt	db	1	;7eh
Buzzer_CryTime		db	1	;7fh
Batter_CapaL		DB	1	;80H
Batter_CapaH		db	1	;81H
Batter_AddCunt		db	1	;82h
Soft_ShutDownTS		db	1	;83h
Timer_1Mimuter		db	1	;84h
Forst_LoadSetCunt	db	1	;85h
Looking_DataL		db	1	;86h
Over_Count		db	1	;87h
OutCurrenRAM_H		db	1	;88h
OutCurrenRAM_L		db	1	;89h
OutCurrenRAML_Buffer	db	1	;8ah
OutCurrenRAMH_Buffer	db	1	;8bh
OutCurCuntT		db	1	;8ch
Ac_Status_Save		db	1	;8dh
Soft_ShutDownTM		db	1	;8eh
Load_Sege		db	1	;8fh
Batt_Low_Count		db	1	;90h
Lh			db	1	;91h	;被乘数或乘数的高字节
Ll			db	1	;92h	;被乘数或乘数的低字节
Lh2			db	1	;93h	;乘数高字节
Ll2			db	1	;94h	;乘数低字节
tmp4			db	1	;95h	;低字节的乘积结果
tmp5			db	1	;96h	;高字节的乘积结果
Start_INV_Time		DB	1	;97H	;逆变初始脉宽时间。
skip_PWM_data		db	1	;98h	;转逆变第一个脉宽
Buzzer_Cry_Sta		db	1	;99h	;蜂鸣器消音标志。
TestInvTime		db	1	;9ah	;市电正常时测试逆变时间。
In_ADValueL_add		db	1	;9BH
In_ADValueH_add		DB	1	;9CH	;输入采样值累加值。
Input_ADC_SapCunt	db	1	;9dh	;输入采样完成次数。
In_ADV_BufH		db	1	;9eh
In_ADV_BufL		db	1	;9fh
Data_Effic_Cunt		db	1	;a0h
Incep_Data		db	1	;a1h
Incept_bit		db	1	;a2h
Incept_Save_data	db	1	;a3h
Inv_resut_AC_Cunt	db	1	;a4h
Computer_command	db	1	;a5h
Computer_command1	db	1	;a6h
Computer_command2	db	1	;a7h
Computer_command3	db	1	;a8h
Computer_command4	db	1	;a9h

RAM2_define  	.SECTION  AT 0E0H 'DATA'
Adrh_Buffer		db	1	;0e0h
Adrl_Buffer		db	1	;0e1h
Load_SegBufferCunt	db	1	;0e2H
ADCR_Buffer		db	1	;0e3h
EOCB_Buffer		db	1	;0e4h
Rs232BattGist		db	1	;0e5h
SampDelaytime		db	1
Ac_OverLoadDelayCount	db	1
FullLoadDelaTime	db	1
LoadFullShineTime	db	1
Batter_TestCunt		db	1
LEDBlink_Timer		db	1		
;********宏定义*********************
ADC_RUN_start	macro	
	set	EOCB	
	clr 	START
	set 	START 		; reset A/D
	clr 	START 		; start A/D
		endm
		
Samp_Out_set	macro
	clr	adcr.0
	clr	adcr.1
	clr	adcr.2
		endm
		
Samp_IN_set	macro
	set	adcr.0
	clr	adcr.1
	clr	adcr.2
		endm
	
Samp_BAT_set	macro
	clr	adcr.0
	set	adcr.1
	clr	adcr.2
		endm
		
Samp_OutCurren	macro
	clr	adcr.0
	clr	adcr.1
	set	adcr.2
		endm
		
Samp_SHORT_set	macro
	set	adcr.0
	set	adcr.1
	clr	adcr.2
		endm
;---------------------------------------		
RedLed_ON	macro
	SET	pc4
		endm
		
RedLed_OFF	macro
	clr	pc4
		endm
		
YelLed_ON		macro
	set	pc2
		endm
YelLed_OFF		macro
	clr	pc2
		endm
		
GreLed_ON	macro
		
	set	pc3
	
		endm
GreLed_OFF	macro
		
	clr	pc3
	        endm
;------------------------------------------
OUT_HoistVoltage	macro
	set	pb5		;RL2
	clr	pa2		;RL3
	endm
OUT_BypassVoltage	macro
	clr	pb5		;RL2
	clr	pa2		;RL3
	endm
OUT_LowerVoltage	macro
	clr	pb5		;RL2
	set	pa2		;RL3
	endm
CUT_InputAC	macro
	clr	pa1
	clr	pa2
	clr	pb5
		endm
TurnOn_InputAC	macro
	set	pa1
		endm
PWM_Switch_off	macro
	set	pc0
	set	pc1
	set	pa0
		endm			

;********数据定义***************
;EMI	INCT0.0		;总中断控制
;EEI	INCT0.1		;外部中断使能设定1,使能,0禁止.
;ETI	INCT0.2		;计时中断使能
;EADI	INCT0.3		;A/D转换是断使能
;EIF	INCT0.4		;外部中断运行标志,1运行;0无运行.
;TF	INCT0.5		;计时中断运行标志,1运行;0无运行.
;ADF	INCT0.6		;A/D转换中断标志
TurnOn_INI_PwmOn	equ	20		;开机时初始开通脉宽

PWMStart_On_Time	EQU	55
INV_OUT_VOLT_220V	EQU	73f0H	;8413h;85e1h;8278h;	;根据方波有效值得出的现有变压器(500W)反馈值对应230V参考数。
INV_VoltMAX_SetPWM	EQU	0a0h	;151H
Ac_voltage_lower	equ	280	
PWM_CycleTime		EQU	99
PMW_FirstON		EQU	Power_Flag.0
Shut_Down_Flag		EQU	Power_Flag.1
START_ADC		EQU	Power_Flag.2
BasePoint		EQU	Power_Flag.3
INV_FullLoad_Flag	EQU	Power_Flag.4
ACDownhalf		equ	Power_Flag.5
;66h
Relay_Flag1		EQU	Relay_Flag.0
Relay_Flag2		EQU	Relay_Flag.1
Relay_Flag3		EQU	Relay_Flag.2
Normal_INV_Test		equ	Relay_Flag.3
AC_Power_Load		equ	Relay_Flag.4
MessageDate		equ	Relay_Flag.5
Sent_Data_Star		equ	Relay_Flag.6
Sent_Data_end		equ	Relay_Flag.7
;067h
System_Stat_Flag	EQU	system_flag.0		;0,系统工作正常,1,过载/欠压/短路保护
Ac_Status_Flag		EQU	system_flag.1		;0,市电正常.1,市电不正常.
DC_Status_Flag		EQU	system_flag.2		;0,正常逆变工作。1,未进入正常逆变。
AC_FastCut_flag		EQU	system_flag.3
AC_Frequency_Start	EQU	system_flag.4
system_POWER		equ	system_flag.5
Power_Switch		equ	system_flag.6
Inverter_INI		EQU	system_flag.7
;7ah
Battery_Low		equ	System_fault_Flag.0
Battery_Lack		equ	System_fault_Flag.1
Over_Load		equ	System_fault_Flag.2
Out_Load_Short		equ	System_fault_Flag.3
system_DisSwitch	equ	System_fault_Flag.4
Batter_Full		equ	System_fault_Flag.5
Send_StarFlag		equ	System_fault_Flag.6
Send_Date_Flag		equ	System_fault_Flag.7
;----------------------------------------------------
Bat13V5			equ	440
Bat13V4			equ	435
Bat12V9			equ	425
Bat12V5			equ	408
Bat12V0			equ	392
Bat11V5			equ	375
Bat11V0			equ	359
Bat10V5			equ	343
Bat10V0			equ	313;326
Batt_1sege		equ	ceg0ram.5
Batt_2sege		equ	ceg0ram.1
Batt_3sege		equ	ceg1ram.5
Batt_4sege		equ	ceg1ram.1
Batt_5sege		equ	ceg2ram.5

Load_1Sege		equ	ceg0ram.6
Load_2Sege		equ	ceg0ram.2
Load_3Sege		equ	ceg1ram.6
Load_4Sege		equ	ceg1ram.2
Load_5Sege		equ	ceg2ram.6

BATT_Work_Disp		equ	ceg0ram.3
Out_OverLoad		equ	ceg1ram.3
AC_Nomal_Disp		equ	ceg0ram.7
Charge_Disp		equ	ceg1ram.7
Fault_Disp		equ	ceg2ram.7
Test_INV_DelayTime	equ	6		;逆变测试时间
min_ADoutValue		EQU	055H
Led_Blink_Time		equ	5
MAX_SAMPLE_TIME		equ	155;264
MIN_SAMPLE_TIME		equ	100;139
Zero_Point_Min		equ	60h;389;		;(1.85v);对应190H(1.33V)	
Zero_Point_Max		equ	65h;409;		;(2v);对应19AH(2.60V)
AC_Zero_Point		EQU	63h;399		;1.95V
AC_setcunt_Point	equ	396;395		;1.93v
;市电电压动作点;
AC_165V			EQU	165
AC_175V			EQU	175
AC_200V			EQU	203
AC_210V			EQU	210
AC_230V			EQU	236
AC_240V			EQU	244
AC_265V			EQU	265
AC_275V			EQU	277
;---------------------------------------------------------------------
;输出功率调整
;----------------------------------------
DCOut80W		equ	22     ;40
DCOut160W		equ	88    ;145
DCOut240W		equ	198    ;290
DCOut320W		equ	310    ;440
DCOut400W		equ	450
DCOut450W		equ	540		;超载恢复
DCOut500W		equ	590		;超载点
DCOut550W		equ	700;250h	;过载保护点

DC_Short_AD		equ	950
;改电流采样参数后调节(2006-9-22)。
ACOut80W		equ	4   ;50	;110		;78w		50
ACOut160W		equ	65  ;152	;188		;156W		122
ACOut240W		equ	134  ;234	;240		;234W		190
ACOut320W		equ	213  ;312	;370		;312W		252
ACOut400W		equ	282  ;420	;456		;390W		305
ACOut650W		equ	423  ;485	;880		;430W	功率110%;330
ACOut700W		equ	486  ;520	;930		;468W		353		
;AC_Short_AD		equ	1000
;-----------------------------------------
ASCII_SPACE         EQU      20H
ASCII_BE            EQU      23H
ASCII_START         EQU      28H
ASCII_GON	    EQU      2DH	
ASCII_DOT           EQU      2EH
ASCII_0             EQU      30H
ASCII_1             EQU      31H
ASCII_2             EQU      32H
ASCII_3             EQU      33H
ASCII_4             EQU      34H
ASCII_5             EQU      35H
ASCII_6             EQU      36H
ASCII_7             EQU      37H
ASCII_8             EQU      38H
ASCII_9             EQU      39H
ASCII_A             EQU      41H
ASCII_B             EQU      42H
ASCII_C             EQU      43H
ASCII_D             EQU      44H
ASCII_E             EQU      45H
ASCII_F             EQU      46H
ASCII_G             EQU      47H
ASCII_H             EQU      48H
ASCII_I             EQU      49H
ASCII_J             EQU      4AH
ASCII_K             EQU      4BH
ASCII_L             EQU      4CH
ASCII_M             EQU      4DH
ASCII_N             EQU      4EH
ASCII_O             EQU      4FH
ASCII_P             EQU      50H
ASCII_Q             EQU      51H
ASCII_R             EQU      52H
ASCII_S             EQU      53H
ASCII_T             EQU      54H
ASCII_U             EQU      55H
ASCII_V             EQU      56H
ASCII_W             EQU      57H
ASCII_X             EQU      58H
ASCII_Y             EQU      59H
ASCII_Z             EQU      5AH
ASCII_CR            EQU      0DH	
;********程序定位***************
program_writ    .SECTION    AT  00H  'CODE'
	ORG	00H
 	jmp	program_start
	
	ORG	04
	jmp	interrup_ext
	ORG	08H
	jmp	interrup_timer
;	ORG	0ch
;	reti
	ORG	10H
	jmp	interrup_IIC

;*************端口初始化****************
program_start:
	clr	emi
	mov	a,01100000b
	mov	PAC,a
	mov	a,01011111b
	mov	pbc,a
	clr	PCC
	mov	a,00000001b	;pd0 Key input,pd1 Swich (output)
	mov	pdc,a
	clr	pa
	clr	pd1
	clr	pa3
	set	pc0
	set	pc1
	set	pa7

	
;**********RAM清零***********
	mov	a,0ffh
	mov	wr0,a
	mov	a,40h
	mov	mp0,a
	
clearRAM_loop:
	clr	[00h]		
	inc	mp0
	sdz	wr0
	jmp	clearRAM_loop
;*******中断初始化************************

	mov	a,00000110b		
	mov	intc0,a
	mov	a,00
	mov	intc1,a
	clr	tmrh
	clr	tmrl
	mov	a,09bh
	mov	tmrc,a
;********ADC初始化************************
	mov	a,00101000B
	mov	ADCR,a
	clr	acsr
	set	acsr.0
	clr	adrh
	clr	adrl
;********寄存器初值*******************
	mov	a,TurnOn_INI_PwmOn
	mov	PWM_on_data,a
	mov	a,150
	mov	Start_INV_Time,a
	set	Relay_Flag3
	set	DC_Status_Flag
	set	emi	
			
;************************************

	
	
main:
	call	display_LED
	call	inverter_deal

	call	AC_Adjust_OutVoltage

	call	Key_Status_Disposal
	call	System_Fault_Judgement
	call	Buzzer_WorkingControl
	call	RS232_Message_run
		
	call	Shut_Down_Control
	jmp	main
	
;**************************************
interrup_ext:
	
	mov	a_back,a
	mov	a,STATUS
	mov	status_save,a

	sz	AC_Frequency_Start
	jmp	clr_AC_frequen

	set	AC_Frequency_Start
	jmp	exit_meseege
clr_AC_frequen:
	mov	a,Frequency_dataBuffer
	mov	Frequency_data,a
	clr	Frequency_dataBuffer

	jmp	exit_meseege
;**************************************
interrup_timer:

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

	mov	a,0ffh		;100us
	mov	tmrh,a
	mov	a,09dh		;09dh(芯片用数据)	;0A3h
	mov	tmrl,a
	
Timer_set1:
;判系统状态
	snz	system_POWER
	jmp	Timer_set_Star

	sz	Sent_Data_Star		;允许UPS开始发送数据?
	jmp	Running_SendData	;UPS接收计算机指令完成后去发送。
	sz	MessageDate		;
	jmp	Save_InceptData		;ups接收到数据。
	sz	pa6
	jmp	NO_INCEPT

	sz	Data_Effic_Cunt
	jmp	At_Conet_DATA
	mov	a,9
	mov	Incept_bit,a
	set	MessageDate		;找到了开始点。
	jmp	Timer_set_Star
At_Conet_DATA:
	dec	Data_Effic_Cunt
	jmp	Timer_set_Star
	
NO_INCEPT:
	
	mov	a,2
	mov	Data_Effic_Cunt,a
	jmp	Timer_set_Star
Save_InceptData:
	sz	Incept_bit
	jmp	at_Neem_bit
	clr	MessageDate
	mov	a,Incep_Data
	mov	[02h],a	
	inc	mp1
	
	mov	a,ASCII_CR
	xor	a,Incep_Data
	snz	Z
	jmp	Timer_set_Star
	clr	Incep_Data
	set	Sent_Data_Star		;接收完成。
	jmp	Timer_set_Star
at_Neem_bit:
	sz	Data_Effic_Cunt
	jmp	At_ocolc_cunt

	dec	Incept_bit
	rr	Incep_Data
	mov	a,3
	mov	Data_Effic_Cunt,a
	sz	pa6
	jmp	next_Bit_In
	clr	Incep_Data.7
	jmp	Timer_set_Star
At_ocolc_cunt:

	dec	Data_Effic_Cunt
	jmp	Timer_set_Star

next_Bit_In:
	
	set	Incep_Data.7
	jmp	Timer_set_Star
;**********************************************

Running_SendData:
	
	snz	Send_StarFlag		;发送数据处理完成?	
	jmp	Timer_set_Star

	snz	Send_Date_Flag		;发完起始位去发送8位数据.
	jmp	Send_Running
		
	sz	Send_DataBit		;8位数据发送完成?
	jmp	Next_Bit_Send
	set	pa7			;完成发送一个字节。
	mov	a,[00h]
	xor	a,ASCII_CR		;回答完毕?
	sz	Z
	jmp	set_endBit		;停止发送。
	mov	a,8;12			;数据8用于USB口通讯未调好.(准备下一字节的发送间隔时间)。
	mov	Data_Effic_Cunt,a
	mov	a,8
	mov	Send_DataBit,a
	clr	Send_Date_Flag		;允许发送起始位
	inc	mp0
	mov	a,[00h]
	mov	Send_DataBuffer,a
	jmp	Timer_set_Star		;发送完一个字节。
Next_Bit_Send:
	sz	Data_Effic_Cunt
	jmp	set_Curen_Bit
	dec	Send_DataBit
	mov	a,4
	mov	Data_Effic_Cunt,a

	clr	c
	rrc	Send_DataBuffer
	jmp	exit_meseege0
set_Curen_Bit:
	sz	Send_DataBuffer.0
	jmp	Send_dataHige
	clr	pa7
	jmp	exit_meseege0
Send_Running:
	sz	pa7
	jmp	Clr_PA7Start_Send
	sz	Data_Effic_Cunt		;
	jmp	exit_meseege0
	mov	a,4
	mov	Data_Effic_Cunt,a
	set	Send_Date_Flag		;开始发送位。
	jmp	exit_meseege0
Clr_PA7Start_Send:
	sz	Data_Effic_Cunt		;
	jmp	exit_meseege0
	clr	pa7

	mov	a,3
	mov	Data_Effic_Cunt,a
	jmp	exit_meseege0	
Send_dataHige:
	set	pa7			
	jmp	exit_meseege0
set_endBit:
	clr	Send_StarFlag
	clr	Sent_Data_Star		; 发送完成禁止发送 准备接收指令
	mov	a,0a5h
	mov	mp1,a
	jmp	Timer_set_Star
exit_meseege0:
	dec	Data_Effic_Cunt	
;***************************************************************		
Timer_set_Star:	
	sz	AC_Frequency_Start
	inc	Frequency_dataBuffer
	sz	System_Stat_Flag	;系统故障标志。
	jmp	System_Fault_int
	snz	Ac_Status_Flag		;市电不正常?	
	jmp	Ac_working_int
	snz	DC_Status_Flag		;逆变未进入正常工作?
	jmp	INV_Working_int
	
	
;----------逆变未正常工作时处理。-------------------------
	CUT_InputAC
	PWM_Switch_off
	mov	a,50
	mov	AC_RelayDelayTime,a	;延时6秒恢复市电
	
	mov	a,10
	mov	Start_INV_Time,a	;窄脉冲时间.
	
;需要增加的计时器。
	mov	a,PWMStart_On_Time
	mov	skip_PWM_data,a
		
	SZ	Start_Run_Time		;逆变开通延时时间.
	jmp	Share_Timer
	clr	DC_Status_Flag		;市电->逆变转换延时到,准备正常逆变工作。
	
	sz	AC_FastCut_flag
	jmp	AC_FastCut_Deal
	
	mov	a,98
	sub	a,AC_Direction
	sz	c
	jmp	set_PWM03Start
	mov	a,180
	sub	a,AC_Direction
	sz	c
	jmp	set_PWM01Start
	jmp	set_PWM03Start
AC_FastCut_Deal:
	mov	a,190
	sub	a,Frequency_data
	snz	c
	jmp	dow_ACcut_set
	

⌨️ 快捷键说明

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