📄 s597g1.src
字号:
RET
go_mmmm:
LD KeyStatus,#Key_continue
LD key_old,R7
LD key_three_sec_cnt,#_3sec
RET
;---------------------------
CaseKey_wait_release:
CP R7,#0
JR NE,key_not_release
LD KeyStatus,#Key_normal
key_not_release:
CLR R7
RET
;-------------------------------------------------------
CaseKey_normal:
CP R7,#0
JR EQ,end_of_CaseKey_normal
LD KeyStatus,#Key_uncertain
LD key_uncertain_time,#_UNCERTAINTIME
LD key_old,R7
end_of_CaseKey_normal:
CLR R7
RET
CaseKey_continue:
CP R7,key_old
JR NE,new_key_press
CP key_three_sec_cnt,#0
JR NE,exit_CaseKey_continue
LD KeyStatus,#Key_wait_release
CP R7,#K_IN_OUT
JR EQ,ret_K_inout3s
CLR R7
RET
ret_K_inout3s:
LD R7,#K_INOUT3s
RET
new_key_press:
LD key_uncertain_time,#_UNCERTAINTIME
LD KeyStatus,#Key_uncertain
exit_CaseKey_continue:
CLR R7
RET
;-------------------------------------------------------------------
K_NULL: .equ 00h
K_IN_OUT: .equ 01H
K_DELAY: .equ 02H
K_INOUT3s .equ 03H
deal_keyboard::
CALL read_key
CLR R6
LD R4,R7
ADD R7,R4
ADC R6,#0
ADD R7,R4,
ADC R6,#0
ADD R7,#key_case_tab%256
ADC R6,#key_case_tab/256
JP @RR6
key_case_tab:
JP CaseK_NULL
JP CaseK_IN_OUT
JP CaseK_DELAY
JP CaseK_INOUT3s
CaseK_NULL:
RET
;=================================
CaseK_DELAY:
TM delaydeal_f,#02H
JR NZ,go_hhh
AND FlagReg,#~PRECTION_FLAG
AND FlagReg,#~DELAY_FLAG
JR go_vvvvv
go_hhh:
OR FlagReg,#PRECTION_FLAG
OR FlagReg,#DELAY_FLAG
go_vvvvv:
CP DispStatus,#DISP_DELAY
JR EQ,is_key_delay
CP DispStatus,#DISP_NORMAL
JR EQ,is_thhgh
CP DispStatus,#DISP_PREC_PRESS
JR EQ,is_thhgh
CP DispStatus,#DISP_INVOLT
JR NE,is_thhgh
is_thhgh:
TM FlagReg,#PRECTION_FLAG
JR NZ,set_prec_high
LD precision,#PREC_L
JR exit_case_KEY_PRECISION
set_prec_high:
LD precision,#PREC_H
exit_case_KEY_PRECISION:
LD DispStatus,#DISP_PREC_PRESS
CLR SetDispTime
OR FlagReg,#FreshDisp
end_of_this_key:
RET
is_key_delay:
TM FlagReg,#DELAY_FLAG
JR NZ,go_set_delay_long
LD RelayOnTime,#_6s
JR go_skip_long_here
go_set_delay_long:
LD RelayOnTime,#_120s
go_skip_long_here:
RET
;=================================
CaseK_IN_OUT:
CP DispStatus,#DISP_DELAY
JR EQ,is_delay_status
TM UserFlag,#DispUnchange
JR Z,no_display_cuur
CP DispStatus,#DISP_NORMAL
JR EQ,set_disp_involt
CP DispStatus,#DISP_INVOLT
JR EQ,set_disp_normal_
CP DispStatus,#DISP_PREC_PRESS
JR EQ,set_disp_normal_
RET
no_display_cuur:
CP DispStatus,#DISP_NORMAL
JR EQ,set_disp_involt
CP DispStatus,#DISP_INVOLT
JR EQ,set_disp_normal_
CP DispStatus,#DISP_PREC_PRESS
JR EQ,set_disp_normal_
RET
set_disp_involt:
LD DispStatus,#DISP_INVOLT
CLR SetDispTime
OR FlagReg,#FreshDisp
RET
set_disp_normal_:
LD DispStatus,#DISP_NORMAL
OR FlagReg,#FreshDisp
is_delay_status:
RET
;=================================
CaseK_INOUT3s:
XOR UserFlag,#DispUnchange
LD DispStatus,#DISP_NORMAL
skip_unchange:
RET
;=================================
GetMaxMinData::
AND UserFlag,#~FreshAdc
watie_djfdkfjDSL:
CLRWDT
TM UserFlag,#FreshAdc
JR Z,watie_djfdkfjDSL
CLR R0
CLR R1
LD R2,#0FFH
LD R3,#0FFH
start_get_:
AND UserFlag,#~FreshAdc
waite_over__:
CLRWDT
TM UserFlag,#FreshAdc
JR Z,waite_over__
CLR R4
LD R5,AdataH
LD R8,AdataL
AND R8,#03H
RCF
RLC R5
RLC R4
RCF
RLC R5
RLC R4
OR R5,R8
CP R4,R0
JR UGT,set_max
JR ULT,check_min
CP R5,R1
JR ULE,check_min
set_max:
LD R0,R4
LD R1,R5
JR check_min
check_over_time:
SUB R7,#1
SBC R6,#0
JR NC,waite_over__
RET
check_min:
CP R4,R2
JR UGT,check_over_time
JR ULT,set_min
CP R5,R3
JR UGE,check_over_time
set_min:
LD R2,R4
LD R3,R5
JR check_over_time
;----------------------------------------------------------------
cal_outvolt::
LD R1,R7
LD R0,R6
SUB R1,#OUT_100ADC%256
SBC R0,#OUT_100ADC/256
JR NC,calc_continu_out
COM R1
COM R0
ADD R1,#1
ADC R0,#0
CALL calc_IN_volt_acture
COM R1
COM R0
ADD R1,#221
ADC R0,#0
JR NC,ret_zero_volt
JR rejtjel
calc_continu_out:
CALL calc_IN_volt_acture
ADD R1,#220
ADC R0,#0
rejtjel:
LD OutVoltValue+1,R1
LD OutVoltValue,R0
RET
ret_zero_volt:
CLR OutVoltValue+1
CLR OutVoltValue
RET
;=================================
DC_2V: .EQU 102
MAX_SAMPLE_TIME: .EQU 240
MIN_SAMPLE_TIME: .EQU 122
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,#3
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,#407%256
SBC R3,#407/256
JR NC,add_ccongn
COM R0
COM R3
ADD R0,#1
ADC R3,#0
add_ccongn:
ADD R5,R0
ADC R4,R3
JR OV,is_overflow
LD R11,R5
LD R10,R4
JR is_not_overflow
is_overflow:
LD R5,R11
LD R4,R10
JR set_adc_over
is_not_overflow:
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
JP 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
LD R7,R1
LD R6,R0
RET
_is_return_zero:
CLR R6
CLR R7
RET
;=================================
VOLT_200: .EQU 285
calc_involt::
;=================================
LD R1,R7
LD R0,R6
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,#222
ADC R0,#0
JR NC,ret_zero_volt_in
JR rejtjel_in
calc_continu_in:
CALL calc_IN_volt_acture
ADD R1,#219
ADC R0,#0
rejtjel_in:
LD InVoltValue+1,R1
LD InVoltValue,R0
RET
ret_zero_volt_in:
CLR InVoltValue+1
CLR InVoltValue
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
;=================================
dbl_divs::
CLRWDT
LD R6,#16
CLR R4
CLR R5
_divs_do:
RCF
RLC R1
RLC R0
RLC R5
RLC R4
CP R4,R2
JR ULT,no_go
JR UGT,go_sub
CP R5,R3
JR ULT,no_go
go_sub:
SUB R5,R3
SBC R4,R2
OR R1,#1
sub_en:
no_go:
DEC R6
JR NZ,_divs_do
RET
;=================================
deal_input::
LD ADCON,#TEMP_ADCONTROL|START_ADC
LD R7,#30
CLR R6
CALL GetMaxMinData
LD TempValue,R0
LD TempValue+1,R1
LD ADCON,#KEYADCON|START_ADC
LD R7,#30
CLR R6
CALL GetMaxMinData
LD KeyAdcValue,R0
LD KeyAdcValue+1,R1
Continue_Sample:
LD ADCON,#OUTVOLT_ADCONTROL|START_ADC
CALL SampleNew
INC Out_Volt_Count
ADD Out_Volt_before+1,R7
ADC Out_Volt_before,R6
CP Out_Volt_Count,#3
JR ULE,Continue_Sample
RCF
RRC Out_Volt_before
RRC Out_Volt_before+1
RCF
RRC Out_Volt_before
RRC Out_Volt_before+1
LD R6,Out_Volt_before
LD R7,Out_Volt_before+1
CLR Out_Volt_before
CLR Out_Volt_before+1
CLR Out_Volt_Count
LD OutVoltRegulate+1,R7
LD OutVoltRegulate,R6
CALL cal_outvolt
LD ADCON,#INVOLT_ADCONTROL|START_ADC
CALL SampleNew
CALL calc_involt
RET
;=================================
OUT_100ADC: .EQU 295
PREC_H: .EQU 3
PREC_L: .EQU 9
OutVoltRegulate: .RAM_DS 2
Out_Volt_before: .RAM_DS 2
Out_Volt_Count: .RAM_DS 1
auto_regulate::
CLR R2
LD R7,OutVoltRegulate+1
LD R6,OutVoltRegulate
SUB R7,#OUT_100ADC%256
SBC R6,#OUT_100ADC/256
JR NC,skip_abs
LD R2,#1
COM R7
COM R6
ADD R7,#1
ADC R6,#0
skip_abs:
CP R6,#0
JR NZ,start_regulate
CP R7,precision
JR UGT,start_regulate
CLR RegulateTime
VoltUndo
RET
start_regulate:
CALL calc_regulate_time
LD RegulateTime,R0
CP R2,#1
JR EQ,set_volt_up
VoltUp
RET
set_volt_up:
VoltDn
RET
;=================================
;调节时间计算
;----------------------------------------------
calc_regulate_time::
CLR R0
cal_regulate_time_conti:
CP R6,#0
JR NE,OVER_255_timr
CP R7,#5
JR ULT,set_regulat_low
CP R7,#20
JR UGT,OVER_255_timr
LD R0,R7
RCF
RRC R7
RCF
RRC R7
RCF
RRC R7
ADD R0,R7
RET
OVER_255_timr:
LD R0,#100
RET
set_regulat_low:
LD R0,#3
RET
;=================================
start_up:
DI
init_io_function
LD R0,#0bfH
RAM_Clear:
CLR @R0
DEC R0
JR NZ,RAM_Clear
CLR @R0
CALL init_parameter
LD DispBuf+0,#LED_OFF
LD DispBuf+1,#LED_OFF
LD DispBuf+2,#LED_OFF
EI
ALARM_UNDO
main::
CLRWDT
CALL deal_input
CALL auto_regulate
CALL deal_keyboard
CLRWDT
CALL deal_display
CALL deal_protect
JR main
;=================================
init_parameter::
buzzer_on
LD FreshDipsTimer,#_500ms
LD DispStatus,#DISP_DELAY
LD SystemTimer,#_4ms
LD LedBlinkTimer,#_200ms
LD SeconCnt,#_1s
OR FlagReg,#RelayStatus
AND FlagReg,#~DELAY_FLAG
LD precision,#PREC_H
OR FlagReg,#PRECTION_FLAG
LD RelayOnTime,#_6s
AND UserFlag,#~DispUnchange
LD Timer2ms,#(_4ms)/2
LD VoltProtect10s,#_10s
LD VoltProtect5s,#_5s
LD VoltProtect3s,#_3s
OR delaydeal_f,#80H
CLR Out_Volt_before
CLR Out_Volt_before+1
CLR Out_Volt_Count
RET
;=================================
.END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -