📄 s608220v.src
字号:
LD OutVoltValue,R0
CLR R6
LD R7,OutputStatus
ADD R7,#Count_InVolt_TAB%256
ADC R6,#Count_InVolt_TAB/256
CALL @RR6
LD InVoltValue+1,R1
LD InVoltValue,R0
LD ADCON,#KEYADCON|START_ADC
LD R7,#30 ; 30 * 50us=1.5ms
CLR R6
CALL GetMaxMinData
LD KeyAdcValue,R0
LD KeyAdcValue+1,R1
RET
;==============================
Count_InVolt_TAB::
JP regelate_method0_InVolt
JP regelate_method1_InVolt
JP regelate_method2_InVolt
JP regelate_method3_InVolt
JP regelate_method4_InVolt
JP regelate_method5_InVolt
JP regelate_method6_InVolt
JP regelate_method7_InVolt
;------------
regelate_method0_InVolt:
LD R3,#77%256
LD R2,#77/256
CALL multiplication
LD R3,#120%256
LD R2,#120/256
CALL dbl_divs
RET
;------------
regelate_method1_InVolt:
LD R3,#77%256
LD R2,#77/256
CALL multiplication
LD R3,#109%256
LD R2,#109/256
CALL dbl_divs
RET
;------------
regelate_method2_InVolt:
LD R3,#90%256
LD R2,#90/256
CALL multiplication
LD R3,#120%256
LD R2,#120/256
CALL dbl_divs
RET
;------------
regelate_method3_InVolt:
LD R3,#90%256
LD R2,#90/256
CALL multiplication
LD R3,#109%256
LD R2,#109/256
CALL dbl_divs
RET
;------------
regelate_method4_InVolt:
LD R3,#104%256
LD R2,#104/256
CALL multiplication
LD R3,#120%256
LD R2,#120/256
CALL dbl_divs
RET
;------------
regelate_method5_InVolt:
LD R3,#104%256
LD R2,#104/256
CALL multiplication
LD R3,#109%256
LD R2,#109/256
CALL dbl_divs
RET
;------------
regelate_method6_InVolt:
LD R3,#118%256
LD R2,#118/256
CALL multiplication
LD R3,#120%256
LD R2,#120/256
CALL dbl_divs
RET
;------------
regelate_method7_InVolt:
LD R3,#118%256
LD R2,#118/256
CALL multiplication
LD R3,#109%256
LD R2,#109/256
CALL dbl_divs
RET
;========================================
;按键AD当量
delaydeal_f: .RAM_DS 1
IN_OUT_KEY: .equ 209
DELAY_KEY: .equ 336
DIM: .EQU 45
IN_OUT_KEYB: .equ 146
DELAY_KEYB: .equ 900
read_key::
CLR R7
LD R2,KeyAdcValue
LD R3,KeyAdcValue+1
TM delaydeal_f,#80H
JR Z,go_wqe
SUB R3,#DELAY_KEYB%256
SBC R2,#DELAY_KEYB/256
JR NC,delay_6
LD RelayOnTime,#_120s
OR FlagReg,#delay_short_long_flag
JR go_over_ini
delay_6:
LD RelayOnTime,#_6s
AND FlagReg,#~delay_short_long_flag
go_over_ini:
LD KeyStatus,#Key_normal
AND delaydeal_f,#~80H
RET
go_wqe:
SUB R3,#IN_OUT_KEY%256
SBC R2,#IN_OUT_KEY/256
JR NC,is_key_large
COM R3
COM R2
ADD R3,#1
ADC R2,#0
is_key_large:
SUB R3,#DIM
SBC R2,#0
JR NC,cmp_inout_keyb
JR in_out_key_press
cmp_inout_keyb:
LD R2,KeyAdcValue
LD R3,KeyAdcValue+1
SUB R3,#IN_OUT_KEYB%256
SBC R2,#IN_OUT_KEYB/256
JR NC,is_key_large_b
COM R3
COM R2
ADD R3,#1
ADC R2,#0
is_key_large_b:
SUB R3,#DIM
SBC R2,#0
JR NC,cmp_nxt_key
in_out_key_press:
OR R7,#K_IN_OUT
AND delaydeal_f,#~01h
JR delay_key_not_press
;=================================
cmp_nxt_key:
TM FlagReg,#delay_short_long_flag
JR NZ,cmp_delaykeyB
LD R2,KeyAdcValue
LD R3,KeyAdcValue+1
SUB R3,#DELAY_KEY%256
SBC R2,#DELAY_KEY/256
JR NC,is_key_large_a
COM R3
COM R2
ADD R3,#1
ADC R2,#0
is_key_large_a:
SUB R3,#DIM
SBC R2,#0
JR NC,delay_key_not_press
OR delaydeal_f,#02H
JR delay_key_press
cmp_delaykeyB:
LD R2,KeyAdcValue
LD R3,KeyAdcValue+1
SUB R3,#DELAY_KEYB%256
SBC R2,#DELAY_KEYB/256
JR C,delay_key_not_press
AND delaydeal_f,#~02H
delay_key_press:
OR R7,#K_DELAY
OR delaydeal_f,#01h
delay_key_not_press:
LD R5,#key_status_tab%256
LD R4,#key_status_tab/256
ADD R5,KeyStatus
ADC R4,#0
JP @RR4
key_status_tab:
JP CaseKey_uncertain
JP CaseKey_wait_release
JP CaseKey_normal
JP CaseKey_continue
;------------------------
CaseKey_uncertain:
CP key_uncertain_time,#0
JR EQ,return_key_first
LD key_old,R7
CLR R7
RET
return_key_first:
TM delaydeal_f,#01h
JR Z,go_mmmm
AND delaydeal_f,#~01h
LD KeyStatus,#Key_normal
RET
go_mmmm:
LD KeyStatus,#Key_continue
LD key_old,R7
LD key_three_sec_cnt,#key3sec
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
CaseK_NULL:
RET
;=================================
CaseK_DELAY:
TM delaydeal_f,#02H
JR NZ,go_hhh
AND FlagReg,#~delay_short_long_flag
JR go_vvvvv
go_hhh:
OR FlagReg,#delay_short_long_flag
go_vvvvv:
LD R6,UserFlag
TM FlagReg,#delay_short_long_flag
JR NZ,check_set_bak_high
AND UserFlag,#~delay_set_bak
TM R6,#delay_set_bak
JR NZ,delay_key_change
RET
check_set_bak_high:
OR UserFlag,#delay_set_bak
TM R6,#delay_set_bak
JR Z,delay_key_change
RET
delay_key_change:
CP DispStatus,#DISP_DELAY_TIME
JR NE,other_disp_status
TM FlagReg,#delay_short_long_flag
JR NZ,long_delay_time
LD DelayTimeCnt,#_5sec
JR end_CaseK_DELAY
long_delay_time:
LD DelayTimeCnt,#_120sec
JR end_CaseK_DELAY
other_disp_status:
;异常显示时无效
CP DispStatus,#DISP_INLOW
JR EQ,end_CaseK_DELAY
CP DispStatus,#DISP_OUTHIGH
JR EQ,end_CaseK_DELAY
LD DispStatus,#DISP_DELAY_SET
JR set_disp_time
set_disp_time:
LD DispSetTime,#_4sec
end_CaseK_DELAY:
RET
;=================================
CaseK_IN_OUT:
CP DispStatus,#DISP_DELAY_TIME
JR EQ,end_CaseK_IN_OUT
CP DispStatus,#DISP_INLOW
JR EQ,end_CaseK_IN_OUT
CP DispStatus,#DISP_OUTHIGH
JR EQ,end_CaseK_IN_OUT
CP DispStatus,#DISP_DELAY_SET
JR EQ,set_disp_normal
CP DispStatus,#DISP_NORMAL
JR NE,end_CaseK_IN_OUT
XOR FlagReg,#IN_OUT_Volt_flag;
LD DispSetTime,#_4sec
set_disp_normal:
LD DispStatus,#DISP_NORMAL
OR FlagReg,#FreshDisp
end_CaseK_IN_OUT:
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
;-------------------------------------------------------------
DISP_NORMAL: .EQU 0;3
DISP_INLOW: .EQU 1;4
DISP_OUTHIGH: .EQU 2;5
DISP_DELAY_TIME: .EQU 3;7
DISP_DELAY_SET: .equ 4;8
DISP_OUTUNNORMAL: .equ 5;10
;--------------------------------------------------
SumInVolt: .RAM_DS 2
SumOutVolt: .RAM_DS 2
SumCnt: .RAM_DS 1
DispInVolt: .RAM_DS 2
DispOutVolt: .RAM_DS 2
SumOutReg: .RAM_DS 2
SumOutCnt: .RAM_DS 1
check_regulate_volt::
ADD SumOutReg+1,InVoltValue+1
ADC SumOutReg,InVoltValue
DEC SumOutCnt
JR NZ,skip_regule
LD SumOutCnt,#8
LD R1,SumOutReg+1
LD R0,SumOutReg
CLR SumOutReg+1
CLR SumOutReg
RCF
RRC R0
RRC R1
RCF
RRC R0
RRC R1
RCF
RRC R0
RRC R1
CALL regulate_deal
CALL deal_protect_function
skip_regule:
RET
;------------------------------------------
check_disp_volt::
sum_volt_do:
TM UserFlag,#FreshVolt
JR NZ,check_sum_do
ADD SumInVolt+1,InVoltValue+1
ADC SumInVolt,InVoltValue
ADD SumOutVolt+1,OutVoltValue+1
ADC SumOutVolt,OutVoltValue
INC SumCnt
RET
;-------------------------------------------
check_sum_do:
AND UserFlag,#~FreshVolt
LD R1,SumInVolt+1
LD R0,SumInVolt
LD R3,SumCnt
CLR R2
CALL dbl_divs
LD DispInVolt,R0
LD DispInVolt+1,R1
LD R1,SumOutVolt+1
LD R0,SumOutVolt
LD R3,SumCnt
CLR R2
CALL dbl_divs
LD R7,R1
LD R6,R0
SUB R7,BEFOREOutVoltValue+1
SBC R6,BEFOREOutVoltValue
JR NC,if_unnormal
COM R7
COM R6
ADD R7,#1
ADC R6,#0
if_unnormal:
SUB R7,#10;15
SBC R6,#0
JR NC,is_unnormal
skip_normal_OutVoltValue:
LD BEFOREOutVoltValue+1,R1
LD BEFOREOutVoltValue,R0
LD UNNORMALOutVoltValue+1,#0
LD UNNORMALOutVoltValue,#0
CLR UNNORMALOutVolt_count
JR give_OutVoltValue
is_unnormal:
CP UNNORMALOutVoltValue,#0
JR NE,is_sure_normal
CP UNNORMALOutVoltValue+1,#0
JR NE,is_sure_normal
continue_unnormal:
LD UNNORMALOutVoltValue+1,R1
LD UNNORMALOutVoltValue,R0
LD R1,BEFOREOutVoltValue+1
LD R0,BEFOREOutVoltValue
JR give_OutVoltValue
is_sure_normal:
INC UNNORMALOutVolt_count
CP UNNORMALOutVolt_count,#3
JR ULT,continue_unnormal
JR skip_normal_OutVoltValue
give_OutVoltValue:
LD DispOutVolt,R0
LD DispOutVolt+1,R1
CLR SumOutVolt+1
CLR SumOutVolt
CLR SumInVolt
CLR SumInVolt+1
CLR SumCnt
RET
;=====================================================
deal_display::
CALL check_disp_volt
TM FlagReg,#FreshDisp
JR NZ,disp_do
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -