Forum: Mikrocontroller und Digitale Elektronik mal wieder bits


von oswald (Gast)


Lesenswert?

#define WARTEPIN PINA
#define WARTEBIT 2

while ( !(WARTEPIN & (1 << WARTEBIT)) ) ;


versteh ich nicht.

es werden doch WARTEPIN (also PINA) logisch AND mit 00000100
verknuepft? Aber WARTEPIN ist doch in dem Fall nur ein Register???

von Patrick M. (Gast)


Lesenswert?

Hallo,

erstmal ist "2" in Binär 00000010.
Dazu kommt, dass in PINA (in binärer Form) Die Portzustände von PINA
stehen.
Das kann man ganz gut verknüpfen.

Grüße

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Oswald hat das mit dem 00000100 schon richtig ausklamüsert.

  (1 << 2) ist 4

von oswald (Gast)


Lesenswert?

(1 << 2) das hier verschiebt doch eine 1 in Bin.: 00000001 um zwei
stellen nach links also: 00000100 ??

von Werner B. (Gast)


Lesenswert?

@Patrick M.

aber eine 1 um 2 stellen nach links geschoben ergibt 4.
4 = (2^2) = 0b00000100

@oswald

PINA ist funktional ein derefernzierter zeiger auf eine 8-bit
(volatile) varible.
Konzept: (numerische Angaben frei erfunden)

 #define PINA  (*((volatile unsigned char *)0x2e))

 dann kann ich mit "unsigned char b = PINA;"  den Wert an den PINs
auslesen.

Aber wie gesagt ... stark vereinfacht.

von Patrick M. (Gast)


Lesenswert?

Habe ich leider übersehen beim vorbeihuschen ;-)

Grüße

von Rolf Magnus (Gast)


Lesenswert?

> es werden doch WARTEPIN (also PINA) logisch AND mit 00000100
> verknuepft?

Ja. Durch diese Verknüpfung kann man testen, ob darin das Bit 2 gesetzt
ist oder nicht.

> Aber WARTEPIN ist doch in dem Fall nur ein Register???

Die I/O-Register des AVR lassen sich in C wie normale Variablen
verwenden.

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.