einzelne Bits setzen

Gast #139637
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).
Gast #139638
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?
Gast #139640
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.
Gast #139641
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.
Gast #139642
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.
Gast #139643
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
Gast #139644
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?
Gast #139647
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.

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