mikrokontrolery.net

 

   

Przykład 1 - Przerzutnik RS
Nasz pierwszy program będzie realizował funkcję przerzutika RS - naciśnięcie przycisku S1 na płytce testowej spowoduje zaświecenie kropki dziesiętnej wyświetlacza LED, a naciśnięcie przycisku S2 spowoduje jej zgaszenie. Algorytm działania programu przedstawiony jest na poniższym rysunku :


Kod programu jest przedstawiony poniżej :

Config Portb = &B11111111
' ustawienie wszystkich wyprowadzen portu PORTB jako wyjscia
Config Portd = &B1111100
' ustawienie dwóch najmłodszych bitów portu PORTD jako wejścia
' a pozostałych jako wyjścia
Portb = &B11111111

Portd = &B1110111

Do
' jeśli PIND.0 jest w stanie niskim
' to znaczy, ze nacisnięto przycisk S1
If Pind.0 = 0 Then
' wtedy ustaw na PORTB.7 stan niski
' czyli zapal kropkę dzisiętną wyświetlacza
Portb.7 = 0
' koniec instrukcji if
End If
' jeśli PIND.1 jest w stanie niskim
' to znaczy, ze nacisnięto przycisk S2
If Pind.1 = 0 Then
' wtedy ustaw na PORTB.7 stan wysoki
' czyli zgaś kropkę dzisiętną wyświetlacza
Portb.7 = 1
'koniec instrukcji if
End If
'powtarzaj cały program w pętli nieskończonej
Loop

Na początku programu musimy odpowiednio skonfigurować porty mikrokontrolera. W języku Bascom istnieje specjalna istrukcja służaca do tego celu - config. Instrukcja config może służyć do konfiguracji większości układów peryferyjnych mikrokontrolera. W naszym przypadku chcemy skocfigurowac port B mikrokontrolera jako wyjścia, więc stasujemy zapis :

Config Portb = &B11111111

Efektem wykonania tej instrukcji będzie po prostu zapisanie do rejestru DDRB liczby 255. Zamiast podanego zapisu port można skonfigurować w "tradycyjny" sposób przypisując bezpośrednio do rejestru DDRB liczbę 255, nie wykorzystując instrukcji config.

Drugim portem, który chcemy skonfigurować jest port D. Aby mikrokontroler mógł odczytać stan przycisków S1 i S2, musimy linie, do których te przyciski są podłączone skonfigurować jako wejścia. Natomiast pozostałe linie portu D należy skonfogurować jako wyjścia (ponieważ port D steruje anodami wyswietlaczy siedmiosegmentowych). Konfiguracji tego portu w przedstawiony sposób dokonujemy w ten sposób :

Config Portd = &B1111100

Wnikliwi czytelnicy zauważyli zapewne, że liczba konfigurująca port D jest siedmiobitowa. Jest to wynikiem tego, że port D posiada tylko 7 a nie 8 linii wyprowadzonych na zewnątrz mikrokontrolera. Po określeniu kierunku pracy poszczególnych linii musimy zapisać do portów wartości początkowe. W przypadku portu B będzie to liczba 255, ponieważ chcemy, aby zaraz po starcie mikrokontrolera wszystkie segmenty wyswietlacza były wygaszone. Natomiast w przypadku portu D, który to port steruje anodami wyświetlaczy LED, chcemy aby pin 4 był w stanie 0. Spowoduje to włączenie pierwszego wyświetlacza.

Po skonfigurowaniu i zainicjowaniu portów mikrokontrolera przyszedł czas na własciwy program. Ponieważ cały program wykonywany jest w pętli nieskończonej, zastosowałem pętlę do loop. Właściwy program polega na sprawdzaniu stanu przycisków S1 i S2 na płytce testowej oraz w przypadu wciśnięcia przycisku podjęciu odpwiedniej akcji (zapalanie lub gaszenie kropki dziesiętnej wyśiwetlacza). Wciśnięcie przycisku jest sygnalizowane wymuszeniem na linii, do której dany przycisk jest podłączony, stanu niskiego. Sprawdzenia stanu linii wejściowej najłatwiej jest dokonać za pomocą instrukcji warunkowej if. Ogólna postać instrukcji if wygląda następująco :

if warunek then
instrukcja
end if

Jeśli warunek jest prawdziwy, to wykonywana jest instrukcja, w przeciwnym przypadku instrukcja nie będzie wykonana. W naszym przypadku warunkiem jest wyrażenie Pind.0 = 0. Wyrażenie to zwraca wartość true tylko wtedy, gdy linia 0 portu D będzie w stanie niskim.

 

 

 

 

 

 

 

 

 

 

 

 
 
 
 

(c) 2004-2008 Radosław Kwiecień
Polityka prywatności