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

📄 seg_sam.src

📁 三星S3C9454汇编写的一个电磁炉程式要
💻 SRC
📖 第 1 页 / 共 2 页
字号:
	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

⌨️ 快捷键说明

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