Moin moin! Ich komme gerade nicht drauf, und bevor ich mist progge wollte ich nochmal nachfragen. while ((EadcBUSY & UCBUSY)==0x01) ist doch genau das gleiche wie while (EadcBUSY & UCBUSY); oder stimmt das nur wenn UCBUSY==0x01 ? LG
Bergie B. schrieb: > Moin moin! > > Ich komme gerade nicht drauf, und bevor ich mist progge wollte ich > nochmal nachfragen. > > while ((EadcBUSY & UCBUSY)==0x01) > > ist doch genau das gleiche wie > > while (EadcBUSY & UCBUSY); > > > > oder stimmt das nur wenn UCBUSY==0x01 ? Wenn UCBUSY nicht 0x01 ist, dann wird das Ergebnis der UND Verknüpfung niemals 0x01 sein können. In diesem Sinne wird bei der ersten Variante von einer impliziten Annahme ausgegangen. Und das kann ins Auge gehen. (Vorausgesetzt, UCBUSY ist eine Maske, mit der genau 1 Bit und nicht mehr extahiert werden soll. Aber davon gehe ich mal aus) Daher ist es besser nicht auf explizit 0x01 abzufragen, sondern entweder while ((EadcBUSY & UCBUSY) != 0) oder while ((EadcBUSY & UCBUSY) == UCBUSY) Aber gerade bei Vergleichen ist man des öfteren in der paradoxen Situation, dass Tipp-Faulheit belohnt wird. while (EadcBUSY & UCBUSY); macht genau dasselbe
Gast
#1417468
Es ist nicht das Gleiche. Zum Testen eines Bits schreibt man eigendlich: while ((EadcBUSY & UCBUSY) != 0) Verkürzen kann man das als: while (EadcBUSY & UCBUSY)
Gast
#1417469
Nein, denn ... while ((0xF8 & 0xF8)==0x01) -> FALSE while (0xF8 & 0xF8); -> 0xF8 -> "TRUE" Philipp
Karl heinz Buchegger schrieb: > Wenn UCBUSY nicht 0x01 ist, dann wird das Ergebnis der UND Verknüpfung > niemals 0x01 sein können. Doch, z.B. wenn UCBUSY == 3 und EadcBUSY == 1
Uhu Uhuhu schrieb: > Karl heinz Buchegger schrieb: >> Wenn UCBUSY nicht 0x01 ist, dann wird das Ergebnis der UND Verknüpfung >> niemals 0x01 sein können. > > Doch, z.B. wenn UCBUSY == 3 und EadcBUSY == 1 Ja, du hast recht. Hatte die Antwort dahingehend schon korrigiert.
Danke euch allen für eure mühen mir etwas bei zu bringen!
Werde nun die Kurze Variante versuchen.
while ((EadcBUSY & UCBUSY) != 0)
{
//warten
}
while (EadcBUSY & UCBUSY);
wobei ich bei dieser Variante jedes BIT testen kann egal ob mein UCBUSY
nun eine
0x01 == 00000001b
ist oder
0x03 == 00000010b
und wenn ich in der Schleife warten möchte bis das BIT1 wird würde ich:
while (!(EadcBUSY & UCBUSY));
benutzen?
Ja genau.
Und wenn UCBUSY == 3 und EadcBUSY == 5?? Solange nicht klar ist, daß das eine davon eine Maske mit genau einem gesetztem Bit ist....
UCBUSY ist bei mir eine Maske mit genau nur einem gesetzten BIT Also kann es die HEX Werte: 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, haben. D a n k e
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.