Forum: Compiler & IDEs Bitmanipulation


von Roger K. (roschee)


Lesenswert?

Hallo,

ich habe eine Frage zur Bitmanipulation. Soweit habe ich das Setzen und 
Loeschen von Bits schon verstanden.
Mein Problem ist allerdings folgendes, dass ich gleichzeitig ein paar 
Bits mit "0" en und ein Bit mit "1" en beschreiben moechte. Nun weiss 
ich nicht, ob ich erst die Bits loeschen soll und danach dann das 
einzelne Bit sezten soll. Die anderen Bits sollen unveraendert bleiben.

Ich habe von meinem ATMEGA16 den Port D verwendet.
Im Port D moechte ich allerdings nur drei Bits aendern und die anderen 
unveraendert lassen.
PD7 soll 0 sein
PD6 soll 0 sein
PD5 soll 1 sein


Ich koennte zwar folgendes

PORTD &= 0b00111111;

machen, wollte aber die Variablen ( PD7 - PD5 ) irgenwie in meinen 
Ausdruck
mit aufnehmen.

Es waere nett, wenn Ihr ein paar Tipps fuer mich haettet.


Mit freundlichen Gruessen

Roschee

von ASDF (Gast)


Lesenswert?


von Karl H. (kbuchegg)


Lesenswert?

Roger Koller schrieb:

> Mein Problem ist allerdings folgendes, dass ich gleichzeitig ein paar
> Bits mit "0" en und ein Bit mit "1" en beschreiben moechte.

Gleichzeitig geht nicht.

> Nun weiss
> ich nicht, ob ich erst die Bits loeschen soll und danach dann das
> einzelne Bit sezten soll. Die anderen Bits sollen unveraendert bleiben.

Ist egal. Das Endergebnis ist dasselbe.


> PORTD &= 0b00111111;
>
> machen, wollte aber die Variablen ( PD7 - PD5 ) irgenwie in meinen
> Ausdruck
> mit aufnehmen.

  uint8_t  tmp = PORTD;

  tmp &= ~( (1<<PD7) | (1<<PD6) );
  tmp |=  (1<<PD5);

  PORTD = tmp;

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.