Hi Leutz, ich hab ein Problem ich arbeite mit Codevision und ich benutzen den 16 Bit Timer1 des ATMega16, so nun will ich den 16Bit-Wert einer 16-Bit Variablen zuweißen allerdings, klappt es nicht, er speichert entweder immer nur das Low-Byte oder das High-Byte in einer 16-Bit-Variablen. Gibt es dafür einen bestimmten Befehl? Danke
einige 16bit-Register sind in der der Definitionsdatei nicht deklariert, warum weiss ich auch nicht. Schau mal nach. Mega16.h . . sfrb TCNT1L=0x2c; sfrb TCNT1H=0x2d; sfrw TCNT1=0x2c; // 16 bit access . . temp_int=TCNT1; //klappt, wenn TCNT1 definiert ist Ansonsten kannst du natürlich auch TCNT1H/L einzeln auslesen und zu einer 16bit-Variablen zusammensetzen.
crazy horse: Danke werde es gleich mal ausprobieren! "Ansonsten kannst du natürlich auch TCNT1H/L einzeln auslesen und zu einer 16bit-Variablen zusammensetzen." Wie geht das am schnellsten?
unsigned int timer1; //...irgendwas timer1 = TCNT1L; timer1 += TCNT1H << 8; Ganz wichtig: Auf die richtige Reihenfolge beim Auslesen der Register achten (erst Low- dann High-Byte, beim Schreiben umgekehrt). Da der Compiler das bei Zugriff auf die 16-Bit-Register automatisch und in der richtigen Reihenfolge macht, ist die Methode jedoch (Idioten-)sicherer. Gruß Johnny
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.