Forum: Mikrocontroller und Digitale Elektronik bit_is_set() kann doch gar nicht sein?


von Stefanie (Gast)


Lesenswert?

Hallo,
der Teil meines Programmcodes um den des mir geht sieht so aus:

while ( bit_is_set(PORTE, PINE7) || bit_is_set(PORTE, PINE4))
printf("PORTE %02x\n\n ", PORTE);
  ;

Die Ausgabe lautet:          PORTE 10

d.h. das PE5 gesetzt ist und die Schleife doch einfach abbrechen
müsste, oder??

Aber mein Programm kommt einfach nicht aus der Schleife raus.

Was verwechsel ich da??

von Rolf (Gast)


Lesenswert?

Bits werden von 0..7 getählt.

d.h. Wenn Bit 4 gesetzt wird ergibt es 0x10, weil es das
das fünfte Bit ist.

PE5 wäre 0x20

Klar?

von seacrash (Gast)


Lesenswert?

Hallo,

warum sollte er aus der Schleife gehen, wenn PE5 immernoch gesetzt ist?
Ist schließlich eine while() Schleife und keine if() Anweisung.

Gruß

von Stephan E. (stephan_e)


Lesenswert?

10 dezimal = 1010 binär
niederwertigstes Bit ist normal Bit 0

von Rolf (Gast)


Lesenswert?

Guck genauer hin, es sind 10 hex

von Stephan E. (stephan_e)


Lesenswert?

sorry ist ja in HEX ausgegeben

von johnny.m (Gast)


Lesenswert?

So wie es aussieht, soll er ja in der Schleife bleiben, solange einer
der beiden Pins gesetzt ist.

BTW: Bist Du sicher, dass Du PORTE abfragen willst und nicht PINE?

von johnny.m (Gast)


Lesenswert?

10h -> 10000b, also Bit 4 ist gesetzt...

von André K. (freakazoid)


Lesenswert?

Der fehlenden Reaktion nach zu urteilen hat die Dame entweder aufgegeben
oder es durch Eure Hilfe selbst bemerkt. Die Antwort braucht also nicht
nochmal wiederholt werden ;-)

von Stefanie (Gast)


Lesenswert?

Danke, für euere Antworten!
Tja wie Andre richtig bemerkt hat, hab ich meinen Fehler selbst
bemerkt:
Diese Zeile war bei mir in der Initialisierung
PORTE = _BV(PE4);

... und als sie weg war, funktionierte alles ;-)

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.