16-Bit Registerwert in 16-Bit Variablen speichern

Gast #326353
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
Gast #326354
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.
Gast #326356
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

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