www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik C Code frage


Autor: Bergie B. (bergie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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)

Autor: Philipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, denn ...

while ((0xF8 & 0xF8)==0x01) -> FALSE

while (0xF8 & 0xF8); -> 0xF8 -> "TRUE"


Philipp

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Bergie B. (bergie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Johnny B. (johnnyb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja genau.

Autor: Bernhard M. (boregard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wenn UCBUSY == 3 und EadcBUSY == 5??

Solange nicht klar ist, daß das eine davon eine Maske mit genau einem 
gesetztem Bit ist....

Autor: Bergie B. (bergie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

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.