📄 weide_music_ok.asm
字号:
;File Name: weide_music.asm
;Customer: WeiDe
;Editer: Jared Wu
;update date: 1-10-1 14:49
;修改地方
;1, speech_con, when speech_code change, voice change
;2, delete run_status, add set_status
;3, add start delay 0.5s
;4, del speech, add buz and music
;5, clr all ram at ini 1-10-9 22:11
;6, water_l <-> water_h 1-10-9 22:11
;7,change the temper senser
; 80C 6.06K
; 85C 5.06K
; 98C 3.43K
;8, add check_self function 1-10-15 23:39
; power up 3s, push check key( auto+heat at same time), go to check self program
;
;function: 2 key --- auto key
; --- heat key
; 2 led --- auto_led
; --- heat_led
; with temperature sensor
; ___ ___
; 1| \_/ |
; NTC -|PA3 PA4|-HEAT_LED/KEY
; 10K -|PA2 PA5|-AUTO_LED/KEY
; 1K -|PA1 PA6|-POWER_OUT
; -|PA0 PA7|-H/M_OUT, 1-M,0-H
; -|PB2 OS2|-
; BUZ1 -|PB1 OS1|-
; BUZ0 -|PB0 VDD|-
; -|VSS RES|-
; WATER_L -|PC0 PC1|-WATER_H
; |_________|
;
;----------------------------------------------------------------------
include ht48R06a-1.inc
;----------------------------------------------------------------------
STAT_STANDY EQU 00H
STAT_PRE_HEAT EQU 01H
STAT_MOTOR EQU 02H
STAT_RE_HEAT EQU 03H
STAT_END EQU 04H
STAT_WARNING EQU 05H
STAT_CHECK EQU 06H
MOTOR_TIME_MAX EQU 04h ;old value 04H
TEMPER_80 EQU 4ch ;52h ;29H ;
TEMPER_85 EQU 40h ;46h ;23H ;
TEMPER_98 EQU 2eh ;30h ;18H ;
BUZ_S EQU 5
BUZ_LONG_MAX EQU 25
BUZ_FRE EQU 248
BUZON EQU 10110110b
BUZOFF EQU 10100110b
MUSIC_BEAT EQU 5
MUSIC_CT_MAX EQU 2
MOTOR_OFF_TIME EQU 30
MOTOR_ON_TIME EQU 20
TEMP_H_COUNT_MAX EQU 5
W1S_COUNT_MAX EQU 43
;RE_HEAT_TIME_MAX EQU 4
;RE_HEAT_OFF_MAX EQU 30
;TIMER_S_COUNT_MAX EQU 2
CHECK_KEY_DB EQU 100
TEMP_ERR_MAX EQU 4
TG_ON_TIME EQU 4
;------------------------------------------------------------------------
;PA pin define
hm_out equ 7 ;out
power_out equ 6 ;out
auto equ 5 ;out
heat equ 4 ;out
t_ntc equ 3 ;out
t_stand equ 2 ;out
t_in equ 1 ;out
tg4 equ 0 ;out
;------------------------------------------------------------------------
;PB pin define
tg3 equ 2
tg2 equ 1
tg1 equ 0
;------------------------------------------------------------------------
;PC pin define
water_h equ 1
water_l equ 0
;----key flag define---------------------------------------------------
no_key equ 7
heat_1 equ 6
heat_ok equ 5
auto_1 equ 4
auto_ok equ 3
;----------flag-----------------
w1s equ 6
slow_heat equ 5
heat_stop equ 4
hm_start equ 3
hm_end equ 2
water_low equ 1
slow_h equ 0
;--------buzer----
buz_long equ 7 ;define bit
buz_warning equ 6
music equ 5
music_repeat equ 4
;------------------------------------------------------------------------
data .section 'data'
set_status db ?
wk_status db ?
wk_stat_bak db ?
temper_h_count db ? ;temper to 80 count -1
stand db ? ;stand res time
temper_h db ? ;temper value
temper_l db ? ;temper value
div_res_h db ?
div_res db ?
temper_hh db ?
div_temp db ?
div_count db ?
temp_err_count db ?
w1s_count db ? ;wait 1s count
motor_count db ? ;motor run count 0~30s +1 ;needs ini
motor_time db ? ;motor run/stop time 4 -1 ;needs ini
count1 db ?
count2 db ?
flag db ?
key db ?
pa_out db ?
pa_delay db ?
;pb_out db ?
led_count db ?
water_normal_c db ?
buzer db ?
buz_count db ?
buz_s_time db ?
buz_s_bak db ?
music_count db ?
beat_count db ?
music_fre db ?
music_loop db ?
music_repeat_count db ?
music_ct db ?
t98_count db ? ;needs ini
slow_l db ?
slow_heat_count db ? ;needs ini
out_delay_count db ?
power_up_delay db ?
check_pc db ?
check_count db ?
;----------------------------------------------------------------------------
wcode .section 'code'
org 00h
sz TO ;判断是否是上电复位
jmp main ;TO=1, watchdog time out
power_on_reset:
call ram_ini
mov a,1
mov buz_s_time,a
jmp main
temp_err_warning:
inc temp_err_count
mov a,temp_err_count
sub a,TEMP_ERR_MAX
snz c
jmp wk_work
clr temp_err_count
mov a,1
call set_warning
jmp wk_work
set_warning:
mov buz_s_bak,a
mov a,wk_status
mov wk_stat_bak,a
mov a,STAT_WARNING
mov wk_status,a
set buzer.buz_long
set buzer.buz_warning
ret
main:
clr wdt
call output_con
call wait_1s
call key_scan
call led_con
call buz_con
call wendu
sz acc
jmp temp_err_warning
clr temp_err_count
call get_wendu
call div
wk_work:
sza wk_status
jmp wk_work_0
jmp wk_standy ;stand_by
wk_work_0:
sdz acc
jmp wk_work_1
jmp wk_pre_heat ;pre_heat
wk_work_1:
sdz acc
jmp wk_work_2
jmp wk_motor ;motor
wk_work_2:
sdz acc
jmp wk_work_3
jmp wk_re_heat ;heat again
wk_work_3:
sdz acc
jmp wk_work_4
jmp wk_end ;normal end
wk_work_4:
sdz acc
jmp wk_work_5
jmp wk_warning ;warning
wk_work_5:
sdz acc
jmp power_on_reset
jmp wk_check ;check itself
;led con
;set_status auto heat_led
;
; 0 off off
; 1 on off
; 3 off on
;warning flash flash
led_con:
inc led_count
clr pa_out.auto
clr pa_out.heat
mov a,wk_status
sub a,5
sz z
jmp led_warning
sza set_status
jmp led_con_0
ret
led_con_0:
sdz acc
jmp led_con_1
set pa_out.auto
ret
led_con_1:
sdz acc
ret
set pa_out.heat
ret
led_warning:
sz led_count.5
ret
set pa_out.auto
set pa_out.heat
ret
;**启动键处理子程序**************
;in stand-by mode, start key con
start_key_con:
sz key.auto_ok
jmp set_auto_pro
sz key.heat_ok
jmp set_heat_pro
ret
set_auto_pro:
clr key.auto_ok
mov a,1
mov set_status,a
mov a,STAT_PRE_HEAT
set_status_end:
mov wk_status,a
mov a,1
mov buz_s_time,a
clr buz_count
clr out_delay_count
clr motor_count
clr t98_count
clr slow_heat_count
mov a,MOTOR_TIME_MAX ;motor run 4 time
mov motor_time,a
ret
set_heat_pro:
clr key.heat_ok
mov a,2
mov set_status,a
mov a,STAT_RE_HEAT
jmp set_status_end
;***停止键处理子程序******
stop_key_con:
sz key.auto_ok
jmp auto_stop_con
sz key.heat_ok
jmp heat_stop_con
ret
auto_stop_con:
clr key.auto_ok
mov a,set_status
stop_key_pd:
sub a,1
sz acc
ret
jmp key_stop_con
heat_stop_con:
clr key.heat_ok
mov a,set_status
dec acc
jmp stop_key_pd
key_stop_con:
clr set_status
clr flag
clr acc
jmp set_status_end
;**待机处理模块*************************************************
wk_standy:
; add self_check key dector
mov a,power_up_delay
sub a,200
sz c
jmp normal_standy
inc power_up_delay
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
snz pa.heat ;if heat_led=1, heat_key push down.
jmp normal_standy
clr pac.heat
set pac.auto
set pa.heat ;set heat_led to out high
nop
nop
nop
snz pa.auto
jmp normal_standy
check_key_push:
clr pac.auto
clr pac.heat
clr pa.auto
clr pa.heat
mov a,STAT_CHECK
mov wk_status,a
clr check_pc
clr check_count
clr buz_s_time
clr buz_count
set buzer.buz_long
jmp main_ret
normal_standy:
call start_key_con
clr out_delay_count
off_ret:
heat_off_ret:
clr pa_out.power_out
clr pa_out.hm_out
jmp main_ret
;****预加热模块********************************************
wk_pre_heat:
call stop_key_con
sz pc.water_l
jmp water_too_low
;snz pc.water_h
;jmp water_too_high
water_normal:
sz div_res_h
jmp water_heat_1
mov a,div_res
sub a,TEMPER_80 ;temper >80C ?
sz c
jmp water_heat_1
sdz temper_h_count
jmp heat_on_ret
;mov a,TEMP_H_COUNT_MAX
;mov temper_h_count,a
mov a,STAT_MOTOR
mov wk_status,a
mov a,MOTOR_TIME_MAX ;motor run 4 time
mov motor_time,a
clr w1s_count ;延时一秒启动马达
clr flag.w1s
jmp heat_off_ret
water_heat_1:
mov a,TEMP_H_COUNT_MAX
mov temper_h_count,a
heat_on_ret:
set pa_out.power_out
clr pa_out.hm_out
jmp main_ret
water_too_low:
mov a,1
call delay
snz pc.water_l
jmp main_ret ;double check water low
set flag.water_low
mov a,2
jmp water_warning ;sencond OTP error in here.
water_too_high:
mov a,1
call delay ;delay 1ms
sz pc.water_h
jmp main_ret
mov a,3
water_warning:
call set_warning
jmp main_ret
;****电机打浆模块***************************************
wk_motor:
call stop_key_con
sz pc.water_l
jmp water_too_low
;snz pc.water_h
;jmp water_too_high
snz flag.w1s
jmp main_ret
sz flag.hm_end
jmp wk_motor_end
sz flag.hm_start
jmp wk_motor_1
set flag.hm_start
motor_off_ret:
set pa_out.hm_out
clr pa_out.power_out
jmp main_ret
wk_motor_1:
inc motor_count ;1S 计数器
mov a,motor_count
sub a,MOTOR_ON_TIME
sz c
jmp motor_off_con_p
motor_on_ret:
set pa_out.hm_out
set pa_out.power_out
jmp main_ret
motor_off_con_p:
mov a,motor_count
sub a,MOTOR_OFF_TIME
snz c ;skip if a>off_time
jmp motor_off_ret
clr motor_count
sdz motor_time ;判断打浆4次到?
jmp main_ret
set flag.hm_end
jmp off_ret
wk_motor_end:
mov a,STAT_RE_HEAT
mov wk_status,a
clr flag.hm_start
clr flag.hm_end
;mov a,RE_HEAT_TIME_MAX ;heat again ? time
;mov re_heat_time,a
jmp off_ret
;****再加热模块**********************************************
wk_re_heat:
call stop_key_con
sz pc.water_l
jmp water_too_low
sz flag.slow_heat
jmp slow_heat_pro
fast_heat:
sz div_res_h
jmp fast_heat_1
mov a,div_res
sub a,TEMPER_98 ;temper >98C ?
sz c
jmp fast_heat_2
sz flag.w1s ;1 second?
inc t98_count
mov a,t98_count
sub a,180 ;T>98C, and time > 3Min
sz c
jmp set_re_heat_end
sz pc.water_h
jmp heat_on_ret
jmp set_slow_heat
fast_heat_1:
jmp heat_on_ret
fast_heat_2:
mov a,div_res
sub a,TEMPER_85
sz c
jmp fast_heat_1 ;>85C, skip
;clr t98_count
sz pc.water_h
jmp heat_on_ret ;无泡沫,继续加热
set_slow_heat:
set flag.slow_heat ;设置延煮状态标志
set flag.heat_stop
clr slow_l
clr flag.slow_h
clr slow_heat_count
jmp heat_off_ret
slow_heat_pro:
snz flag.w1s
jmp slow_heat_1
inc slow_l ;延煮状态,慢加热5分钟
sz z
set flag.slow_h
snz flag.slow_h
jmp slow_heat_1
mov a,slow_l
sub a,2ch
sz c
jmp set_re_heat_end
slow_heat_1:
sz flag.heat_stop
jmp slow_stop
;solw heat on
inc slow_heat_count
mov a,slow_heat_count
snz pc.water_h
jmp slow_no_over
sub a,172 ;172*23ms=4s,无挂泡,开4秒 1-9-29 23:27
jmp slow_on
slow_no_over:
sub a,77 ;77*23ms=1.8s,有挂泡,开1.8秒 mof at 1-10-4 19:34
slow_on:
sz c
jmp set_heat_stop
jmp heat_on_ret
set_heat_stop:
set flag.heat_stop
clr slow_heat_count
jmp heat_off_ret
slow_stop:
sz flag.w1s ;1秒到?
inc slow_heat_count
mov a,slow_heat_count ;加热器关15秒
sub a,15
sz c
jmp clr_heat_stop
jmp heat_off_ret
clr_heat_stop:
clr flag.heat_stop
clr slow_heat_count
jmp heat_on_ret
set_re_heat_end: ;到这里,豆浆制作全部结束
mov a,STAT_END
mov wk_status,a
;mov a,1
;mov buz_s_time,a
set buzer.music
clr buz_count
clr set_status
; set buzer.sp_repeat
;mov a,60
;mov music_repeat_count,a
jmp off_ret
;********* waiting 1 second *****************************
wait_1s:
clr flag.w1s
sdz w1s_count ;假设20MS调用一次
ret
mov a,W1S_COUNT_MAX
mov w1s_count,a
set flag.w1s
ret
;***正常结束***************************************************
wk_end:
;mov a,2
;mov buz_s_time,a
;snz flag.w1s
;jmp off_ret
;sdz music_repeat_count
jmp off_ret
;clr buzer.music_repeat
;jmp off_ret
;jmp main_ret
;***出错处理模块************************************************
wk_warning:
snz flag.water_low
jmp off_ret
sz pc.water_l
jmp water_low_1 ;
inc water_normal_c
mov a,water_normal_c
sub a,40
sz c
jmp water_normal_1
clr buzer.buz_long
clr buzer.buz_warning
jmp off_ret
water_low_1:
set buzer.buz_long
set buzer.buz_warning
jmp off_ret
water_normal_1:
clr buzer.buz_long
clr buzer.buz_warning
clr water_normal_c
clr flag.water_low
mov a,2
mov buz_s_time,a
clr buz_count
mov a,wk_stat_bak
mov wk_status,a
jmp off_ret
main_ret:
jmp main
;*****自检处理模块************************************************
wk_check:
mov a,70
mov out_delay_count,a
sza check_pc
jmp wk_check_0
jmp check_1 ;1st, check heat on.
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 warning
wk_check_2:
sdz acc
jmp wk_check_3
jmp check_4 ;4th, check water_over
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
check_11:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -