📄 s608220v.src
字号:
disp_do:
AND FlagReg,#~FreshDisp
LD R7,DispStatus
CLR R6
ADD R7,R7
ADC R6,R6
ADD R7,DispStatus
ADC R6,#0
ADD R7,#DISP_CASE_TAB%256
ADC R6,#DISP_CASE_TAB/256
JP @RR6
DISP_CASE_TAB:
JP CaseDISP_NORMAL
JP CaseDISP_INLOW
JP CaseDISP_OUTHIGH
JP CaseDISP_DELAY_TIME
JP CaseDISP_DELAY_SET
JP CaseDISP_OUTUNNORMAL
;-------------------------------------------------------
CaseDISP_DELAY_SET:
CP DispSetTime,#0
JR EQ,change_to_disp_normal
WORK_LED ON
DELAY_LED ON
ERROR_LED OFF
TM FlagReg,#BLINK_500ms
JP NZ,skip_display_delay_set
OR DispBuf+0,#07Fh
OR DispBuf+1,#0FFh
OR DispBuf+2,#0FFh
RET
skip_display_delay_set:
TM FlagReg,#delay_short_long_flag
JR NZ,disp_long_delay_time
LD R6,#_5sec/256
LD R7,#_5sec%256
JP disp_adc_convert_bcd
disp_long_delay_time:
LD R6,#_120sec/256
LD R7,#_120sec%256
JP disp_adc_convert_bcd
change_to_disp_normal:
LD DispStatus,#DISP_NORMAL
OR FlagReg,#FreshDisp
RET
;-------------------------------------------------
CaseDISP_DELAY_TIME:
WORK_LED ON
ERROR_LED OFF
TM FlagReg,#BLINK_500ms
JR NZ,jump_delay_led_on
DELAY_LED OFF
JR jump_display_led_data
jump_delay_led_on:
DELAY_LED ON
jump_display_led_data:
CLR R6
LD R7,DelayTimeCnt
;-------------------------------------------------
disp_adc_convert_bcd:
CALL BCD_conversion
CALL set_display_data
RET
;--------------------------------------------------------
CaseDISP_NORMAL:
TM FlagReg,#IN_OUT_Volt_flag
JR Z,is_disp_out_volt
CP DispSetTime,#0
JR EQ,change_to_disp_out_volt
TM FlagReg,#BLINK_500ms
JR NZ,send_in_volt
OR DispBuf+0,#07Fh
OR DispBuf+1,#0FFh
OR DispBuf+2,#0FFh
RET
send_in_volt:
WORK_LED ON
DELAY_LED ON
ERROR_LED OFF
LD R6,DispInVolt
LD R7,DispInVolt+1
JP disp_adc_convert_bcd
change_to_disp_out_volt:
AND FlagReg,#~IN_OUT_Volt_flag
is_disp_out_volt:
WORK_LED ON
DELAY_LED ON
ERROR_LED OFF
LD R6,DispOutVolt
LD R7,DispOutVolt+1
CP R6,#VOLT_201V/256
JR ULT,end_CaseDISP_LLL
JR UGT,cmp_change_up_limit
CP R7,#VOLT_201V%256
JR ULT,end_CaseDISP_LLL
cmp_change_up_limit:
CP R6,#VOLT_237V/256
JR UGT,end_CaseDISP_NORMAL
JR ULT,change_220V_do
CP R7,#VOLT_237V%256
JR UGT,end_CaseDISP_NORMAL
change_220V_do:
LD Cnt300ms,#_300ms
skip_display_230:
LD R6,#0
LD R7,#220
JP disp_adc_convert_bcd
end_CaseDISP_NORMAL:
CP Cnt300ms,#0
JR NE,skip_display_230
JP skip_unnormaldisplay
CaseDISP_INLOW:
end_CaseDISP_LLL:
WORK_LED ON
DELAY_LED OFF
ERROR_LED ON
TM FlagReg,#BLINK_500ms
JP NZ,skip_display_OFF
OR DispBuf+0,#07Fh
OR DispBuf+1,#0FFh
OR DispBuf+2,#0FFh
RET
skip_display_OFF:
AND DispBuf+0,#80h
AND DispBuf+1,#80h
AND DispBuf+2,#80h
OR DispBuf+0,#(LED_OFF&(~80h))
OR DispBuf+1,#(CHAR_L&(~80h))
OR DispBuf+2,#(LED_OFF&(~80h))
RET
;--------------------------------------------------
CaseDISP_OUTUNNORMAL:
skip_unnormaldisplay:
CP DispOutVolt,#OUT_255V/256
JR UGT,display_outunnormal
CP DispOutVolt+1,#OUT_255V%256
JR ULT,skip_display_230
display_outunnormal:
WORK_LED ON
DELAY_LED OFF
ERROR_LED ON
TM FlagReg,#BLINK_500ms
JP NZ,skip_display_REAL_VOLT
OR DispBuf+0,#07Fh
OR DispBuf+1,#0FFh
OR DispBuf+2,#0FFh
RET
skip_display_REAL_VOLT:
LD R6,DispOutVolt
LD R7,DispOutVolt+1
JP disp_adc_convert_bcd
;===============
CaseDISP_OUTHIGH:
CP ProtectStatus,#PRO_WAITNORMAL
JR NE,skip_WORK_LED_ON
OR DispBuf+0,#0FFh
ERROR_LED ON
JR skip_display_outVOLT_H
skip_WORK_LED_ON:
OR DispBuf+0,#07Fh
skip_WORK_LED_OFF:
DELAY_LED OFF
ERROR_LED ON
TM FlagReg,#BLINK_500ms
JP NZ,skip_display_outVOLT_H
OR DispBuf+1,#0FFh
OR DispBuf+2,#0FFh
RET
skip_display_outVOLT_H:
AND DispBuf+0,#80h
AND DispBuf+1,#80h
AND DispBuf+2,#80h
OR DispBuf+0,#(LED_OFF&(~80h))
OR DispBuf+1,#(CHAR_H&(~80h))
OR DispBuf+2,#(LED_OFF&(~80h))
RET
;=====================================================================
DC_2V: .EQU 103
MAX_SAMPLE_TIME: .EQU 211
MIN_SAMPLE_TIME: .EQU 111
;---------------------------------------------------------------------
;返回ADC:RR0
;--------------------
SampleNew::
wait_first_do:
CLRWDT
TM UserFlag,#FreshAdc
JR Z,wait_first_do
AND UserFlag,#~FreshAdc
CLR R8
CLR R9
OR UserFlag,#BasePoint
CLR R4
CLR R5
CLR R6
CLR R7
wait_adc_act_over:
AND UserFlag,#~FreshAdc
wait_adc_act_over_:
CLRWDT
TM UserFlag,#FreshAdc
JR Z,wait_adc_act_over_
LD R0,AdataH
LD R1,AdataL
LD R3,R0
SUB R3,#DC_2V
JR NC,compare_c
COM R3
INC R3
compare_c:
CP R3,#2
JR UGT,not_base_point
TM UserFlag,#BasePoint
JR Z,is_end_point
AND UserFlag,#~BasePoint
CLR R8
CLR R9
JR compare_next_p
;--------------------
is_end_point:
CP R8,#MIN_SAMPLE_TIME/256
JR UGT,set_adc_over
JR ULT,is_continue_sum
CP R9,#MIN_SAMPLE_TIME%256
JR UGT,set_adc_over
JR is_continue_sum
;---------------
not_base_point:
TM UserFlag,#BasePoint
JR NZ,base_point_not_found
is_continue_sum:
CLR R3
RCF
RLC R0
RLC R3
RCF
RLC R0
RLC R3
OR R0,R1
SUB R0,#415%256
SBC R3,#415/256
JR NC,add_ccongn
COM R0
COM R3
ADD R0,#1
ADC R3,#0
add_ccongn:
ADD R5,R0
ADC R4,R3
INC R7
JR NZ,compare_next_p
INC R6
;------------
compare_next_p:
base_point_not_found:
INC R9
JR NZ,sikip_hgekjhte
INC R8
sikip_hgekjhte:
CP R8,#MAX_SAMPLE_TIME/256
JR UGT,set_adc_over
JR ULT,wait_adc_act_over
CP R9,#MAX_SAMPLE_TIME%256
JR ULT,wait_adc_act_over
set_adc_over:
LD R3,R6
OR R3,R7
JR Z,_is_return_zero
LD R0,R4
LD R1,R5
LD R3,R7
LD R2,R6
RCF
RRC R2
RRC R3
CALL dbl_divs ;
RET
_is_return_zero:
CLR R6
CLR R7
RET
;=====================================================================
VOLT_200: .EQU 260
;入口:ADC RR0 出口:电压 RR0
calc_volt::
SUB R1,#VOLT_200%256
SBC R0,#VOLT_200/256
JR NC,calc_continu_in
COM R1
COM R0
ADD R1,#1
ADC R0,#0
CALL calc_IN_volt_acture
COM R1
COM R0
ADD R1,#201
ADC R0,#0
JR NC,ret_zero_volt_in
JR rejtjel_in
calc_continu_in:
CALL calc_IN_volt_acture
ADD R1,#200
ADC R0,#0
rejtjel_in:
RET
ret_zero_volt_in:
CLR R1
CLR R0
RET
;=====================================
calc_IN_volt_acture:
LD R7,R1
LD R6,R0
RCF
RRC R6
RRC R7
RCF
RRC R6
RRC R7
RCF
RLC R1
RLC R0
LD R5,R1
LD R4,R0
ADD R1,R7
ADC R0,R6
RCF
RLC R5
RLC R4
RCF
RLC R5
RLC R4
ADD R1,R5
ADC R0,R4
LD R3,#13
CLR R2
CALL dbl_divs
RET
;=====================================
;保护处理进程:
; 保护类型:输出超压保护,输入低压保护,可自动恢复保护
;
;---------------------------------------------------------
;保护阀值定义
VOLT_201V: .equ 180
VOLT_237V: .equ 245
OUT_255V: .equ 245
OUT_260V: .equ 255
OUT_265V: .equ 265
OUT_180V: .equ 180
out_135V_OPEN: .equ 135
;保护状态字
PRO_255: .EQU 0*3
PRO_260: .EQU 1*3
PRO_265: .EQU 2*3
PRO_100: .EQU 3*3
PRO_NORMAL: .EQU 4*3
PRO_ACTIVE: .EQU 5*3
PRO_DELAY: .EQU 6*3
PRO_WAITNORMAL: .EQU 7*3
PRO255TIME: .EQU 10
PRO260TIME: .EQU 2
;--------------------------------------------------------------
deal_protect_function::
TM UserFlag,#ProtectEable
JR NZ,do_JDFJDF
RET
do_JDFJDF:
LD R6,#protect_case_tab/256
LD R7,#protect_case_tab%256
ADD R7,ProtectStatus
ADC R6,#0
JP @RR6
protect_case_tab:
JP CasePRO_255
JP CasePRO_260
JP CasePRO_265
JP CasePRO_100
JP CasePRO_NORMAL
JP CasePRO_ACTIVE
JP CasePRO_DELAY
JP CasePRO_WAITNORMAL
;---------------------------------------------
CasePRO_255:
LD R0,OutVoltValue
LD R1,OutVoltValue+1
CP R0,#(OUT_255V-4)/256
JR UGT,if_change_to_260
JR ULT,set_pro_normal
CP R1,#(OUT_255V-4)%256
JR UGE,if_change_to_260
set_pro_normal:
LD ProtectStatus,#PRO_NORMAL
LD DispStatus,#DISP_NORMAL
JR end_CasePRO_255
if_change_to_260:
CP R0,#OUT_260V/256
JR UGT,set_pro_260
JR ULT,end_CasePRO_255
CP R1,#OUT_260V%256
JR ULT,end_CasePRO_255
set_pro_260:
LD ProtectStatus,#PRO_260
LD Pro255Time,#PRO255TIME
LD DispStatus,#DISP_OUTHIGH
end_CasePRO_255:
RET
;-------------------------------
set_protect_active:
LD ProtectStatus,#PRO_ACTIVE
RET
;-----------------------------
CasePRO_260:
CP Pro255Time,#0
JR EQ,set_protect_active
CP Pro255Time,#0
JR EQ,set_protect_active
LD R0,OutVoltValue
LD R1,OutVoltValue+1
CP R0,#(OUT_260V-4)/256
JR UGT,if_change_to_265
JR ULT,set_pro_255
CP R1,#(OUT_260V-4)%256
JR UGE,if_change_to_265
set_pro_255:
LD ProtectStatus,#PRO_255
LD DispStatus,#DISP_NORMAL
JR end_CasePRO_260
if_change_to_265:
CP R0,#OUT_265V/256
JR UGT,set_pro_265
JR ULT,end_CasePRO_260
CP R1,#OUT_265V%256
JR ULT,end_CasePRO_260
set_pro_265:
LD ProtectStatus,#PRO_265
LD Pro260Time,#PRO260TIME
end_CasePRO_260:
RET
;---------------------------------
CasePRO_265:
CP Pro260Time,#0
JR EQ,set_protect_active
CP OutVoltValue,#(OUT_265V-4)/256
JR ULT,change_to_pro_260
JR UGT,GO_NEXTone123
CP OutVoltValue+1,#(OUT_265V-4)%256
JR UGT,GO_NEXTone123
change_to_pro_260:
LD ProtectStatus,#PRO_260
RET
GO_NEXTone123:
RET
CasePRO_100:
CP OutVoltValue,#(OUT_180V+8)/256
JR UGT,change_to_pro_normal
JR ULT,end_CasePRO_100
CP OutVoltValue+1,#(OUT_180V+8)%256
JR ULT,end_CasePRO_100
change_to_pro_normal:
LD ProtectStatus,#PRO_NORMAL
LD DispStatus,#DISP_NORMAL
end_CasePRO_100:
RET
;---------------------------------------------------
CasePRO_NORMAL:
CP OutVoltValue,#(OUT_180V)/256
JR UGT,if_change_to_255
JR ULT,set_pro_100
CP OutVoltValue+1,#(OUT_180V)%256
JR UGT,if_change_to_255
set_pro_100:
TM DELAY_300_display_flag,#01H
JR NZ,GO_disp_inlow
CP DELAY_time_display,#0
JR NZ,end_CasePRO_NORMAL
LD DELAY_time_display,#200
GO_disp_inlow:
CLR DELAY_300_display_flag
LD ProtectStatus,#PRO_100
LD DispStatus,#DISP_INLOW
JR end_CasePRO_NORMAL
if_change_to_255:
CP OutVoltValue,#OUT_255V/256
JR ULT,end_CasePRO_NORMAL
JR UGT,set_pr0_255
CP OutVoltValue+1,#OUT_255V%256
JR ULT,end_CasePRO_NORMAL
set_pr0_255:
TM DELAY_300_display_flag,#01H
JR NZ,GO_disp_OUTUNNORMAL
CP DELAY_time_display,#0
JR NZ,end_CasePRO_NORMAL
LD DELAY_time_display,#200
GO_disp_OUTUNNORMAL:
CLR DELAY_300_display_flag
LD DispStatus,#DISP_OUTUNNORMAL
LD ProtectStatus,#PRO_255
LD Pro255Time,#PRO255TIME
end_CasePRO_NORMAL:
RET
;---------------------------------------------------
CasePRO_ACTIVE:
RL1 OFF
LD ProtectStatus,#PRO_WAITNORMAL
end_CasePRO_ACTIVE:
RET
;---------------------------------------
CasePRO_DELAY:
CP OutVoltValue,#OUT_255V/256
JR ULT,IS_LOW_InVoltValue
JR UGT,change_to_wait_normal
CP OutVoltValue+1,#OUT_255V%256
JR UGE,change_to_wait_normal
IS_LOW_InVoltValue:
CP OutVoltValue,#out_135V_OPEN/256
JR ULT,change_to_wait_normal
JR UGT,delay_continue
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -