Forum: Compiler & IDEs C: 5 Bits in ein Register schreiben


von Sascha Frey (Gast)


Lesenswert?

Hallo,

ich arbeite gerade an einem C-Programm für einen AVR und habe folgendes
Problem:

ich übergebe eine Adresse (unsigned char) an eine Funktion. Die Adresse
ist 5 Bits lang. Diese soll dann in ein Register geschrieben werden.
Allerdigs soll das Bit 0 der übergebenen Variable an Bit 3 des
Registers usw. geschrieben werden. Die ersten drei Bits des Registers
sollen unverändert bleiben.

Momentan habe ich das so gelöst:
Ich teste ob Bit 0 der Variable gesetzt ist. Wenn ja, dann setzte ich
Bit 3 des Resiters. Ansonsten lösche ich es.
Das ganze mache dann fünf mal.

Gibt es da eine elgantere, schnellere Lösung?

von Rufus T. Firefly (Gast)


Lesenswert?

Ja:

  register |= wert << 3;

von Sascha Frey (Gast)


Lesenswert?

register |= wert << 3;


11111111b |= 00000000b << 3 = 11111111b
Es sollte aber 00000111 rauskommen...

Andersherum funktioniert das:
00000000b |= 11111111b << 3 = 11111000b

von Daniel Jelkmann (Gast)


Lesenswert?

Hi,

du müsstest vorher die fünf Bits im Register durch eine Und-Verknüpfung
"plattmachen".
Ich würde mal sowas vorschlagen:
register = (register & 7) | (wert << 3);

MfG
  Daniel Jelkmann

von Rufus T. Firefly (Gast)


Lesenswert?

Stimmt, das Löschen der Bits im Register hatte ich übersehen.

Daniels Ansatz ist sinnvoll.

War wohl etwas spät, gestern.

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.