📄 ups300w46r23.asm
字号:
; **********************************************************
; *芯 片: 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 + -