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