www.pudn.com > s3c9454.rar > seg_sam.src


			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			;待机显示 
	nop 
	nop 
	jp	led_count_prg_ret	 
criterion_cook_dis:				;精煮显示 
	ld	led_data_buf0,#00000010b 
	call dis_faith_time			;有预约显示预约时间 
	call run_number_led			;在工作显示跑马 
	call wait_work_dis			;待机显示 
	nop 
	nop 
	jp	led_count_prg_ret	 
cook_tile_rice_dis:		;包子饭显示 
	ld	led_data_buf0,#00001000b 
	call dis_faith_time			;有预约显示预约时间 
	call run_number_led			;在工作显示跑马 
	call wait_work_dis			;待机显示 
	nop 
	nop 
	jp	led_count_prg_ret	 
cook_conjee_dis:		;煮粥显示 
	ld	led_data_buf0,#00010000b 
	call dis_faith_time			;有预约显示预约时间 
	call dis_work_time			;否则显示工作显示工作剩余时间 
	nop 
	nop 
	jp	led_count_prg_ret 
cook_soup_dis:			;煲汤显示 
	ld	led_data_buf0,#01000000b 
	call dis_faith_time			;有预约显示预约时间 
	call dis_work_time			;否则显示工作显示工作剩余时间 
	nop 
	nop 
	jp	led_count_prg_ret 
again_heat_dis:			;再加热显示 
	ld	led_data_buf0,#00100000b 
	call dis_faith_time			;有预约显示预约时间 
	call dis_work_time			;否则显示工作显示工作剩余时间 
	nop 
	nop 
	jp	led_count_prg_ret	 
led_count_prg_ret: 
	nop 
	nop 
	ret		 
;================待机显示======= 
; 
;=========================== 
wait_work_dis: 
	clr	led_data_buf0							;否则做待机显示 
	ld	led_1_cnt,#12 
	ld	led_2_cnt,#12 
	ld	led_3_cnt,#12 
	call led_number 
	ret 
;================显示预约时间===== 
; 
;=========================== 
dis_faith_time: 
	tm	work_flg0,#faith_work_flg0				;设置约标志 
	jp	z,dis_faith_time_ret					;如没预约标志跳出,不显示预约时间 
	ld	R0,faith_time_m_L 
	ld	R1,faith_time_m_H 
	ld	R2,#60 
	ld	R4,#1 
	call divide_X_start 
	ld	led_1_cnt,R3 
	clr	R1 
	call sixteen_trun_ten 
	ld	led_2_cnt,R3 
	ld	led_3_cnt,R2 
	call led_number 
dis_faith_time_ret: 
	nop 
	nop 
	ret 
;================显示工作时间== 
; 
;=========================== 
dis_work_time: 
	tm	work_flg0,#faith_work_flg0				;设置约标志 
	jp	nz,dis_faith_time_ret					;如没预约标志跳出,不显示预约时间 
	ld	R0,work_time_minu 
	clr	R1 
	ld	R2,#60 
	ld	R4,#1 
	call divide_X_start 
	ld	led_1_cnt,R3 
	clr	R1 
	call sixteen_trun_ten 
	ld	led_2_cnt,R3 
	ld	led_3_cnt,R2 
	call led_number 
dis_work_time_ret: 
	nop 
	nop 
	ret 
;================显示跑马== 
; 
;=========================== 
run_number_led: 
	tm	work_flg0,#start_work_flg0 
	jp	z,run_number_led_ret 
	clr	R4 
	ld	R5,run_number_cnt 
	ldc	R0,#led_table1[RR4] 
	ld	led_data_buf1,R0 
	ldc	R0,#led_table2[RR4] 
	ld	led_data_buf2,R0 
	ldc	R0,#led_table3[RR4] 
	ld	led_data_buf3,R0 
run_number_led_ret: 
	nop 
	nop 
	ret 
;===========led数码刷新===== 
; 
; 
;========================== 
led_number:	 
	clr	R4 
	ld	R5,led_1_cnt 
	ldc	R0,#led_table[RR4] 
	ld	led_data_buf1,R0 
	ld	R5,led_2_cnt 
	ldc	R0,#led_table[RR4] 
	ld	led_data_buf2,R0 
	ld	R5,led_3_cnt 
	ldc	R0,#led_table[RR4] 
	ld	led_data_buf3,R0 
led_number_ret: 
	nop 
	nop 
	ret 
;===========LED显示程序============== 
;4个毫秒刷新一次 
; 
;==================================== 
display_led: 
	inc	led_cnt 
un_inc_dis: 
	ld	P2CONH,#01001010b			;p2设为输出 
	ld	P2CONL,#10101010b 
	ld	P0CONL,#10101010b			;p0.0、1、2、3设为输出 
	cp	led_cnt,#1 
	jp	z,dis_led_1 
	cp	led_cnt,#2 
	jp	z,dis_led_2 
	cp	led_cnt,#3 
	jp	z,dis_led_3 
	cp	led_cnt,#4 
	jp	z,dis_led_4 
dis_led_0:							;点亮功能LED 
	clr	led_cnt 
	p0_0_is_low 
	ld	p2,led_data_buf0 
	and	p0,#01111111b 
	jp	dis_led_prg_ret 
dis_led_1:							;点亮数码管1 
	p0_1_is_low 
	ld	p2,led_data_buf1 
	tm	all_led_flg0,#dis_H_led_flg0 
	jp	z,clr_led_H_up 
	or	p0,#10000000b 
	jp	dis_led_prg_ret 
clr_led_H_up: 
	and	p0,#01111111b 
	jp	dis_led_prg_ret 
dis_led_2:							;点亮数码管2 
	p0_2_is_low 
	ld	p2,led_data_buf2 
	tm	all_led_flg0,#dis_H_led_flg0 
	jp	z,clr_led_H_down 
	or	p0,#10000000b 
	jp	dis_led_prg_ret 
clr_led_H_down: 
	and	p0,#01111111b 
	jp	dis_led_prg_ret 
dis_led_3:							;点亮数码管3 
	p0_3_is_low 
	ld	p2,led_data_buf3 
	and	p0,#01111111b 
	jp	dis_led_prg_ret 
dis_led_4: 
	p1_1_is_low 
	ld	p2,led_data_buf4 
	and	p0,#01111111b 
dis_led_prg_ret: 
	nop 
	nop 
	ret	 
;========LED表 
; 
; 
;============================== 
led_table: 
	;	hfabgcde 
	db	01110111b	;0 
	db	00010100b	;1 
	db	00111011b	;2 
	db	00111110b	;3 
	db	01011100b	;4 
	db	01101110b	;5 
	db	01101111b	;6 
	db	00110100b	;7 
	db	01111111b	;8 
	db	01111110b	;9 
	db	01101011b	;e 
	db	01101001b	;f 
	db	00001000b	;- 
	db	00000000b	;0 
;========LED表1 
; 
; 
;============================== 
led_table1: 
	;	fagedscb 
	db	11011011b	;0 
	db	00000011b	;1 
	db	01111001b	;2 
	db	01101011b	;3 
	db	10100011b	;4 
	db	11101010b	;5 
	db	11111010b	;6 
	db	01000011b	;7 
;========LED表2 
; 
; 
;============================== 
led_table2: 
	;	fagedscb 
	db	11011011b	;0 
	db	00000011b	;1 
	db	01111001b	;2 
	db	01101011b	;3 
	db	10100011b	;4 
	db	11101010b	;5 
	db	11111010b	;6 
	db	01000011b	;7 
;========LED表3 
; 
; 
;============================== 
led_table3: 
	;	fagedscb 
	db	11011011b	;0 
	db	00000011b	;1 
	db	01111001b	;2 
	db	01101011b	;3 
	db	10100011b	;4 
	db	11101010b	;5 
	db	11111010b	;6 
	db	01000011b	;7 
;=============保温程序================================ 
;描述: 
; 
; 
; 
; 
; 
;=============================================================== 
heat_and_warm: 
	 
heat_and_warm_ret: 
	nop 
	nop 
	ret	 
;================beep ============= 
short_beep1:	 
	clr	beep_tim_cnt 
	clr	long_beep_cnt 
	ld	beep_buf,#20 
	ld 	give_beep_times,#1 
	and all_beep_flg,#clr_beep_stop_flag 
	ret 
;=============== 
long_beep1: 
	clr	beep_tim_cnt 
	clr	long_beep_cnt 
	ld	beep_buf,#45 
	ld 	give_beep_times,#1 
	and all_beep_flg,#clr_beep_stop_flag 
	ret 
;=============== 
long_beep2: 
	clr	beep_tim_cnt 
	clr	long_beep_cnt 
	ld	beep_buf,#35 
	ld 	give_beep_times,#2 
	and all_beep_flg,#clr_beep_stop_flag 
	ret 
;=============== 
long_beep3: 
	clr	beep_tim_cnt 
	clr	long_beep_cnt 
	ld	beep_buf,#40 
	ld 	give_beep_times,#3 
	and all_beep_flg,#clr_beep_stop_flag 
	ret 
;=============== 
long_beep4: 
	clr	beep_tim_cnt 
	clr	long_beep_cnt 
	ld	beep_buf,#40 
	ld 	give_beep_times,#4 
	and all_beep_flg,#clr_beep_stop_flag 
	ret 
;=============== 
long_beep5: 
	clr	beep_tim_cnt 
	clr	long_beep_cnt 
	ld	beep_buf,#40 
	ld 	give_beep_times,#5 
	and all_beep_flg,#clr_beep_stop_flag 
	ret	 
;==============16进制转10进制部分=========== 
;此部分作为一个子程序,供其他部分调用, 
;入口参数为:R1高8位,R0为低8位 
;出口参数为:R5放千位,R4放百位,R3放十位,R2放个位 
;最大输出为9999 
;======================================== 
sixteen_trun_ten: 
	clr	R2 
	clr	R3 
	clr	R4 
	clr	R5 
trun_sub_loop: 
	cp	R0,#100 
	jp	nc,low_sub_100 
	cp	R1,#1 
	jp	nc,low_sub_100 
	cp	R0,#10 
	jp	nc,low_sub_10 
	ld	R2,R0 
	jp	sixteen_trun_ten_ret 
low_sub_100: 
	sub	R0,#100 
	sbc	R1,#0 
	inc	R4 
	cp	R4,#10 
	jp	c,trun_sub_loop 
	clr	R4 
	inc	R5 
	jp	trun_sub_loop 
low_sub_10: 
	sub	R0,#10 
	inc	R3 
	jp	trun_sub_loop 
sixteen_trun_ten_ret: 
	nop 
	nop 
	ret 
;=======X除Y计算========================= 
;没有小数,R4大于1为决定四舍五入,R4为0时余数为1商加1 
;有小数,R4为1时算完后R0放剩数 
;R0	放被除数低8位,算完后R0放剩数 
;R1	放被除数高8位 
;R2	放除数 
;R3	放商 
;========================================= 
divide_X_start: 
	clr	R3 
divide_X_loop: 
	cp	R0,R2 
	jp	nc,inc_R3_divide 
	cp	R1,#1 
	jp	c,over_divide 
	sub	R0,R2 
	sbc	R1,#0 
	inc	R3 
	jp	divide_X_loop 
over_divide:	 
	rr	R2								;四舍五入 
	and	R2,#01111111b 
	cp	R4,#1 
	jp	c,cp_R0_1 
	jp	z,data_divide_X_ret 
	cp	R0,R2 
	jp	if_add_1 
cp_R0_1: 
	cp	R0,#1 
if_add_1: 
	jp	nc,again_inc_out 
	jp	data_divide_X_ret 
inc_R3_divide: 
	inc	R3	 
	sub	R0,R2 
	jp	divide_X_loop 
again_inc_out: 
	inc	R3	 
data_divide_X_ret: 
	nop 
	nop 
	ret	 
;=======X乘Y计算========================= 
;求一个数X的Y倍		R0	放被乘数低位 
;					R1	放被乘数高位 
;两数之积小于			R2	放乘数 
;					R3	放积低位 
;					R4	放积高位 
;被乘数  乘数 之积不能大于FFFF=65535 
;========================================= 
mul_start: 
	clr	R3 
	clr	R4 
	cp	R2,#0 
	jp	z,mul_loop_ret 
mul_loop: 
	dec	R2 
	add	R3,R0 
	adc	R4,R1 
	cp	R2,#0 
	jp	nz,mul_loop 
mul_loop_ret: 
	nop 
	nop 
	ret	 
;==================================================================== 
;描述: 
;=============================================================== 
Initcpu: 
	ld	SYM,#00h			;关总中断标志 
	ld 	BTCON,#10100010b		;DISwatchdog  ;BTCON为时基控制寄存器1010B=Disable watchdog timer 
    ld 	CLKCON,#00011000b		;No_divide_clock=00011000b	;资料的279页 
     
	ld	T0CON,#01001010b		;中断频率3.2M/256/125 
	ld	T0DATA,#125 
		 
	ld	p0conh,#10011111b		;I/O口设置 
	or	p0,#10000000b			;EN脚为高电平 
	 
	ld	p0conl,#11110101b		;I/O口设置	 
	ld	p1con,#00101010b		;中断设置 
	 
	ld	p2conh,#01001010b		;I/O口设置 
	ld	p2conl,#10101010b		;I/O口设置 
Initcpu_RET: 
	ret 
;==================================================================== 
Delay300ms: 
	ld	R0,#250 
Dloop: 
	nop 
	dec	R0 
	jp	nz,Dloop 
Delay300ms_RET: 
	ret 
;=============================初始化数据================================ 
;描述:95599 8146 59287 79713		周冬柯 
;=============================================================== 
initdata: 
	ld	R2,#0h 
	ld	R0,#00h 
Clrram10: 
	ld	@R0,#00h 
	inc	R0 
	inc	R2 
	cp	R2,#070h 
	jp	nz,Clrram10 
	ret 
;=====================================中断========================== 
;描述:中断频率为1KHz 
;=============================================================== 
INT_9454: 
	Reg_save					;堆栈 
	ld	SYM,#00h	 
	tm	T0CON,#00000001b 
	jp	nz,time_a 
	jp	INT_9454_ret 
time_a: 
	and	T0CON,#11110110b 
	inc	one_ms_cnt				;一个豪秒加一 
	cp	one_ms_cnt,#10 
	jp	c,INT_9454_ret 
	or	all_led_flg0,#refurbish_flg0 
	clr	one_ms_cnt 
	inc	ten_ms_cnt				;10个毫秒加一 
	cp	ten_ms_cnt,#25 
	jp	c,INT_9454_ret 
	clr	ten_ms_cnt 
	inc	quarter_s_cnt			;四分之一秒加一 
	inc	run_number_cnt			;跑马灯加一 
	cp	run_number_cnt,#6 
	jp	c,INT_9454_ret 
	clr	run_number_cnt	 
INT_9454_ret: 
	nop 
	nop 
	Reg_restore					;压栈 
	iret						;中断返回 
	end