16bit Timerwert in Integer speichern

Gast #1569885
Lesenswert?

Hallo,

Habe grade ein kleines Problem mit der Byteverarbeitung von 16bit 
timerwerte.

Und zwar kann ich ja beim 16bit Timer (Timer1) des Mega8 die Timerwerte 
direkt aus TCNT1L und TCNT1H lesen. Doch wie bekomm ich diese jetzt 
zusammengefasst in eine Integer variable ?

Dies wird denk ich nicht gehen oder?:

zeitwert  = TCNT1L;
zeitwert |= TCNT1H<<8;

da beim zweiten der Lowbyte mit nach links gesetzt wird oder ?
Muss ich wirklich noch eine weitere Variable zum zwischenspeichern 
einfügen?
Und laut dem Wiki hier soll unbedingt zuerst der Lowbyte und dann der 
Highbyte ausgelesen werden! (Warum eigentlich ?)
Irgendwie steh ich da grad voll auf dem Schlauch.

Danke schon mal im Voraus

Gruß Tobias
Gast #1569978
Lesenswert?

> Dies wird denk ich nicht gehen oder?:
> zeitwert  = TCNT1L;
> zeitwert |= TCNT1H<<8;
>
> da beim zweiten der Lowbyte mit nach links gesetzt wird oder ?

TCNT1H hat nur ein Low-Byte, trotz "H" im  Namen.  Durch das Verschieben 
wird daraus erst ein High-Byte.

> Und laut dem Wiki hier soll unbedingt zuerst der Lowbyte und dann der
> Highbyte ausgelesen werden! (Warum eigentlich ?)

Weil das Timer-Register "double buffered" ist und das Lesen des 
High-Byte dem Prozessor signalisiert, daß man mit dem Lesen fertig ist. 
Wenn man es anders rum macht, bekommt man unter Umständen Werte, die 
eigentich nicht zusammengehören, weil der Timer ja weiterläuft, während 
man ihn ausliest.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren