用汇编程序实现电子时钟

用汇编语言程序实现电子时钟

基本思想:
当需要编写程序实现较复杂的功能时,整个程序就如同一个装配体(总成),而子程序就如同装配体中的零件,子程序与主程序的接口就如同机械中的连接件将不同零件装配起来。
使用子程序能使程序结构更清晰,且逻辑不易发生错误。

实现电子时钟需要的子程序:
1.显示子程序disp
2.显示延时子程序dey1
3.中断服务intt0
4.中断服务退出子程序out
5.加一子程序add1
6.清空子程序clr0

应注意的事项:
1.位选应与段码输送相配合,若使用P2位选,P2.0连接最前端的数码管,则P2=#00000001B,即P2.0=1时,应输送小时的最高位段码
2.若通过P2左移实现显示,可通过左移次数判断一次显示是否完成,也可将P2的值赋给A,通过判断ACC.7是否为1得到一次显示是否完成,后者在实现上更方便
3.进入中断服务时,可将中断允许ET0先断开,在中断服务退出子程序中再将ET0打开,可减少计时误差
4.判断秒钟、分钟是否达到60,时钟是否达到24,用DJNE语句比用减法后判断JC更简单
5.当秒钟、分钟达到60,时钟达到24时,需调用清空子程序clr0将其清0
6.加一子程序add1可通过16进制数加#01h后通过十进制调整指令DA将其转换为10进制数,通过分别屏蔽高、低4位并通过SWAP指令分别赋给对应的显缓区
7.共阳极8位二极管显示0~9的段码分别为:

0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h

显示横杠(——)的段码为0bfh
共阴极段码取反即可

程序代码如下:

org	0000h
ljmp	main
org	000bh
ljmp	intt0
org	0100h
main:	mov	tmod,#01h
mov	tl0,#0b0h
mov	th0,#3ch
setb	ea

setb	et0
setb	tr0
mov	r4,#20
mov	73h,#10
mov	76h,#10
mov	dptr,#table

loop:	lcall	disp
ljmp	loop

disp:	mov	r3,#01h
mov	r0,#78h

play:	mov	a,r3
mov	p2,a
mov	a,@r0
movc	a,@a+dptr
mov	p0,a
lcall	dey1
mov	a,r3
dec	r0
jb	acc.7,next
rl	a
	mov	r3,a
	ljmp	play
next:ljmp	disp

	


dey1:	mov	r6,#10
dl1:	mov	r7,#19h
dl2:	djnz	r7,dl2
	djnz	r6,dl1
ret

intt0:	push	acc
push	psw
clr	et0
clr	tr0
mov	tl0,#0b0h
mov	th0,#3ch
setb	tr0
djnz	r4,out
adds:	mov	r4,#20
mov	r0,#71h
lcall	add1
mov	a,r2
clr	c
cjne	a,#60h,addmin
addmin:	jc	out
lcall	clr0
mov	r0,#74h
lcall	add1
mov	a,r2
clr	c
cjne	a,#60h,addh
addh:	jc	out
lcall	clr0
mov	r0,#77h
lcall	add1
mov	a,r2
clr	c
cjne	a,#24h,hourreset
jc	out
hourreset:	lcall	clr0

out:	pop	psw
pop	acc
setb	et0
reti

add1:	inc	r0
mov	a,@r0
swap	a
dec	r0
orl	a,@r0
add	a,#01h
da	a
mov	r2,a
anl	a,#0fh
mov	@r0,a
mov	a,r2
anl	a,#0f0h
swap	a
inc	r0
mov	@r0,a
ret

clr0:	mov	a,#0
mov	@r0,a
dec	r0
mov	@r0,a
ret

table:	db	0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,0bfh
end

使用proteus7.5仿真的效果如下:
在这里插入图片描述

  • 6
    点赞
  • 185
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

happy19991001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值