www.mikrocontroller.net

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


Autor: Stefanie (Gast)
Datum:

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

Autor: Rolf (Gast)
Datum:

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

Autor: seacrash (Gast)
Datum:

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

Autor: Stephan E. (stephan_e)
Datum:

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

Autor: Rolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guck genauer hin, es sind 10 hex

Autor: Stephan E. (stephan_e)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry ist ja in HEX ausgegeben

Autor: johnny.m (Gast)
Datum:

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

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
10h -> 10000b, also Bit 4 ist gesetzt...

Autor: André Kronfeldt (freakazoid)
Datum:

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

Autor: Stefanie (Gast)
Datum:

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

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.