Zachodniopomorski Uniwersytet Technologiczny WYDZIAŁ ELEKTRYCZNY Zakład Cybernetyki i Elektroniki LABORATORIUM TECHNIKA MIKROPROCESOROWA SYSTEM PRZERWA Ń MCS 51 Opracował: mgr inŝ. Andrzej Biedka
Uwolnienie procesora od cią głego sprawdzania stanu bitu flagi przepełnienia timera/licznika (TF0 lub TF1) jest moŝ liwe przy wykorzystaniu przerwania. Uruchomienie systemu przerwań wymaga jego zaprogramowania inicjalizacji. Ze wzglę du na lokalizację wektorów przerwań w począ tkowym obszarze pamię ci ROM i fabryczne przypisanie ich adresów struktura programu wykorzystują cego przerwania powinna mieć nastę pują cą postać : 1 ; LISTING 3-1 2 ; Struktura programu z wykorzystaniem przerwań 3 4 WEKTOR_T0 EQU 0BH 5 WEKTOR_T1 EQU 01BH 6 7 ORG 0 8 9 LJMP START 10 ; ******************************** 11 ORG WEKTOR_T0 12 LJMP OBSLUGA_T0 13 14 ORG WEKTOR_T1 15 LJMP OBSLUGA_T1 16 ;******************************** 17 START: 18 ; Program główny 19 Inicjalizacja timerów i przerwań 20 PETLA: 21 instrukcja 1 22 instrukcja 2 23... 24 instr n 25 LJMP PETLA 26 27 ;******************************** 28 OBSLUGA_T0: 29 ; Program obsługi przerwania timera T0 30 xxx 31 xxx 32 RETI 33 34 ;******************************** 35 OBSLUGA_T1: 36 ; Program obsługi przerwania timera T1 37 yyy 38 yyy 39 RETI 40 41 END Pierwszą instrukcją w programie jest rozkaz skoku do etykiety START, omijają cy obszar wektorów przerwań. Obszar wektorów przerwań zorganizowany jest w postaci tablicy skoków poś rednich do właś ciwych procedur obsługi tych przerwań. Koniecznoś ć stosowania skoków poś rednich wynika z tylko oś miobajtowego odstę pu mię dzy poszczególnymi wektorami, co najczę ś ciej nie pozwala na zmieszczenie kodu programu obsługi przerwania.
Nastę pnie znajduje się kod programu głównego tworzą cy pę tlę. Wobec zastosowania skoków długich (LJMP adres) kolejnoś ć umieszczenia programów obsługi przerwań i programu głównego jest dowolna. Jeś li w danym programie wykorzystane jest tylko jedno ź ródło przerwań strukturę programu moŝ na uproś cić do postaci: 1 ; LISTING 3-2 2 ; Struktura programu z wykorzystaniem jednego przerwania 3 4 WEKTOR_T0 EQU 0BH 5 6 ORG 0 7 8 LJMP START 9 ; ********************************* 10 ORG WEKTOR_T0 11 ; Program obslugi przerwania timera T0 12 xxx 13 xxx 14 RETI 15 16 ;******************************** 17 START: 18 ; Program glowny 19 Inicjalizacja timera 0 i jego przerwania 20 21 PETLA: 22 instr 1 23 instr 2 24... 25 instr n 26 LJMP PETLA 27 28 END W powyŝ szym przykładzie struktury nie są potrzebne skoki poś rednie, poniewaŝ moŝ e wystą pić co najwyŝ ej tylko jedno przerwanie. Zatem moŝ na wykorzystać pamię ć programu obszaru innych wektorów na umieszczenie kodu obsługi jednego przerwania w tym wypadku od przepełnienia timera 0. Przykładowy program generowania przebiegu prostoką tnego o czę obserwowanego na diodzie LED linii P2.0 przedstawia listing 3-3. stotliwoś ci 10 Hz,
1: ; LISTING 3-3 2: ; Program generatora przebiegu prostoką tnego 10Hz 3: ; z wykorzystaniem przerwań 4: 5: WEKTOR_T0 EQU 0BH 6: PODZIELNIK EQU 19456 ; 65536 - (50msek/1,08507usek) 7: ; Kwarc = 11,0592MHz 8: 9: ORG 0 10: 11: LJMP START 12: 13: ORG WEKTOR_T0 14: ; Program obsługi przerwania timera T0 15: 16: MOV TL0, LOW PODZIELNIK ; odtworzenie zadanego czasu 17: MOV TH0, HIGH PODZIELNIK 18: CPL P2.0 ; neguj stan diody LED 19: RETI ; powrót z przerwania 20: 21: ;******************************** 22: START: 23: ; Program główny 24: MOV P2,#1 ; zerowanie linii P2.7 - P2.0 25: 26:; Inicjalizacja TIMERA 0 27: 28: MOV TMOD,#00000001B ; ustawienie trybu 1 29: MOV TH0,HIGH PODZIELNIK ; Ładowanie starszego bajtu 30: MOV TL0,LOW PODZIELNIK ; Ładowanie mlodszego bajtu 31: 32: SETB TR0 ; Start timera T0 33: 34: ; Inicjalizacja PRZERWANIA 35: 36: SETB ET0 ; Zezwolenie na przerwanie od timera 0 37: SETB EA ; Globalne zezwolenie na przerwanie 38: 39: SJMP $ ; "Pę tla główna" programu 40: 41: END W programie obsługi przerwania, który zostaje wykonany po przepełnieniu timera (linie 13 19) nie ma instrukcji kasowania flagi TF0, poniewaŝ zadanie to wykonywane jest automatycznie przez jednostkę sterują cą mikrokontrolera w chwili przyję cia przerwania. Jest to zachowanie odmienne od wystę pują cego przy obsłudze timera przez sprawdzanie stanu bitu flagi przepełnienia czyli przez tzw. polling.
W nastę pnym przykładzie programu w pę tli głównej (linie 39-46) znajduje się procedura generowania przebiegu prostoką tnego w linii portu P2.7. Zastosowane do wytworzenia zwłoki czasowej dwa rejestry pracują ce z maksymalną wpisywana wartoś cią 255 umoŝ liwiają wzrokową obserwację efektu migania diody P2.7. W programie pracują niezaleŝ nie dwa procesy: 1. sterowane przez pę tlę programu głównego miganie diody P2.7 2. sterowane przez przerwanie timera 0 miganie diody P2.0 1: ; LISTING 3-4 2: ; Program generatora przebiegu prostoką tnego 10Hz 3: ; z wykorzystaniem przerwań 4: 5: WEKTOR_T0 EQU 0BH 6: PODZIELNIK EQU 19456 ; 65536 - (50msek/1,08507usek) 7: ; Kwarc = 11,0592MHz 8: 9: ORG 0 10: 11: LJMP START 12: 13: ORG WEKTOR_T0 14: ; Program obsługi przerwania timera T0 15: 16: MOV TL0, LOW PODZIELNIK ; odtworzenie zadanego czasu 17: MOV TH0, HIGH PODZIELNIK 18: CPL P2.0 ; neguj stan diody LED 19: RETI ; powrót z przerwania 20: 21: ;******************************** 22: START: 23: ; Program główny 24: MOV P2,#1 ; zerowanie linii P2.7 - P2.0 25: 26: ; INICJALIZACJA TIMERA 0 27: 28: MOV TMOD,#00000001B ; ustawienie trybu 1 29: MOV TH0, HIGH PODZIELNIK ; Ładowanie starszego bajtu 30: MOV TL0, LOW PODZIELNIK ; Ładowanie młodszego bajtu 31: 32: SETB TR0 ; Start timera T0 33: 34: ; INICJALIZACJA PRZERWANIA 35: 36: SETB ET0 ; Zezwolenie na przerwanie od timera 0 37: SETB EA ; Globalne zezwolenie na przerwanie 38: 39: PETLA: ; "Pę tla główna", pulsowanie diody P2.7 40: MOV R7,#255 41: PETLA1: 42: MOV R6,#255 43: DJNZ R6,$ 44: DJNZ R7,PETLA1 45: CPL P2.7 46: SJMP PETLA 47: 48: END
ZADANIA: 5. Napisać program generatora przebiegu prostoką tnego o parametrach przedstawionych na poniŝ szym rysunku, z wykorzystaniem przerwania. Obserwacji przebiegu dokonać przy pomocy wybranej diody LED portu P2. 1sek. 50 msek. Rys. 2-3 6. Napisać program generatora przebiegu prostoką tnego o parametrach przedstawionych na rysunku 2-3 z wykorzystaniem timera pracują cego w trybie 0 z obsługą przerwań. 7. Napisać program generatora przebiegu prostoką tnego o parametrach przedstawionych na rysunku 2-3 z wykorzystaniem 2 timerów pracują trybie 1 z obsługą przerwań. cych w 8. Napisać program generatora przebiegu prostoką tnego o parametrach przedstawionych na rysunku 2-3 z wykorzystaniem 2 timerów, jednego pracują cego w trybie 0, drugiego pracują cego w trybie 1 z obsługą przerwań. 9. Wyznaczyć czas niezbę dny do przyję cia i zakoń czenia obsługi przerwania, uwzglę dnić ten czas w stałych ładowania rejestrów timerów.