Idź do
strony głównej
Programowanie w Bascom, lekcja 1
W celu przeprowadzenia ćwiczeń z tej lekcji należy wykonać układ przedstawiony na poniższym schemacie :
Połączenia
zostały dopasowane do połączeń istniejących na płytce AVT-3500, dzięki
czemu posiadacze tej płytki nie będą musieli wykonywać zadnych
dodatkowych układów. Ponieważ na płytce AVT3500 nie ma diod LED
a wyświetlacze siedmiosegmentowe dodatkowo konieczne będzie włączenie
jednego z tych wyświetlaczy przez ustawienie stanu niskiego na PD2.
Wszystkie programy zostały tak napisane, aby działały jednocześnie na
płytce AVT-3500 i na układzie o podanym schamacie. W kodzie
źródłowym będą zaznaczone fragmenty wymagane tylko dla płytki
AVT-3500. Fragmenty te można pominąć przy pracy na układzie wykonanym
według podanego schematu.
Ćwiczenie 1
W tym ćwiczeniu zapoznamy się z portami mikrokontrolera.
Spróbujmy zaświecić diodę LED podłączoną do wyprowadzenia
portb.0 (na płytce AVT-3500 będzie to segment A wyświetlacza
siedmiosegmentowego - najwyzej położona na wyświetlaczu pozioma
kreska). Po uruchomieniu Bascoma wpiszmy do niego następujący kod
(komentarze koloru zielonego możemy pominąć przy wpisywaniu programu -
nie mają one wpływu na działanie programu, służą one jedynie jako
objaśnienie kodu):
'
informujemy kompilator, dla jakiego mikrokontrolera piszemy program
$regfile
=
"2313def.dat"
'
informujemy kompilator o częstotliwości zegara mikrokontrolera
$crystal
=
4000000
'
konfigurujemy PORTB do pracy w trybie wyjściowym
Config
Portb
=
Output
'
konfigurujemy PORTD do pracy w trybie wyjściowym
Config
Portd
=
Output
'
właczamy wewnętrzne rezystory podciagające portb do zasilania
'
na wszystkich wyprowadzeniach portb będzie stan wysoki
Portb
=
255
'
właczamy wewnętrzne rezystory podciagające portd do zasilania
'
na wszystkich wyprowadzeniach portd będzie stan wysoki
Portd
=
255
'
ustawiamy na wyprowadzeniu portd.3 stan niski
'
spowoduje to włączenie pierwszej cyfry wyświetlacza na płytce
AVT-3500
Reset
Portd.3
'
ustawiamy na wyprowadzeniu portb.0 stan niski
'
spowoduje to zaświecenie się segmentu A pierwszej cyfry wyświetlacza
'
albo diody LED podłączonej do wyprowadzenia portb.0
Reset
Portb.0
'
pętla nieskończona, koniec programu
Do
:
Loop
:
End |
W pierwszej linii programu znajduje się dyrektywa mówiąca
kompilatorowi, aby podczas kompilacji użył plik z definicjami
rejestrów mikrokontrolera AT90S2313 :
Umieszczenie tej dyrektywy w pliku źródłowym daje taki sam
efekt, co ustawienie na zakdadce Options -> Compiler w polu Chip
typu mikrokontrolera, dla którego przeznaczony jest program.
Dobrym zwyczajem jest umieszczenie tej dyrektywy w kodzie, ponieważ
przy przeniesieniu programu do kompilatora na innym komputerze mogą
wystąpić problemy z kompilacją na wskutek innych ustawień w opcjach
kompilatora. Umieszczenie dyrektywy w pliku ma pierwszeństwo przed
ustawieniami kompilatora, tak więc nie powinny wystąpić żadne problemy
przy kompilacji.
Następnie znajduje się kolejna dyektywa kompilatora, tym razem informująca go o częstotliwości pracy mikrokontrolera :
Określenie właściwej częstotliwości pracy ma bardzo duże
znaczenie przy korzystaniu z funkcji opóźniających, które
poznamy już wkrótce, a także przy transmisji szeregowej z
uzyciem układu UART. Niewłaściwe określenie częstotliwości pracy
mikrokontrolera jest bardzo częstą przyczyną błednego działania
programów i przysparza początkującym programistom sporo
kłopotów.
Gdy przekażemy kompilatorowi dane niezbędne do właściwej kompilacji
programu możemy przystąpić do pisania właściwego programu. Na poczatku
musimy skonfigurować porty w zależności od pełnionych przez nie
funkcji. W naszym programie wszystkie porty pracują w trybie wyjściowym
(dane zapisujemy do portu) więc konfigurujemy je w tryb wyjściowy. Do
wszlekiego typu konfiguracji w języku Bascom służy polecenie Config.
Port PORTB konfigurujemy w następujacy sposób :
Po poleceniu Config podajemy nazwę portu, który chcemy
skonfigurować, a następnie po znaku równości podajemy tryb, w
który konfigurujemy port. W naszym przypadku port ma pracować w
trybie wyjściowym więc wpisujemy Output. W tem sam sposób
konfigurujemy port PORTD :
Konfiguracja portu PORTD jest wymagana tylko przy korzystaniu z płytki
AVT-3500 (do tego portu podłączone są tranzystory sterujące anodami
wyświetlaczy siedmiosegmentowych). Po skonfigurowaniu trybu pracy
portów należy zapisać do nich wartości początkowe. Ponieważ w
naszym układzie diody LED są aktywowane stanem niskim na wyprowadzeniu
portu na początku programu należy na porty wystawić stan wysoki, aby
żadna dioda się nie świeciła. Dokonujemz tego przez zapisanie do portu
liczby 255 :
Ponieważ podawanie wartości w postaci dziesiętnej jest mało czytelne w
odniesieniu do konetnych wyprowadzeń portu możemy podać liczbę w
postaci binarnej :
bądź też szesnastkowej :
Każdy sposób zaowocuje zapisaniem do portu tej samej wartości
(zyskujemy na wygodzie przy podawaniu wartości w postaci binarnej - od
razu widać który bit rejestru jaką będzie posiadał wartość).
Po skonfigurowaniu portów zapisujemy do nich wartości
początkowe. W naszym przypadku do obydwu portów zapisujemy
liczbę 255. Spowoduje to ustawienie na każdym z wyprowadzeń stany
wysokiego :
Teraz mozemy już przystąpić do napisania właściwego programu,
powodujacego włączenie diody LED podłączonej do wyprowadzenia PB0
mikrokontrolera. Jeśli pracujemy na płytce AVT-3500 zrealizowanie tego
celu wymaga dwóch instrukcji :
Reset
Portd.3
Reset
Portb.0 |
Pierwsza z tych instrukcji spowoduje ustawienie na wyprowadzeniu PD3
stanu niskiego, a w efekcie właczenie tranzystora zasilającego anody
pierwszego wyświetlacza siedmiosegmentowego. Druga instrukcja odpowiada
za ustawienie stanu niskiego na wyprowadzeniu PB0 co zaowocuje
zaświeceniem się pierwszego segmentu wyświetlacza.
Natomiast gdy pracujemy na układzie pokazanym na schemacie pokazanym na
początku (anody diod LED podłaczone na stałe do zasilania) pierwsza
instrukcja jest zbędna i wystarczy zastosować tylko drugą.
Na końcu naszego programu w ostatniej linii znajdują sie trzy instrukcje :
Instrukcje
Do i
Loop realizują pustą pętlę nieskończoną, natomiast
End sygnalizuje koniec programu.