Gast
#268212
Hallo, wie invertiert man ein bestimmtes Bit aus einem Register moeglichst elegant (wenn man in C programmiert)? Ich moechte zB PC2 vom PORTC-Register invertieren. mg, Johannes
|
Anzeige
|
bit invertieren in C
Gast
#268212
Hallo, wie invertiert man ein bestimmtes Bit aus einem Register moeglichst elegant (wenn man in C programmiert)? Ich moechte zB PC2 vom PORTC-Register invertieren. mg, Johannes
Gast
#268213
#define ToggleBit(ADDRESS,BIT) ((ADDRESS) ^= (1<<BIT))
Gast
#268214
mit einem Exklusiv-ODER: PORTC ^= (0x02); Hilfe zur Selbsthilfe erst suchen dann Fragen ! http://www.mikrocontroller.net/articles/Bitmanipulation
Gast
#268216
nicht ganz konform - aber mit CodeVision geht auch: PORTC.2=~PORTC.2; Ich finde es sehr praktisch.
Gast
#268217
Danke! dies Forum hat echt eine hohe Baudrate ;) mg, Johannes
Gast
#268218
ich benutze immer: Portc.1=!Portc.1 mfg
Gast
#1913192
hey Leute. ist
compilerabhängig? Welchen Grund kann dahinter stecken, wenn es nicht funktioniert? Ebenso funktioniert
nicht. Viele Grüße
Gast
#1913197
! ungleich ~ http://home.fhtw-berlin.de/~junghans/cref/CONCEPT/expressions.html var =~var; sollte jedoch gehen! Eine weiter Variante ist PINC = 1<<PC2; bei nicht zu alten AVRs. Ist die schnellste und atomar.
Gast
#1913210
Du meinst vermutlich PINC ^= 1<<PC2; Nein, das war kein Tippfehler. Schreibt man eine 1 ins Input Register, dann ändert sich der Zustand des Ausgangs, schreibt man ein 0, dann nicht. Es ist also nicht erforderlich, vorher den Inhalt zu lesen. Das ist nicht nur kürzer, sondern insbesondere atomar, d.h. es kann kein Interrupt mitten reinrutschen. Was von besonderer Bedeutung ist, wenn eine ISR ebenfalls an den Port rumfummelt. Diese Funktion gibt es noch nicht bei den älteren Typen wie Mega8/16/32, sondern erst ab z.B. Tiny2313, Mega88/644. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|