count equ 9217 ;定义1s计数值,对于11.0592的晶振来说,延时10ms
second equ 30h ;定义临时变量区
second_ge equ 31h
second_shi equ 32h
minute equ 33h
minute_ge equ 34h
minute_shi equ 35h
hour equ 36h
hour_ge equ 37h
hour_shi equ 38h
org 0000h
sjmp main ;进入主程序
org 0003h
reti
org 000bh ;time0(定时器/计数器T0入口地址)
ljmp int_time0 ;跳转到中断0服务程序
org 001bh
reti
org 0023h
reti
main:
mov r0,#0 ;初始化程序(本程序初始值设为13:33:22)
mov second,#22
mov second_ge,#0
mov second_shi,#0
mov minute,#33
mov minute_ge,#0
mov minute_shi,#0
mov hour,#13
mov hour_ge,#0
mov hour_shi,#0
mov tmod,#00000001b
mov th0,#high(65536-count) ;取高八位数据
mov tl0,#low(65536-count) ;取底五位
clr tf0
setb ea
setb et0
setb tr0 ;开始计时
loop:
lcall digitor_display ;调用数码管扫描显示程序
sjmp loop ;程序在此循环
;定时器0中断
int_time0:
push acc
push psw
clr tf0
mov th0,#high(65536-count) ;取高八位数据
mov tl0,#low(65536-count) ;取底五位
inc r0
cjne r0,#100,ret_loop ;秒值加一
sjmp second_add
second_add: ;秒值处理
mov r0,#0
inc second
mov a,second
cjne a,#60, ret_loop
sjmp minute_add
minute_add: ;分值处理
mov second,#0
inc minute
mov a,minute
cjne a,#60, ret_loop
sjmp hour_add
hour_add: ;小时处理
mov minute,#0
inc hour
mov a,hour
cjne a,#24,ret_loop
sjmp hour_reset
hour_reset:
mov hour,#0
ret_loop:
pop psw
pop acc
reti ;中断返回
digitor_display: ;数码管扫描
push acc
push psw
mov a,second
mov b,#10
div ab
mov second_shi,a
mov second_ge,b
mov a,minute
mov b,#10
div ab
mov minute_shi,a
mov minute_ge,b
mov a,hour
mov b,#10
div ab
mov hour_shi,a
mov hour_ge,b
mov p1,#11011111b ;显示秒钟的个位
mov a,second_ge
mov dptr,#table
movc a,@a+dptr
mov p2,a
lcall delay
mov p1,#11101111b ;显示秒钟的十位
mov a,second_shi
mov dptr,#table
movc a,@a+dptr
mov p2,a
lcall delay
mov p1,#11110111b ;显示分钟的个位
mov a,minute_ge
mov dptr,#table
movc a,@a+dptr
mov p2,a
lcall delay
mov p1,#11111011b ;显示分钟的十位
mov a,minute_shi
mov dptr,#table
movc a,@a+dptr
mov p2,a
lcall delay
mov p1,#11111101b ;显示小时的个位
mov a,hour_ge
mov dptr,#table
movc a,@a+dptr
mov p2,a
lcall delay
mov p1,#11111110b ;显示小时的十位
mov a,hour_shi
mov dptr,#table
movc a,@a+dptr
mov p2,a
lcall delay
pop psw
pop acc
ret ;扫描程序返回
table: ;共阴极数码管扫描码
DB 3FH ;0
DB 06H ;1
DB 5BH ;2
DB 4FH ;3
DB 66H ;4
DB 6DH ;5
DB 7DH ;6
DB 27H ;7
DB 7FH ;8
DB 6FH ;9
delay: mov r4,#5 ;延时函数(延时大概5*255*2=25ms)
l1: mov r5,#0ffh
l2: djnz r5,$
djnz r4,l1
ret
end
上一篇:ASM51调用C51函数的实现
下一篇:汇编冒泡排序(51)(需调试器付初值)
推荐阅读最新更新时间:2024-03-16 15:09