?? 971.asm
字號:
.include "8535def.inc"
.org $0000
rjmp reset
.org $004
rjmp TIM2_OVF
tab:.db $3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f
reset: ldi r16,low(ramend);棧指針置初值
out spl,r16
ldi r16,high(ramend)
out sph,r16
ldi r16,$ff ;定義PB、PD為輸出口
out ddrb,r16
out ddrd,r16
ldi r26,0 ;設時、分、秒初值為00:00:00
ldi r27,0
ldi r28,0
ldi r16,$08 ;使用異步時鐘
out assr,r16
ldi r16,$40 ;允許T2溢出中斷
out timsk,r16
ldi r16,$05 ;128分頻,1s中斷一次
out tccr2,r16
ldi r16,$00 ;T/C2置初值0
out tifr,r16
sei
aa: mov r16,r26 ;秒寄存器中數(shù)二轉(zhuǎn)十,送r19、r18
rcall b8td
mov r19,r17
mov r18,r16
mov r16,r27 ;分寄存器中數(shù)二轉(zhuǎn)十,送r21、r20
rcall b8td
mov r21,r17
mov r20,r16
mov r16,r28 ;時寄存器中數(shù)二轉(zhuǎn)十,送r25、r22
rcall b8td
mov r25,r17
mov r22,r16
rcall smiao ;調(diào)動態(tài)掃描
rjmp aa
TIM2_OVF:
in r1,sreg ;保護標志
inc r26 ;秒增1
cpi r26,60 ;到60秒?
brne tt
clr r26 ;到了,則秒清零
inc r27 ;分增1
cpi r27,60 ;到60分?
brne tt
clr r27 ;到了,則分清零
inc r28 ;時增1
cpi r28,24 ;到24時?
brne tt
clr r28 ;到了,則時清零
tt: out sreg,r1
reti
b8td: clr r17 ;將r16中的二進制數(shù)轉(zhuǎn)換為十進制數(shù),十位送r17,個位送r16
b8td1: subi r16,10
brcs b8td2
inc r17
rjmp b8td1
b8td2: subi r16,(-10)
ret
smiao: ldi r16,$fe ;送個位位線
out portd, r16
mov r23,r18 ;將個位的BCD碼送R23
rcall cqb ;查七段碼,送B口輸出
rcall t1ms ;延時1ms
ldi r16,$fd ;送十位位線
out portd, r16
mov r23,r19 ;將十位的BCD碼送R23
rcall cqb ;查七段碼,送B口輸出
rcall t1ms ;延時1ms
ldi r16,$fb ;送百位位線
out portd,r16
mov r23,r20 ;將百位的BCD碼送R23
rcall cqb ;查七段碼,送B口輸出
rcall t1ms ;延時1ms
ldi r16,$f7 ;送千位位線
out portd,r16
mov r23,r21 ;將千位的BCD碼送R23
rcall cqb ;查七段碼,送B口輸出
rcall t1ms ;延時1ms
ldi r16,$ef ;送萬位位線
out portd,r16
mov r23,r22 ;將萬位的BCD碼送R23
rcall cqb ;查七段碼,送B口輸出
rcall t1ms ;延時1ms
ret
cqb: ldi zh,high(tab*2) ;七段碼的首地址給Z
ldi zl,low(tab*2)
add zl,r23 ;首地址+偏移量
lpm ;查表送B口輸出
out portb,r0
ret
t1ms: ldi r24,71 ;延時1毫秒子程
push r24
del2: push r24
del3: dec r24
brne del3
pop r24
dec r24
brne del2
pop r24
ret
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -