Forum: Mikrocontroller und Digitale Elektronik Bit Manipulation


von John (Gast)


Lesenswert?

Hallo zusammen,
ich bin C-Anfänger und möchte gerne geziehlt ein DDR-Register mit einer 
Variablen setzen oder löschen. Dabei dürfen bestimmte Bits im 
DDR-Register nicht verändert werden.

zB.

DDRA= 0x11100000b
Variable A = 0x00001100b
Ergebis: DDRA = 0x11101100b
wenn Variable A nun 0x00000001 wird
Ergebis: DDRA = 0x11100001b

Kann mir da jemend helfen? Vielen Dank im Voraus

Gruß
John

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

Hallo,

sowas macht man mit einem (binären) OR-Operator. Ein OR setzt alle Bits 
die in Zahl1 ODER Zahl2 gesetzt sind.
Das sieht dann so aus:

&b11100000 OR &b00000110 => &b11100110


Gruß
Jonathan

von Justus S. (jussa)


Lesenswert?


von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

Und löschen geht mit AND.

&b11100011 AND &b11111110 => &b11100010


Gruß
Jonathan

von John (Gast)


Lesenswert?

Hallo,
erst mal Danke für die schnelle Antworten.

Ich glaube ich habe mich nicht richtig ausgedrückt.
Das ich Bits mit dem | und & Operator setzen oder löschen kann ist mir 
klar.
Nun möchte ich aber mit einer Variablen das DDR-Register in einer 
Funktion manipuliren. Da weis ich ja vorher nicht ob das DDR-Register 
mit der Variablen UND oder OR verknüpft werden muss. Ich hoffe, dass es 
jetzt besser rüber gekommen ist.

Gruß
John

von Mike (Gast)


Lesenswert?

unsigned char a = $0C;

DDRA = 0;

DDRA |= a; // setzt nur die bits 0b00001100

// ab hier ist DDRA = 0b00001100

a = 1;

DDRA |= a;

// ab hier ist DDRA = 0b00001101!
// die vorherige änderung wird berücksichtigt mit dem |=

"|=" beduetet soviel wie "DDRA = DDRA  (logisch oder) a"

gruß
mike

von ich (Gast)


Lesenswert?

Welchen Controller verwendest du?

von Justus S. (jussa)


Lesenswert?

John schrieb:
> Ich glaube ich habe mich nicht richtig ausgedrückt.

doch, aber es sollte doch klar sein:
- aktuellen Status auslesen
- alle Bits, die verändert werden dürfen, auf Null setzen
- mit deiner Variablen verodern

von codehamster (Gast)


Lesenswert?


von John (Gast)


Lesenswert?

Hallo,

ich: ich verwende einen ATMEGA 8.

Mike: das ist mir bekannt.

Justus: klar war dieses für mich nicht, aber jetzt weiss ich wie ich es 
programmieren kann. Vielen Dank.

Gruß
John

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.