Forum: Mikrocontroller und Digitale Elektronik 16-Bit Registerwert in 16-Bit Variablen speichern


von tom (Gast)


Lesenswert?

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

von crazy horse (Gast)


Lesenswert?

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.

von tom (Gast)


Lesenswert?

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?

von johnny.m (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.