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
zeitwert = TCNT1; Den Rest macht der Compiler für dich. Das gilt für alle 16-Bit-Register im AVR. Oliver
> 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.
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.