📄 ups390w r23.asm
字号:
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 + -