⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 weide_music_ok.asm

📁 威迪家电控制电路
💻 ASM
📖 第 1 页 / 共 2 页
字号:

;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 + -