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

📄 weide_speech.asm

📁 威迪家电控制电路
💻 ASM
📖 第 1 页 / 共 2 页
字号:
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
wk_check_2:
	sdz	acc
	jmp	wk_check_3
	jmp	check_4		;4th, check water_high
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
	mov	a,3
	mov	speech_code,a
check_11:	
	inc	check_count
	mov	a,check_count
	sub	a,100
	sz	c
	jmp	check_pc_inc
	jmp	main_ret


	
check_pc_inc:
	clr	check_count
	;mov	a,3
	;mov	pb,a
	;clr	pa.0
	;mov	a,3
	;call	delay
	;clr	pb
	;clr	pa.0
	inc	check_pc
	mov	a,check_pc
	sub	a,5
	sz	c
	jmp	check_pc_end
	jmp	main_ret

check_2:
	set	pa_out.power_out
	set	pa_out.hm_out
	mov	a,2
	mov	speech_code,a
	jmp	check_11

check_3:
	clr	pa_out.power_out
	clr	pa_out.hm_out
	set	pa_out.auto
	set	pa_out.heat
	mov	a,3
	mov	speech_code,a

	sz	pc.water_l
	jmp	main_ret
	snz	pc.water_h
	jmp	main_ret
	jmp	check_pc_inc
	
	
check_4:
	clr	pa_out.power_out
	clr	pa_out.hm_out
	clr	pa_out.auto
	set	pa_out.heat
	mov	a,4
	mov	speech_code,a
	sz	pc.water_h
	jmp	main_ret
	snz	pc.water_l
	jmp	main_ret
	jmp	check_pc_inc


check_5:
	clr	pa_out.power_out
	clr	pa_out.hm_out
	clr	pa_out.auto
	clr	pa_out.heat
	mov	a,5
	mov	speech_code,a
	mov	a,div_res
	sub	a,TEMPER_80	;temper >80C ?
	sz	c
	jmp	main_ret
	mov	a,div_res
	sub	a,TEMPER_85
	sz	c
	jmp	check_pc_inc
	jmp	main_ret

check_pc_end:
	clr	check_pc
	clr	check_count
	clr	out_delay_count
	mov	a,6
	mov	speech_code,a
	clr	wk_status
	jmp	main_ret


;上电初始化RAM子程序**********************************************
ram_ini:
	clr	intc
		
	clr	tmrc
	clr	tmr
	
	clr	pac		;set all pa pin to output
	clr	pbc
	mov	a,03h		;water high/low check
	mov	pcc,a
	
	clr	pa
	clr	pb
	clr	pc
	
	clr	set_status
	clr	wk_status
	clr	wk_stat_bak
	
	mov	a,TEMP_H_COUNT_MAX
	mov	temper_h_count,a
	
	clr	stand
	clr	temper_h
	clr	temper_l
	
	mov	a,W1S_COUNT_MAX
	mov	w1s_count,a
	
	clr	motor_count
	
	mov	a,MOTOR_TIME_MAX
	mov	motor_time,a
	
	clr	count1
	clr	count2
	clr	div_res_h
	clr	div_res
	clr	temper_hh
	clr	div_temp
	clr	div_count
		
	clr	flag
	clr	key
	
	clr	pa_out
	clr	pa_delay
	clr	pb_out
	clr	temp_err_count
	clr	led_count
	
	clr	speech_code
	clr	speech_code_bak
	clr	speech_pc
	clr	speech_count
	clr	speech_1
	clr	speech_2
	clr	speech_3
	clr	speech_4
	
	clr	water_normal_c
	
	clr	t98_count
	clr	slow_l
	clr	slow_heat_count
	mov	a,60
	mov	sp_repeat_count,a
	
	clr	out_delay_count
	clr	power_up_delay
	clr	check_pc
	clr	check_count
		
	mov	a,7
	mov	wdts,a
	
	ret
;*****************************************************************
;output_con
;main function: when heat output change (0->1) delay 0.5s output

output_con:
	clr	pac
	
	mov	a,pa_out
	mov	pa_delay,a
	
	mov	a,out_delay_count
	sub	a,70
	snz	c
	jmp	heat_disable

output_c1:
	mov	a,pa_delay
	mov	pa,a
	
	clr	pbc
	mov	a,pb_out
	mov	PB,A
	
	set	pcc.water_h
	set	pcc.water_l
	ret 

heat_disable:
	inc	out_delay_count
	clr	pa_delay.power_out
	clr	pa_delay.hm_out
	jmp	output_c1
;*****************************************************************
;neme: 温度测量子程序
;input: 无
;output: temper_h,temper_l NTC电阻计数值
;	stand 标准电阻测量的参考值	
wendu:
	clr	pac
	
	clr	pa.t_ntc
	clr	pa.t_stand
	clr	pa.t_in		;low level
	mov	a,5		;delay 10ms
	call	delay
				;first test stand res
	
	set	pac.t_ntc	;set ntc pin to input
	set	pac.t_in	;set t_in pin to input
	clr	pac.t_stand
	clr	acc
	set	pa.t_stand
	nop
	
t1_loop:
	nop
	inc	acc		;1	
	sz	acc.7		;skip if acc=0 timer over	2
	jmp	timer_over	;			3
	snz	pa.t_in		;skip if t_in=1		3
	jmp	t1_loop		;			4
	mov	stand,a		;store stand timer
	sub	a,30
	snz	c
	jmp	timer_over
;	mov	a,stand		;store stand timer
;	sub	a,160
;	sz	c
;	jmp	timer_over
	
	
	clr	pac
	
	clr	pa.t_ntc
	clr	pa.t_stand
	clr	pa.t_in		;low level
	
	mov	a,5		;delay 10ms
	call	delay
	
	clr	pac.t_ntc	;set ntc pin to output
	set	pac.t_in	;set t_in pin to input
	set	pac.t_stand	

	clr	acc
	clr	temper_h
	clr	temper_l
	
	
	set	pa.t_ntc
	nop
	
t2_loop:
	inc	acc				;1
	sz	acc				;2
	jmp	t_in_check			;3
	
	inc	temper_h	;			4
	sz	temper_h.3	;skip if timer no over	5
	jmp	timer_over	;over			6
	jmp	t2_loop		;			7
	
t_in_check:
	snz	pa.t_in		;skip if t_in=1		4
	jmp	t2_loop
	mov	temper_l,a
	mov	count1,a
	mov	a,temper_h
	mov	count2,a
	
t2_loop_bu:
	nop			;温度测量子程序时间补足,以保证每次调用该子程序时间固定。
	nop
	inc	count1
	sz	count1
	jmp	t2_loop_bu
	inc	count2
	sz	count2.3
	jmp	temp_test_end
	jmp	t2_loop_bu
temp_test_end:
	mov	a,temper_l
	sub	a,5
	snz	c
	jmp	timer_over_1
	ret	a,0

timer_over_1:
	sz	temper_h
	ret	a,0
	
timer_over:
	clr	temper_h
	clr	temper_l
	ret	a,1

;*****************************************************************
;name: 温度参数整理子程序
;input: temper_h,temper_l
;output: temper_h,temper_l
;operation: <80, <<7bit
get_wendu:
	mov	a,temper_h
	sub	a,01h
	sz	c
	jmp	temper_high
	
	;mov	a,temper_l
	;sub	a,40h
	;sz	c
	;jmp	temper_high

wk_pre_1:
	;clr	temper_h
	mov	a,7
rlc_loop:	
	clr	c	
	rlc	temper_l
	rlc	temper_h
	sdz	acc
	jmp	rlc_loop
	ret

temper_high:
	;clr	temper_h
	;mov	a,40h
	;mov	temper_l,a
	mov	a,00h
	mov	temper_h,a
	mov	a,0ffh
	mov	temper_l,a
	jmp	wk_pre_1



;*****************************************************************
;name: 双字节除法子程序
;功能:双字节二进制无符号数除以单字节二进制数
;入口条件:被除数在temper_h、temper_l中,除数在stand中。
;出口信息:低字节商在div_res中,高字节在div_res_h。
div: 
	clr	c
	clr	div_res_h
	clr	temper_hh
	clr	div_res
div_h_loop:
	mov	a,temper_h
	sub	a,stand
	snz	c			;if temper_h>=stand, then ret with OV bi
	jmp	div50
	mov	temper_h,a
	inc	div_res_h
	jmp	div_h_loop
div50:
	mov	a,8
	mov	div_count,a
div51:
	rlc	temper_l
	rlc	temper_h
	rlc	temper_hh
	mov	a,temper_h	
	sub	a,stand
	mov	div_temp,a
	rlca	temper_hh
	sub	a,1
	snz	z		;
	jmp	div52		;
	mov	a,div_temp
	mov	temper_h,a
	set	c
	jmp	div53
div52:
	clr	c
div53:
	rlc	div_res
	sdz	div_count
	jmp	div51
	rlca	temper_h
	snz	c	;c=1,skip
	jmp	div54
div55:
	inc	div_res
	ret	a,0
div54:
	sub	a,stand
	sz	c
	jmp	div55
	ret	a,0

;*****************************************************************
;name: 按键扫描子程序
;input:
;利用led显示输出管脚切换到输入模式交替扫描得到按键值
;sourse: status flag bit: auto,heat, pin define bit
;        key.no_key, heat_1,heat_ok, auto_1,auto_ok.

key_scan:
	clr	key.heat_ok
	clr	key.auto_ok
	;sz	key.heat_ok
	;jmp	auto_key_pd1
	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
	sz	pa.heat		;if heat_led=1, heat_key push down.
	jmp	key_heat_push
;heat no push
auto_key_pd1:
	;sz	key.auto_ok
	;jmp	scan_key_end
	clr	pac.heat
	set	pac.auto
	set	pa.heat		;set heat_led to out high
	nop
	nop
	nop
	sz	pa.auto
	jmp	key_auto_push
no_key_push:
	
	set	key.no_key
	clr	key.heat_1
	clr	key.auto_1
scan_key_end:
	clr	pac
	mov	a,pa_delay
	mov	pa,a
	ret
key_heat_push:
	clr	pac
	mov	a,pa_delay
	mov	pa,a
	clr	key.auto_1
	clr	key.auto_ok
	SZ	key.heat_1
	jmp	heat_key_pd
	sz	key.no_key
	jmp	heat_key_pd
	jmp	scan_key_end
	
	
heat_key_pd:
	clr	key.no_key
	sz	key.heat_1
	jmp	heat_key_ok
	set	key.heat_1
	jmp	scan_key_end
	
heat_key_ok:
	set	key.heat_ok
key_ok_end:	
	clr	key.heat_1
	clr	key.auto_1
	clr	key.no_key
	jmp	scan_key_end
	

key_auto_push:
	clr	pac
	mov	a,pa_delay
	mov	pa,a
	clr	key.heat_1
	clr	key.heat_ok
	sz	key.auto_1
	jmp	auto_key_pd
	sz	key.no_key
	jmp	auto_key_pd
	jmp	scan_key_end
	
auto_key_pd:
	clr	key.no_key
	sz	key.auto_1
	jmp	auto_key_ok
	set	key.auto_1
	jmp	scan_key_end
	
auto_key_ok:
	set	key.auto_ok
	jmp	key_ok_end
		
;*****************************************************************
;name: Speech_con
;sourse : 
;speech_code
;0, 1-2
;1, 3-5
;2, 4-5
;3, 3-7
;4, 4-7
;5, 6
;
;speech_num
;1,欢迎使用xx电器
;2,请选择功能
;3,自动制浆
;4,加热
;5,开始
;6,暂停
;7,结束,请饮用
;8,水量不够,请加水

;sp_repeat


speech_con:
	sza	speech_code
	jmp	speech_c1
	clr	pb_out
	clr	pa_out.0
	ret


speech_c1:
	sza	speech_pc	;speech_pc=0, the first speech start
	jmp	speech_pc_1
	
	mov	a,speech_code
	dec	acc
	rl	acc
	rl	acc
	add	a,0e0h
	mov	tblp,a
	tabrdl	acc	;speech_buf
	mov	speech_1,a
	
	inc	tblp
	tabrdl	acc
	mov	speech_2,a
	inc	tblp
	tabrdl	acc
	mov	speech_3,a
	inc	tblp
	tabrdl	acc
	mov	speech_4,a
	
	mov	a,TG_ON_TIME
	mov	speech_count,a
	
	mov	a,speech_1
sp_code_set:
	mov	pb_out,a
	clr	pa_out.0		;set TG4 of Speech
	sz	acc.3
	set	pa_out.0
	inc	speech_pc
	mov	a,speech_code
	mov	speech_code_bak,a
	ret
	
speech_pc_1:
	sdz	acc		;speech_pc =1, the first speech start end, set speech_delay
	jmp	speech_pc_2
		
	sdz	speech_count
	ret
	
	mov	a,speech_2
	mov	speech_count,a
	clr	acc
	jmp	sp_code_set
	
speech_pc_2:
	sdz	acc		;speech_pc=2, the first speech end
	jmp	speech_pc_3
	
	sdz	speech_count
	ret
	mov	a,TG_ON_TIME
	mov	speech_count,a
	
	;sz	speech_code_bak
	;jmp	speech_pc_c21
	;jmp	speech_pc_c22

speech_pc_c21:
	mov	a,speech_code		;判断speech_code有无改变
	sub	a,speech_code_bak
	sz	acc
	jmp	speech_code_change

speech_pc_c22:	
	mov	a,speech_3
	jmp	sp_code_set
	
	
speech_code_change:			;speech_code change
	clr	speech_pc
	mov	a,speech_code
	mov	speech_code_bak,a
	jmp	speech_con

	
speech_pc_3:
	sdz	acc
	jmp	speech_pc_4
		
	sdz	speech_count
	ret
	mov	a,speech_4
	mov	speech_count,a
	clr	acc
	jmp	sp_code_set
	
speech_pc_4:
	sdz	speech_count
	ret
	
	;sz	speech_code_bak
	;jmp	speech_pc_c41
	;jmp	speech_pc_c44
speech_pc_c41:
	mov	a,speech_code		;判断speech_code有无改变
	sub	a,speech_code_bak
	sz	acc
	jmp	speech_code_change
	
speech_pc_c44:
	clr	speech_pc
	snz	flag.sp_repeat
	clr	speech_code
	clr	speech_code_bak
	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

	org	03e0h
	dc	01,050h,02,040h		;欢迎使用xx电器,请选择功能
	dc	04,30h,03,20h		;自动制浆,开始
	dc	08,20h,03,20h		;加热,开始
	dc	04,30h,06,20h		;自动制浆,暂停
	dc	08,20h,06,20h		;加热,暂停
	dc	04,30h,0ch,50h		;自动制浆,结束,请饮用
	dc	08,20h,0ch,50h		;加热,结束,请饮用
	dc	09,080h,00,02h		;水量不够,请加水
	
	end

⌨️ 快捷键说明

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