📄 timer1.asm
字号:
key_mm_sign bit 00h
key_hh_sign bit 01h
hour data 30h
min data 31h
sec data 32h
;;;;;;;;;;;;;;;;中断入口程序;;;;;;;;;;;;;;;;;
org 0000h
ajmp start
org 0003h
reti
org 000bh
ljmp intt0 ;定时器0中断入口地址程序
org 0013h
reti
org 001bh
reti
org 0023h
reti
;;;;;;;;;;;;;;;主程序;;;;;;;;;;;;;;;;;;;;;;;;
org 0050h
start:
mov 70h,#01
mov 71h,#02
mov 72h,#03
mov 73h,#04
mov 74h,#05
mov 75h,#06
mov hour,#12
mov min,#00h
mov sec,#00h ;定时器t0初始化;
mov tmod,#01h
mov th0,#3ch
mov tl0,#0b5h
setb ea ;开所有中断
setb et0 ; 开定时器中断
setb tr0 ;开启T0
mov r4,#14h
start1:
;lcall switch_data
lcall display ;调用显示程序
;lcall dk5ms
;lcall key_mm
;lcall key_hh
jmp start1
;;;;;;;;;;;;;;;;;;;;;;1s 计时程序;;;;;;;;;;;;;;;;;;;;;
intt0: push acc ;入栈保护寄存器,状态字
push psw
clr et0 ;关中断,定时器T0
clr tr0
mov tl0,#0bdh
mov th0,#3ch
setb tr0 ;开中断
djnz r4,outt0 ;1S到否?没到,退出中断服务子程序
cpl p3.0
mov r4,#14h
inc sec
mov a,sec
cjne a,#60,outt0
mov sec,#00h
inc min
mov a,min
cjne a,#60,outt0
mov min,#00h
inc hour
mov a,hour
cjne a,#24,outt0
mov hour,#00h
outt0: ;中断返回
setb et0
pop psw
pop acc
reti
;;;;;;;;;;;;;;;;;;;;;;;时针调整程序;;;;;;;;;;;;;;;;;;;;;;;;
;当键被按下时进入此程序
;;;;;;;;;;;;;;;;;调分钟程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
key_mm:
jnb p1.1,key_mmnext
clr key_mm_sign
jmp key_mmret
key_mmnext:
jb key_mm_sign,key_mmret
setb key_mm_sign
call dk5ms
jb p1.1,key_mmret
inc min
mov a,min
cjne a,#60,key_mmret
mov min,#60h
key_mmret:
ret
key_hh:
jnb p1.2,key_hhnext
clr key_hh_sign
jmp key_hhret
key_hhnext:
jb key_hh_sign,key_hhret
setb key_hh_sign
call dk5ms
jb p1.2,key_hhret
inc hour
mov a, hour
cjne a,#24,key_hhret
mov hour,#00h
key_hhret: ret
;##########显示转换子程序##############
switch_data:
push 00
push 01
push 03
mov r1,#75h ;显示单元
mov r0,#30h ;要交换的数
mov r3,#03h
switch_data_loop:
mov a,@r0
; anl a,#0fh
mov b,#10
div ab
mov @r1,a
dec r1
mov @r1,b
dec r1
inc r0
djnz r3,switch_data_loop
pop 03
pop 01
pop 00
ret
;;;;;;;;;;;;;;;;;;;;;;;;显示程序;;;;;;;;;;;;;;;;;;;;;;
;显示数据在70H-75H单元内,用六位共阳数码管显示,P0口输出段码数据,P2口作出
;扫描控制,每个LED亮1MS时间逐位循环
display: mov r1,#70h ;指向显示缓冲区的首地址
mov r5,#00h ;数码管显示从最低位开始
play: mov a,r5
mov p2,a
mov a,@r1
mov dptr,#tab
movc a,@a+dptr
mov p0,a
lcall dl5ms
mov p0,#0ffh ;消隐
inc r1
inc r5
cjne r5,#06h,play
endout:
mov p0,#0ffh ;关动态显示屏
mov a,#07h
mov p2,a
ret
tab: DB 0C0h,0F9h,0A4h,0B0h,099h,092h,082h,0F8h,080h,90h
;0 1 2 3 4 5 6 7 8 9 不亮
;;;;;;;;;;;;;延时程序;;;;;;;;;;;;;;;;;;;;;;;;
;1ms 延时程序,LED显示用
dl5ms: push 06h
push 07h
mov r6,#32h
; mov r6,#0ffh
dl1: mov r7,#10h
; mov r7,#0ffh
dl2: djnz r7,dl2
djnz r6,dl1
nop
nop
nop
pop 07h
pop 06h
ret
dk5ms: push 06h
push 07h
;mov r6,#32h
mov r6,#0ffh
dk1: ;mov r7,#20h
mov r7,#0ffh
dk2: djnz r7,dk2
djnz r6,dk1
nop
nop
nop
pop 07h
pop 06h
ret
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -