📄 lcdavr_1k_1621.src
字号:
;OR ADC_Buffer+2,R6
LD R7,#disp_tab3%256
LD R6,#disp_tab3/256
ADD R7,R3
ADC R6,#0
RCF
RLC R3
ADD R7,R3
ADC R6,#0
LDCI R2,@RR6
;LD R0,R2
;AND R2,#03H
OR ADC_Buffer+12,R2
;AND R0,#70H
;OR ADC_Buffer+16,R0
LDCI R2,@RR6
OR ADC_Buffer+13,R2
LDCI R2,@RR6
OR ADC_Buffer+14,R2
LD R7,#disp_tab4%256
LD R6,#disp_tab4/256
;ADD R7,R4
;ADC R6,#0
RCF
RLC R4
ADD R7,R4
ADC R6,#0
LDCI R2,@RR6
OR ADC_Buffer+14,R2
LDCI R2,@RR6
OR ADC_Buffer+15,R2
;LDCI R2,@RR6
;OR ADC_Buffer+20,R2
RET
;=============================================================
;入口:CURROut_Value1,CURROut_Value2
set_output_curr_display_data::
LD R7,#disp_tab4%256
LD R6,#disp_tab4/256
LD R2,CURROut_Value1
LD R3,CURROut_Value2
;ADD R7,R2
;ADC R6,#0
RCF
RLC R2
ADD R7,R2
ADC R6,#0
LDCI R2,@RR6
OR ADC_Buffer+7,R2
LDCI R2,@RR6
OR ADC_Buffer+8,R2
;LDCI R2,@RR6
;OR ADC_Buffer+11,R2
LD R7,#disp_tab1%256
LD R6,#disp_tab1/256
;ADD R7,R3
;ADC R6,#0
RCF
RLC R3
ADD R7,R3
ADC R6,#0
LDCI R2,@RR6
OR ADC_Buffer+9,R2
LDCI R2,@RR6
OR ADC_Buffer+10,R2
;LDCI R2,@RR6
;OR ADC_Buffer+14,R2
RET
;=================================================
set_state_data::
TM display_set3,#display_set3_AC
JR NZ,set_ac_flag
AND ADC_Buffer+0,#~01H ;AC
AND ADC_Buffer+1,#~70H
JR set_ac_end
set_ac_flag:
OR ADC_Buffer+0,#01H ;AC
OR ADC_Buffer+1,#70H
OR ADC_Buffer+1,#10H ;IT
OR ADC_Buffer+1,#20H ;Q1
OR ADC_Buffer+1,#40H ;O2
set_ac_end:
TM display_set2,#display_set2_P
JR NZ,set_P_flag
AND ADC_Buffer+0,#~02H
JR set_P_end
set_P_flag:
OR ADC_Buffer+0,#02H
set_P_end:
TM display_set1,#display_set1_WN
JR NZ,set_WN_flag
AND ADC_Buffer+1,#~01H
JR set_WN_end
set_WN_flag:
OR ADC_Buffer+1,#01H
set_WN_end:
TM display_set1,#display_set1_Q2
JR NZ,set_Q2_flag
AND ADC_Buffer+0,#~10H
JR set_Q2_end
set_Q2_flag:
OR ADC_Buffer+0,#10H
set_Q2_end:
TM display_set1,#display_set1_Q1
JR NZ,set_Q1_flag
AND ADC_Buffer+0,#~20H
JR set_Q1_end
set_Q1_flag:
OR ADC_Buffer+0,#20H
set_Q1_end:
TM display_set1,#display_set1_UL
JR NZ,set_UL_flag
AND ADC_Buffer+1,#~02H
JR set_UL_end
set_UL_flag:
OR ADC_Buffer+1,#02H
set_UL_end:
TM display_set1,#DLY_SD
JR NZ,set_sd_flag
AND ADC_Buffer+1,#~04H
JR set_sd_end
set_sd_flag:
OR ADC_Buffer+1,#04H
set_sd_end:
RET
;=======================================
;
;取当前ADC最大/最小值,用于KEY 和 Temp
;出口: RR0:最大, RR2:最小值
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
;----------------------------------------------------------------
OUT_100ADC: .EQU 285
cal_outvolt:: ;V=(2+1/2+1/4+1/8)AD/8-1.3
;入口:RR6 ADC
; LD OutVoltValue+1,R7
; LD OutVoltValue,R6
; RET
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;calc_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;calc_volt_acture
ADD R1,#220
ADC R0,#0
rejtjel:
LD V_ADValueL,R1
LD V_ADValueH,R0
RET
ret_zero_volt:
CLR V_ADValueL
CLR V_ADValueH
RET
;---------------------------------------------------------------------
;=====================================================================
DC_2V: .EQU 102 ;2.25V直流 (8K2/(10K+8K2))
MAX_SAMPLE_TIME: .EQU 264
MIN_SAMPLE_TIME: .EQU 139
;CurrentCycle: .ram_ds 2
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 ;取出AD值
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
;OR P0,#02H ;TEST
JR compare_next_p
;--------------------
is_end_point:
;>(256-80)*80=14ms,允许结束
;CP R2,#80
;JR ULT,set_adc_over ;
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 ;AD值规格化
RCF
RLC R0
RLC R3
RCF
RLC R0
RLC R3
OR R0,R1
SUB R0,#409%256
SBC R3,#409/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
; JR wait_adc_act_over
;------------
compare_next_p:
;出现过直流相位点且规定采样时间未结束,转继续采样
base_point_not_found:
;DEC R2 ;
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:
;AND P0,#~02H ;TEST
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
;LD CurrentCycle+1,R3;保存电流周期
;LD CurrentCycle,R2
CALL dbl_divs ;
LD R7,R1 ;平均值->RR8
LD R6,R0
RET
;余数*10 ;提高计算精度,计算一位小数
; CALL mul_10
; LD R1,R5
; LD R0,R4 ;
; CALL dbl_divs
; LD R6,R0
; LD R7,R1
;
; LD R5,R9 ;整数位*10
; LD R4,R8
; CALL mul_10
; ADD R7,R5 ;+小数位退出,
; ADC R6,R4
; RET
_is_return_zero:
CLR R6
CLR R7
RET
;=====================================================================
;=================
VOLT_200: .EQU 260;440;509 ;输入220V
calc_involt::
; LD InVoltValue+1,R7
; LD InVoltValue,R6
; RET
;======================================
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,#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:
LD VIn_ADValueL,R1
LD VIn_ADValueH,R0
RET
ret_zero_volt_in:
CLR VIn_ADValueL
CLR VIn_ADValueH
RET
;=====================================
calc_IN_volt_acture: ;10.25/13
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
;=========================
;RR0/RR2-->RR0 余数:RR4
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
;===============================================================================
;================================================
TAB0_WELCOME:
.DB 15,15,15,15,15,15,15,16 ; W
;================================================
TAB1_WELCOME:
.DB 15,15,15,15,15,15,16,18 ; WE
;=================================================
TAB2_WELCOME:
.DB 15,15,15,15,15,16,18,21 ; WEL
;=================================================
TAB3_WELCOME:
.DB 15,15,15,15,16,18,21,13 ; WELC
=================================================
TAB4_WELCOME:
.DB 15,15,15,16,18,21,13,0 ; WELCO
;=================================================
TAB5_WELCOME:
.DB 15,15,16,18,21,13,00,22 ; WELCOM
;=================================================
TAB6_WELCOME:
.DB 15,16,18,21,13,00,22,18 ; WELCOME
;=================================================
TAB7_WELCOME:
.DB 16,18,21,13,00,22,18,15 ;WELCOME
;==================================================
TAB1_ACCU:
.DB 23,11,18,13,15,15,15,27 ;PREC.H
;=================================================
TAB2_ACCU:
.DB 23,11,18,13,15,15,15,21 ;PREC.L
;================================================
TAB1_DELAY:
.DB 10,18,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -