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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.