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

📄 weide_3led1129.asm

📁 威迪家电控制电路
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;File Name: weide_timer.asm
;Customer: WeiDe
;Editer: Jared Wu
;update date: 1-11-27 11:00

;old version update list---- for wedde_time3.asm
;主要功能
;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
;11,加入自检测试程序		1-11-19 22:38

;new version--- for 3 led and 2 botton


 
;function: 2 key --- select key
;		 --- start/stop key
;	   3 led --- auto_program
;		 --- heat_program
;                --- motor_program
;
;       
;		  ___   ___
;		1|   \_/   |
;     POWER_OUT	-|PA3	PA4|-LED1/KEY1
;     H/M_OUT	-|PA2	PA5|-LED2/KEY2
;     KEY_IN	-|PA1	PA6|-LED3/KEY3  select key
;		-|PA0	PA7|-LED4/KEY4  start key
;		-|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_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
led4		equ	7
key4		equ	7
led3		equ	6
key3		equ	6
led2		equ	5
key2		equ	5
led1		equ	4
key1		equ	4
power_out	equ	3	;out
hm_out		equ	2	;out
key_in		equ	1	;out

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

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


;----key flag define---------------------------------------------------

key_ok		equ	7
ready		equ	6

;----------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
short		equ	3

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

check_pc	db	?
check_count	db	?

key_new		db	?
key_old		db	?
key_flag	db	?
display		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	wait_1s
;	call	key_scan
	call	led_con
	call	scan_key_con
	call	output_con

check_in:
	clr	wdt	
	call	buz_con
	;call	wendu
	;sz	acc
	;jmp	temp_err_warning
	;clr	temp_err_count
	;call	get_wendu
	;call	div
	
	set	pa.0	;for test time
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	clr	pa.0
	
	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	motor
;
;at work
;	1	on	off	off
;	2	off	off	on
;	3	off	on	off

;at standy
;	1	flash	off	off
;	2	off	off	flash
;	3	on	flash	off



;warning	all led	flash

led_con:
	
	inc	led_count
	mov	a,wk_status
	sub	a,STAT_STANDY
	sz	z
	jmp	led_flash
	mov	a,wk_status
	sub	a,STAT_WARNING
	sz	z
	jmp	all_led_flash
	
led_on_con:
	mov	a,0f0h
	mov	display,a
	
	mov	a,set_status
	sub	a,1		;auto
	sz	z
	clr	display.led3
	mov	a,set_status
	sub	a,2
	sz	z
	clr	display.led4
	mov	a,set_status
	sub	a,3
	sz	z
	clr	display.led2
	ret
	
led_flash:
	snz	led_count.5
	jmp	led_on_con
all_led_off:
	mov	a,0f0h
	mov	display,a
	ret

all_led_flash:
	snz	led_count.5
	jmp	all_led_off
all_led_on:
	clr	display
	ret
	

		
;**待机处理模块*************************************************
wk_standy:

	clr	out_delay_count
	
	snz	key_flag.key_ok
	jmp	off_ret
	
	clr	key_flag.key_ok
	mov	a,key_new
	sub	a,01000000b
	sz	acc
	jmp	start_key_check
	inc	set_status		;select key push
	mov	a,set_status
	sub	a,4
	snz	c
	jmp	set_status_e1
	mov	a,1
	mov	set_status,a
	jmp	set_status_e1
	
;	
set_status_e1:	
	mov	a,1
	mov	buz_s_time,a
	clr	led_count
	clr	buz_count
	
off_ret:	
	clr	pa_out.power_out
	clr	pa_out.hm_out
	jmp	main_ret

start_key_check:
	mov	a,key_new
	sub	a,10000000b	;start key check
	sz	acc
	jmp	check_key_check
	mov	a,1
	mov	buz_s_time,a
	mov	a,set_status
	jmp	set_status_end

check_key_check:
	mov	a,key_new	;check key
	sub	a,00000000b
	sz	acc
	jmp	off_ret
	mov	a,STAT_CHECK
	jmp	set_status_end


set_status_end:
	mov	wk_status,a
	clr	buz_count
	clr	out_delay_count
	clr	heat1_count
	clr	heat2_count
	clr	motor_count
	clr	warm_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
	
	
stop_key_con:
	snz	key_flag.key_ok
	ret
	clr	key_flag.key_ok
	mov	a,key_new
	sub	a,10000000b	;start key check
	sz	acc
	ret
	mov	a,1
	mov	buz_s_time,a
	mov	set_status,a
	mov	a,STAT_STANDY
	jmp	set_status_end


;****预加热模块********************************************
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
	set	pa_out.hm_out
	jmp	main_ret

heat_off_ret:
	set	pa_out.hm_out
	clr	pa_out.power_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:
	clr	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:
	clr	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,set_status
	sub	a,2
	sz	z
	jmp	single_motor_end
	
	mov	a,STAT_RE_HEAT
	call	set_status_end
	set	flag.h_disable
	
;	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

single_motor_end:
	mov	a,STAT_END
	call	set_status_end
	mov	a,3
	mov	buz_s_time,a
	jmp	off_ret
	
	

;****再加热模块**********************************************
wk_re_heat:
	call	stop_key_con
wk_re_heat_1:
	sz	pc.water_l
	jmp	water_too_low
	sz	flag.h_disable
	jmp	heat_disable
wk_re_heat_2:
	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	main_ret
	
	inc	heat1_count	;延煮状态,慢加热7分钟
	mov	a,heat1_count
	sub	a,60
	snz	c
	jmp	slow_heat_1
	clr	heat1_count	; 1 Mintue
	
	inc	heat2_count
	mov	a,heat2_count
	sub	a,RE_HEAT_MAX
	snz	c
	jmp	slow_heat_1
	clr	heat2_count
	jmp	set_re_heat_end

⌨️ 快捷键说明

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