Makra sbi, cbi, tbi dla AVR
19.02.2012 Notatki MakefileAVRCsbisbitbiavr-gcc_BVZastąpiła je konstrukcja operatorów logicznych i makra _BV.
Makro _BV
Makro _BV(x)
to nic innego jak skrócona forma wyrażenia (1<<(x))
, czyli przesunięcia bitowego o x miejsc w lewo.
Przesunięcie bitowe
Przykładowo: 1<<3 da nam 100 (a właściwie 00000100, jeśli będziemy operować na 8-bitowym rejestrze).
Przykłady
Zakładam tutaj, że chcę manipulować PA0 portu PORTA.
sbi
Ustawienie logicznej jedynki.
PORTA |= _BV(PA0);
cbi
Ustawienie logicznego zera.
PORTA &= ~_BV(PA0);
tbi
Zmiana stanu, negacja.
PORTA ^= _BV(PA0);
Dodatek dla konserwatystów
#define sbi(port, pin) (port) |= _BV(pin)
#define cbi(port, pin) (port) &= ~_BV(pin)
#define tbi(port, pin) (port) ^= _BV(pin)