Programowanie mikrokontrolerów
Sterowanie portamiKomunikacja mikroprocesora mikrokontrolera ze światem zewnętrznym odbywa się za pomocą portów wejść / wyjść. Podstawowymi operacjami na jakich nam zależy są wystawienie jakiejśc wartości na port mikroprocesora mikrokontrolera oraz odczytanie jakiejś wartości z portu. Aby dokonać odczytu wartości z portu mikrokontrolera mikroprocesora należy skonfigurować go jako port wyjściowy czyli wpisać do rejestru DDRx wartości "1" dla odpowiednich nóżek portu które nas interesują bądź też dla całego portu. Możemy zrealizować to na kilka sposobów. Należy pamiętać że podczas programowanie mikroprocesorów mikrokontrolerów możemy posługiwać się różnymi systemami liczbowymi. Najpopularniejszymi są system dziesiętny, binarny oraz szesnastkowy. Dobrze jest mieć wyobrażenie o zasadzie tworzenia takich systemów liczbowych i sposobach szybkiego przeliczania ich z jednego na drugi gdyż jest to przydatną rzeczą podczas programowania oraz w niektórych przypadkach poprawia jego czytelność używanie różnych systemów liczbowych. Wystawienie wartości na port mikroprocesora mikrokontroleraJednym ze sposobów wystawienia wartości na port jest wpisanie do rejestru wyjściowego PORTx odpowiedniej wartości liczbowej. Następuje wówczas nadanie wartości wzystkim 8 nóżkom na zadeklarowaną jak w poniższym przykładzie: Przykład. Wystawienie wartości na cały port na przykładzie portu C:
W powyższych komendach wykorzystaliśmy deklarowanie wartości rejestrów w sposób binarny. W pierwszej linijce kodu do rejestru określającego kierunek transmisji danych portu C mikroprocesora mikrokontrolera wpisaliśmy jedynki co jest jednoznaczne z ustawieniem portu w tryb portu wyjściowego mikroprocesora mikrokontrolera. W drugiej linijce kodu do rejestru zawierającego wartość portu C wpisaliśmy naprzemiennie jedynki i zera. Stan uzyskany po wykonaniu tych dwóch komend obrazuje rysunek wyprowadzeń mikroprocesora mikrokontrolera obok kodu. Widzimy że na nóżkach mikroprocesora pojawiają sie naprzemian zera i jedynki. Należy pamiętać że dla zapisu 0b01010101 ostatnia wartość z prawej strony jest to najmłodszy bit ( bit o najmniejszej wadze ) natomiast z prawej strony zaraz po literce b występuje najstarszy bit ( bit o największej wadze ). Programując w języku C++ mamy możliwość w atwy sposób zmieniać wartości poszczególnych bitów w rejestrach. Do tego celu musimy posłużyć się dosyć skomplikowaną i mało czytelną ( moim zdaniem) komendą. Komenda ustawiająca bit rejestru wygląda następująco "_SFR_BYTE(sfr) |= _BV(bit)" natomiast kasująca bit rejestru "_SFR_BYTE(sfr) &= ~_BV(bit)". Jest jednak proste wyjście z sytuacji. W celu ułatwienia posługiwania się tymi dwoma komendami możemy stworzyć sobie definicje procedury tzn. zastąpić powyższe komendy prostrzymi i bardziej czytelnymi. Do tego celu posłużymy się dwiema definicjami. Jedna będzie ustawiała bit rejestru na jedynkę, natomiast druga będzie kasowała bit rejestru ustawiając go na zero. Omawiane definicje będą wyglądały następująco:
Powyższe linie w programie wstawiamy zaraz po definicjach #include. Użycie powyższych komend jest następujące: sbi(sfr,bit)
cbi(sfr,bit)
Przykład. Wystawienie wartości pojedynczych bitów na port na przykładzie portu C:
W powyższym przykładzie przedstawione zostało zastosowanie poznanych komend. W pierwszym kroku wystawione zostają jedynki na cały port C mikroprocesora mikrokontrolera. W drugim kroku wyzerowany zostaje czwarty bit portu C (numerowany jest jako 3 ponieważ notacja bitów portu zaczyna się od zera), następnie zerowany zostaje siódmy bit portu C mikroprocesora mikrokontrolera. W dwóch ostatnich krokach kolejno zostaje wysterowany czwarty bit portu C na jedynkę i następnie wysterowany zostaje siódmy bit na jedynkę przywracając port C do stanu pierwotnego. Odczyt wartości z portu mikroprocesora mikrokontroleraNajprostrzym sposobem odczytania wartości z portu jest wpisanie jego wartości do zmiennej. Aby tego dokonać należy zdefiniować sobie jakąś zmienną np o nazwie "zmienna_y" co zrealizowane zostało w pierwszej linijce.
W drugiej linijce definiujemy port jako wejściowy i w trzeciej linijce kodu usawiamy podciągnięcie wyjść do "1" tak aby nie podłączone nigdzie wyjście przyjmowało stan "1" a dopiero wymuszenie zewnętrzne może mienić jego wartość na 0 np zwierając wejście mikrokontrolera do masy. W czwartej linijce kodu przypisujemy wartość portu C do zmiennej zmienna_y dzięki czemu stan wejść mikrkokontrolera zostanie wpisany do tej zmiennej. Przykłady:Odczyt zapis wartości na port mikrokontrolera mikroprocesora
Program realizujący naprzemienne miganie diodami na porcie mikrokontrolera
22.03.2020 (poprawić tekst - jest bełkot) 23-Apr-2021 10:29:55 CEST by Pioter
|
© mikroprocesory.info.pl@gmail.com 2013.