Ćwiczenie - multipleksowanie timer tablice

Transkrypt

Ćwiczenie - multipleksowanie timer tablice
Zespół Szkół Technicznych
i Ogólnokształcących Programowalne układy mikroprocesorowe
w Jarosławiu
stosowane
w elektronice i telekomunikacji
W ZAWODZIE TECHNIK
elektronik i telekomunikacji
Specjalizacja
Klasa: IV TE
Ćwiczenie nr
Temat: Wstęp do multipleksowania wyświetlaczy
siedmiosegmentowych.
Atmega162
Napisz program, który będzie wyświetlał na czterech wyświetlaczach cztery dowolne cyfry
wykorzystując technikę multipleksowania, przerwania od Timera0 oraz zmiennych tablicowych do
przechowywania aktualnie wyświetlonych cyfr. Wykorzystaj wiadomości z poprzedniego ćwiczenia,
zmienną przechowującą informację, który wyświetlacz jest aktualnie zaświecony oraz tablicę
z aktualnie wyświetlanymi znakami, instrukcje incr x (zwiększa stan zmiennej x o 1), lookup,
instrukcje warunkowe if i select case instrukcje konfigurujące timer i przerwania.
Na początku programu przed pętlą główna zadeklarowana została tablica, w której będą
przechowywane cyfry do wyświetlenia. Deklaruje ją się identycznie jak zmienną, z różnicą,
iż podaje się po nazwie w nawiasach okrągłych liczbę jej elementów. Dostęp do zmiennych jest
także identyczny, tylko po nazwie podaje się także w nawiasach okrągłych, do którego elementu
chcemy mieć dostęp. Widać to podczas nadawania wartości po zadeklarowaniu zmiennej
w programie przykładowym.
W przerwaniu do instrukcji lookup podawana jest już nie konkretna liczba
(było “ Portb = Lookup(2 , Tabela)”)
a wartość odczytana z tablicy
(„ Portb = lookup(wyswietlacz(ktory_wyswietlacz + 1) , Tabela) ”).
Może być ona łatwo modyfikowana w programie głównym.
Pozycja, którą odczytujemy w przerwaniu jest równa wartości 1 dodanej do zmiennej
który_wyswietlacz. Wynika to z tego, iż wartości indeksujące tablicę są liczone od 1, a wartości
które przyjmuje zmienna który_wyswietlacz są liczone od 0.
1
Przykładowy program:
$regfile = "m162def.dat"
$crystal = 8000000
‘ definicje rejestrów procesora
‘definicja częstotliwości mikrokontrolera
Config Portd.2 = Output
Config Portd.3 = Output
Config Portd.4 = Output
Config Portd.5 = Output
Set Portd.2
Set Portd.3
Set Portd.4
Set Portd.5
‘PORTD.2 jako wyjście (wyś. 1)
‘PORTD.3 jako wyjście (wyś. 2)
‘PORTD.4 jako wyjście (wyś. 3)
‘PORTD.5 jako wyjście (wyś. 4)
‘zgaś wyś. 1
‘zgaś wyś. 2
‘zgaś wyś. 3
‘zgaś wyś. 4
Config Portb = Output
Set Portb
‘PORTB jako wyjście
‘zgaś cały wyświetlacz
Config Timer0 = Timer , Prescale = 64
Enable Interrupts
Enable Timer0
On Timer0 Tim0
‘konfiguracja timera0 z preskalerem = 64
‘włączenie systemu przerwań
‘włączenie timera0
‘włączenie przerwania od timera0 i
przypisanie do niego procedury Tim0
Dim Ktory_wyswietlacz As Byte
Ktory_wyswietlacz = 0
‘deklaracja zmiennej indeksującej
wyświetlacze i nadanie jej wartości 0
Dim Wyswietlacz(4) As Byte
‘deklaracja tablicy do wyświetlenia
Wyswietlacz(1) = 1
Wyswietlacz(2) = 3
Wyswietlacz(3) = 6
Wyswietlacz(4) = 8
‘nadanie wartości 1 wyswietlaczowi
‘nadanie wartości 2 wyswietlaczowi
‘nadanie wartości 3 wyswietlaczowi
‘nadanie wartości 4 wyswietlaczowi
Do
‘początek pętli głównej
Loop
End
‘koniec pętli głównej ->skok do jej początku
Tim0:
Set Portd.2
Set Portd.3
Set Portd.4
Set Portd.5
‘początek procedury przerwania
‘zgaś wyświetlacz 1
‘zgaś wyświetlacz 2
‘zgaś wyświetlacz 3
‘zgaś wyświetlacz 4
Select Case Ktory_wyswietlacz
Case 0:
Portb =
Lookup(wyswietlacz(ktory_wyswietlacz +
1) , Tabela)
‘blok instrukcji warunkowej
‘gdy Który_wyswietlacz = 0
‘wystawienie na port wartości dla cyfry
Z tablicy z pozycji 0+1=1
2
Reset Portd.2
Case 1:
Portb =
Lookup(wyswietlacz(ktory_wyswietlacz +
1) , Tabela)
Reset Portd.3
Case 2:
Portb =
Lookup(wyswietlacz(ktory_wyswietlacz +
1) , Tabela)
Reset Portd.4
Case 3:
Portb =
Lookup(wyswietlacz(ktory_wyswietlacz +
1) , Tabela)
Reset Portd.5
End Select
‘zaświecenie wyświetlacza 1
‘gdy Który_wyswietlacz = 1
‘wystawienie na port wartości dla cyfry
Z tablicy z pozycji 1+1=2
‘zaświecenie wyświetlacza 2
‘gdy Który_wyswietlacz = 2
‘wystawienie na port wartości dla cyfry
Z tablicy z pozycji 2+1=3
‘zaświecenie wyświetlacza 3
‘gdy Który_wyswietlacz = 3
‘wystawienie na port wartości dla cyfry
Z tablicy z pozycji 3+1=4
‘zaświecenie wyświetlacza 4
‘koniec bloku instrukcji warunkowej
Incr Ktory_wyswietlacz
If Ktory_wyswietlacz > 3 Then
Ktory_wyswietlacz = 0
‘zwiększenie zmiennej o 1 i sprawdzenie
czy nie jest większa od 3 i zerowanie jej
Return
‘koniec procedury obsługi przerwania
Tabela:
Data 130 , 215 , 35 , 67 , 86 , 74 , 10 , 199 ,
2 , 66
‘deklaracja tablicy z wartościami do
zapisania na port w celu wyświetlenia
konkretnej cyfry
3