答案:;//***********开辟三个存储单元存放小时、分钟、秒的二进制数值******************
hour equ 30h
min equ 31h
sec equ 32h
;//*****************程序开始*****************
org 00h
sjmp start
org 0bh
ajmp int_t0
org 13h
ajmp int_int0
org 30h
start: mov p2,#00h ; P2清零
mov sp,#60h
mov dptr,#table
mov r2,#20 ;中断20次
setb ea ;中断允许
setb et0 ;T0溢出中断允许
setb ex1 ;T1溢出中断允许
setb px1 ;外部中断1中断优先级控制
setb it1 ; 外部中断1中断触发方式为边沿触发
mov tmod,#01h ; T0模式1
mov th0,#60 ;设置初值
mov tl0,#176
mov r0,#0
;// setb tr0 ;T0运行控制
;//*************************小时显示*************************
display:mov r1,#01h
mov b,#10
mov a,hour
div ab
acall disscan
mov a,r1
rl a
mov r1,a
mov a,b
acall disscan
;//**********************分隔线显示**************************
acall fenggexian
;//*********************分钟显示*****************************
mov b,#10
mov a,r1
rl a
mov r1,a
mov a,min
div ab
acall disscan
mov a,r1
rl a
mov r1,a
mov a,b
acall disscan
;//***********************分隔线显示******************************
acall fenggexian
;//***********************秒显示***************************
mov b,#10
mov a,r1
rl a
mov r1,a
mov a,sec
div ab
acall disscan
mov a,r1
rl a
mov r1,a
mov a,b
acall disscan
ljmp display
;//***************************分隔线显示子程序************************
fenggexian:
mov p0,#0bfh
mov a,r1
rl a
mov r1,a
mov p2,r1
mov r5,#1
acall delay
mov p2,#0
mov r5,#1
acall delay
ret
;//*****************************数码显示*******************************
disscan:movc a,@a+dptr
mov p0,a
mov p2,r1 ;允许哪个数码管显示
mov r5,#2
acall delay
mov p2,#0 ; 关闭数码管
mov r5,#1
acall delay
ret
;//*****************************延时子程序*****************************
delay: mov r6,#10
d1: mov r7,#100
djnz r7,$
djnz r6,d1
djnz r5,delay
ret
;//*******************************定时中断服务程序*******************************
int_t0: push acc
dec r2 ; 中断一次减一
cjne r2,#00,next ;判断是否中断20次
mov r2,#20
inc sec ;中断20次则加一秒
mov a,sec
cjne a,#60,next ;判断是否达到1分钟
mov sec,#0
inc min
mov a,min
cjne a,#60,next ; 判断是否达到一小时
mov min,#0
inc hour
mov a,hour
cjne a,24,next ; 判断是否达到24小时
mov hour,#0
next: mov th0,#60 ; 重新设定初值
mov tl0,#176
pop acc
reti
;//****************************外部中断服务程序****************************
int_int0:
inc r0 ;每按一下则R0加一
cjne r0,#1,two ; 判断R0是否为2
setb tr0 ;T0运行控制
sjmp exit
two: cjne r0,#2,three ; 判断R0是否为3
clr tr0 ;T0运行终止
sjmp exit
three: mov hour,#0 ;显示管清零
mov min,#0
mov sec,#0
mov r0,#0
exit: reti
;//*****************************共阳极数码管段码表****************************
table:db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h
其他:汇编语言电子钟程序
http://wenku.zhaoxi.net/view/92be7df37c1cfad6195fa759.html 我手上有。看我名
上一个:怎样把汇编采集的AD用数码管显示(没除法指令)
下一个:用汇编语言怎么将AL寄存器最高位置1