Ćwiczenie - multipleksowanie timer _2_

Transkrypt

Ćwiczenie - multipleksowanie timer _2_
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 cz. 2.
Atmega162
Napisz program, który będzie wyświetlał na czterech wyświetlaczach cztery dowolne cyfry
wykorzystując technikę multipleksowania i przerwania od Timera0. Wykorzystaj wiadomości
z poprzedniego ćwiczenia, zmienną przechowującą informację, który wyświetlacz jest
aktualnie zaświecony, instrukcje incr x (zwiększa stan zmiennej x o 1), lookup, instrukcje
warunkowe if i select case instrukcje konfigurujące timer i przerwania.
W procesorze ATmega162 producent umieścił 4 timery, które programista może dowolnie
wykorzystać. Mogą one pracować jako liczniki wewnętrznych impulsów zegarowych,
impulsów zewnętrznych, odmierzać czas. Mogą także współpracować z przerwaniami.
Przerwanie jest to procedura, wywoływana po nastąpieniu ściśle zdefiniowanego zdarzenia.
Wykonuje się ona niejako równolegle do programu w pętli głównej, np. w przerwaniu
możemy multipleksować wyświetlacz a w pętli głównej wykonywać jakieś obliczenia.
W tym programie timer wykorzystany jest w jednej z najprostszych konfiguracji.
Licznik – czasomierz Timer0 jest 8-bitowy. Zliczanie impulsów przez niego można dowolnie
zatrzymać i wznowić instrukcjami Stop Timer0 i Start Timer0, Cykl liczenia licznika można
skracać definiując od jakiej wartości ma liczyć służy do tego instrukcja Load Timer0. Można
ustalić wewnętrzny podział częstotliwości zegara za pomocą instrukcji Prescale. Timer może
generować sygnał przerwania po jego przepełnieniu, czyli doliczeniu do górnej granicy (28-1),
podprogram przerwania powinien być umieszczony na końcu program po słowie End.
Do podprogramu przerwania została przeniesiona prawie cała zawartość pętli głównej, poza
instrukcja waitms. Nie jest ona już potrzebna, ponieważ to timer teraz ma za zadanie
generować opóźnienia poprzez cykliczne wywołanie przerwania.
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
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(2 , Tabela)
Reset Portd.2
Case 1:
Portb = Lookup(5 , Tabela)
Reset Portd.3
Case 2:
‘blok instrukcji warunkowej
‘gdy Który_wyswietlacz = 0
‘wystawienie na port wartości dla cyfry 2
‘zaświecenie wyświetlacza 1
‘gdy Który_wyswietlacz = 1
‘wystawienie na port wartości dla cyfry 5
‘zaświecenie wyświetlacza 2
‘gdy Który_wyswietlacz = 2
2
Portb = Lookup(6 , Tabela)
Reset Portd.4
Case 3:
Portb = Lookup(7 , Tabela)
Reset Portd.5
End Select
‘wystawienie na port wartości dla cyfry 6
‘zaświecenie wyświetlacza 3
‘gdy Który_wyswietlacz = 3
‘wystawienie na port wartości dla cyfry 7
‘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