📄 weide_speech.asm
字号:
wk_check_0:
sdz acc
jmp wk_check_1
jmp check_2 ;2st, check motor on
wk_check_1:
sdz acc
jmp wk_check_2
jmp check_3 ;3rd, check water_low
wk_check_2:
sdz acc
jmp wk_check_3
jmp check_4 ;4th, check water_high
wk_check_3:
sdz acc
jmp power_on_reset
jmp check_5 ;5th, check wendu change
check_1:
set pa_out.power_out
clr pa_out.hm_out
mov a,3
mov speech_code,a
check_11:
inc check_count
mov a,check_count
sub a,100
sz c
jmp check_pc_inc
jmp main_ret
check_pc_inc:
clr check_count
;mov a,3
;mov pb,a
;clr pa.0
;mov a,3
;call delay
;clr pb
;clr pa.0
inc check_pc
mov a,check_pc
sub a,5
sz c
jmp check_pc_end
jmp main_ret
check_2:
set pa_out.power_out
set pa_out.hm_out
mov a,2
mov speech_code,a
jmp check_11
check_3:
clr pa_out.power_out
clr pa_out.hm_out
set pa_out.auto
set pa_out.heat
mov a,3
mov speech_code,a
sz pc.water_l
jmp main_ret
snz pc.water_h
jmp main_ret
jmp check_pc_inc
check_4:
clr pa_out.power_out
clr pa_out.hm_out
clr pa_out.auto
set pa_out.heat
mov a,4
mov speech_code,a
sz pc.water_h
jmp main_ret
snz pc.water_l
jmp main_ret
jmp check_pc_inc
check_5:
clr pa_out.power_out
clr pa_out.hm_out
clr pa_out.auto
clr pa_out.heat
mov a,5
mov speech_code,a
mov a,div_res
sub a,TEMPER_80 ;temper >80C ?
sz c
jmp main_ret
mov a,div_res
sub a,TEMPER_85
sz c
jmp check_pc_inc
jmp main_ret
check_pc_end:
clr check_pc
clr check_count
clr out_delay_count
mov a,6
mov speech_code,a
clr wk_status
jmp main_ret
;上电初始化RAM子程序**********************************************
ram_ini:
clr intc
clr tmrc
clr tmr
clr pac ;set all pa pin to output
clr pbc
mov a,03h ;water high/low check
mov pcc,a
clr pa
clr pb
clr pc
clr set_status
clr wk_status
clr wk_stat_bak
mov a,TEMP_H_COUNT_MAX
mov temper_h_count,a
clr stand
clr temper_h
clr temper_l
mov a,W1S_COUNT_MAX
mov w1s_count,a
clr motor_count
mov a,MOTOR_TIME_MAX
mov motor_time,a
clr count1
clr count2
clr div_res_h
clr div_res
clr temper_hh
clr div_temp
clr div_count
clr flag
clr key
clr pa_out
clr pa_delay
clr pb_out
clr temp_err_count
clr led_count
clr speech_code
clr speech_code_bak
clr speech_pc
clr speech_count
clr speech_1
clr speech_2
clr speech_3
clr speech_4
clr water_normal_c
clr t98_count
clr slow_l
clr slow_heat_count
mov a,60
mov sp_repeat_count,a
clr out_delay_count
clr power_up_delay
clr check_pc
clr check_count
mov a,7
mov wdts,a
ret
;*****************************************************************
;output_con
;main function: when heat output change (0->1) delay 0.5s output
output_con:
clr pac
mov a,pa_out
mov pa_delay,a
mov a,out_delay_count
sub a,70
snz c
jmp heat_disable
output_c1:
mov a,pa_delay
mov pa,a
clr pbc
mov a,pb_out
mov PB,A
set pcc.water_h
set pcc.water_l
ret
heat_disable:
inc out_delay_count
clr pa_delay.power_out
clr pa_delay.hm_out
jmp output_c1
;*****************************************************************
;neme: 温度测量子程序
;input: 无
;output: temper_h,temper_l NTC电阻计数值
; stand 标准电阻测量的参考值
wendu:
clr pac
clr pa.t_ntc
clr pa.t_stand
clr pa.t_in ;low level
mov a,5 ;delay 10ms
call delay
;first test stand res
set pac.t_ntc ;set ntc pin to input
set pac.t_in ;set t_in pin to input
clr pac.t_stand
clr acc
set pa.t_stand
nop
t1_loop:
nop
inc acc ;1
sz acc.7 ;skip if acc=0 timer over 2
jmp timer_over ; 3
snz pa.t_in ;skip if t_in=1 3
jmp t1_loop ; 4
mov stand,a ;store stand timer
sub a,30
snz c
jmp timer_over
; mov a,stand ;store stand timer
; sub a,160
; sz c
; jmp timer_over
clr pac
clr pa.t_ntc
clr pa.t_stand
clr pa.t_in ;low level
mov a,5 ;delay 10ms
call delay
clr pac.t_ntc ;set ntc pin to output
set pac.t_in ;set t_in pin to input
set pac.t_stand
clr acc
clr temper_h
clr temper_l
set pa.t_ntc
nop
t2_loop:
inc acc ;1
sz acc ;2
jmp t_in_check ;3
inc temper_h ; 4
sz temper_h.3 ;skip if timer no over 5
jmp timer_over ;over 6
jmp t2_loop ; 7
t_in_check:
snz pa.t_in ;skip if t_in=1 4
jmp t2_loop
mov temper_l,a
mov count1,a
mov a,temper_h
mov count2,a
t2_loop_bu:
nop ;温度测量子程序时间补足,以保证每次调用该子程序时间固定。
nop
inc count1
sz count1
jmp t2_loop_bu
inc count2
sz count2.3
jmp temp_test_end
jmp t2_loop_bu
temp_test_end:
mov a,temper_l
sub a,5
snz c
jmp timer_over_1
ret a,0
timer_over_1:
sz temper_h
ret a,0
timer_over:
clr temper_h
clr temper_l
ret a,1
;*****************************************************************
;name: 温度参数整理子程序
;input: temper_h,temper_l
;output: temper_h,temper_l
;operation: <80, <<7bit
get_wendu:
mov a,temper_h
sub a,01h
sz c
jmp temper_high
;mov a,temper_l
;sub a,40h
;sz c
;jmp temper_high
wk_pre_1:
;clr temper_h
mov a,7
rlc_loop:
clr c
rlc temper_l
rlc temper_h
sdz acc
jmp rlc_loop
ret
temper_high:
;clr temper_h
;mov a,40h
;mov temper_l,a
mov a,00h
mov temper_h,a
mov a,0ffh
mov temper_l,a
jmp wk_pre_1
;*****************************************************************
;name: 双字节除法子程序
;功能:双字节二进制无符号数除以单字节二进制数
;入口条件:被除数在temper_h、temper_l中,除数在stand中。
;出口信息:低字节商在div_res中,高字节在div_res_h。
div:
clr c
clr div_res_h
clr temper_hh
clr div_res
div_h_loop:
mov a,temper_h
sub a,stand
snz c ;if temper_h>=stand, then ret with OV bi
jmp div50
mov temper_h,a
inc div_res_h
jmp div_h_loop
div50:
mov a,8
mov div_count,a
div51:
rlc temper_l
rlc temper_h
rlc temper_hh
mov a,temper_h
sub a,stand
mov div_temp,a
rlca temper_hh
sub a,1
snz z ;
jmp div52 ;
mov a,div_temp
mov temper_h,a
set c
jmp div53
div52:
clr c
div53:
rlc div_res
sdz div_count
jmp div51
rlca temper_h
snz c ;c=1,skip
jmp div54
div55:
inc div_res
ret a,0
div54:
sub a,stand
sz c
jmp div55
ret a,0
;*****************************************************************
;name: 按键扫描子程序
;input:
;利用led显示输出管脚切换到输入模式交替扫描得到按键值
;sourse: status flag bit: auto,heat, pin define bit
; key.no_key, heat_1,heat_ok, auto_1,auto_ok.
key_scan:
clr key.heat_ok
clr key.auto_ok
;sz key.heat_ok
;jmp auto_key_pd1
clr pac.auto ;set auto_led pin to output
set pac.heat ;set heat_led pin to input
set pa.auto ;to high
nop
nop
nop
sz pa.heat ;if heat_led=1, heat_key push down.
jmp key_heat_push
;heat no push
auto_key_pd1:
;sz key.auto_ok
;jmp scan_key_end
clr pac.heat
set pac.auto
set pa.heat ;set heat_led to out high
nop
nop
nop
sz pa.auto
jmp key_auto_push
no_key_push:
set key.no_key
clr key.heat_1
clr key.auto_1
scan_key_end:
clr pac
mov a,pa_delay
mov pa,a
ret
key_heat_push:
clr pac
mov a,pa_delay
mov pa,a
clr key.auto_1
clr key.auto_ok
SZ key.heat_1
jmp heat_key_pd
sz key.no_key
jmp heat_key_pd
jmp scan_key_end
heat_key_pd:
clr key.no_key
sz key.heat_1
jmp heat_key_ok
set key.heat_1
jmp scan_key_end
heat_key_ok:
set key.heat_ok
key_ok_end:
clr key.heat_1
clr key.auto_1
clr key.no_key
jmp scan_key_end
key_auto_push:
clr pac
mov a,pa_delay
mov pa,a
clr key.heat_1
clr key.heat_ok
sz key.auto_1
jmp auto_key_pd
sz key.no_key
jmp auto_key_pd
jmp scan_key_end
auto_key_pd:
clr key.no_key
sz key.auto_1
jmp auto_key_ok
set key.auto_1
jmp scan_key_end
auto_key_ok:
set key.auto_ok
jmp key_ok_end
;*****************************************************************
;name: Speech_con
;sourse :
;speech_code
;0, 1-2
;1, 3-5
;2, 4-5
;3, 3-7
;4, 4-7
;5, 6
;
;speech_num
;1,欢迎使用xx电器
;2,请选择功能
;3,自动制浆
;4,加热
;5,开始
;6,暂停
;7,结束,请饮用
;8,水量不够,请加水
;sp_repeat
speech_con:
sza speech_code
jmp speech_c1
clr pb_out
clr pa_out.0
ret
speech_c1:
sza speech_pc ;speech_pc=0, the first speech start
jmp speech_pc_1
mov a,speech_code
dec acc
rl acc
rl acc
add a,0e0h
mov tblp,a
tabrdl acc ;speech_buf
mov speech_1,a
inc tblp
tabrdl acc
mov speech_2,a
inc tblp
tabrdl acc
mov speech_3,a
inc tblp
tabrdl acc
mov speech_4,a
mov a,TG_ON_TIME
mov speech_count,a
mov a,speech_1
sp_code_set:
mov pb_out,a
clr pa_out.0 ;set TG4 of Speech
sz acc.3
set pa_out.0
inc speech_pc
mov a,speech_code
mov speech_code_bak,a
ret
speech_pc_1:
sdz acc ;speech_pc =1, the first speech start end, set speech_delay
jmp speech_pc_2
sdz speech_count
ret
mov a,speech_2
mov speech_count,a
clr acc
jmp sp_code_set
speech_pc_2:
sdz acc ;speech_pc=2, the first speech end
jmp speech_pc_3
sdz speech_count
ret
mov a,TG_ON_TIME
mov speech_count,a
;sz speech_code_bak
;jmp speech_pc_c21
;jmp speech_pc_c22
speech_pc_c21:
mov a,speech_code ;判断speech_code有无改变
sub a,speech_code_bak
sz acc
jmp speech_code_change
speech_pc_c22:
mov a,speech_3
jmp sp_code_set
speech_code_change: ;speech_code change
clr speech_pc
mov a,speech_code
mov speech_code_bak,a
jmp speech_con
speech_pc_3:
sdz acc
jmp speech_pc_4
sdz speech_count
ret
mov a,speech_4
mov speech_count,a
clr acc
jmp sp_code_set
speech_pc_4:
sdz speech_count
ret
;sz speech_code_bak
;jmp speech_pc_c41
;jmp speech_pc_c44
speech_pc_c41:
mov a,speech_code ;判断speech_code有无改变
sub a,speech_code_bak
sz acc
jmp speech_code_change
speech_pc_c44:
clr speech_pc
snz flag.sp_repeat
clr speech_code
clr speech_code_bak
ret
;*****************************************************************
;name: 延时子程序
;input: ACC=需要延时的时间值(ms) @ 4MHz
delay:
mov count2,a
delay_st:
mov a,240
mov count1,a
delay_loop:
sdz count1
jmp delay_loop
mov a,100
mov count1,a
delay_loop1:
sdz count1
jmp delay_loop1
sdz count2
jmp delay_st
ret
org 03e0h
dc 01,050h,02,040h ;欢迎使用xx电器,请选择功能
dc 04,30h,03,20h ;自动制浆,开始
dc 08,20h,03,20h ;加热,开始
dc 04,30h,06,20h ;自动制浆,暂停
dc 08,20h,06,20h ;加热,暂停
dc 04,30h,0ch,50h ;自动制浆,结束,请饮用
dc 08,20h,0ch,50h ;加热,结束,请饮用
dc 09,080h,00,02h ;水量不够,请加水
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -