Forum: Mikrocontroller und Digitale Elektronik was soll diese Anweisung sein? Bv()


von Bernd M. (berndm)


Lesenswert?

hi,
tut mir leid aber ich habe eine Anfänger Frage:

ich habe diese Anweisng gefunden und ich weiss nicht, was das bedeutet:

z.B.:

 PB7 &= ~_BV(x);
 PB7 |= _BV(x);


danke

von Mark E. (mark_e)


Lesenswert?


von sechsminuszwei (Gast)


Lesenswert?

Da werden Bits gesetzt und geloescht, in Abhaengigkeit einer Funktion.

von Bernd M. (berndm)


Lesenswert?

Danke für die schnelle Anrwort,

ich weiss, dass es sich um Setzen und Rücksetzen von Pins in einem Port, 
aber was ich nicht verstehe ist die Funktion  "_Bv()"
_Bv() bekommt als Argument einen Bit

z.B.

PB7 ist als Ausgang definiert, und auf 0 gestzt.
dann wird diese Anweisung aufgerufen:

PORTB &=~_Bv(PB7);

oder

PORTB |=_Bv(PB7);

wie sieht das Ergebnis in beiden Fällen??

DANKEEEE

von sechsminuszwei (Gast)


Lesenswert?

Aha. Ja, dann macht die Bv() funktion die Umwandlung von Bitposition 
nach Bitmuster :
7 --> %10000000
6 --> %01000000
..
1 --> %00000001

Nein ?

von sechsminuszwei (Gast)


Lesenswert?

Nochwas. Die Bv() ist keine Laufzeitfunktion, sondern wird vom Compiler 
ausgewertet. Der Kann das ja, solange es um Konstanten geht. Die 
Uebersetzung ist eine Tabelle.

von Jörg X. (Gast)


Lesenswert?

"_BV(bit)"ist ein MACRO (beachte die GROSSSCHREIBUNG).
Ungefähr so:
1
#define _BV(bit) (1<<(bit))

hth. Jörg

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.