AVR-Tutorial: Tasten entprellen und Autorepeat

OP #758558
Lesenswert?
• ▲
▼
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
Gast #758680
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.