#4 Jak zmienić stan logiczny na porcie 1 ->0?

Wrócę do mojego przykładu diody LED połączonej z nóżką PD0, a z drugiej strony przez rezystor podpiętej do masy. Poprzednio skupiliśmy się na jej załączeniu, teraz chcę aby się wyłączyła.

Jak się pewnie domyślasz, muszę zmodyfikować rejestr PORTD w ten sposób, aby na bicie pierwszym (odpowiadającym nóżce PD0) znów pojawiło się logiczne 0.

Do ustawienia  rejestru najlepiej wykorzystać negację NOT (~) ustawienia logicznej 1 na bicie 1, a następnie przeprowadzić operację iloczynu bitowego AND (&). Ok, brzmi to skomplikowanie, dlatego wyjaśnię to na przykładzie operacji:

PORTD &=~_BV(PD0);

Wykorzystując negację oraz iloczyn bitowy mogę ustawić logiczne 0 na bicie odpowiadającym nóżce PD0 rejestru PORTD na różne sposoby:

Dlaczego do ustawienia logicznego 0 zalecam Ci zastosowanie negacji i operację iloczynu bitowego? W ten sposób ustawiając logiczne 0 na jakimś bicie nie modyfikujemy innych bitów, które być może zostały ustawione wcześniej.

Oczywiście w analogiczny sposób mogę przeprowadzać operacje bitowe na innych rejestrach.

Kod takiego programu mógłby wyglądać następująco:

#define F_CPU 1000000UL

#include <avr/io.h>

int main() {

DDRD |=1<<0; //ustawienie nóżki PD0 jako wyjścia

PORTD |=_BV(PD0); //ustawienie stanu wysokiego na nóżce PD0

PORTD &=~0x01;} //ustawienie stanu niskiego na nóżce PD0

Jeżeli napisałeś podobny program i wgrałeś go do mikrokontrolera na pewno zauważyłeś, że dioda w ogóle się nie zaświeciła! Dlaczego? Odpowiedź na kolejnej lekcji!

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *