Forum: Compiler & IDEs Basisproblem


von tex (Gast)


Lesenswert?

Ich weiß es ist peinlich aber ich komme trotzdem nicht weiter.

Aus einem der hilfreichen Foren:


Prüfen von Registerinhalten:
if (UDR & (0xF3))    //wenn UDR-Register UND 0xF3 nicht 0 sind ...
if (!(UDR & (0xF3)))    //wenn UDR-Register UND 0xF3  0 sind ...

Frage:
Wenn UDR den Inhalt 0x3F hätte, wäre das Ergebnis von UDR & (0xF3) dann
1 oder 0? bzw, wenn es 1 wäre, was wäre es dann, wenn UDR != 0xF3? Gibt
es dabei zwangsläufig nur 0?

Ist die Ergebnisprüfung auf 1 und 0 gleichzusetzten mit true und false,
wobei true 1 und false 0 entspricht?

Wenn die Ergebnisprüfung auf 1 und 0 hinausläuft ist es dann so zu
verstehen dass also auch if(0x10 - x) ... abgearbeitet werden würde,
wenn x = 0x0F wäre???

von Rufus T. Firefly (Gast)


Lesenswert?

Der Ausdruck (UDR & 0xf3)  (die zusätzlichen Klammern um die Konstante
0xf3 kann man getrost weglassen) ist eine bitweise AND-Verknüpfung
beider Operanden. Das Ergebnis davon ist true, wenn auch nur ein
einziges Bit des Resultats gesetzt ist.

0xf3 = 11110011

Damit ist der Ausdruck auch dann true, wenn UDR == 1.

Er ist nur dann false, wenn keines der in 0xf3 gesetzten Bits in UDR
gesetzt ist.

von tex (Gast)


Lesenswert?

zweiter Anlauf.
Wie bekomme ich raus, ob in UDR 0x0d drin ist? Wenn UDR == 0x0d geht
scheinbar nicht, oder es gibt bei mir noch mehr Fehler.

von Jörg Wunsch (Gast)


Lesenswert?

if (UDR == 0x0d) geht im Prinzip schon, aber bedenke: jedes Lesen von
UDR will ein Zeichen aus dem UART-Puffer lesen.  's ist halt ein
IO-Register und keine gewöhnliche Variable...

Was man normalerweise daher tut: warten, bis der UART-Status anzeigt,
dass wirklich ein Zeichen verfügbar ist.

Einlesen von UDR in eine interne Variable.

Diese Variable weiter auswerten (mit 0x0d vergleichen etc. pp.).

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.