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???
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.