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

📄 seg_sam.src

📁 三星S3C9454汇编写的一个电磁炉程式要
💻 SRC
📖 第 1 页 / 共 2 页
字号:
			include "C:\工程项目\seg_sam\seg_sam_head.src"

;================Interrupt vertor adderss================
	ORG	0000H					;中断入口地址
	VECTOR	00H,INT_9454
	ORG	003cH
	DB	00H					;必须初始化为0
	DB	00H					;必须初始化为0
	DB	0E7H				;允许低电压复位
	DB	03H					;内部RC震荡3.2M		
;=====================MAIN PROGRAM=======
		org	0100h					;复位入口地址
Rest:
	di				    		;关总中断DISwatchdog=10100010b ;7654位为1010时关看门狗
	ld BTCON,#101000010b		;DISwatchdog  ;BTCON为时基控制寄存器1010B=Disable watchdog timer
    	ld CLKCON,#00011000b		;No_divide_clock=00011000b	;资料的279页
    	ld SYM,#00h				;关总中断标志
    	ld SP,#0C0H				;堆栈设置
    	call Initcpu
    	call Delay300ms				;延时300ms给晶体振荡器稳定
    	call initdata				;初始化数据8966020
    	call long_beep1
    	ei	;开总中断
;==============================main============================13536417338
main:
	ei
	nop
	nop
	cp	main_program_cnt,#0
	jp	z,call_read_AD_prg
	cp	main_program_cnt,#1
	jp	z,call_time_comput
	cp	main_program_cnt,#2
	jp	z,call_read_key_prg
	cp	main_program_cnt,#3
	jp	z,call_what_key_is
	cp	main_program_cnt,#4
	jp	z,call_heat_and_warm
call_read_AD_prg:
	nop
	nop
	call read_AD_prg
	jp	refurbish_LED
call_time_comput:
	nop
	nop
	call time_comput
	nop
	call haver_erroron
	jp	refurbish_LED
call_read_key_prg:
	nop
	nop
	call led_count_prg				;LED显示计算
	jp	refurbish_LED
call_what_key_is:	
	nop
	nop
	call what_key_is				;按键确认
	jp	refurbish_LED
call_heat_and_warm:
	nop
	nop		
	call heat_and_warm				;加热与保温
	jp	refurbish_LED
refurbish_LED:
	inc	main_program_cnt
	nop
	call read_key_prg				;按键扫描
	call display_led				;刷新显示改变位,n豪秒刷新一次,视效果而定
	nop
	nop
	jp	main
;================AD采样========================
;描述:
;
;
;
;
;
;==================================================
read_AD_prg:
	
;==========读取top温度========================
;描述:广州敏杰热敏电阻
;=======================================
read_top_temp:
	nop
	nop
	call delay_10_nop
	jp	read_AD_prg_ret
;==============读取锅低温度=====================
read_bot_temp:
	nop
	nop
	call delay_10_nop
read_AD_prg_ret:
	nop
	nop
	ret
;==============================温度数据表====================================
temp_tab:
	DB  0FH,010H,011H,012H,013H,013H,014H,015H,016H,017H;0C`~9C`
;=====================时间计算/定时开机=======
;描述:在顶时设定后清掉时钟的所有积存器
;=============时间计算=======================
time_comput:
	cp	half_second_cnt,#2
	jp	c,time_switch_ret
just_one_s:					;一秒
	clr	half_second_cnt
	inc	one_second_cnt
	call 	dec_one_second
	cp	one_second_cnt,#60
	jp	c,time_switch_ret
just_one_m:					;一分
	clr	one_second_cnt
	inc	one_minu_cnt
	cp	one_minu_cnt,#60
	jp	c,time_switch_ret
just_one_h:					;一小时
	clr	one_minu_cnt
	inc	one_hour_cnt
	cp	one_hour_cnt,#24
	jp	c,time_switch_ret
	clr	one_hour_cnt
time_switch_ret:
	nop
	nop
	ret
;==========工作或预约时间减一秒=======
dec_one_second:
	inc	work_one_second
	cp	work_one_second,#60
	jp	c,dec_one_second_ret
	clr	work_one_second
	tm	work_flg0,#start_work_flg0				;如预约开始或已经开始工作
	jp	nz,dec_work_time	
	tm	work_flg0,#faith_start_flg0				;如预约开始,关机并进入待机
	jp	nz,dec_faith_time
	jp	dec_one_second_ret
dec_faith_time:
	cp	faith_time_m_H,#1
	jp	nc,continue_dec
	cp	faith_time_m_L,#2
	jp	c,faith_time_over
continue_dec:
	sub	faith_time_m_L,#1
	sbc	faith_time_m_H,#0
faith_time_over:
	nop
	nop
	jp	dec_one_second_ret	
dec_work_time:
	dec	work_time_minu
	jp	nz,dec_one_second_ret
work_just_over:
	call long_beep5
dec_one_second_ret:	
	nop
	nop
	ret
;====================有错误报警关机==========================
;有错误报警5声 关机 LCD同时显示对应的错误码
;
;
;=========================================
haver_erroron:
	
haver_erroron_ret:
	nop
	nop
	ret
;=============按键=============
;
;
;=============================
read_key_prg:
	ld	P0CONH,#10101010b
	ld	P0CONL,#10101010b
	or	p0,#00001111b
	ld	P2CONH,#0
	ld	P2CONL,#0
	call delay_10_nop
	ld	key_buf0,p2
	or	key_buf0,#10100100b
	cp	key_buf0,#11111111b
	jp	nz,have_keyact				;如果不都为1那么就有按键按下
	jp	NO_KEYSCAN					;否则没有按键动作,跳出按键扫描
have_keyact:
	cp	key_buf0,key_buf2			;key_buf2存放上次前8个按键值
	jp	z,is_oldkey
have_newkey:
	ld	key_buf2,key_buf0
	and	allkeyflag,#11110011b	;#Keyingflag=00000100b
	jp	key_scan_ret
is_oldkey:
	dec	key_dec_times
	jp	nz,key_scan_ret
key_is_ok:
	tm	allkeyflag,#keybackflag	;#keybackflag=00000001b
	jp	nz,key_scan_ret
	or	allkeyflag,#keyonflag	;#keyonflag=00000010b确定有键按下的标志
	or	allkeyflag,#keybackflag	;手是否松开的标志
	ld	key_dec_times,#24
	tm	allkeyflag,#Keyingflag	;#Keyingflag=00000100b
	jp	nz,set_samkey
	or	allkeyflag,#Keyingflag
	jp	key_scan_ret
set_samkey:						;同一按键
	or	allkeyflag,#samekeyflag	;#samekeyflag=00001000b
	jp	key_scan_ret
NO_KEYSCAN:
	and allkeyflag,#11110000b
	ld	key_dec_times,#16
key_scan_ret:
	nop
	nop
	ret
;==确定按键=============================
;描述:
;
;
;
;=========================================
what_key_is:	
	tm	allkeyflag,#keyonflag
	jp	z,key_make_sure_ret
havekey:
	cp	key_buf0,#open_close_data
	jp	z,open_close
	tm	work_flg0,#start_work_flg0				;如预约开始或已经开始工作
	jp	nz,key_make_sure_ret					;以下按键无效
	tm	work_flg0,#faith_start_flg0				;如预约开始或已经开始工作
	jp	nz,key_make_sure_ret
	cp	key_buf0,#func_choice_data
	jp	z,function_choice
	cp	key_buf0,#faith_data
	jp	z,time_faith
	cp	key_buf0,#hour_key_data
	jp	z,hour_key_is
	cp	key_buf0,#minu_key_data
	jp	z,minu_key_is
	jp	key_make_sure_ret
;================================
open_close:
	tm	work_flg0,#start_work_flg0				;如预约开始或已经开始工作
	jp	nz,close_to_wait						;关机并进入待机
	tm	work_flg0,#faith_start_flg0				;如预约开始,关机并进入待机
	jp	nz,close_to_wait
	tm	work_flg0,#faith_work_flg0				;如有预约标志开始预约
	jp	nz,start_faith
	tm	work_flg0,#have_function_flg0			;如只有功能按下就立即开机工作
	jp	nz,immediately_work
close_to_wait:
	call long_beep1
	clr	work_flg0
	clr	led_data_buf0
	jp	key_make_sure_ret
start_faith:
	call short_beep1
	or	work_flg0,#faith_start_flg0
	jp	key_make_sure_ret
immediately_work:
	call short_beep1
	or	work_flg0,#start_work_flg0	
	jp	key_make_sure_ret
;========================	
function_choice:								;功能处理
	or	work_flg0,#have_function_flg0
	and	work_flg0,#unfaith_work_flg0			;具体看预约设置说明此标志
	call short_beep1
	inc	function_key_cnt
	cp	function_key_cnt,#quicks_cook_data
	jp	z,quicks_cook
	cp	function_key_cnt,#criterion_cook_data
	jp	z,criterion_cook
	cp	function_key_cnt,#cook_tile_rice_data
	jp	z,cook_tile_rice
	cp	function_key_cnt,#cook_conjee_data
	jp	z,cook_conjee
	cp	function_key_cnt,#cook_soup_data
	jp	z,cook_soup
	cp	function_key_cnt,#again_heat_data
	jp	z,again_heat
	clr	function_key_cnt
	jp	key_make_sure_ret
;=========快煮=======
;
;========================
quicks_cook:			
	
	jp	key_make_sure_ret
;=========精煮=======
;
;========================
criterion_cook:	
	
	jp	key_make_sure_ret
;=========煲子饭=======
;
;========================
cook_tile_rice:	

	jp	key_make_sure_ret
;=========默认煮粥一小时=======
;工作时间可调
;========================
cook_conjee:	
	ld	work_time_minu,#60
	ld	work_time_max,#180
	ld	work_time_min,#30
	jp	key_make_sure_ret
;=========默认煮汤一小时=======
;工作时间可调
;========================
cook_soup:
	ld	work_time_minu,#15
	ld	work_time_max,#240
	ld	work_time_min,#30
	jp	key_make_sure_ret
;=========默认煮粥15分钟=======
;工作时间可调
;========================
again_heat:
	clr	function_key_cnt
	ld	work_time_minu,#15
	ld	work_time_max,#30
	ld	work_time_min,#5
	jp	key_make_sure_ret
;=========预约按键=======
;预约工作时间可调
;0~8小时	如正在预约时切换功能,设置过的预约时间不变
;切换功能相应改变是否允许预约标志
;工作时或关机时清预约时间不变与预约标志
;========================
time_faith:						
	tm	work_flg0,#have_function_flg0
	jp	z,key_make_sure_ret						;如没有功能键按下,不允许预约
	or	work_flg0,#faith_work_flg0				;设置约标志
	tm	work_flg0,#unchange_faith_t_flg0		;如有预约标志开始预约
	jp	nz,key_make_sure_ret
	or	work_flg0,#unchange_faith_t_flg0
	ld	faith_time_m_H,#0
	ld	faith_time_m_L,#0		
	jp	key_make_sure_ret	
;=========小时加按键=======
;
;
;========================
hour_key_is:
	tm	work_flg0,#allow_timing_flg0			;不允许定时跳出
	jp	z,key_make_sure_ret
	tm	work_flg0,#faith_work_flg0				;设置约标志
	jp	nz,inc_faith_time_60m
	cp	function_key_cnt,#6
	jp	z,cp_max_time_H						;再加热时钟不能加1
	add	work_time_minu,#60
cp_max_time_H:
	cp	work_time_max,work_time_minu
	jp	nc,key_make_sure_ret
	ld	work_time_minu,work_time_min
	jp	key_make_sure_ret	
inc_faith_time_60m:						;最大预约时间8小时==480分钟
	add	faith_time_m_L,#60
	adc	faith_time_m_H,#0
	cp	faith_time_m_H,#1
	jp	c,key_make_sure_ret
	cp	faith_time_m_L,#0E1h
	jp	c,key_make_sure_ret
	clr	faith_time_m_L
	clr	faith_time_m_H
	jp	key_make_sure_ret
;=========分钟加按键=======
;
;
;========================
minu_key_is:
	tm	work_flg0,#allow_timing_flg0			;不允许定时跳出
	jp	z,key_make_sure_ret
	tm	work_flg0,#faith_work_flg0				;设置约标志
	jp	nz,inc_faith_time_10m
	cp	function_key_cnt,#cook_conjee_data
	jp	z,add_15_minutes						;煮粥步长为15分钟
	cp	function_key_cnt,#cook_soup_data
	jp	z,add_30_minutes						;煮汤步长为30分钟
	add	work_time_minu,#5						;再加热步长为5分钟
	jp	cp_max_data
add_15_minutes:
	add	work_time_minu,#15
	jp	cp_max_data
add_30_minutes:
	add	work_time_minu,#30
cp_max_data:
	cp	work_time_max,work_time_minu
	jp	nc,key_make_sure_ret
	ld	work_time_minu,work_time_min
	jp	key_make_sure_ret
inc_faith_time_10m:
	add	faith_time_m_L,#10
	adc	faith_time_m_H,#0
	cp	faith_time_m_H,#1
	jp	c,key_make_sure_ret
	cp	faith_time_m_L,#0E1h
	jp	c,key_make_sure_ret
	clr	faith_time_m_L
	clr	faith_time_m_H
key_make_sure_ret:					;允许按主键显示温度或压力
	;and	allkeyflag,#clrkeyonflag		;清有键标志#keyonflag=00000010b确定有键按下的标志
	;and	allkeyflag,#clrsamekeyflag		;#samekeyflag=00001000b	
	and	allkeyflag,#clr_samekey_on_flg
;====================多声蜂鸣器程序============================
;
;
;
;
;===========================================================
beep_program:			;蜂鸣器
	cp 	beep_tim_cnt,give_beep_times
	jp	nc,beep_isover
beep_is_do:
	tm  all_beep_flg,#beep_stop_flag	;
	jp	nz,deepfreeze_stop			;暂时(deepfreeze)停止
	or	p1,#1						;开蜂鸣器
	cp  long_beep_cnt,beep_buf			;long_beep_cnt值来之时间程序,半秒为一单位
	jp	c,beep_program_ret
deepfreeze_stop:
	or  all_beep_flg,#beep_stop_flag
	and	p1,#11111110b				;关蜂鸣器
	ld	R0,beep_buf
	add	R0,beep_buf
	cp	long_beep_cnt,R0
	jp	z,open_beep_agian
	jp  beep_program_ret
beep_isover:
	and	p1,#11111110b				;关蜂鸣器
	jp  beep_program_ret
open_beep_agian:
	inc beep_tim_cnt
	clr long_beep_cnt
	and all_beep_flg,#clr_beep_stop_flag
beep_program_ret:
	nop
	nop
	ret
;========delay 10 nop
;
;======================
delay_10_nop:	
	nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    ret
;===========led显示计算=============
;
;
;====================
led_count_prg:
	tm	work_flg0,#have_function_flg0
	jp	nz,dis_number_led						;有功能键按下显示对应的显示
	clr	function_key_cnt
	call wait_work_dis			;待机显示
	jp	led_count_prg_ret
dis_number_led:						;有功能键按下显示对应的显示
	cp	function_key_cnt,#quicks_cook_data
	jp	z,quicks_cook_dis
	cp	function_key_cnt,#criterion_cook_data
	jp	z,criterion_cook_dis
	cp	function_key_cnt,#cook_tile_rice_data
	jp	z,cook_tile_rice_dis
	cp	function_key_cnt,#cook_conjee_data
	jp	z,cook_conjee_dis
	cp	function_key_cnt,#cook_soup_data
	jp	z,cook_soup_dis
	cp	function_key_cnt,#again_heat_data
	jp	z,again_heat_dis
	clr	work_flg0
	clr	function_key_cnt
	jp	led_count_prg_ret
quicks_cook_dis:				;快煮显示
	ld	led_data_buf0,#00000001b
	call dis_faith_time			;有预约显示预约时间
	call run_number_led			;在工作显示跑马
	call wait_work_dis			;待机显示

⌨️ 快捷键说明

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