Politechnika Lubelska
Wydział Elektryczny
Laboratorium techniki mikroprocesorowej
Ćwiczenie 7: System przerwań mikrokontrolera 8051.
Paweł Czerwiec
Tomasz Wójtowicz
Rafał Sidor
1. Przyjmowanie i obsługa przerwań.
Aby system przyjmował i obsługiwał przerwania decyduje odpowiednie ustawienie rejestru IE (interrupt enable)
IE7 |
IE6 |
IE5 |
IE4 |
IE3 |
IE2 |
IE1 |
IE0 |
EA |
- |
- |
ES |
ET1 |
EX1 |
ET0 |
EX0 |
EA - ogólne zezwolenie na przerwanie
ES - zezwolenie na przerwanie z transmisji szeregowej
ET1 - zezwolenie na przerwanie z timera 1
EX1 - zezwolenie na przerwanie z wejścia INT1
ET0 - zezwolenie na przerwanie z timera 0
EX0 - zezwolenie na przerwanie z wejścia INT0
Ustawienie odpowiedniej flagi na 1 zezwala na przyjęcie przerwania. Aby jakiekolwiek przerwanie mogło być odebrane, musi być włączone ogólne zezwolenie na przerwanie.
Aby system przejmował przerwania tylko od timera 1 należy ustawić flagę ET1 a wyzerować flagi ES, EX1, ET0, EX0.
2. Kolejność przyjmowania przerwań od timerów.
Testowany program reaguje tylko na przerwania od timerów. Timery uruchamiane są jednocześnie i od ustawienia stanów początkowych zliczają impulsy zegara wewnętrznego. W momencie przepełnienia się liczników następuje wysłanie przerwania. Czas upływający od startu timera do przerwania jest tym krótszy im większą wartość początkową ustawimy w timerze. Kolejność odbierania przerwań pokazana jest w poniższej tabelce.
Lp. |
stan pocz. T0 |
stan pocz. T1 |
kolejność |
1 |
0000 |
0000 |
T0;T1 |
2 |
0000 |
0001 |
T1;T0 |
3 |
0001 |
0000 |
T0;T1 |
Powyższa kolejność jest podyktowana priorytetem ważności przerwań. Kontroler 8051 w przypadku przyjęcia dwóch przerwań jednocześnie pierwsze obsługuje przerwanie, które ma wyższy priorytet. Dla timerów wyższy priorytet ma przerwanie od timera T0.
3. Kolejność przyjmowania przerwań od timerów i z linii INT1.
Do linii INT1 jest dołączony przetwornik a/c, którego czas przetwarzania wynosi ok. 150 s; po takim czasie przetwornik wysyła przerwanie na linię INT1. Dobierając odpowiednie wartości początkowe timerów możemy powodować, że przerwanie każdego z timerów mogą się pojawiać przed i po przerwaniu z linii INT1. Kolejność przyjmowania przerwań przez system przy różnych kombinacjach kolejności wysyłania przerwań przedstawiony jest w poniższej tabelce.
Lp. |
stan pocz. T0 |
stan pocz. T1 |
kolejność |
1 |
FFFF |
FFFF |
T0;T1;Y0 |
2 |
FF80 |
FF80 |
T0;T1;Y0 |
3 |
FF40 |
FF40 |
T0;Y0;T1 |
4 |
FF10 |
FF10 |
Y0;T0;T1 |
5 |
ZABLOKOWANY |
FF40 |
T1;Y0 |
Przy jednoczesnym przyjęciu przerwań z T0;T1;INT1 system najpierw obsłuży przerwanie z T0, potem z INT1, a na końcu z T1.
4. Programowe ustawianie priorytetów przerwań.
W systemie 8051 można ustawiać priorytety zmieniając stany bitów rejestru IP. Każde przerwanie ma w rejestrze IP swój bit priorytetu. Ustawienie odpowiednich bitów w rejestrze IP ustala dla każdego przerwania poziom priorytetu. Poziom 1 posiada wyższy priorytet niż poziom 0. Obsługa innego przerwania może być przerwana tylko przez przerwanie o wyższym priorytecie. Przerwanie o priorytecie niższym lub równym od obsługiwanego musi zaczekać na koniec obsługi. Poniżej jest przedstawiona kolejność obsługi przerwań od timerów T0 i T1 w zależności od ustawionych priorytetów.
Lp. |
Timer 0 |
Timer 1 |
Kolejność |
||
|
Stan pocz. |
Pr. |
Stan pocz. |
Pr. |
|
1 |
0000 |
0 |
0000 |
0 |
T0;T1 |
2 |
0000 |
0 |
0000 |
1 |
T1;T0 |
3 |
0000 |
0 |
0001 |
0 |
T1;T0 |
4 |
0000 |
1 |
0001 |
0 |
T0;T1 |
5 |
0000 |
1 |
0001 |
1 |
T1;T0 |
Priorytety obsługiwania przerwań zgłoszonych jednocześnie służą jedynie do rozstrzygnięcia, które z przerwań ma być obsłużone pierwsze, drugie, itd. w przypadku, gdy zostaną zgłoszone jednocześnie. Podstawę do przerwania obsługi innego przerwania stanowi jedynie wyższy priorytet ustawiony w rejestrze IP. Zatem obsługa dowolnego przerwania o priorytecie równym 0 może być przerwana jedynie przez przerwanie o priorytecie 1, a obsługa tego przerwania nie może być przerwana już przez żadne inne przerwanie.
5. Jednoczesne przyjmowanie przerwań.
Jednocześnie zgłaszane przerwania, jeśli nie zmienimy ich priorytetów, są obsługiwane w kolejności :
- Linia INT0,
- Timer T0,
- Linia INT1,
- Timer T1,
- Transmisja szeregowa.
Jest to kolejność, jaką system przyjmuje za domyślną.
Aby obsłużyć jednocześnie przychodzące przerwania w kolejności : T0; T1; INT1 należy ustawić priorytet T0 na 1 (bit rejestru IP - PT1=1), wtedy kolejno zostaną obsłużone przerwania jak wyżej. Nie jest natomiast możliwe ustawienie kolejności : T1; INT1; T0, bo jeżeli ustawimy priorytet T1 na 1 i INT1 na 1 system domyślnie, z dwóch przerwań o takim samym priorytecie, przyjmie domyślną kolejność obsługi przerwań - najpierw INT1, potem T1.