Nur bestimmte Bits verändern?

Gast #2411391
Lesenswert?

Hallo,

Bin relativ neu in der C Welt und steh grad ein wenig auf dem Schlauch.

Wenn ich z.B. eine char variable habe die binär so aussieht:
1
char x = 0b00000011;
und ich möchte nur bit 0 und 1 benutzen um an PORTB die Ausgänge zu 
setzen (oder zu löschen) wie mach ich das?
1
PORTB = x;
geht ja nicht, dann sind die anderen ja alle 0...

Danke und Gruss,
Flo
Gast #2411405
Lesenswert?

Hab ich natürlich schon gelesen ;)
Wenn sich die Variable aber ändert, muss ich doch auch anders 
verknüpfen, also |= oder &= zum setzen und löschen oder? Oder aber ich 
versteh da was nicht... sorry, haste n tip? Bit 3-7 sind übrigens immer 
0 aber 0 und 1 sollen halt direkt den Ausgang schalten.
Ich sach ja, steh aufm Schlauch.

Gruss,
Flo
#2411419
Lesenswert?

Florian schrieb:
> Hab ich natürlich schon gelesen ;)
> Wenn sich die Variable aber ändert, muss ich doch auch anders
> verknüpfen, also |= oder &= zum setzen und löschen oder? Oder aber ich
> versteh da was nicht... sorry, haste n tip?

Du musst dir klar machen, dass es keine einzelne einfache Operation 
geben kann, die das gewünschte leistet.
Denn: einmal musst du das Portbit auf 0 setzen und ein anderes mal musst 
du es auf 1 setzen, je nachdem welchen Wert das korrespondierende Bit in 
der Variablen hat.

Wenn du dich dann zu dieser Erkentnis durchgerungen hast, was hindert 
dich an

  if( Bit in Variable == 0 )
    lösche das Portbit
  else
    setze das Portbit

und für das andere Bit in der Variablen demenstprechend gleich.


Das ist die einfache kanonische Variante. Da bei dir Variablenbit und 
Portbits offenbar an den gleichen Bitpositionen sind, gibt es auch noch 
die schnellere Variante:

  setze beide Portbits auf jeden Fall erst mal auf 0
  maskiere dir aus der Variablen die beiden interessiernden Bits heraus
  verodere den Port mit diesen herausmaskierten Bits

und wenn du jetzt noch das Problem hast, dass der Port zwischendurch 
kurzzeitig einen ungültigen Zustand hat, den du nicht haben darfst, dann 
kannst du immer noch eine Variable zu Hilfe nehmen, in die du zunächst 
den Zustand des Ports einliest, dort dann die Manipulation machst und 
dann den kompletten Portinhalt aus dieser Hilfsvariablen wieder neu 
setzt.
Gast #2411433
Lesenswert?

Hallo Karl Heinz,
Das hat mir auf die Sprünge geholfen!
Wenn ich die Portpins vorher auf 0 setze kann ich die 8 bit einfach mit 
oder draufkopieren! Hätte ich auch selber draufkommen können ;) 
brettvormkopf
Danke für die ausführliche Erklärung!

Gruss,
Flo

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