Forum: Mikrocontroller und Digitale Elektronik einzelne Bits setzen


von Tilo (Gast)


Lesenswert?

Guten Abend miteinander,

ich möchte einzelne Bits in Registern setzen. Wie kann ich das unter C
realisieren?

Danke.

von Rufus T. Firefly (Gast)


Lesenswert?

Wenn die Register Register sind, die vom C-Compiler selbst verwendet
werden: gar nicht.
Wenn's irgendwelche anderen Register sind: Hängt vom
Compiler/Controller ab.
Ist das Register beispielsweise beschreibbar und kann zerstörungsfrei
ausgelesen werden, dann könnte sowas so aussehen:

  Register |= 0x80;

(das setzt Bit7 des Registers und lässt die anderen unberührt).

von Tilo (Gast)


Lesenswert?

Wie kann ich denn erkennen, dass man das 7.Bit setzt?

Ist 0x80 die Adresse des 7.Bits?

Wird dieses 7.Bit von low (0) auf high (1) gesetzt?

Heißt deine Syntax nicht, dass der Variablen Register der Wert
(Adresse) 0x80 zugeordnet wird. Oder ist das falsch?

von Quark (Gast)


Lesenswert?

@Tilo
vieleicht erwähnst Du bitte den Controller-Typ,
den C-Compiler etc.,  damit Dir überhaupt jemand helfen könnte.
Quark

von Paul (Gast)


Lesenswert?

Lern C.

Mit solchen Fragen gehst du uns auf die Nerven und von den Antworten
hast du ja doch nichts, weil dir die Grundlagen fehlen.
Ich weiß, es klingt hart. Aber es ist die Wahrheit.


Tipp: "|=" ist etwas anderes als "=". Und schau dir mal die Zahl
0x80 binär an.

von Tilo Arnold (Gast)


Lesenswert?

Bin grad beim Einstieg in die C-Programmierung.

Das 80hex gleich 1000 000 bedeutet, dass weiß ich schon.

Ich wusste nur nicht, dass man dafür das ganze Register maskieren muss.
Dachte es geht, wenn man nur ein einzelnes Bit setzt.

Ausserdem möchte ich ja auch was lernen, deshalb frage ich ja nach.

Kannst du mir denn nicht sagen, was "|=" bedeutet? In der Literatur
steht, dass das das "bitweise Oder" ist.

von Paul (Gast)


Lesenswert?

Exakt. "a |= b" ist nur eine Kurzform für "a = a | b".

| ist in C das bitweise Oder.
Manuell ausgeführt bedeutet das: Beide Operanden (Zahlen) werden binär
übereinander geschrieben. Wenn an einer Stelle bei mindestens einem der
Operanden eine 1 steht, steht im Ergebnis auch eine 1. Sonst eine 0.

von Dirk (Gast)


Lesenswert?

Hi,

die naechste Anlaufstelle ist das Wiki für dich. Dort befindet sich ein
gutes GCC Tutorial. Anonsten befinden sich unzaehlige Threads mit der
gleiche Frage im Forum. Bitte nutze die Suchfunktion.

Mfg
Dirk

von Tom Reichelt (Gast)


Lesenswert?

Weil hier gerade über das Setzen einzelner Bits in Registern gesprochen
wird.

Wie kann ich z.B. das Universalregister R3 der Registerbank 2 im
Mikrocontroller 80C537 setzen?

Das R3 besitzt ja die Adresse 13h.

R3|=0x87;

Dann müsste ja das R3 jetzt die Registerbelegung 10000111 besitzen.

Spricht man überhaupt das Universalregister R3 mit "R3" an?

von Paul (Gast)


Lesenswert?

Tom: Ein Posting hätte gereicht.

von Tom Reichelt (Gast)


Lesenswert?

Sorry, was meinst du mit "Posting"?

von Rufus T. Firefly (Gast)


Lesenswert?

> Das R3 besitzt ja die Adresse 13h.

> R3|=0x87;

> Dann müsste ja das R3 jetzt die Registerbelegung 10000111 besitzen.

Nö. Das tut's nur, wenn vorher 0 drinstand.
(Merke: |= ist nicht dasselbe wie =, aber den Tip hat Dir schonmal wer
gegeben)

Das ganze geht aber nur, wenn der vom Compiler erzeugte Code dieses
Register nicht selber verwendet.

Ein Posting ist ein Beitrag in diesem Forum. Jeder unnötige Beitrag,
jede Wiederholung eines Beitrages erhöht das Rauschen und senkt damit
den Nutzen dieses Forums.

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.