www.mikrocontroller.net

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


Autor: Sascha Frey (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja:

  register |= wert << 3;

Autor: Sascha Frey (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
register |= wert << 3;


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

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

Autor: Daniel Jelkmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stimmt, das Löschen der Bits im Register hatte ich übersehen.

Daniels Ansatz ist sinnvoll.

War wohl etwas spät, gestern.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.