Forum: Mikrocontroller und Digitale Elektronik Wie jedes zweite Bit speichern


von Patrick B. (bernd09)


Lesenswert?

Hallo,

ich habe folgendes Problem, ich habe ein 8 Bit Datenwort, ich will aber 
nur jedes 2 Bit in einer Variablen Speichern.
z.B. Daten=01010101, ich will jedes zweite Bit speichern, hintereinander 
Daten2=00001111. Ich muss also jedes zweite Bit in meine zweite Variable 
schieben, aber wie?

Vielen Dank

von Matthias L. (Gast)


Lesenswert?

Warum willst du jedes zweite Bit hintereinander speichern?

von STK500-Besitzer (Gast)


Lesenswert?

Daten2 = (Daten & 0x01) | ((Daten >> 1) & 0x02) | ((Daten >> 2) & 0x04) 
| ((Daten >> 3) & 0x08);

Man könnte es auch mit einer Schleife realisieren...

von STK500-Besitzer (Gast)


Lesenswert?

>Warum willst du jedes zweite Bit hintereinander speichern?

Ist doch egal, oder?
Warum fährt der Mensch zum Mond oder sucht in Lichtjahren entferneten 
Galaxien nach Leben?

von hans (Gast)


Lesenswert?

Stichwort Manchester ?

von Klaus W. (mfgkw)


Lesenswert?

z.B.:
1
  uint8_t Daten  = 0x55; // binaer 01010101
2
  uint8_t Daten2 = ( ( Daten & 0x01 )
3
                     |
4
                     ( ( Daten >> 1 ) & 0x02 )
5
                     |
6
                     ( ( Daten >> 2 ) & 0x04 )
7
                     |
8
                     ( ( Daten >> 3 ) & 0x08 )
9
                     );
10
  // Daten2 sollte jetzt 0x0F (binaer 00001111) sein

von Klaus W. (mfgkw)


Lesenswert?

ok, zu langsam

von Patrick B. (bernd09)


Lesenswert?

Vielen Dank schonmal für die Antworten.

Wie würde es denn mit einer Schleife realisiert werden?

Zu diesen 4Bits kommen später nochmal 4Bits dazu, die Oder-Verknüpft 
werden. Deshalb hintereinander.

von STK500-Besitzer (Gast)


Lesenswert?

@Klaus: Danke für die Bestätigung.

@Patrick: Die Schleife kannst du dir selber überlegen... ;)

von Thomas B. (yahp) Benutzerseite


Lesenswert?

> Wie würde es denn mit einer Schleife realisiert werden?

Warum auf Biegen und Brechen umständlicher und langsamer machen?

von Matthias L. (Gast)


Lesenswert?

>Ist doch egal, oder?

Nicht unbedingt. Wenn man mehr über das Problem weiß, gibt es evtl. 
bessere Ansätze.


>Stichwort Manchester ?

Wenn es um eine RC5 Dekodierung geht, das geht auch komplett anders.

von (prx) A. K. (prx)


Lesenswert?

Tabelle.

von Di P. (drpepper) Benutzerseite


Lesenswert?

Informatikhausaufgabe?

von holger (Gast)


Lesenswert?

mask<<=2;

von Patrick B. (bernd09)


Lesenswert?

Ist eine SPI Übertragung von 16 Bit, brauche aber nur jedes zweite Bit. 
Es werden erst 1*8Bit übertragen, von diesen 8Bit brauche ich aber nur 
4Bit(jedes zweite), dann nochmal 8Bit, von denen ich auch nur 4Bit 
brauche(jedes zweite), diese werden jeweils in einer Variablen 
gespeichert,danach werden diese 2*4Bit wieder zusammen in eine Variable 
geschrieben. Und dann ausgegeben.

Daten1=00001111
Daten2=11110000

Wert=Daten1|daten2

so ist es mal angedacht:-)

von Klaus W. (mfgkw)


Lesenswert?

ok, aber dann schiebt man die zweiten Daten aber hoffentlich nicht wie 
oben nach rechts, um sie dann wieder um 4 nach links zu schieben, 
sondern analog gleich nach links...

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.