mikrocontroller.net

Forum: Compiler & IDEs |= und =


Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielleicht eine blöde Frage, wo ist der Unterschied zwischen den beiden
Zeilen?

ADMUX = (1<<MUX2);
und
ADMUX |= (1<<MUX2);

danke

mfg
Jörg

Autor: Zoltan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1. Fall
Zerlegen wir die erste Zeile:
MUX2 ist ein define für das dritte Bit im ADMUX Register. Demnach ist
MUX2 gleich 2, also könnte man auch schreiben (1<<2).
1<<2 bewirkt, dass eine 1 um zwei stellen nach rechts rückt, also aus
00000001b wird 00000100b.
In der ersten Zeile wird das komplette ADMUX-Register mit diesem Wert
überschrieben.


2. Fall
Im zweiten Fall mit ADMUX |= (1<<MUX2) oder ADMUX = ADMUX |(1<<MUX2)
wird bitweise ver-ODER-t. Das bedeutet, dass die bereits gesetzen Bits
im ADMUX Register nicht gelöscht werden, sondern nur das gewünschte Bit
gesetzt wird. Ein Beispiel mit ADMUX = 11010000b.
ODER
11010000b
00000100b
--------
11010000b


3. Fall
Nun wollen wir vielleicht dieses gesetzte Bit wieder löschen. Das
geschieht mit:
ADMUX &= ~(1<<MUX2);
- 1<<MUX2 ist wieder 00000100b
- Das ~ negiert die alle Bitts, also entsteht 11111011b
- Nun wird ge-UND-et
Z.B. mit ADMUX = 11010100b
UND
11010100b
11111011b
---------
11010000b


1. Fall liefert 00000100b
2. Fall liefert 11010100b
3. Fall liefert 11010000b

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielen Dank, sehr ausführlich!

Autor: Zoltan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oben ist mir beim ODER-n ein kliener Fehler unterlaufen:
das sollte heißen:

ODER
11010000b
00000100b
--------
11010100b

Gruss
Zoltan

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.