Makra sbi, cbi, tbi dla AVR

19.02.2012 Notatki MakefileAVRCsbisbitbiavr-gcc_BV

Zastą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)