Mikrokontroler 8151 - przerwania

W układzie Intel 8051 jest zaimplementowany system wieloźródłowy przerwań o dwóch priorytetach z możliwością zagnieżdżania. Czas reakcji po wystąpieniu żądania obsługi zawiera się między 3 a 7 s przy zegarze 12MHz.

Mikroprocesor 8051 akceptuje żądania przerwań z pięciu źródeł. Są nimi: dwa zewnętrzne urządzenia zgłaszające przerwanie przez końcówki INT0 i INT1, po jednym przerwaniu od każdego z dwóch układów czasowych/liczników oraz jedno przerwanie od portu szeregowego. Każde przerwanie ma przydzielony adres, po którym powinna być umieszczona procedura obsługi.

Każdemu z pięciu przerwań może być przydzielony jeden z dwóch poziomów priorytetów, ponadto każde z przerwań może być niezależnie blokowane lub odblokowywane. Przerwania zewnętrzne mogą być zaprogramowane na zgłaszanie poziomem lub zboczem sygnału. Aktywny jest poziom niski, co umożliwia konstruowanie systemu przerwań wykorzystującego sumowanie na szynie, dzięki czemu można do jednego wejścia dołączyć kilka urządzeń. Poszczególne źródła przerwań mają przyznawane poziomy priorytetów jako wyższe lub niższe przez ustawienie odpowiednich bitów w rejestrze priorytetu przerwań. Ustawiając te bity w stan 1, przyznawany jest danemu przerwaniu wyższy priorytet.

Szczegółowo system przerwań może przyjmować zgłoszenia następujących przerwań:
a). zewnętrznych:
- z wejścia INT0 (zn.IE0),
- z wejścia INT1 (zn.IE1),
b). z układu czasowo - licznikowego:
- przepełnienie licznika T0 (zn. TF0),
- przepełnienie licznika T1 (zn. TF1),
c). z portu szeregowego:
- koniec nadawania znaku (TI) lub koniec odbierania znaku (RI).


Z każdą przyczyną przerwania jest związany wyżej wymieniony znacznik, do którego wpisanie jedynki jest zgłoszeniem przerwania. Wyzerowanie znacznika powoduje skasowanie przerwania. Odbywa się to automatycznie - odpowiednio przy wystąpieniu przyczyny przerwania i przy jego przyjęciu (zn. TI, RI nie są zerowane automatycznie). Wszystkie wymienione znaczniki mogą też być ustawiane i zerowane programowo. System przerwań może być włączany i wyłączany oraz każde zgłoszenie może być indywidualnie zamaskowane przez ustawienie odpowiedniego bitu w słowie  sterującym  IE (1 - odblokowanie przerwania, 1 - zablokowanie, po restarcie IE = 0). Każde z przerwań, przez ustawienie lub wyzerowanie właściwego bitu w słowie sterującym IP, może być programowo umieszczone na wyższym priorytecie (1) lub niższym (0). W razie jednoczesnego zgłoszenia dwóch przerwań, jako pierwsze będzie przyjęte przerwanie z wyższego poziomu priorytetu. Natomiast, przy jednoczesnym zgłoszeniu kilku przerwań umieszczonych na tym samym poziomie, o kolejności decyduje sztywno ustalony priorytet zgłoszeń (w kolejności od najwyższego: zewn. INT0, od licznika T0, zewn. INT1, od licznika T1, od portu szeregowego). Ponadto, umieszczenie przerwań na danym poziomie priorytetu decyduje o możliwości przerywania programów obsługi innych przerwań. W czasie wykonywania programu obsługi przerwania z niższego poziomu priorytetu będzie przyjęte zgłoszenie przerwania z wyższego poziomu (o ile nie jest zablokowane), a nie będzie przyjęte zgłoszenie przerwania z niższego poziomu. W czasie wykonywania programu obsługi przerwania z wyższego poziomu priorytetu nie będzie przyjęte żadne zgłoszenie przerwania. Program obsługi przerwania z wyższego poziomu jest nieprzerywalny. Jeżeli w słowie IE jest EA = 1 (włączony system przerwań), to w stanie S6 każdego cyklu maszynowego są przeglądane znaczniki nie zamaskowanych przerwań. Wykrycie zgłoszenia powoduje (o ile nie jest spełniony żaden z poniższych warunków), że w następnym cyklu maszynowym rozpocznie się wykonywanie cyklu przyjęcia przerwania o najwyższym priorytecie ze zgłoszonych. Warunki uniemożliwiające przyjęcie przerwania:
- wykonywany w danej chwili cykl maszynowy nie jest ostatnim w cyklu rozkazowym; przerwanie zostaje przyjęte po zakończeniu wykonywania bieżącego rozkazu,
- w danej chwili wykonywany jest rozkaz RETI lub rozkaz działający na zwartości słów sterujących IE lub IP; przerwanie zostaje przyjęte dopiero po zakończeniu wykonywania następnego rozkazu (jeżeli nie jest to RETI lub rozkaz działający na IP lub IE),
- w danej chwili wykonywany jest program obsługi przerwania z poziomu priorytetu wyższego lub równego temu, na którym jest umieszczone zgłoszone przerwanie; zostaje ono przyjęte dopiero po zakończeniu programu obsługi (wykonaniu rozkazu RETI).
Jeżeli co najmniej jeden z warunków jest spełniony, to przyjęcie przerwania zostaje wstrzymane. W następnym cyklu maszynowym następuje ponowne sprawdzenie znaczników zgłoszeń.
Podczas cyklu przyjęcia przerwania są wykonywane następujące operacje:
1. ustawienie wewnętrznego przerzutnika poziomu przerwania,
2. wyzerowanie znacznika zgłoszenia przyjętego przerwania (poza TI i RI),
3. zapisanie na stosie zawartości licznika rozkazów PC,
4. wpisanie do licznika rozkazów adresu początku programu obsługi przerwania:
0003H - dla przerwania zewnętrznego INT0,
000BH - dla przerwania z licznika T0,
0013H - dla przerwania zewnętrznego INT1,
001BH - dla przerwania z licznika T0,
001BH - dla przerwania z portu szeregowego,
Cykl przyjęcia przerwania jest wykonywany w ciągu dwóch cykli maszynowych. Po jego zakończeniu procesor rozpoczyna realizację kolejnych cykli rozkazowych i wykonuje się program obsługi przerwania. Program obsługi przerwania musi być zakończony rozkazem powrotu z przerwania - RETI. Do chwili wykonania tego rozkazu nie zostanie przyjęte żadne zgłoszenie przerwania z poziomu równego lub niższego niż poziom obsługiwanego przerwania. Wykonanie rozkazu RETI powoduje wyzerowanie przerzutnika poziomu, ustawionego przy przyjęciu przerwania, oraz zdjęcie ze stosu adresu powrotu (2 bajty) i wpisanie go do licznika rozkazów.

Komentarze



link Prezentujemy listę instrukcji - mikroprocesor 8051 ( Intel 8051 ): ACALL addr11 Dzialanie: (PC)  (PC) + 2 (SP)  (SP) + 1 ((SP))  (PC7-0) (SP)  (SP) + 1 ((SP))  (PC15-8) (PC10-0)  addr11