Basisproblem

Gast #179121
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???
Gast #179122
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.
Gast #179124
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.).

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