📄 djj.asm
字号:
;
;function: 2 key--- select key
; --- start key
; 1 led ----auto led display
; ----motor led
; ----heat led
; with temperature sensor
include ht48R05a-1.inc
; ___ ___
; 1| \_/ |
; HEAT_LED-|PA3 PA4|-WATER_H
; MOTOR_LED-|PA2 PA5|-WATER_L
; START -|PA1 PA6|-MOTOR_OUT
; SELECT -|PA0 PA7|-HEAT_OUT
; AUTO_LED-|PB2 OS2|-
; BUZ -|PB1 OS1|-
; BUZ -|PB0 VDD|-
; -|VSS RES|-
; -|PC0 PC1|-
; |_________|
;
;----------------------------------------------------------------------
STAT_STANDY EQU 00H
STAT_PRE_HEAT EQU 01H
STAT_MOTOR EQU 02H
STAT_RE_HEAT EQU 03H ;heat
STAT_END EQU 04H
STAT_WARNING EQU 05H
PRE_HEAT_MAX EQU 5
MOTOR_TIME_MAX EQU 4 ;
MOTOR_OFF_TIME EQU 26
MOTOR_ON_TIME EQU 18
RE_HEAT_TIME_MAX EQU 5
RE_HEAT_OFF_MAX EQU 25
W1S_COUNT_MAX EQU 50
BUZ_S EQU 4
BUZ_LONG_MAX EQU 25
CHECK_KEY_DB EQU 100
BUZ_FRE EQU 248
BUZON EQU 10110110b
BUZOFF EQU 10100110b
TEMP_ERR_MAX EQU 4
MUSIC_BEAT EQU 8
GUAPAO_TIME_MAX EQU 42
MUSIC_CT_MAX EQU 3
OUT_DELAY_MAX EQU 10
BUZ_ON_MAX EQU 60
;------------------------------------------------------------------------
;PA pin define
heat equ 7 ;out
motor equ 6 ;out
water_l equ 5 ;in
water_h equ 4 ;in
heat_led equ 3 ;out
motor_led equ 2 ;out
start equ 1 ;in
select equ 0 ;in
;PB pin define
auto_led equ 2 ;out
;-------------------flag
music equ 5
guapao equ 4
key_ready equ 3
heat_off EQU 2
buz_warning equ 1
buz_long equ 0
;err_flag
water_low equ 0
;------------------------------------------------------------------------
data .section 'data'
wk_status db ?
wk_stat_bak db ?
set_stat db ?
key_bak db ?
key_buf db ?
re_h_off_c db ? ;re_heat off count -1
re_heat_time db ? ;re_heat time -1
w1s_count db ? ;wait 1s count
motor_count db ? ;motor run count 0~30s +1
motor_time db ? ;motor run/stop time 4 -1
count1 db ?
count2 db ?
buz_count db ?
buz_s_time db ?
buz_s_bak db ?
flag db ?
err_flag db ?
pa_out db ?
led_count db ?
music_count db ?
heat1_count db ?
heat2_count db ?
heat3_count db ?
music_fre db ?
music_loop db ?
beat_count db ?
guapao_t1 db ?
guapao_t2 db ?
;music_ct db ?
out_delay_c db ?
water_normal_c db ?
buz_on_count db ?
;----------------------------------------------------------------------------
wcode .section 'code'
org 00h
sz TO ;判断是否是上电复位
jmp main ;TO=1, watchdog time out
power_on_reset:
call ram_ini
snz pa.select
set flag.music
jmp main
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 flag.buz_long
set flag.buz_warning
ret
main:
clr wdt
mov a,00110011b
mov pac,a
clr pbc
clr pa_out.heat_led
clr pa_out.motor_led
clr pb.auto_led
mov a,set_stat
sdz acc
jmp led_next1
set pb.auto_led
jmp main_1
led_next1:
sdz acc
jmp led_next2
set pa_out.motor_led
jmp main_1
led_next2:
sdz acc
jmp power_on_reset
set pa_out.heat_led
main_1:
mov a,pa_out
and a,11001100b
mov pa,a
call buz_con
mov a,20
call delay
wk_work:
sza wk_status
jmp wk_work_0
jmp wk_standy ;=0,stand_by
wk_work_0:
sdz acc
jmp wk_work_1
jmp wk_pre_heat ;=1,pre_heat
wk_work_1:
sdz acc
jmp wk_work_2
jmp wk_motor ;=2,motor
wk_work_2:
sdz acc
jmp wk_work_3
jmp wk_re_heat ;=3,re heat
wk_work_3:
sdz acc
jmp wk_work_4
jmp wk_end ;=5,normal end
wk_work_4:
sdz acc
jmp power_on_reset
jmp wk_warning ;=6,warning
;**待机处理模块*************************************************
wk_standy:
mov a,pa
and a,00000011b
mov key_buf,a
sub a,key_bak
sz acc
jmp save_key
mov a,key_buf
sub a,00000011b
sz acc
jmp push_key_check
set flag.key_ready
jmp off_ret
push_key_check:
snz flag.key_ready ;push key ready?
jmp off_ret
clr flag.key_ready ;select key check
mov a,key_buf
sub a,00000010b
sz acc
jmp start_key_check
inc set_stat
mov a,set_stat
sub a,4
snz c
jmp set_status_e1
mov a,1
mov set_stat,a
jmp set_status_e1
set_status_end:
mov wk_status,a
set_status_e1:
mov a,1
mov buz_s_time,a
off_ret:
clr pa_out.heat
clr pa_out.motor
jmp main_ret
start_key_check:
mov a,key_buf
sub a,00000001b ;start key check
sz acc
jmp off_ret
mov a,set_stat
jmp set_status_end
;check_key_check:
; mov a,key_buf
; sub a,00000000b
; sz acc
; jmp off_ret
; mov a,STAT_CHECK
; jmp set_status_end
save_key:
mov a,key_buf
mov key_bak,a
jmp off_ret
;****预加热模块********************************************
wk_pre_heat:
sz pa.water_l
jmp water_too_low
snz pa.water_h
jmp water_too_high
water_normal:
inc heat1_count
mov a,heat1_count
sub a,50
snz c
jmp water_heat
clr heat1_count ;1 SEC
inc heat2_count
mov a,heat2_count
sub a,60
snz c
jmp water_heat
clr heat2_count ; 1 Mintue
inc heat3_count
mov a,heat3_count
sub a,PRE_HEAT_MAX
snz c
jmp water_heat
mov a,STAT_MOTOR
mov wk_status,a
mov a,MOTOR_TIME_MAX ;motor run 5 time
mov motor_time,a
jmp off_ret
water_heat:
set pa_out.heat
clr pa_out.motor
jmp main_ret
water_too_low:
mov a,1
call delay
snz pa.water_l
jmp main_ret ;double check water low
set err_flag.water_low
mov a,4
jmp water_warning ;sencond OTP error in here.
water_too_high:
mov a,1
call delay ;delay 1ms
sz pa.water_h
jmp main_ret
mov a,3
water_warning:
call set_warning
jmp main_ret
;****电机打浆模块***************************************
wk_motor:
sz pa.water_l
jmp water_too_low
snz pa.water_h
jmp water_too_high
wk_motor_1:
sdz w1s_count ;假设20MS调用一次
jmp main_ret
mov a,W1S_COUNT_MAX
mov w1s_count,a
inc motor_count ;1S 计数器
mov a,motor_count
sub a,MOTOR_ON_TIME
sz c
jmp motor_off_con_p
motor_on_con:
set pa_out.motor
clr pa_out.heat
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_con
clr motor_count
sdz motor_time
jmp main_ret
mov a,set_stat ;if motor program, then goto end
sub a,2
sz z
jmp re_heat_end
mov a,STAT_RE_HEAT
mov wk_status,a
mov a,RE_HEAT_TIME_MAX ;heat again ? time
mov re_heat_time,a
jmp main_ret
motor_off_con:
jmp off_ret
;****再加热模块**********************************************
wk_re_heat:
sz pa.water_l
jmp water_too_low
sz flag.guapao
jmp guapao_heat
sz flag.heat_off ;if heat_f=1, skip heat off 30s
jmp re_heat_pause
;if heat_f=0, heat on until water over
re_heat_on:
snz pa.water_h
jmp water_heat_over
re_heat_con:
mov a,RE_HEAT_OFF_MAX ;30sec heat timer
mov re_h_off_c,a
mov a,W1S_COUNT_MAX
mov w1s_count,a
jmp water_heat
water_heat_over:
mov a,1
call delay
snz pa.water_h
set flag.heat_off ;if water heat over, STOP heat
jmp re_heat_con
re_heat_pause:
sdz w1s_count ;假设20MS调用一次
jmp off_ret
mov a,W1S_COUNT_MAX ;1 second dao
mov w1s_count,a
sdz re_h_off_c ;re_heat off 30s?
jmp off_ret
mov a,set_stat ;if set_stat=3, goto end.
sub a,3
sz acc
jmp re_heat_p22
jmp re_heat_end
re_heat_p22:
sz pa.water_h ;延时时间到,判断是否挂泡
jmp re_heat_p1
mov a,1
call delay
sz pa.water_h
jmp re_heat_p1
set flag.guapao ;if guapao,
clr guapao_t1
clr guapao_t2
jmp off_ret
re_heat_p1:
mov a,RE_HEAT_OFF_MAX ;no guapao, 30sec heat timer dao
mov re_h_off_c,a
clr flag.heat_off
sdz re_heat_time ;re_heat_time
jmp off_ret
re_heat_end:
mov a,STAT_END ;if re_heat_time OK, goto END
mov wk_status,a
;set flag.music
clr music_count
jmp main_ret
guapao_heat:
sdz w1s_count ;假设20MS调用一次
jmp main_ret
mov a,W1S_COUNT_MAX ;1 second dao
mov w1s_count,a
inc guapao_t1
mov a,guapao_t1
sub a,10
sz c
jmp guapao_s1
mov a,guapao_t1
sz pa.water_h
jmp no_over
sub a,3
jmp guapao_h1
no_over:
sub a,5
guapao_h1:
sz c
jmp off_ret
jmp water_heat
guapao_s1:
clr guapao_t1
inc guapao_t2
mov a,guapao_t2
sub a,GUAPAO_TIME_MAX ;42*10sec =7min
sz c
jmp re_heat_end
jmp off_ret
;***正常结束***************************************************
wk_end:
sdz w1s_count ;假设20MS调用一次
jmp off_ret
mov a,W1S_COUNT_MAX
mov w1s_count,a
mov a,buz_on_count
sub a,BUZ_ON_MAX
sz c
jmp buz_t_end
inc buz_on_count
mov a,2
mov buz_s_time,a
jmp off_ret
;clr flag.music
;clr buz_on_count
buz_t_end:
clr buz_s_time
jmp off_ret
;***出错处理模块************************************************
wk_warning:
snz err_flag.water_low
jmp off_ret
sz pa.water_l
jmp water_low_1 ;
inc water_normal_c
mov a,water_normal_c
sub a,100
sz c
jmp water_normal_1
clr flag.buz_long
clr flag.buz_warning
jmp off_ret
water_low_1:
set flag.buz_long
set flag.buz_warning
jmp off_ret
water_normal_1:
clr water_normal_c
clr err_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:
jmp off_ret
;上电初始化RAM子程序**********************************************
ram_ini:
clr intc
mov a,BUZOFF
mov tmrc,a
mov a,00110011b
mov pac,a
clr pa
clr pbc
clr wk_status
mov a,RE_HEAT_OFF_MAX
mov re_h_off_c,a
mov a,RE_HEAT_TIME_MAX
mov re_heat_time,a
mov a,W1S_COUNT_MAX
mov w1s_count,a
clr motor_count
mov a,MOTOR_TIME_MAX
mov motor_time,a
clr flag
clr heat1_count
clr heat2_count
clr heat3_count
clr buz_on_count
clr guapao_t1
clr guapao_t2
clr out_delay_c
mov a,1
mov buz_s_time,a
mov set_stat,a
mov a,8
mov beat_count,a
mov a,2
mov wdts,a
clr pa_out
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
;*****************************************************************
;name: 蜂鸣器处理子程序
;input: buz_s_time 蜂鸣器短鸣次数寄存器
; BUZ_S
; flag.buz_long 蜂鸣器长鸣一声标志
; flag.music 一段音乐
buz_con:
inc buz_count
sz buz_s_time
jmp buz_short
sz flag.buz_long
jmp buz_long_con
sz flag.music
jmp buz_music
mov a,BUZOFF
mov tmrc,a
clr buz_count
ret
buz_short:
mov a,buz_count
sub a,BUZ_S
sz c
jmp buz_short_off_p
buz_on:
mov a,BUZ_FRE
mov tmr,a
mov a,BUZON
mov tmrc,a
ret
buz_short_off_p:
mov a,buz_count
sub a,BUZ_S*2
sz c
jmp buz_short_off
buz_off:
mov a,BUZOFF
mov tmrc,a
ret
buz_short_off:
clr buz_count
dec buz_s_time
ret
buz_long_con:
mov a,buz_count
sub a,BUZ_LONG_MAX
sz c
jmp buz_long_off_p
jmp buz_on
buz_long_off_p:
mov a,buz_count
sub a,BUZ_LONG_MAX+5
snz c
jmp buz_off
buz_long_off:
clr buz_count
sz flag.buz_warning
jmp buz_long_warning
clr flag.buz_long
ret
buz_long_warning:
mov a,buz_s_bak
mov buz_s_time,a
clr buz_count
ret
buz_music:
mov a,buz_count
sub a,beat_count
sz c
jmp music_beat_end
play_music:
mov a,music_count
add a,0c6h
mov tblp,a
tabrdl music_fre
mov a,tblh
mov music_loop,a
mov a,music_fre
sub a,0ffh ;if music_fre =0ffh, then end.
sz acc
jmp play_m01
mov a,BUZOFF ;play music end
mov tmrc,a
clr music_count
clr buz_count
; sdz music_ct
; ret
clr flag.music
ret
play_m01:
mov a,music_fre
add a,0b0h
mov tblp,a
tabrdl acc
mov tmr,a
sz acc
jmp play_m02
mov a,BUZOFF ;if =0, stop voice
jmp play_m03
play_m02:
mov a,BUZON
play_m03:
mov tmrc,a
mov a,MUSIC_BEAT
mov beat_count,a
beat_loop:
sdz music_loop
jmp beat_rl
ret
beat_rl:
rl beat_count
jmp beat_loop
music_beat_end:
clr buz_count
inc music_count
ret
;Tone frequency tab
;
;3rd 4th 5th
;C 130.81 1 261.63 /1 523.25 1046.52 0
;C# 138.59 277.18 554.37 1108.72 1
;D 146.83 2 293.66 587.33 1174.64 2
;D# 155.56 311.13 622.25 1244.52 3
;E 164.81 3 329.63 659.26 1318.52 4
;F 174.61 4 349.23 698.46 1396.92 5
;F# 185.00 369.99 739.99 1479.96 6
;G 196.00 5 392.00 783.99 1568.00 7
;G# 207.65 415.30 830.61 1661.20 8
;A 220.00 6 440.00 880.00 1760.00 9
;A# 233.08 466.16 932.23 1864.64 a
;B 246.94 7 496.48 987.77 1985.92 b
;
; org 300h
; dc 137,143,150,156,161,167,172,176,181,185,189,193,0,0,0,0
; dc 196,200,203,206,209,211,214,216,218,220,222,225,0,0,0,0
; 1 2 3 4 5 6 7
; dc 226,228,229,231,232,234,235,236,237,238,239,240,0,0,0,0
; dc 241,242,243,243,244,245,245,246,247,247,248,248
org 1b0h
; 1 2 3 4 5 6 7 1 2 3 4 5 6 7
dc 00;,137,150,161,167,176,185,193 ;^ 0, 1 2, 3 4 5, 6, 7
dc 196,203,209,211,216,220,225 ; 8, 9, a b c d e
dc 226,229,232,234,236,238,240 ;_ f 10 11 12 13 14 15
dc 241,243,244,245,246,247,248 ; 16,17 18,19,1a,1b,1c
org 1c6h
;dc 114h,112h,400h,0ffh
dc 20dh,10dh,10ch,20ah,20ch ;music世上只有妈妈好
dc 20fh,10dh,10ch,30dh
dc 20ah,10ch,10dh,20ch,20ah
dc 108h,106h,10ch,10ah,309h
dc 209h,109h,10ah,20ch,10ch,10dh
dc 20ah,209h,308h
dc 20ch,10ch,10ah,109h,108h,106h,108h
dc 405h,0ffh
; dc 30dh,20dh,20ch,30ah,30ch ;music世上只有妈妈好
; dc 30fh,20dh,20ch,40dh
; dc 30ah,20ch,20dh,30ch,30ah
; dc 208h,206h,20ch,20ah,409h
; dc 309h,209h,20ah,30ch,20ch,20dh
; dc 30ah,309h,408h
; dc 30ch,20ch,20ah,209h,208h,206h,208h
; dc 505h,0ffh
; dc 26h,15h,23h,25h
; dc 28h,16h,15h,36h
; dc 23h,15h,16h,25h,13h,12h
; dc 11h,16h,15h,13h,32h
; dc 22h,13h,25h,26h
; dc 23h,22h,31h
; dc 25h,13h,12h,11h,16h,11h
; dc 45h,0ffh
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -