|
Serwis Edukacyjny nauczycieli w I-LO w Tarnowie
Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej
Tłumaczenie: mgr Jerzy Wałaszek |
©2026 mgr Jerzy Wałaszek
|
Przerwanie pozwala urządzeniom peryferyjnym zawiesić bieżące działanie mikroprocesora i zmusić go do wykonania procedury obsługi danego urządzenia. Ta procedura obsługi wymaga zwykle wymiany danych, statusu lub informacji kontrolnej pomiędzy mikroprocesorem a danym urządzeniem. Gdy procedura obsługi zostanie zakończona, mikroprocesor powraca do wykonywania przerwanego zadania.
Mikroprocesor Z80 posiada dwa wejścia przerwań, maskowane programowo wejście
INT oraz niemaskowane wejście NMI.
Przerwanie niemaskowane nie może być zablokowane przez programistę i jest
przyjmowane zawsze, gdy urządzenie peryferyjne go zażąda. Drugi rodzaj
przerwania, maskowane INT, jest zarezerwowane zwykle dla bardzo ważnych funkcji,
które programista możne selektywnie blokować lub odblokowywać. Dzięki temu
programista może zablokować to przerwanie w okresach, gdy jego program ma
ograniczenia czasowe nie pozwalające obsługiwać przerwań. W mikroprocesorze Z80
znajduje się przerzutnik flip-flop aktywacji obsługi przerwań
(IFF - Interrupt Flip-Flop), który jest ustawiany lub zerowany przez
programistę przy pomocy instrukcji EI
(Enable Interrupt - włączenie obsługi przerwań) i DI
(Disable Interrupt - wyłączenie obsługi przerwań). Gdy przerzutnik IFF
jest wyzerowany, mikroprocesor nie akceptuje przerwań INT.
| IFF1 | IFF2 | ||
| Wyłącza obsługę przerwań |
Tymczasowe miejsce przechowywania stanu IFF1 |
||
Stan przerzutnika IFF1 jest używany do blokowania obsługi przerwań, natomiast przerzutnik IFF2 wykorzystuje się jako tymczasowe miejsce pamiętania stanu przerzutnika IFF1.
Reset mikroprocesora wymusza wyzerowanie obu przerzutników IFF1 i IFF2, co
blokuje obsługę przerwań. Obsługę tę można w każdej chwili włączyć programowo
instrukcją EI. Gdy instrukcja EI jest w trakcie
wykonywania, to nie jest przyjmowane żadne aktywne przerwanie aż do momentu
wykonania następnej po
EI instrukcji. To opóźnienie jednej instrukcji jest konieczne, gdy
następną instrukcją jest instrukcja powrotu. Przerwania nie będą obsługiwane aż
do zakończenia wykonywania instrukcji powrotu. Instrukcja EI
ustawia oba przerzutniki IFF1 i IFF2 na stan włączony. Gdy mikroprocesor
przyjmuje przerwanie maskowane, oba IFF1 i IFF2 zostają automatycznie
wyzerowane, co blokuje obsługę dalszych przerwań aż programista wyda nową
instrukcję EI. Zwróć uwagę, iż we wszystkich poprzednich
przypadkach IFF1 i IFF2 są zawsze równe.
Przeznaczeniem IFF2 jest przechowanie stanu IFF1, gdy pojawi się przerwanie
niemaskowane. Gdy zostanie ono zaakceptowane, IFF1 resetuje się w celu
zapobieżenia przyjmowaniu dalszych przerwań aż do ponownego włączenia ich
obsługi przez programistę. W ten sposób po przyjęciu przerwania niemaskowanego
przerwania maskowane są zablokowane, lecz poprzedni stan IFF1 został
zapamiętany, zatem kompletny stan mikroprocesora sprzed przerwania
niemaskowanego można w każdej chwili przywrócić. Przy instrukcjach LD A,I
(Load Register A with Register I - ładuj
akumulator A rejestrem przerwań I) oraz LD A,R
(Load Register A with Register R - ładuj akumulator A
rejestrem odświeżania R) stan przerzutnika IFF2 zostaje skopiowany do
znacznika parzystości, gdzie można go testować lub zapamiętywać.
Drugą metodą odtwarzania stanu IFF1 jest wykonanie instrukcji
RETN (Return From Non-Mascable Interrupt
- powróć z przerwania niemaskowanego). Instrukcja ta oznacza, iż
procedura obsługi przerwania niemaskowanego została zakończona i zawartość IFF2
jest teraz kopiowana z powrotem do IFF1, aby stan tego przerzutnika został
odtworzony automatycznie z okresu przed przyjęciem przerwania niemaskowanego.
Tablica 1 jest podsumowaniem efektów różnych instrukcji na te dwa przerzutniki flip-flop.
| Operacja | IFF1 | IFF2 | Komentarz |
| Reset mikroprocesora | 0 | 0 | Wyłączona obsługa przerwań maskowanych INT |
Wykonanie instrukcji DI |
0 | 0 | Wyłączona obsługa przerwań maskowanych INT |
Wykonanie instrukcji EI |
1 | 1 | W\łączona obsługa przerwań maskowanych INT |
Wykonanie instrukcji LD A,I |
* | * | IFF2 → Znacznik Parzystości |
Wykonanie instrukcji LD A,R |
* | * | IFF2 → Znacznik Parzystości |
| Przyjęcie NMI | 0 | * | Wyłączona obsługa przerwań maskowanych INT |
Wykonanie instrukcji RETN |
IFF2 | * | IFF2 → IFF1 oznacza zakończenie procedury obsługi przerwania niemaskowanego |
Mikroprocesor zawsze akceptuje przerwanie niemaskowane. Gdy wystąpi,
mikroprocesor ignoruje następną, pobraną już instrukcję i zamiast niej wykonuje
restart od adresu 0066H. Mikroprocesor działa tak, jakby wykonywał
instrukcję restartu, lecz do adresu innego, niż jeden z ośmiu programowych
adresów restartu. Restart jest jedynie wywołaniem podprogramu leżącego w
specyficznym obszarze strony 0 w pamięci.
Obsługa przerwania maskowanego przez mikroprocesor może być zaprogramowana do wykonywania w jednym z trzech możliwych trybów.
Ten tryb przypomina reakcję na przerwania mikroprocesora 8080A. W trybie 0 urządzenie przerywające może umieścić na magistrali danych dowolną instrukcję a mikroprocesor ją wykona. Zatem urządzenie przerywające dostarcza następnej instrukcji do wykonania. Często jest to instrukcja restartu, gdyż urządzenie przerywające musi w takim przypadku dostarczyć tylko jednobajtową instrukcję. Jednakże może zostać wykonana dowolna inna instrukcja, przykładowo 3-bajtowy skok do jakiejkolwiek lokacji w pamięci.
Liczba cykli zegarowych niezbędnych do wykonania tej instrukcji jest o dwa większa od normalnej liczby cykli dla tej instrukcji. Dzieje się tak z tego powodu, iż mikroprocesor automatycznie dodaje dwa stany oczekiwania do cyklu odpowiedzi na przerwanie, aby udostępnić wystarczająco dużo czasu na implementację sterowania zewnętrzną kolejką przerwań priorytetowych. Na rys.9 i rys.10 przedstawione są szczegółowe przebiegi czasowe przy odpowiedzi na przerwanie. Po zastosowaniu RESET mikroprocesor automatycznie wchodzi w Tryb 0.
Ten tryb jest wybierany przez programistę, mikroprocesor reaguje na
przerwanie przez wykonanie restartu od adresu 0038H. Zatem reakcja
jest identyczna jak reakcja na przerwanie niemaskowane, z tą różnicą, iż adresem
wywoływanym jest 0038H zamiast 0066H. Liczba cykli
wymaganych do wykonania instrukcji restartu jest o dwa większa od normalnej z
powodu dodanych dwóch stanów oczekiwania.
Ten tryb jest najmocniejszym trybem reakcji na przerwanie. Za pomocą pojedynczego bajtu od użytkownika może zostać wykonane pośrednie wywołanie do dowolnego miejsca w pamięci.
W tym trybie programista tworzy tablicę 16-bitowych adresów startowych dla
każdej procedury obsługi przerwania. Tablica ta może być umieszczona w
dowolnym miejscu w pamięci. Gdy przerwanie zostanie przyjęte, musi zostać
utworzony 16-bitowy wskaźnik w celu pobrania z tej tablicy adresu startowego
pożądanej procedury obsługi przerwania. Górne osiem bitów tego wskaźnika tworzy
zawartość rejestru I. Rejestr I musi zostać załadowany odpowiednią wartością
przez programistę, np. instrukcją LD I,AI, aby był zainicjowany na 0. Dolne
osiem bitów wskaźnika musi przekazać urządzenie przerywające. Od urządzenia tego
wymagane jest tylko siedem bitów, ponieważ najmniej znaczący bit będzie zawsze
ustawiony na zero. Potrzebne dlatego, iż wskaźnik zostanie użyty do pobrania
dwóch sąsiednich bajtów, aby utworzyły kompletny 16-bitowy adres procedury
obsługującej to przerwanie, a adresy muszą zawsze być umieszczane w pamięci na
adresach parzystych.
Pierwszy bajt tablicy jest najmniej znaczącym (dolną połówką adresu). Programista musi wypełnić tę tablicę poprawnymi adresami przed przyjęciem jakiegokolwiek przerwania.
Programista może zmieniać zawartość tej tablicy umieszczając ją w RAM, co również pozwala na obsługiwanie tych samych urządzeń zewnętrznych przez różne procedury.
Gdy urządzenie przerywające dostarczy dolną część wskaźnika, mikroprocesor automatycznie umieszcza na stosie licznik programu, pobiera adres startowy z tablicy i wykonuje skok pod ten adres. Ten tryb reakcji wymaga 19 okresów zegara (siedem do pobrania dolnych 8 bitów od urządzenia przerywającego, sześć do zapisu licznika programu i sześciu do pobrania adresu skoku).
Urządzenia peryferyjne systemu Z80 posiadają łańcuchową strukturę priorytetów przerwań, która automatycznie przekazuje mikroprocesorowi zaprogramowany wektor podczas potwierdzenia przyjęcia obsługi przerwania. Więcej informacji na ten temat znajdziesz w Instrukcji Użytkownika dla Urządzeń I/O mikroprocesora Z80.
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2026 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.