單片機(jī) 電子時(shí)鐘(匯編)
count equ 9217 ;定義1s計(jì)數(shù)值,對(duì)于11.0592的晶振來(lái)說(shuō),延時(shí)10ms
本文引用地址:http://m.butianyuan.cn/article/201611/315820.htmsecond equ 30h ;定義臨時(shí)變量區(qū)
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 ;進(jìn)入主程序
org 0003h
reti
org 000bh ;time0(定時(shí)器/計(jì)數(shù)器T0入口地址)
ljmp int_time0 ;跳轉(zhuǎn)到中斷0服務(wù)程序
org 001bh
reti
org 0023h
reti
main:
mov r0,#0 ;初始化程序(本程序初始值設(shè)為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) ;取高八位數(shù)據(jù)
mov tl0,#low(65536-count) ;取底五位
clr tf0
setb ea
setb et0
setb tr0 ;開(kāi)始計(jì)時(shí)
loop:
lcall digitor_display ;調(diào)用數(shù)碼管掃描顯示程序
sjmp loop ;程序在此循環(huán)
;定時(shí)器0中斷
int_time0:
push acc
push psw
clr tf0
mov th0,#high(65536-count) ;取高八位數(shù)據(jù)
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: ;小時(shí)處理
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: ;數(shù)碼管掃描
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 ;顯示秒鐘的個(gè)位
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 ;顯示分鐘的個(gè)位
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 ;顯示小時(shí)的個(gè)位
mov a,hour_ge
mov dptr,#table
movc a,@a+dptr
mov p2,a
lcall delay
mov p1,#11111110b ;顯示小時(shí)的十位
mov a,hour_shi
mov dptr,#table
movc a,@a+dptr
mov p2,a
lcall delay
pop psw
pop acc
ret ;掃描程序返回
table: ;共陰極數(shù)碼管掃描碼
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 ;延時(shí)函數(shù)(延時(shí)大概5*255*2=25ms)
l1: mov r5,#0ffh
l2: djnz r5,$
djnz r4,l1
ret
end
評(píng)論