Hier ist der Code:
Code:
.include "m8def.inc"
;31248 1 Sek
.EQU TIME05 = 65536 - 15624 ; 0,5 Sekunden
.EQU TIME2 = 65536 - 62496 ; zwei Sekunde
.EQU TIME1 = 65536 - 31248 ; eine Sekunde
.def temp = r16
.org 0x0000
rjmp start
.org OVF0addr ;Interrupt-handler für 8 Bit Timer0
rjmp interrupt
start:
ldi r20,HIGH(TIME2) ;Trick, um Timer0 auf 16 Bit zu erweitern
ldi temp,LOW(TIME2) ;Starwert Timer
out TCNT0,temp
ldi temp,(1<<CS02|1<<CS00) ;Prescaler Systemtakt/1024
out TCCR0,temp
ldi temp,(1<<TOIE0) ;Timer Interrupt über TOV0 erlauben
out TIMSK,temp ; "
;Hauptprogramm:
loop: ;leere Schleife
rjmp loop
;Interrupt Handler
interrupt: ;LEDs toggeln
inc r20 ;Timererweiterung inkrementieren
brne interrupt2 ;wenn r20=0, zu interrupt2 springen
ldi r20,HIGH(TIME2) ;sonst Starwert Timer neu setzen
[...]
interrupt2:
ldi temp,LOW(TIME2) ;Startwert Timer neu
out TCNT0,temp
reti
Du meinst ich muss am Ende auch noch ldi temp,HIGH(TIME2) einfügen?
Lesezeichen