1. Przerwania Z-80
Układ Z80 CTC jako kontroler przerwań.
Układy CTC (Counter Timer Circuit) to po polsku układy czasowo-licznikowe. Tak naprawdę to poza opisem nożek nie wiem za bardzo, co o nim pisać. Koń jaki jest każdy widzi. Można toto włączyć do systemu z Z80 i będzie generowało to przerwania w cyklu czasowym, jaki sobie wymarzymy. Niemniej jednak sposób programowania tego badziewia jest mi - przepraszam - obcy. Nie znalazłem materiałów o nim, a książka o Z80 opisuje CPU, DMA, PIO i SIO, ale nie CTC. Jeżeli ktoś mi jest w stanie udostępnić materiały, to w ciągu 7200 sekund generuję upgrade i rozsyłam zainteresowanym.
Z innej beczki, czyli działka, która jest mi troszkę bliższa. Jeżeli ktoś bardzo jest ciekaw, to istnieje jeszcze układ 6532. Jest to układ z rodziny 65XX, czyli 6502 i banda (Niech żyje Atari XL/XE!!! Precz z C64!! Czy ktoś to jeszcze pamięta??). 6532 jest to układ CTC dla 6502. Oprócz funkcji typowych dla CTC posiada jeszcze 16 kanałów i 2 porty I/O oraz 128×8 bit RAM.
2. Tryby pracy 8255
8255
Układ 8255 jest to programowalny element wejścia-wyjścia równoległego. Z powodu jego programowalności zakres wykorzystania tego elementu jest niezwykle szeroki. Układ posiada trzy porty A,B i C które mogą pracować zarówno jako wejścia i wyjścia, przy czym port C został podzielony na dwie części (kęsy - jak piszą w książce Jarka). Bardziej znaczący kęs portu C został przyporządkowany do portu A, natomiast mniej znaczący kęs do portu B, co umożliwia przesyłanie np. sygnałów sterujących do urządzeń zewnętrznych lub ich odbieranie.
Opis końcówek układu:
D0 - D7 - końcówki trójstanowej dwukierunkowej magistrali danych
RESET - wejście zerujące rejestry
CS - wejście wyboru
RD - końcówka czytania z elementu
WR - końcówka pisania do elementu
A0, A1 - wybór portu lub rejestru sterującego
PA0 - PA7 - wejście/wyjście portu A
PB0 - PB7 - wejście/wyjście portu B
PC0 - PC7 - wejście/wyjście portu C
Vcc (26) - napięcie zasilające +5V
GND (7) - masa
Programowanie układu 8255 odbywa się za pomocą 8-bitowego rejestru sterującego, aby do rejestru można było zapisać słowo sterujące, należy na wejściach adresowych układu podać adres 11. Pod adresem 00 znajduje się port A, 01 port B a pod adresem 10 port C. Znaczenie bitów w słowie sterującym jest następujące:
D7 - musi być zawsze równy 1
D6,D5 - wybór trybu pracy portu A: 00 - tryb 0, 01 - tryb1, 10 - tryb 2
D4 - rodzaj końcówek portu A: 0 - wyjście, 1 - wejście
D3 - rodzaj końcówek bramy C, kęs bardziej znaczący: 0 - wyjście, 1 - wejście
D2 - wybór trybu pracy portu B: 0 - tryb 0, 1 - tryb 1
D1 - rodzaj końcówek portu B: 0 - wyjście, 1 - wejście
D0 - rodzaj końcówek portu C, kęs mniej znaczący: 0 - wyjście, 1 - wejście
Port A układy 8255 może pracować w trzech trybach, natomiast port B w dwóch trybach, a oto one, ladys and gentlemans:
Tryb 0: Jest on przeznaczony do realizacji bezwarunkowych operacji wejścia-wyjścia. Dostępne w nim są dwie 8-bitowe i dwie 4-bitowe bramy pracujące jako wejścia lub jako wyjścia. Wyjścia z rejestrami zatrzaskowymi wejścia bez.
Tryb 1: Przeznaczony do realizacji operacji wejścia-wyjścia z przerwaniem przy jednym kierunku przesyłania danych. Potrzebne do tego celu sygnały żądania przerwania, statusu i strobu są wyprowadzane i wprowadzane przez port C. Dostępne są dwie grupy linii po 8 bitów do przesyłania danych i 3 bity do przekazywania sygnałów sterujących.
Każdą z tych grup można zaprogramować jako wejście lub wyjście, przy czym zarówno wejścia, jak i wyjścia posiadają rejestry zatrzaskowe. Istnieje ponadto możliwość zaprogramowania jako wejścia lub wyjścia tych linii portu C, które nie służą do przekazywania sygnałów sterujących. Na rysunku przedstawione są sygnały przekazywane przez port C, gdy porty A i B pracują jako wyjścia lub jako wejścia. Sygnał INTR oznacza żądanie przerwania przez dany port. Sygnał IBF oznacza zapełnienie bufora wejściowego danego portu. OBF zapełnienie bufora wyjściowego danego portu. Sygnał STB = 0 przepisuje dane do wejściowego rejestru zatrzaskowego. Sygnał ACK = 0 oznacza przyjęcie przez element zewnętrzny danych z danego portu.
Tryb 2: Jest on przeznaczony od operacji wejścia-wyjścia z przerwaniem poprzez port A (tylko i wyłącznie port A, nie będzie to żaden inny port a tylko port A, nie będzie to port B, jak i nie będzie to port C, ale port A ...), przy dwóch kierunkach przesyłania danych. Udostępnia on wymianę danych z elementem zewnętrznym za pomocą jednego 8-bitowego portu, natomiast sygnały sterujące są wyprowadzane przez port C. Sygnał INTR oznacza żądanie przerwania przez port. STB powoduje wpisanie do rejestru wejściowego danych, natomiast sygnał ACK oznacza przejęcie przez element zewnętrzny danych z portu. Sygnały IBF i OBF oznaczają odpowiednio zapełnienie bufora wejściowego i wyjściowego.
Ze względu na programowalność układ 8255 ma bardzo szerokie zastosowanie, przede wszystkim jako element I/O w dużych systemach mikroprocesorowych.
3. Tryby pracy PIO
Układ Z80 PIO - budowa, działanie i zastosowania.
O ile temat nr 16 został porzucony, to problem nr 31 omówiły dwie osoby:
PIO by kol. Grzegorz
Z80 PIO jest programowalnym układem we-wy, w którego skład wchodzą dwa równoległe 8-bitowe porty PA i PB. Układ może pracować w czterech trybach pracy i ma możliwość dołączenia do łańcucha przerwań procesora Z80. Port PB ma zwiększoną obciążalność linii, a sygnały wszystkich linii odpowiadają poziomom TTL. Z80 PIO może generować przerwania na skutek ściśle określonych stanów na wejściach portów PA i PB.
Układ logiczny każdego portu składa się z sześciu rejestrów:
8-bitowego rejestru wejściowego danych
8-bitowego rejestru wyjściowego danych
2-bitowego rejestru trybu pracy
8-bitowego rejestru maski
8-bitowego rejestru wyboru wejść i wyjść
8-bitowego rejestru wektora przerwań
2-bitowego rejestru kontroli maskowania
Do 2-bitowego rejestru trybu pracy wpisywana jest informacja w celu ustalenia trybu pracy portu (wejściowy, wyjściowy, dwukierunkowy i bitowy). Wymiana danych między UZ a CPU odbywa się przy pomocy rejestrów danych. Dane mogą być odczytane przez mikroprocesor w dowolnym momencie. Sterowaniem transmisją danych pomiędzy UZ a PIO zajmują się specjalne linie sterujące przyporządkowane do każdego z portów STB i RDY. Rejestry maski i wyboru we-wy używane są tylko w trybie bitowym. W tym trybie każda z linii portu PA może być zaprogramowana jako wyjściowa lub wejściowa. Rejestr maski służy do określenia, które z linii portu mogą generować przerwania. Rejestr kontroli maskowania określa jaki stan (niski lub wysoki) ma spowodować wygenerowanie przerwania oraz czy ma ono nastąpić w wyniku zmian na jednej czy na wszystkich niezamaskowanych liniach.
Opis wyprowadzeń układu:
D0 - D7 - trójstanowa dwukierunkowa magistrala danych
B/A SE - wejście wyboru portu
C/D SE - wejście wyboru czy na we. danych znajduje się kod ster. czy dana
CE - wejście wyboru układu
CLK - wejście zegara
M1 - wejście sygnału pierwszego cyklu zegarowego CPU
IORQ - wejście sygnału zapisu/odczytu z układu I/O
RD - wejście sygnału czytania z pamięci lub układu I/O
IEI - wejście zezwolenia na generację przerwania
IEO - wyjście zezwolenia na generację przerwania
INT - wyjście sygnału zgłoszenia przerwania
A0 - A7 - linie portu PA
ASTB - wejście sygnału strobu dla portu PA
ARDY - wyjście sygnału gotowości portu PA
B0 - B7 - linie portu PB
BSTB - tak jak wyżej
BRDY - tak jak wyżej
Układ Z80 PIO jest zerowany automatycznie po włączeniu zasilania. Ze względu na ograniczoną liczbę wyprowadzeń układu Z80 PIO nie ma standardowego wejścia RESET. Zerowanie układu PIO można uzyskać w wyniku pojawienia się sygnału niskiego na wejściu M1 przy jednoczesnym pozostawieniu wejść RD i IORQ w stanie wysokim. Układ PIO został zaprojektowany do współpracy z Z80 CPU w 2 trybie przerwań. Wektor przerwania wysyłany jest na magistralę danych systemu przez układ PIO po przyjęciu przerwania przez CPU pod warunkiem, że sygnał IEI układu znajduje się w stanie wysokim. Zerowanie układu PIO nie zmienia rejestrów wektorów przerwań. Port PA układu Z80 PIO może pracować w jednym z czterech trybów pracy wyjściowym, wejściowym dwukierunkowym i bitowym. Port PB nie może pracować w trybie dwukierunkowym. Słowo ustawiające tryb pracy na czterech najmłodszych bitach powinno posiadać `1'. Bity piąty i szósty są ignorowane. Na bitach najstarszych wybierany jest tryb pracy.
D7 D6 - 00 - tryb 0 wyjście
01 - tryb 1 wejście
10 - tryb 2 dwukierunkowy
11 - tryb 3 bitowy
Tryb 0, wyjście z potwierdzeniem. Wybór trybu 0 powoduje, że dane wpisane do rejestru wyjściowego pojawiają się na magistrali portu. Wpisanie danych do rejestru powoduje ustawienie wyjścia RDY w stan wysoki. Sygnał RDY pozostaje w tym stanie, aż na wejściu STB pojawi się stan niski. Narastające zbocze sygnału STB powoduje wysłanie sygnału zgłoszenia przerwania (jeśli system przerwań Z80 PIO jest odblokowany) i zmianę sygnału RDY na niski.
Tryb 1, wejście z potwierdzeniem. Wczytanie danych z rejestru wejściowego portu powoduje zmianę stanu wyjścia RDY na wysoki. Urządzenie peryferyjne może wtedy wpisać sygnałem STB dane do rejestru wejściowego portu.
Tryb 2, transmisja dwukierunkowa. Umożliwia zarówno wczytanie jak i wysłanie danych z potwierdzeniem. W trybie tym może pracować tylko port PA, który wykorzystuje linie ASTB, ARDY w operacjach wyjścia, a linie BSTB i BRDY w operacjach wejścia.
Tryb 3, tryb bitowy. Jeżeli został wybrany tryb bitowy pracy portu, to następne słowo sterujące wysłane do porty określa, które z bitów porty mają być wejściami, a które wyjściami. Ustalenie danej linii jako wyjściowej wymaga wpisania jedynki, a wejściowej zera na odpowiednim bicie słowa. Linie STB i RDY nie są wykorzystywane w tym trybie pracy.
Ustalenie sposobu generacji przerwań dokonuje się wpisując do portu słowa sterującego zawierającego na najmłodszych bitach `0111'. Bit D4 określa czy będzie przesłana maska przerwań (`1'). D5 określa jaki stan linii ma spowodować wygenerowanie przerwania (1 - stan wysoki, 0 - stan niski). Jeżeli D6 jest `1' to przerwanie jest generowane tylko w przypadku gdy wszystkie niezamaskowane linie osiągną stan dany bitem D5. `0' oznacza wygenerowanie przerwania jeśli którakolwiek z linii osiągnie dany stan. Bity D6, D5 i D4 wykorzystywane są głownie w 3 trybie pracy. Bit D7 blokuje przerwania wystawiane przez PIO (D7 = 0 - blokada przerwań). Jeśli bit D4 został ustawiony na `1' to kolejne słowo sterujące powinno zawierać maskę przerwań. Linie które powinny generować przerwania muszą mieć ustawione w rejestrze maski 0.
PIO by kol. Marcin - uzupełnienie
Schemat blokowy układu Z80-PIO
4. Układ CTC jako generator przerwań (jak to działa)
Układ Z80 CTC - budowa, działanie i zastosowanie.
W skład modułu Z80-CTC wchodzą 4 niezależne liczniki programowalne wraz z układami sterującymi. Każdy z liczników, w zależności od wstępnego zaprogramowania, może pracować jako licznik odejmujący, liczący impulsy wprowadzane z zewnątrz (np. zegar zewnętrzny, zliczanie zdarzeń) lub układ czasowy, będący licznikiem odejmującym liczącym impulsy zegara systemowego, dzięki czemu istnieje możliwość dokładnego odmierzenia odcinków czasu. Moduł ma następujące właściwości:
Każdy z liczników generuje przerwanie, gdy osiągnie stan zerowy (jeżeli był odpowiednio zaprogramowany).
Priorytety przerwań są ustawiane na zasadzie łańcucha przerwań zarówno między modułem CTC i innymi modułami, jak i wewnętrznie między licznikami (licznik 0 ma najwyższy priorytet). Moduł generuje dla każdego układu licznikowego wektor przerwania.
Stan wszystkich liczników można czytać w dowolnej chwili.
Wejściowa częstotliwość każdego z liczników zaprogramowanych jako ukł. czasowy jest wstępnie dzielona przez 16 lub 256.
Wszystkie wyjścia i wejścia są kompatybilne z elementami TTL.
Schemat blokowy układu Z80-CTC
Sygnały sterujące: CS1, CS0, M1, IORQ, RD, RS
SC0, SC1 - dekodowanie numeru układu licznikowego
CLK/TRG - wejście typu zegara zewnętrznego lub układu bramkującego dla trybu pracy jako układu czasowego
ZC/TO - przyjmuje wartość 1 gdy licznik osiągnie stan zerowy
Schemat blokowy podukładu zliczającego
Słowo sterujące ładowane z jednostki centralnej do rej. sterującego definiuje tryb i warunki pracy układu. Stan początkowy licznika lub stała czasowa są ładowane do rej. stałej. Licznik odejmujący jest ładowany do rej stałej pod kontrolą programu lub każdorazowo po osiągnięciu stanu zerowego. Zawartość licznika jest zmniejszana pod wpływem impulsu z wyjścia dzielnika dla trybu pracy jako ukł. czasowy lub z wejścia CLK/TRG dla trybu pracy jako licznik.
Postacie słów sterujących:
a) Ładowanie wektora przerwań:
V7 |
V6 |
V5 |
V4 |
V3 |
x |
x |
0 |
V7..V3 wspólna część wektora dla wszystkich kanałów
b) Wybór trybu pracy
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
1 |
D7: 0 - blokada przerwań, 1 - przerwania dozwolone.
D6: 0 - tryb pracy jako ukł. czasowy, 1 - tryb pracy jako licznik
D5: 0 - dzielenie częstotliwości przez 16 (dot. tylko ukł. czasowego),
1 - dzielenie częstotliwości przez 256 (dot. tylko ukł. czasowego)
D4: 0 - opadające zbocze na wejściu CLK/TRG inicjuje pracę dla trybu pracy jako ukł. czasowy lub zmniejsza zawartość licznika dla trybu pracy jako licznik, 1 - j.w., lecz zbocze narastające
D3: (tylko dla trybu pracy jako układ czasowy) = 0 - jeśli D2 = 0, układ w trybie pracy jako ukł. czasowy rozpoczyna operację od następnego cyklu maszynowego; jeśli D2 = 1 układ w trybie pracy jako układ czasowy rozpoczyna operację od pierwszego cyklu maszynowego po załadowaniu stałej.
= 1 - jeśli D2=0, układ w trybie pracy jako układ czasowy rozpoczyna operację od tego cyklu maszynowego, w którym na wejściu CLK/TRG odbyła się właściwa zmiana sygnału; jeśli D2 = 1, j.w., lecz po załadowaniu stałej.
D2: 0 - nie będzie następnego słowa sterującego określającego wartość stałej
1 - następnym słowem sterującym będzie wartość stałej. Jeżeli odbędzie się to podczas zliczania, to aktualne zliczanie będzie anulowane
D1: 0 - liczenie ciągłe, 1 - zatrzymanie liczenia do czasu załadowania nowej stałej. ZC/TO = 0.
D0: 1 - oznacza, że słowo sterujące dotyczy zdefiniowania trybu pracy.
Słowa sterujące ładuje się do rej. sterującego właściwego układu licznikowego.
Komunikacja mikroprocesorów z otoczeniem - przesył za pomocą przerwań, przykłady.
Metoda ta umożliwia przerwanie programu głównego i przejście do podprogramu obsługi układu wejścia/wyjścia praktycznie natychmiast po wygenerowaniu sygnału żądania obsługi (czyli sygnału żądania przerwania programu głównego) IREQ lub INT przez urządzenie zewnętrzne. W większości rozwiązań sygnał żądania przerwania jest traktowany przez mikroprocesor jako jeden z wejściowych sygnałów sterujących. Mikroprocesor sprawdza sygnał żądania przerwania pod koniec każdego cyklu rozkazowego wykonywanego programu. Po wykryciu przerwania zawartość licznika rozkazów, rejestru znaczników, akumulatora, ewentualnie innych rejestrów jest przesyłana na czas obsługi przerwania do pamięci (na stos) po to, aby po obsłudze przerwania można było odtworzyć stan mikroprocesora z przed przerwania i bez zakłóceń kontynuować program główny. W większości mikroprocesorów przyjęcie sygnału żądania przerwania jest potwierdzane sygnałem IACK. Przy obsłudze urządzeń zewnętrznych za pomocą przerwań należy zapewnić:
Zapamiętanie stanu procesora występującego w chwili przyjęcia sygnału żądania przerwania;
Identyfikację źródła sygnału przerwania (sygnały żądania przerwania mogą być generowane przez wiele urządzeń zewnętrznych) niezbędną do przekazania sterowania obsługi właściwemu podprogramowi;
Określenie priorytetu przerwań w przypadku równoczesnego pojawienia się większej liczby sygnałów żądania przerwania;
Ustalenie procedury postępowania dla przypadków, w których podczas obsługi przerwania zgłaszają się sygnały żądania przerwania od innych urządzeń zewnętrznych;
Odtworzenie stanu procesora i powrót do realizacji przerwanego programu głównego.
Zadania te rozwiązuje się programowo lub sprzętowo lub techniką mieszaną. Należy zdać sobie sprawę z tego, że rozwiązania sprzętowe są szybsze, ale też kosztowniejsze od rozwiązań programowych. Stan mikroprocesora określany najczęściej przez stan licznika rozkazów, rejestrów znaczników, akumulator i ewentualnie przez zawartość innych rejestrów roboczych jest zapamiętywany z reguły na stosie. Zazwyczaj programowo ustawia się tylko początkową zawartość wskaźnika stosu, a pozostałe zmiany wynikające z operacji zapisu danych do stosu lub odczytu danych ze stosu odbywają się automatycznie (sprzętowo).
Identyfikacja źródła przerwania może być rozwiązana programowo lub sprzętowo. W rozwiązaniu programowym sygnały żądania przerwania z urządzeń zewnętrznych są równoległe wprowadzenie do rejestru przerwań. Mikroprocesor po przyjęciu sygnału żądania przerwania powoduje przejście do podprogramu umieszczonego w określonym stałym obszarze pamięci. Początkowe rozkazy tego podprogramu zapewniają przesłanie do stosu stanu procesora niezbędnego do kontynuowania programu głównego. Kolejne rozkazy umożliwiają sprawdzenie zawartości rejestru przerwań i określenie na jego podstawie źródła przerwania. Po zidentyfikowaniu przyczyny przerwania następuje przejście do odpowiedniego podprogramu obsługi tego przerwania.
Zadanie ustalenia kolejności obsługi urządzeń zewnętrznych generujących sygnały żądania przerwania rozwiązuje się przez nadanie tym urządzeniom odpowiednich priorytetów. Można to realizować zarówno programowo jak i sprzętowo. W rozwiązaniu programowym mikroprocesor po sprawdzeniu rejestru przerwań przekazuje sterowanie do podprogramu odpowiadającego źródłu przerwania o najwyższym priorytecie.
Przy sprzętowej realizacji systemu przerwań każde urządzenie zewnętrzne ma odpowiadający mu podprogram obsługi umieszczony w określonym obszarze pamięci. Adres komórki pamięci zawierającej pierwszy rozkaz podprogramu obsługi przerwania tworzony jest na podstawie wektora adresu przerwania. Identyfikacja źródła przerwania odbywa się w ten sposób, że mikroprocesor po przyjęciu sygnału żądania przerwania generuje sygnał potwierdzenia przerwania IACK. W odpowiedzi na ten sygnał źródło przerwania wysyła na magistralę danych odpowiadający mu wektor adresu przerwania. Pobrany przez mikroprocesor (lub wyznaczony) wektor adresu przerwania jednoznacznie identyfikuje źródło przerwania i umożliwia przejście do odpowiadającego mu podprogramu obsługi. Ustalenie priorytetu przerwań jest w tym przypadku również rozwiązanie sprzętowo przez zastosowanie tzw. układu ustalania priorytetu przerwań. Układ ten może być zbudowany przy użyciu kodera priorytetowego lub tzw. łańcucha przerwań (ang. Daisy chain).
W przypadku łańcucha przerwań najwyższy priorytet ma urządzenie umieszczone najbliżej mikroprocesora. Wygenerowany przez mikroprocesor sygnał potwierdzenia przerwania dochodzi do pierwszego w łańcuchu przerwań urządzenia generującego sygnał żądania przerwania. Urządzenie to w odpowiedzi wysyła na magistralę danych odpowiadający mu wektor adresu przerwania, który umożliwia przekazanie sterowania do właściwego podprogramu.
Układ przerwań może być zorganizowany jako jedno- lub wielopoziomowy. W jednopoziomowej strukturze przerwań nie ma możliwości zawieszenia realizowanego podprogramu przez sygnał żądania przerwania pochodzący od urządzenia o wyższym priorytecie. Dopiero po zakończeniu zadania wynikającego z aktualnie obsługiwanego przerwania następuje przyjęcie kolejnego przerwania o najwyższym priorytecie spośród wszystkich zgłoszeń. Odbywa się to w ten sposób, że po przyjęciu i potwierdzeniu tego faktu odpowiednim sygnałem następuje zablokowanie wejścia przerwania na czas obsługi. Mikroprocesor ignoruje ewentualne kolejne zgłoszenie do chwili ponownego odblokowania wejścia przerwania. Podprogram obsługi kończy się rozkazami umożliwiającymi powrót do przerwanego programu i odblokowanie wejścia przerwań. W wielopoziomowej strukturze przerwań urządzenie zewnętrzne o wyższym priorytecie ma możliwość przerwania realizowanego podprogramu obsługi urządzenia zewnętrznego o niższym priorytecie. Programowa realizacja tego zadania polega na tym, że mikroprocesor (przy odblokowanym wejściu przerwań), po pojawieniu się sygnału przerwania, przekazuje sterowanie do podprogramu umożliwiającego przechowanie stanu procesora i identyfikację źródła przerwania przez zbadanie zawartości rejestru stanu. Następnie następuje programowe porównanie priorytetu zidentyfikowanego źródła przerwania z priorytetem programu (lub podprogramu) przerwanego. Jeżeli priorytet ten jest wyższy, to następuje skok do podprogramu obsługi przyjętego przerwania, w przeciwnym razie następuje odtworzenie stanu procesora i kontynuacja przerwanego programu.
Niektóre mikroprocesory mają więcej niż jedno wejście przerwań (np. Z80). Niektóre z tych wejść są niemaskowalne, tzn. nie można ich zablokować. Pojawienie się sygnału żądania przerwania na takim wejściu powoduje każdorazowo natychmiastowe przerwanie wykonywanego programu i przejście do odpowiedniego podprogramu obsługi. W systemach sterowania czasu rzeczywistego wejściom tym mogą być przyporządkowane sygnały żądania przerwania spowodowane ważnymi pod względem wymagań technologicznych sterowanego procsu zdarzeniami natychmiastowej interwencji. Wejścia niemaskowalne są również często używane do obsługi przerwania spowodowanego zanikiem napięć zasilających.
Organizacja systemów przerwań w produkowanych mikroprocesorach jest bardzo zróżnicowana i ma istotny wpływ na możliwości ich zastosowań. Mikroprocesory o wysoko zorganizowanych systemach przerwań są bardzo przydatne do sterowania.
5. Jak zorganizowana jest pamięć w jednoukładowym .51
Mikrokomputery jednoukładowe MCS-51.
FAQs about MCS-51, czyli głupie pytania o MCS-51:
Q: Jak to badziewie wygląda i jakie ma wyprowadzenia?
A: Wygląda jak czarny robaczek z 40 nóżkami, prostokątny lub kwadratowy, może być z szybką, wtedy jest z wewnętrznym EPROM-em. Oto rysunek:
Q: Może trochę konkretów, o tym co w środku?
A: OK., już podaję:
Jednostka centralna - 8-bitowa, 111 rozkazów (49 jedno-, 45 dwu- i 17 trzybajtowych), wszystkie wykonywane w czasie jednego lub dwóch cykli maszynowych, wyjątek: dzielenie i mnożenie - cztery cykle maszynowe.
ALU - dodawanie i odejmowanie z przeniesieniem (pożyczką) i bez, mnożenie, dzielenie, in- i dekrementacja, korekcja dziesiętna, operacje logiczne (AND, OR, EXOR, NOT, SHL i SHR). Akumulator 8-bitowy. Słowo stanu programu PSW:
CY |
AC |
F0 |
RS1 |
RS0 |
OV |
— |
P |
CY - Carry, AC - Auxiliary Carry, F0 - znacznik programowy, RS0, RS1 - wskaźniki zbioru rejestrów (od 00 do 11), OV - Overflow, P - Parity.
Pamięć programu - max. 64KB, podzielona na strony po 2KB. Dzieli się na wewnętrzną i zewnętrzną. Podział pamięci programu jest niezauważalny od strony programowej. Pamięć ta adresowana jest przez licznik rozkazów PC. Istnieją wyróżnione miejsca w pamięci:
00h - tu zaczyna się wykonywanie programu po resecie,
03h - początek podprogramu obsługi przerwania INT0
0Bh - początek podprogramu obsługi przerwania z licznika T0 CTC
13h - początek podprogramu obsługi przerwania INT1
1Bh - początek podprogramu obsługi przerwania z licznika T1 CTC
23h - początek podprogramu obsługi przerwania portu szeregowego
2Bh - początek podprogramu obsługi przerwania z licznika T2 CTC (tylko 8052)
Pamięć danych - jak zwykle: wewnętrzna (128B) i zewnętrzna (do 64KB). Mapa pamięci wewn.:
|
Adres |
WEWNĘTRZNA PAMIĘĆ DANYCH |
|
|
|
Rejestry specjalne |
FFh |
SFR |
|
|
|
|
|
|
|
|
|
|
80h |
|
|
|
|
Obszar
pamięci
użytkowej |
7Fh |
|
|
|
|
|
|
|
|
|
|
|
30h |
|
|
|
|
|
2Fh |
|
|
Obszar adresowany bitowo |
|
|
|
|
|
|
|
|
20h |
|
|
|
|
|
1Fh |
R7 - R0 |
|
Zbiór 3 |
Rejestry użytkowe |
|
|
|
|
|
|
|
18h |
|
|
|
|
|
17h |
R7 - R0 |
|
Zbiór 2 |
|
|
|
|
|
|
|
|
10h |
|
|
|
|
|
0Fh |
R7 - R0 |
|
Zbiór 1 |
|
|
|
|
|
|
|
|
08h |
|
|
|
|
|
07h |
R7 - R0 |
|
Zbiór 0 |
|
|
|
|
|
|
|
|
00h |
|
|
|
|
SFR to zbiór rejestrów specjalnych - akumulator, słowa stanu, rejestry i maski przerwań, rejestr portu szeregowego, rejestry liczników, wskaźnik stosu i wiele, wiele innych. Jak widać są również cztery zbiory rejestrów dla programisty. R0 i R1 z aktywnego zbioru służą do adresowania pośredniego pamięci. Jest również obszar adresowany bitowo. Po co? Nie wiem, może dla umieszczania tam flag dla programu? Stos umieszcza się w obszarze pamięci użytkowej. Do adresowania pamięci danych wewnętrznej i zewnętrznej służą (jak w 8048) dwa różne rozkazy, odpowiednio: MOV i MOVX.
Zegar - stabilizowany zewnętrznym oscylatorem kwarcowym o częstotliwości max. 12 MHz.
Układ czasowo-licznikowy - dwa (w 8052 trzy) 16-bitowe liczniki, które mogą zliczać wewnętrzne impulsy zegarowe lub impulsy zewnętrzne. Mogą pracować w czterech trybach.
Linie I/O - 32 linie zgrupowane w cztery dwukierunkowe porty P0-P3. Port P3 jest wykorzystywany do realizacji specjalnych funkcji (patrz: Odnóżologia). Można ustawić poszczególne bity porty na zapis lub odczyt.
Port szeregowy - niezależne nadawanie i odbieranie transmisji szeregowej. Może pracować w czterech trybach. konwersja równoległo-szeregowa odbywa się automatycznie. Szybkość transmisji od 110 do 19200 bodów. Podobno możliwe jest osiągnięcie 375000 bodów, ale wymaga to zastosowania zabiegów z pogranicza magii.
Przerwania - jest pięć: dwa zewnętrzne INT0, INT1, dwa wewnętrzne (z układu czasowo-licznikowego) i jedno z portu szeregowego. W 8052 jest jeszcze szóste - z trzeciego licznika CTC. Układ przerwań jest dwupoziomowy (każdemu przerwaniu można nadać jeden z dwóch priorytetów) i w pełni maskowalny.
Stany z obniżonym poborem mocy - he, he układy te mogą nawet pracować w trybie „power down mode”!! Ale (podaję za A. Rydzewskim) podobno tylko te oryginalne, produkcji Intela. Inne nie zawsze. Cóż, co Intel® inside™, to Intel® inside™...
Q: Jakie układy wchodzą w skład rodziny układów MCS-51?
A:
Typ układu |
Wewn. pamięć programu |
Wewn. pamięć danych |
|
CHMOS |
HMOS |
|
|
80C51 |
8051AH |
4K × 8 ROM |
128 × 8 RAM |
|
8751H |
4K × 8 EPROM |
128 × 8 RAM |
80C31 |
8031AH |
— |
128 × 8 RAM |
|
8052 |
8K × 8 ROM |
256 × 8 RAM |
|
8032 |
— |
256 × 8 RAM |
Q: Jak można rozbudować system z MCS-51?
A: Można dołożyć zewnętrzną pamięć: programu lub danych. System wygląda podobnie, jak w przypadku rozbudowy 8048 - również trzeba zatrzaskiwać dolną połówkę adresu w rejestrze (np. 74LS373 lub 8282) - przypominam: port P0 podaje dolną połówkę adresu, zatrzaskuje go sygnałem ALE/P, następnie podaje dane! Program trzymamy zwykle na ROM-ie, EPROM-ie lub EEPROM-ie, a dane na statycznym RAM-ie. DRAM-y w układach z MCS-51 mają zastosowanie w zasadzie tylko na kolokwiach z Mikroinformatyki. Wejście/wyjście rozbudować możemy stosując np. 8255.
A oto przykład systemu z 8051 z zewnętrzną pamięcią programu na EPROMIE 2764 (4KB) i pamięcią danych na RAM-ie 6116 (1KB):
6. Współpraca procesora 8086 z koprocesorem 8087
Rozszerzenie jednostki centralnej o procesor wejścia/wyjścia i koprocesor numeryczny. Współpraca mikroprocesora 8086/88 z koprocesorem 8087.
Procesor we-wy oraz koprocesor są podłączone do procesora poprzez sygnały RQ/GT0 i RQ/GT1. Są to dwukierunkowe linie żądania dostępu do magistrali i potwierdzeni przyznania magistrali innym modułom nadrzędnym (tj. koprocesor lub procesor we-wy). Linia RQ/GT0 ma wyższy priorytet od linii RQ/GT1. Koprocesor dodatkowo połączony jest z procesorem przez wykorzystanie sygnałów QS1, QS0 oraz BUSY. Sygnał BUSY=1 połączony z wejściem TEST procesora powoduje - jeśli w programie napotkana jest instrukcja WAIT - przejście procesora w stan bezczynności, aż do przyjścia opadającego zbocza sygnału. Sygnały QS1 i QS0 określają rodzaj operacji wykonywanej na kolejce rozkazów,
QS1 QS0 |
Rodzaj operacji |
0 0 |
Brak operacji |
0 1 |
Pobranie pierwszego bajtu rozkazu z kolejki |
1 0 |
Zerowanie kolejki |
1 1 |
Pobranie rozkazu z kolejki |
Koprocesor arytmetyczny umożliwia rozszerzenie listy rozkazów mikroprocesora o rozkazy złożonych operacji arytmetycznych. W trakcie wykonywania programu wykorzystującego koprocesor, po napotkaniu rozkazu ESC koprocesor wystawia stan BUSY, aż do momentu zakończenia jego wykonywania.
Procesor we-wy, czyli układ 8089 może wykonywać rozkazy oparte na własnej liście rozkazów i umożliwia szybkie przesyłanie danych w dwu kanałach DMA. (przesyły: pamieć-pamięc; pamięć-we-wy; we-wy-pamięc; we-wy - we-wy).
7. Magistrala PCI
Obecnie tryumfy święci PCI
Gdyż ilości danych przesyłane na ekran w bardzo interesujących GUI są zastraszające (tryb 1024 x 768 x TRUE COLOR= 18874368 Mbit/s - na jeden ekran). PCI pasuje głównie dla zastosowań multimedialnych i gromadzenia dużych ilości danych na HDD. Oczywiście istnieją takie zabawki jak SCSI, SCSI - II, SCSI-coś tam jeszcze, ale kto się będzie zajmował sprawami naprawdę poważnymi.....
W czasie wymiany danych przez PCI do magistrali podłączone są dwa urządzenia: inicjator połączenia - MASTER i urządzenie docelowe - SLAVE. Teoretycznie PCI może pracować z zegarem 66 MHz. Przesył danych dzieli się na dwie fazy: adresowania - wybierany jest przez Master'a Slave i następuje uzgodnienie rodzaju transmisji i fazę danych - wymiana danych.
Cechy charakterystyczne PCI : urządzenia na magistrali są niezależne od procesora, dzięki czemu obciążenie CPU jest prawie znikome, PCI teoretycznie może obsłużyć do 256 urządzeń, można stosować przesyły łańcuchowe dla zapisu i odczytu, magistrala może zmieniać szerokość - 32 lub 64 bity, przy zegarze 33 MHz czas dostępu jest rzędu 60 ns (jak w DRAM), występuje kontrola parzystości adresu i danych. Starczy...
8. Przerwamia w .51 i .486 - tryby pracy
Organizacja przerwań w mikrokomputerze typu PC/AT.
Najbardziej aktywnym elementem komputera jest procesor. Niektóre urządzenia wykonują operacje ciągnące się przez wiele cykli zegarowych, ale nie wymagają one udziału procesora ponieważ same są wyposażone we własne procesory. W takim przypadku wystarczy, aby procesor zaprogramował odpowiednie rejestry urządzenia, wydając tym samym komendę do wykonania określonej operacji (np. odczytanie, zapisanie sektora na dysk, odebranie znaku przez RS). Procesor musi zostać poinformowany o zakończeniu wykonywania operacji przez urządzenie (nieważne czy pomyślnym). Może to być wykonane poprzez wystąpienie przerwania sprzętowego, czyli urządzenie samo zgłasza zakończenie operacji. Procesor wtedy przerywa realizację aktualnie wykonywanego programu, zapamiętuje stan rejestrów i realizują procedurę realizacji przerwania. Po wykonaniu procedury odtwarza stan rejestrów i wraca do wykonywania dalszej części programu.
W mikrokomputerze PC/AT funkcję kontrolera przerwań pełnią dwa układy 8259. Pojedynczy taki kontroler posiada osiem linii wejściowych, przyjmujących sygnały zgłoszeń przerwań. Procesor otrzymuje informację poprzez wyjście INT. Drugi kontroler (SLAVE) jest podłączony kaskadowo z pierwszym (MASTER). W PC/AT oznacza to, że wyjście INT z układu SLAVE jest połączone z wejściem IRQ2 układu MASTER, a wejścia kontrolera SLAVE mają przyporządkowane numery przerwań odpowiednio od 8-15.
Urządzeniom przyporządkowane są odpowiednie linie IRQ oraz wektory przerwań. Wektor przerwania oznacza indeks wskazujący na adres obsługi danego przerwania, umieszczony w tablicy wektorów przerwań.
Przyporządkowanie urządzeń liniom IRQ. (wektor oznacza numer indeksu wskazującego adres obsługi danego przerwania, umieszczony w tablicy wektorów przerwań. Tablica znajduje się w pamięci w obszarze 0000h-03FFh).
IRQ |
Urządzenie |
wektor |
IRQ |
Urządzenie |
wektor |
0 |
zegar systemowy |
08h |
8 |
zegar czasu rzeczywistego |
70h |
1 |
Klawiatura |
09h |
9 |
wywołanie przerwania IRQ2 |
71h |
2 |
Wyjście kaskadowe do układu SLAVE |
0Ah |
10 |
zarezerwowane |
72h |
3 |
COM2 |
0Bh |
11 |
zarezerwowane |
73h |
4 |
COM1 |
0Ch |
12 |
zarezerwowane |
74h |
5 |
LPT2 |
0Dh |
13 |
koprocesor arytmetyczny |
75h |
6 |
kontroler dyskietek |
0Eh |
14 |
kontroler dysku twardego |
76h |
7 |
LPT1 |
0Fh |
15 |
zarezerwowane |
77h |
(SP/EN=1 to MASTER; =0 to SLAVE)
Cykl przyjęcia zgłoszenia przerwania:
urządzenie zgłasza przerwanie na wejście kontrolera
sprawdzana jest maska przerwania (jeśli bit w IMR (Interrupt Mask Register) jest ustawiony to przerwanie jest ignorowane, czyli koniec)
ustawiany jest odpowiedni bit w rejestrze zgłoszeń (IRR - Interrupt Request Register)
jeśli przyszło parę zgłoszeń przerwań to sprawdzany jest priorytet (od najmniejszego numeru przerwania, tzn. IRQ0 ma najwyższy priorytet) i przerwania o niższym priorytecie są ignorowane
aktywowany jest sygnał INT do procesora, informujący procesor o konieczności obsługi przerwania
jeśli obsługa przerwań jest odblokowana (bit IE rejestru stanu procesora) to procesor zwraca do kontrolera sygnał potwierdzenia przyjęcia przerwania (INTA)
w tym momencie kontroler przekazuje odpowiedni bit z rejestru IRR do rejestru obsługi ISR (Interrupt Service Register)
Procesor wysyła kolejny sygnał INTA
Kontroler wystawia na szynę danych numer procedury obsługi przerwania (wektor przerwania)
Po wykonaniu zerowany jest rejestr ISR
Istnieje jeszcze jedno przerwanie sprzętowe, jest to przerwanie niemaskowalne (NMI), ponieważ nie można go zablokować programowo. Sygnał ten jest połączony bezpośrednio z procesorem linią NMI. Przerwanie to ma najwyższy priorytet. Wywoływana jest procedura obsługi INT2. Przerwanie to jest generowane między innymi w przypadku wystąpienia błędu parzystości.
Jako ciekawostka, to mimo wszystko da się je zamaskować poprzez ustawienie 7 bitu portu 070h. Opcja ta jest potrzebna BIOSowi, ponieważ w momencie uruchomienia PC-ta BIOS buduje tablicę wektorów przerwań i jeżeli nie zdążyłby, a wystąpiłby jakiś błąd w pamięci to komputer skoczyłby pod niewłaściwy adres i najprawdopodobniej zawiesiłby się.
9. Deskryptory adresów i segmentów (do czego służą)
Tryb adresowania wirtualnego.
Procesor 80386 przetwarza logiczny adres w adres fizyczny w dwóch krokach:
1. Translacja segmentu, w której adres logiczny (segment + offset) jest przetwarzany na adres liniowy.
2. Translacja strony, w której adres liniowy jest konwertowany na adres fizyczny. Translacja ta jest opcjonalna i zależy od projektanta oprogramowania.
Ad 1. Translacja segmentu
Schemat wyznaczania adresu na wysokim poziomie abstrakcji:
15 0 31 0
LOGICAL ------------------ ---------------------------------------
ADDRESS | SELECTOR | | OFFSET |
------------------ ---------------------------------------
-------| |
| DESCRIPTOR TABLE |
| -------------- |
| | | |
| | | |
| | | |
| | | |
| -------------- |
| | SEGMENT | BASE ----- |
-->| DESCRIPTOR ----------------| + |
Procesor wykorzystuje następujące struktury danych:
deskryptory,
deskryptor tablic,
selektory,
rejestry segmentowe.
Deskryptory
Deskryptor segmentu dostarcza procesorowi dane, jakie są potrzebne by odwzorować logiczny adres w adres liniowy. Deskryptory są tworzone przez kompilatory, linkery lub system operacyjnie (nie programistę).
Struktura deskryptora.
31 23 15 7 0
--------------------|-|-|-|-----------|-----|----------------------------
| | | | |A| LIMIT | | | TYPE | |
| BASE 31..24 |G|B|0|V| 19..16 |P| DPL | | BASE 23..16 |
| | | | |L| | | |1|0|E|W|A| |
|-----------------|-|-|-|-|---------|-|-----|-|-|-|-|-|-----------------|
| | |
| SEGMENT BASE 15..0 | SEGMENT LIMIT 15..0 |
| | |
|-----------------------------------------------------------------------|
- Pole BASE definiuje lokację segmentu w liniowej 4GB przestrzeni adresowej (procesor łączy 3 fragmenty pola BASE by uformować 32-bitową wartość).
- Pole LIMIT definiuje wielkość segmentu (łączone są dwa fragmenty by uzyskać 20-bitową wartość).
- G (granularity bit) definiuje jednostkę pola LIMIT G=0 - 1bajt,G=1 - 4kB.
- TYPE - typ deskryptora,
- DPL - Poziom uprzywilejowania deskryptora (patrz pytanie nr 66)
- Segment-Present bit, Accessed bit - używane przez mechanizm pamięci wirtualnej.
Tablice deskryptorów
Deskryptory segmentów są przechowywane w dwóch rodzajach tablic deskryptorów:
GDT - globalnej tablicy deskryptorów,
LDT - lokalnej tablicy deskryptorów.
Tablica deskryptorów jest tablicą w pamięci o 8-bajtowych elementach, zawierających deskryptory. Wielkość tablica deskryptorów może się zmieniać, a jej max. rozmiar to 8192 deskryptorów. Procesor znajduje w pamięci GDT i LDT poprzez rejestry GDTR i LDTR. Rejestry te przechowują bazowy adres tablic w liniowej przestrzeni adresowej.
Selektory
Część „selector” adresu logicznego identyfikuje deskryptor przez wyszczególnienie tablicy deskry-ptorów i konkretnego deskryptora w tej tablicy.
Budowa deskryptora:
15 |
3 |
0 |
INDEX |
TI |
RPL |
TI - wskaźnik tablicy
RPL - poziom uprzywilejowania obiektu żądającego (Requestor's Privilege Level)
INDEX: wybiera jeden z 8192 deskryptorów
TI: TI=0 - dotyczy GDT, TI=1 dotyczy LDT
RPL: Używane przez mechanizmy ochrony
Rejestry segmentowe
Procesor 386 przechowuje informacje „od” deskryptorów w rejestrach segmentowych. Zapobiega to odwoływaniu się do tablic deskryptorów przy każdym odwołaniu do pamięci. Każdy rejestr segmentowy składa się z dwóch części: widocznej i niewidocznej. Widoczna część to 16-bitowy rejestr segmentowy widziany przez program. Część niewidoczna jest zmieniana przez procesor. Operacje, które ładują te rejestry to zwykłe instrukcje (np. MOV, POP, LDS). Używając tych instrukcji program ładuje widoczną część rejestru segmentowego 16-bitowym selektorem. Procesor automatycznie pobiera adres bazowy, limit, typ i inne informacje z tablicy deskryptorów i ładuje je do niewidocznej części rejestru segmentowego.
|
16-bitowa widoczna część Selektor |
Niewidoczny Deskryptor |
rej. segmentowy |
|
|
Ad 2. Translacja strony
W drugiej fazie wyznaczania adresu procesor dokonuje konwersji adresu liniowego na adres fizyczny - translacji stron. Konwersja ta jest opcjonalna - zależy od bitu PG w rejestrze CRO. Wykorzystuje się ją w systemach wielozadaniowych, mechanizmach pamięci wirtualnej.
Adres liniowy odwołuje się niebezpośrednio do pamięci fizycznej: określa tablicę stron, stronę w tablicy i offset na stronie.
Schemat translacji strony
LINEAR ADDRESS PAGE FRAME
------------------------------------ -----------------
| DIR | PAGE | OFFSET | | |
------------------------------------ | |
| | | | |
--------------- | -------------->| PHYSICAL |
| | | ADDRESS |
| PAGE DIRECTORY | PAGE TABLE | |
| ----------------- | ----------------- | |
| | | | | | -----------------
| | | | |---------------| ^
| | | --->| PG TBL ENTRY |--------------|
| |---------------| |---------------|
-->| DIR ENTRY |--| | |
|---------------| | | |
| | | | |
----------------- | -----------------
^ | ^
--------- | ----------------|
| CR3 |--------|
---------
Tablica stron.
Tablica stron jest tablicą zawierającą 32-bitowe specyfikatory stron. Tablica ta jest sama w sobie stroną.
Do adresowania stron w pamięci używa się dwóch poziomów tablic. Na wyższym poziomie znajduje się katalog stron, który adresuje do 1KB tablic niższego poziomu. Tablice stron drugiego poziomu adresują do 1K stron każda. Wszystkie tablice adresują więc 1M stron (2^20), a ponieważ każda strona zawiera 4kB pamięci (2^12) możliwe jest zaadresowanie całej fizycznej pamięci (2^32).
Adres fizyczny aktualnego katalogu stron jest przechowywany w rejestrze CR3.
Rekordy w tablicach obu poziomów mają identyczną strukturę (j.n.):
Struktura wejścia do tablicy stron: (Page Table Entry)
31 |
11 |
|
|
|
|
|
|
0 |
PAGE FRAME ADDRESS |
AVAIL |
0 0 |
D |
A |
00 |
U/S |
R/W |
P |
P present
R/W read/write
U/S user/supervisor
D dirty
AVAIL available for system programmer use
D (dirty) - używany przez mechanizm pamięci wirtualnej
R/W, U/S - używane przez mechanizm ochrony dostępu do pamięci
Procesor przechowuje dane z ostatnio używanej tablicy stron w pamięci Cache.
Mechanizm wyznaczania adresu fizycznego
16 0 32 0
------------------------------------------------------------ LOGICAL
| SELECTOR | OFFSET | ADDRESS
-----|----------|-------------------------|-----------------
--------- | |
| DESCRIPTOR TABLE |
| |---------------| |
| | | |
| | | |
| | | |
| | | |
| |---------------| |
| | SEGMENT | |---| |
|->| DESCRIPTOR --------->| + |<----------- | PHYSICAL |
| | | ADDRESS |
| PAGE DIRECTORY | PAGE TABLE | |
| |---------------| | |---------------| | |
| | | | | | | |
| | | | | | -----------------
| | | | |---------------| ^
| | | |-->| PG TBL ENTRY |--------------|
| |---------------| |---------------|
|->| DIR ENTRY |--| | |
|---------------| | | |
| | | | |
|---------------| | Č---------------Ľ
^ | ^
|-------| | |---------------|
| CR3 |--------|
|-------|
17
Błąd! Nieprawidłowe łącze.
Błąd! Nieprawidłowe łącze.
Błąd! Nieprawidłowe łącze.
ODNÓŻOLOGIA Z80 CTC:
D0-D7 - wiadomo
IEI - wejście zezwalające przerwań
IEO - wyjście sygnału przerwania
INT - wejście sygnału przerwania
RD - wejście zapisu
IORQ - przełączenie z obszaru pamięci na obszar zarezerwowany dla urządzeń I/O
M1 - sygnał zegarowy mikroprocesora
CS - wybór układu
CE - włączenie układu (logiczne)
CLK/T - wyprowadzenie dla taktowania i wyzwalania
ZC/TO - zerowe zliczenie - czas upłynął
RESET - reset
ODNÓŻOLOGIA 8051:
P00 - P07 - port P0
P10 - P17 - port P1
P20 - P27 - port P2
P30 - P37 - port P3, dodatkowo:
P30 - RxD, we szeregowe
P31 - TxD, wy szeregowe
P32, P33 - INT0, INT1, we przerywające
P34, P35 - T0, T1. we u. czasowo-licznikowego
P36 - WR, zapis do zewn. pamięci danych
P37 - RD, odczyt z zewn. pamięci danych
INT0, INT1 - wejścia przerywające
T0, T1 - wejścia dla układów czasowo-licznikowych
RD, WR - zapis/odczyt z zewnętrznej pamięci danych
PSEN - (program store enable), odczyt z zewnętrznej pamięci programu
ALE/P - wyjście sygnału zegarowego fXTAL/6 (strobowanie „połówki” adresu)
EA/VP - (external access), wymuszenie pobierania rozkazów z pamięci zewnętrznej
RESET - reset
XTAL1, XTAL2 - wejścia do podłączenia oscylatora