Hallo,
ich bin gerade dabei den Code im Tutorial zu testen.
die Funktionsweise ist mir mittlerweile schon klar, aber was ich noch
nicht verstehe ist der folgende Auszug.
.equ XTAL = 4000000
timer_overflow0: ; Timer Overflow Interrupt
push r16
ldi r16, -( XTAL / 1024 * 10 / 1000 + 1 )
out TCNT0, r16
pop r16
Wieso wird in den Timer der Wert -40 geladen,( wenn ich richtig
gerechnet habe)?
Das ist doch das selbe, wie wenn man den den Wert 216 (256-40)nehmen
würde.
Das steht jedenfalls in r16 nach ldi.
Wieso einen negativen Wert und welche Zeit soll damit eingestellt
werden.
währe supper, wenn mir das mal jemand erklärt.
mfg
Jörg
Ich habe den Kommentar im Tutorial ergänzt: AVR-Tutorial: Tasten. Die "+1" ist allerdings falsch. Eine Erklärung wie das mit dem Timer-Vorladen genau funktioniert fehlt im Moment noch im Timer-Kapitel.
Hallo, das es 10ms sein sollten konnte ich mir an hand der Schreibweise schon fast denken, aber das mit dem -40, (jetzt nur noch -39), ist mit noch unklar. mfg Jörg
39 ist die Anzahl der Timer-Ticks die für die 10ms benötigt werden. Da hier der Overflow- und nicht der Compare/Match-Interrupt verwendet wird muß der Wert vom Zählerhöchststand abgezogen werden. Also "Anzahl Ticks bis Überlauf". -1 bedeutet bei 8Bit Registern 255. Und '0 - 39' ist gleich '255 - 38'. Die Null kann man auch weglassen.
Hallo, ja, jetzt ist mir da ein Licht aufgegangen. Anders ausgedrückt, der Timer beginnt bei 216 und zählt bis zum Überlauf auf 0, also bis zum Overflow, das sind dann 40 Timer-Ticks. Vielen Dank für die Erleuchtung. mfg Jörg
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.