Ć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