Ć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