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

📄 weide_timer2.asm

📁 威迪家电控制电路
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;File Name: weide_timer.asm
;Customer: WeiDe
;Editer: Jared Wu
;update date: 1-10-1 23:07
;主要功能
;1,预热7分钟 
;2,在预热时,检测到泡沫进入打浆
;3,电机工作ON/OFF 18s/10s
;4,泡沫触发进入延煮7分钟,1,不挂泡,ON/OFF 4S/10S
;			  2,挂泡,ON/OFF 2S/10S
;5,结束报警1min
;6,保温30min ON/OFF 2S/20S buz 2 short
;7, 改进1:打浆之后,禁止10秒不动作。
;	   蜂鸣器声音间隔加长。
;8, 改进声音:	1,报警长鸣  1-10-25 11:12
;		2,间隔为响0.5秒,停0.5秒	
;		3,上电不响
;9,报警指示灯不闪烁	1-10-25 11:13
;10,去掉启动键,改为工作指示灯,原来的加热灯改为OK灯	1-11-4 22:10

 
;function: 1 key --- auto key
;	   1 led --- heat_led
;		 --- power_led
;       
;		  ___   ___
;		1|   \_/   |
;		-|PA3	PA4|-OK_LED
;		-|PA2	PA5|-WORK_LED
;		-|PA1	PA6|-POWER_OUT
;		-|PA0	PA7|-H/M_OUT, 1-M,0-H
;	TEST	-|PB2	OS2|-
;	BUZ1	-|PB1	OS1|-
;	BUZ0	-|PB0	VDD|-
;		-|VSS	RES|-
;	WATER_L	-|PC0	PC1|-WATER_H
;		 |_________|
;
;----------------------------------------------------------------------
include ht48R05a-1.inc

;----------------------------------------------------------------------
STAT_STANDY	EQU	00H
STAT_PRE_HEAT	EQU	01H
STAT_MOTOR	EQU	02H
STAT_RE_HEAT	EQU	03H
STAT_WARM	EQU	04h
STAT_END	EQU	05H
STAT_WARNING	EQU	06H
STAT_CHECK	EQU	07H


BUZ_S		EQU	25
BUZ_FRE		EQU	235
BUZON		EQU	10110100b
BUZOFF		EQU	10100100b


PRE_HEAT_MAX	EQU	7		;test!!!!!! 7min
MOTOR_TIME_MAX	EQU	4
MOTOR_OFF_TIME	EQU	28
MOTOR_ON_TIME	EQU	18
TEMP_H_COUNT_MAX	EQU	5
W1S_COUNT_MAX	EQU	50
RE_HEAT_MAX	EQU	7		;test!!!!!  7min
CHECK_KEY_DB	EQU	100


;------------------------------------------------------------------------
;PA pin define
hm_out		equ	7	;out
power_out	equ	6	;out
work		equ	5	;out
ok		equ	4	;out

;------------------------------------------------------------------------
;PB pin define

;------------------------------------------------------------------------
;PC pin define
water_h		equ	1
water_l		equ	0


;----key flag define---------------------------------------------------
no_key		equ	7
auto_1		equ	6
auto_ok		equ	5

;----------flag-----------------
h_disable	equ	7
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	?
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
heat1_count	db	?
heat2_count	db	?
count1		db	?
count2		db	?
flag		db	?
key		db	?
pa_out		db	?
pa_delay	db	?
led_count	db	?
water_normal_c	db	?

buzer		db	?

buz_count	db	?
buz_s_time	db	?
buz_s_bak	db	?

slow_l		db	?
slow_heat_count	db	?	;needs ini
out_delay_count	db	?

warm_count	db	?
warm_time	db	?

pu_delay	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


set_warning:
	mov	buz_s_bak,a
	mov	a,wk_status
	mov	wk_stat_bak,a
	mov	a,STAT_WARNING
	mov	wk_status,a
	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
	
	set	pa.3
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	clr	pa.3
	
	mov	a,20
	call	delay
	
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_31
	jmp	wk_warm		;hold warm
wk_work_31:	
	sdz	acc
	jmp	wk_work_4
	jmp	wk_end		;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.work
	clr	pa_out.ok
	mov	a,wk_status
	sub	a,STAT_STANDY
	sz	z
	jmp	led_disable
	mov	a,wk_status
	sub	a,STAT_WARNING
	sz	z
	jmp	led_warning
	mov	a,wk_status
	sub	a,STAT_WARM
	sz	z
	jmp	led_ok
	mov	a,wk_status
	sub	a,STAT_END
	sz	z
	jmp	led_ok
led_work:
	set	pa_out.work
	ret
led_disable:
	ret
led_ok:
	set	pa_out.ok
	ret

led_warning:
	sz	led_count.5
	ret
	set	pa_out.work
	set	pa_out.ok
	ret

;**启动处理子程序**************
;in stand-by mode, start key con
start_con:
	inc	pu_delay
	mov	a,pu_delay
	sub	a,75
	snz	c
	ret
	clr	pu_delay
	mov	a,1
	mov	set_status,a
	
	mov	a,STAT_PRE_HEAT
set_status_end:
	mov	wk_status,a
	clr	buz_count
	clr	out_delay_count
	clr	motor_count
	clr	flag
	mov	a,W1S_COUNT_MAX
	mov	w1s_count,a	
	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	acc
;	jmp	set_status_end


		
;**待机处理模块*************************************************
wk_standy:
	call	start_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_over_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
	snz	flag.w1s
	jmp	heat_on_ret
	inc	heat1_count
	mov	a,heat1_count
	sub	a,60
	snz	c
	jmp	heat_on_ret
	clr	heat1_count	; 1 Mintue
	
	inc	heat2_count
	mov	a,heat2_count
	sub	a,PRE_HEAT_MAX
	snz	c
	jmp	heat_on_ret
	clr	heat2_count

set_motor_status:
	mov	a,STAT_MOTOR
	call	set_status_end
	jmp	heat_off_ret	
	
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_over_high:
	mov	a,1
	call	delay		;delay 1ms
	sz	pc.water_h
	jmp	water_normal
	jmp	set_motor_status
	
	
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
	call	set_status_end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -