Code:
.include "m8def.inc"
.def temp1=r16
.def temp2=r17
.def Sekunden=r18
.def Minuten=r19
.def Stunden=r20
.cseg
.org 0
rjmp Start ;Sprung zum Programmanfang
reti ;Interruptvektortabelle
reti
reti
rjmp timer2_overflow ;Timer Overflow Handler
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
Start:
ldi temp1, LOW(RAMEND)
out SPL, temp1
ldi temp1, HIGH(RAMEND)
out SPH, temp1
clr Sekunden ; Könnten ja Werte >60 drinstehen
clr Minuten
clr Stunden
rcall Setup
ldi temp1,0b00000101 ;(32768/128)/256=1 Vorteiler
out TCCR2,temp1
ldi temp1,0b01000000
out TIMSK,temp1
sei
LOOP:rjmp LOOP
Setup:
ldi temp1, 0b00011110
out DDRC, temp1
ldi temp1, 0b01111111
out DDRD, temp1
in temp1,ASSR
ori temp1,0b00001000
out ASSR,temp1
ret
timer2_overflow:
push temp2
in temp2,SREG
push temp2
inc Sekunden
cpi Sekunden,60
brne Ausgabe
clr Sekunden
inc Minuten
cpi Minuten,60
brne Ausgabe
clr Minuten
inc Stunden
cpi Stunden,24
brne Ausgabe
clr Stunden
Ausgabe:
;ldi temp1, 0b11111111
;out portd, temp1
;com temp1
;reti
mov temp2,Sekunden
lsr temp2
brcs AZE
rcall a
rcall A4
rjmp end_isr
AZE: rcall a
rcall A3
end_isr:
pop temp2
out SREG,temp2
pop temp2
reti
a: ldi temp1, 0b10000001 ;Zeige Ziffer 0
out PortD, temp1
ret
b: ldi temp1, 0b11001111 ;Zeige Ziffer 1
out PortD, temp1
ret
c: ldi temp1, 0b10010010 ;Zeige Ziffer 2
out PortD, temp1
ret
d: ldi temp1, 0b10000110 ;Zeige Ziffer 3
out PortD, temp1
ret
e: ldi temp1, 0b11001100 ;Zeige Ziffer 4
out PortD, temp1
ret
f: ldi temp1, 0b11000100 ;Zeige Ziffer 5
out PortD, temp1
ret
g: ldi temp1, 0b11000000 ;Zeige Ziffer 6
out PortD, temp1
ret
h: ldi temp1, 0b10001111 ;Zeige Ziffer 7
out PortD, temp1
ret
i: ldi temp1, 0b10000000 ;Zeige Ziffer 8
out PortD, temp1
ret
j: ldi temp1, 0b10000100 ;Zeige Ziffer 9
out PortD, temp1
ret
A1: ldi temp1, 0b00000010 ;Anzeige 1 an
out PortC, temp1
ret
A2: ldi temp1, 0b00000100 ;Anzeige 2 an
out PortC, temp1
ret
A3: ldi temp1, 0b00001000 ;Anzeige 3 an
out PortC, temp1
ret
A4: ldi temp1, 0b00010000 ;Anzeige 4 an
out PortC, temp1
ret
delete1:
ldi temp1, 0b11111111 ;Segmente loeschen
out PortD, temp1
ret
delete2:
ldi temp1, 0b00000000 ;Anzeige loeschen
out PortC, temp1
ret
Lesezeichen