Historia
Mikrokontroler 8051 doczekał się wielu następców. Pierwszym
w kolejności był opracowany również przez firmę Intel procesor 8052/32.
Pierwsze oznaczenie dotyczy mikrokontrolera z wewnętrzną pamięcią programu
ROM, a drugie - mikrokontrolera bez wewnętrznej pamięci ROM. Liczba wyprowadzeń
nie uległa zmianie. Zmieniła się częściowo struktura wewnętrzna. Największym
prezentem dla programistów i użytkowników było:
·podwojenie wewnętrznej pamięci danych RAM ze 128 do 256
bajtów,
·dodanie trzeciego, wewnętrznego 16-bitowego licznika oznaczonego
kolejnym symbolem T2; licznik ten znacznie rozszerzał możliwości podstawowych
liczników TO i Tl. Wprowadzenie trzeciego licznika T2 zmieniło także sposób
sterowania łączem szeregowym. Szybkości nadawanych i odbieranych danych
mogły być zmieniane niezależnie. Porównanie obu struktur wewnętrznych
przedstawiono na rysunku poniżej:
W przedstawionej na rysunku strukturze wewnętrznej mikrokontrolera 8052 zacieniowanymi polami zaznaczono układy nowe lub o zmienionych funkcjach w stosunku do pełnionych w mikrokontrolerze 8051.
W kontrolerze przerwań, wskutek wprowadzenia trzeciego licznika T2, zwiększyła się liczba obsługiwanych przerwań wewnętrznych. Liczba przerwań zewnętrznych również zwiększyła się o jedno. Mikrokontroler reagował na dwa przerwania zewnętrzne i jedno wspólne z licznikiem T2.
Rolę wejścia i sterowania licznika T2 pełnią dwie linie portu Pl stąd zmienione (zaciemnione pole) funkcje tego portu.
Najważniejszą cechą z punktu widzenia programistów jest to że lista rozkazów nie zmieniła się. Zamierzeniem konstruktorów mikrokontrolera 8051 było wprowadzenie rejestrów specjalnych SFR, w obrębie których realizowane będą wszystkie zmiany struktury wewnętrznej mikrokontrolera. Sposób zapisu i odczytu tych rejestrów nie zmieniał się.
Europejscy konstruktorzy mikrokontrolerów 8-bitowych, przede wszystkim firma Philips i Siemens, skupili się na mikrokontrolerach z przetwornikami pomiarowymi, wielofunkcyjnymi łączami szeregowymi oraz rozbudowanymi kładami czasowo-licznikowymi. Przetworniki napięcie-kod rozszerzyły zakres zastosowań mikrokontrolerów. Bezpośrednie dołączenie czujników z wyjściem napięciowym, rezystancyjnym i prądowym przestało być problemem. Zmiany w konstrukcji łącz szeregowych spowodowane zostały wprowadzeniem nowych interfejsów, przede wszystkim magistrali I2C-Bus opatentowanej przez firmę Philips. Magistrala ta stała się wkrótce standardem w sprzęcie audio-video TV. Dostępne funkcje liczników TO i Tl, a nawet wprowadzonego w mikrokontrolerze 8051 licznika T2, są w wielu przypadkach niewystarczające. W szczególności przy sterowaniu np. silników elektrycznych. Wprowadzenie nowych technologii w produkcji półprzewodników spowodowało obniżenie poboru prądu, prawie 8-krotną redukcję mocy, a w niektórych przypadkach jeszcze większą. Nowe elementy wewnętrzne to także nowe źródła przerwań, które musi obsłużyć kontroler przerwań. W najnowszych konstrukcjach mikrokontrolerów kontroler przerwań obsługuje 17 różnych, wewnętrznych i zewnętrznych przerwań. Za najbardziej zaawansowany technologicznie mikrokontroler rodziny '51 uważany jest mikrokontroler 8xC517A firmy Siemens, który zawiera także szybki koprocesor arytmetyczny.
Pierwszym mikrokontrolerem 8-bitowym rodziny '51, który zawiera
przetwornik analogowo-cyfrowy był mikrokontroler 80515/535. Producentem tego układu jest wspomniana wcześniej firma Siemens oraz amerykańska firma AMD (Advanced Micro Devices). Pierwotne podwójne oznaczenie 80515/535
dotyczyło wersji mikrokontrolera z wewnętrzną pamięcią programu (80515) lub mikrokontrolera bez tej pamięci (80535). Nowe oznaczenia tych mikrokontrolerów są nieco zmienione (patrz uwagi zamieszczone na końcu książki). W mikrokontrolerach 80515/535 w porównaniu z procesorem 8051 rozszerzono funkcje w celu wewnętrznych układów (rys):
· wewnętrzna pamięć ROM liczy:
> 8 KB w SAB80(C)515/535,
> 16 KB w SAB 83515-4 (mikrokontroler z pamięcią ROM programowaną maską, rozszerzoną w stosunku do 80(C)515/535),
> programowanie szybkości transmisji szeregowej może odbywać się bez pomocy licznika Tl,
> podwyższono częstotliwość dołączanego do procesora rezonatora kwarcowego,
> zwiększyła się liczba wejść kontrolera przerwań; mikrokontroler reaguje na 5 przerwań wewnętrznych i 7 przerwań zewnętrznych w ramach 4-poziomowego systemu przerwań,
> rozszerzono tryby redukcji mocy pobieranej przez mikrokontroler.
Struktura wewnętrzna mikrokontrolera 80515/535 w porównaniu z mikrokontrolerem 8051:
Zaciemnione pola na rysunku są wynikiem zmienionych funkcji układów istniejących w mikrokontrolerze 8051 lub zupełnie nowych, charakterystycznych dla mikrokontrolera 80515/535. Nowymi wewnętrznymi układami są:
· dwa uniwersalne porty wejściowo-wyjściowe P4 i P5,
· licznik T2 z modulacja, szerokości impulsu (PWM - Pulse With Modulation) i synchroniczną zmianą, wartości czterech najmniej znaczących linii portu Pl,
· 8-kanałowy, 3-bitowy przetwornik analogowo-cyfrowy z wewnętrznym
układem próbkująco-pamiętającym i programowanymi podzakresami pomiarowymi,
· port P6 w mikrokontrolerach wykonanych w technologii ACMOS,
· Watchdog - układ nadzorujący wykonywanie programu,
· wyprowadzony na jedną z linii portu Pl wewnętrzny sygnał taktujący mikrokontroler.
Działanie mikrokontrolera
Mikroprocesory są układami sekwencyjnymi, synchronicznymi, tzn. wszystkie operacje wykonywane przez układy procesora odbywają się w określonej kolejności i w ściśle ustalonych momentach czasowych. Dlatego muszą współpracować z generatorami impulsów zegarowych. Układy mikroprocesorowe korzystają najczęściej z generatorów zewnętrznych. Natomiast mikrokontrolery mają wewnętrzny generator, do którego dołącza się z zewnątrz albo tylko sam rezonator kwarcowy lub ceramiczny oraz dodatkowo dwa kondensatory, ułatwiające wzbudzenie się generatora na pożądanej częstotliwości (rysunek). W mikrokontrolerach rodziny, 51 jeżeli jest stosowany rezonator kwarcowy, to pojemności mają wartości 22 ÷ 39 pF, a przy rezonatorze ceramicznym - 30 ÷ 51 pF.
Podłączenie rezonatora kwarcowego lub ceramicznego do mikrokontrolera:

Dobierając częstotliwość generatora należy pamiętać, że musi się ona mieścić w zakresie określonym przez producenta. Przy częstotliwości za dużej lub za małej mikrokontroler przestanie poprawnie pracować. Stosowanie wyższych częstotliwości generatora przyspiesza wykonywanie przez mikrokontroler operacji, ale. odbywa się to kosztem zwiększenia prądu zasilania, zwiększenia poziomu zakłóceń wytwarzanych przez procesor, a ponadto wymaga stosowania szybszych, a więc i droższych elementów współpracujących z mikrokontrolerem, np. pamięci zewnętrznych. Ponadto przy wyższych częstotliwościach generatora mikrokontroler, zwłaszcza pobierający rozkazy z pamięci zewnętrznej programu, jest bardziej podatny na zakłócenia zewnętrznych poi elektromagnetycznych. Dlatego częstotliwość generatora powinna być najniższa ale zapewniająca wykonanie zadania w założonym czasie.
W większości mikrokontrolerów praca generatora może być zatrzymana odpowiednim rozkazem, co powoduje zatrzymanie działania wszystkich elementów mikrokontrolera. Ma to na celu zredukowanie do minimum prądu zasilania, np. w momencie awarii sieci zasilającej.
Wszystkie rejestry specjalne mają swoje nazwy. W trakcie asemblacji nazwom rejestrów przyporządkowane zostają właściwe adresy.
· pośrednie dla wewnętrznej pamięci RAM o adresach 80H do OFFh; pośrednio tzn. za pośrednictwem rejestru R0 lub Rl {tak jak przy odczycie i zapisie danych z/do zewnętrznej pamięci RAM). Dla przykładu wpisanie zawartości akumulatora A do komórki wewnętrznej pamięci RAM o adresie 80h wymaga wykonania:
Przy adresowaniu pośrednim nie należy zapominać o znaku @ przed nazwą właściwego rejestru. Tym rejestrem może być tylko rejestr RO lub Rl.
· bezpośrednie i pośrednie w przypadku wewnętrznej pamięci RAM o adresach 0 .. 7Fh. Dla tej części pamięci RAM dozwolone są oba tryby adresowania, ponieważ adres jednoznacznie wskazuje, na komórkę pamięci. Przesłanie zawartości komórki wewnętrznej pamięci RAM o adresie 4Dh do akumulatora można zrealizować dwojako:
Graficznie oba sposoby, tryby adresowania wewnętrznej pamięci RAM i rejestrów specjalnych SFR przedstawiono na rysunku:
Adresowanie wewnętrznej pamięci RAM i rejestrów specjalnych SFR.
Kolizja adresów wewnętrznej pamięci RAM i rejestrów specjalnych w mikrokontrolerach 8052 i nowszych (np. 80515/535) została usunięta przez właściwy dla danego obszaru sposób adresowania:
· bezpośrednio i pośrednio wewnętrznej pamięci RAM o adresach 0 .. 7Fh; w adresowaniu pośrednim nie zapominając o znaku @,
· tylko pośrednio wewnętrznej pamięci RAM o adresach 80h .. OFFh,
· tylko bezpośrednio rejestrów specjalnych SFR.
Podane sposoby adresowania dotyczą wszystkich mikrokontrolerów rodziny 51.
Gdzie są rejestry RO .. R7 ?
W 128-bajtowym segmencie wewnętrznej pamięci RAM o adresach od 0 do 7Fh rozmieszczone są rejestry RO i Rl, które wykorzystywane są przy adresowaniu pośrednim. Oprócz nich konstruktorzy mikrokontrolera dali użytkownikom do dyspozycji 6 następnych rejestrów oznaczonych kolejnymi symbolami cyfrowymi: R2, R3, R4, R5, R6 i R7. W ten sposób mamy w mikrokontrolerze 8 rejestrów. Osiem rejestrów (RO, .., R7) tworzy bank rejestrów i takich banków mamy 4 oznaczonych symbolami RBO (bank numer 0),.., RB3 (bank numer 3).
Rozmieszczenie rejestrów RO, .. , R7 w wewnętrznej pamięci RAM mikrokontrolera.
Z rysunku wynika, że wszystkie banki rejestrów rozmieszczone są w początkowym obszarze wewnętrznej pamięci RAM mikrokontrolera. Oznacza to, że do każdego z rejestrów można odwołać się przez:
· podanie jego symbolu i numeru banku rejestrów, np. rejestr R7 w banku RB1,
· podanie adresu komórki wewnętrznej pamięci RAM, np. adres OFh
dla tego samego rejestru.
Pomimo, że mamy do dyspozycji 4 banki rejestrów, każdy po 8 rejestrów (łącznie 32 rejestry), to programowy dostęp przez podanie symbolu rejestru możliwy jest tylko do jednego, wybranego banku Po sprzętowym zerowaniu procesora (linią RST) wybrany jest jako domyślny bank RBO, tzn. rejestry RO, .. R7 o adresach od 0 do 7. Adresując bezpośrednio wewnętrzna pamięć RAM w zakresie 0 .. lFh dostępne są wszystkie 32 rejestry (traktowane jako komórki pamięci).
Poza rejestrami RO, .. , R7 wszystkie inne rejestry, np. akumulator A, rejestr B, rejestr słowa statusowego PSW itd., znajdują się w bloku, segmencie rejestrów specjalnych SFR.
Jeśli w mikrokontrolerach rodziny '51 przewidziano 4 banki rejestrów (RBO, .. RB3) to oznacza, że wystarczą 2 bity do określenia numeru banków. Te dwa bity oznaczone symbolami RSO i RS1 (Register Select) znajdują się w rejestrze słowa statusowego PSW (Program Status Word):
Kodowanie numeru banku rejestrów za pomocą bitów RS1 i RSO jest binarne, tzn.:
· RSl,RS0= 00b oznacza zerowy bank rejestrów RBO,
· RSl, RSO= 11b oznacza trzeci bank rejestrów RB3.
W liście rozkazów przewidziano następujące instrukcje dotyczące rejestrów RO.. R7 i wymiany danych z wewnętrzną pamięcią RAM oraz rejestrami specjalnymi SFR:
Instrukcje związane tylko z rejestrami RO i Rl (rejestry te wykorzystywane sa wyłącznie do adresowania pośredniego pamięci RAM) są następujące:
Z akumulatorem A związano instrukcje przestawienia czterech mniej i czterech bardziej znaczących bitów, w działaniu zbliżonym do instrukcji XCHD:
Rejestry RO i RI stosowane są również do adresowania zewnętrznej pamięci RAM, co przedstawiono w poprzednich rozdziałach:
Poza typowymi przesłaniami (instrukcje MOV) w liście rozkazów znajdują się rozkazy, które przyspieszają wzajemną wymianę (eXCHange) zawartości akumulatora A i wybranego rejestru Rn lub komórki wewnętrznej pamięci RAM. Poglądowo przedstawia to rysunek:
• rozkaz XCH A,@Ri można również zastąpić kombinacją trzech innych instrukcji, także z użyciem dodatkowego rejestru do przechowywania zmiennej, np. rejestru B:
Podobna w działaniu do instrukcji XCH A,@Ri jest instrukcja XCHD A,@Ri ale wzajemna wymiana dotyczy jedynie 4 mniej znaczących bitów (eXCHange Digit) akumulatora A i komórki wewnętrznej pamięci RAM adresowanej rejestrem Ri (rejestr RO lub RI). Instrukcja ta stosowana jest w operacjach z liczbami przedstawionymi w kodzie BCD. Graficznie działanie tej instrukcji ilustruje poniższy rysunek:
Przykłady zastąpienia instrukcji XCH i XCHD innymi instrukcjami dobitnie
świadczą, że niezbędny jest pomocniczy wewnętrzny rejestr. Rejestr taki
rzeczywiście istnieje w mikrokontrolerze ale nie jest dostępny dla programisty.
Na rysunku przedstawiającym schemat blokowy mikrokontrolera zaznaczone
są dwa rejestry pomocnicze. Na rysunku przedstawiającym schemat blokowy
mikrokontrolera zaznaczone są dwa rejestry pomocnicze. Cztery banki rejestrów
RBO.. RB3 używane są zamiennie w różnych procedurach. Najczęściej roboczym
bankiem jest bank RBO. Inne używane są w zależności od potrzeb, np: przy
transmisji szeregowej bank RBl, wyświetlaniu danych na polu odczytowym
- bank RB2, a obsługą przetwornika zajmują się rejestry w banku RB3. Zmiana
banku rejestrów jest najszybszym sposobem ochrony zawartości rejestrów
przy wywołaniach podprogramów, a w szczególności w procedurach obsługi
przerwań.
Co zawierają rejestry specjalne SFR ?
Jak już wcześniej stwierdzono, rejestry SFR są odbiciem wszystkich wewnętrznych układów mikrokontrolera. Konstruktorzy mikrokontrolera 8051przewidzieli miejsce na 128 rejestrów specjalnych. Rejestrów adresowanych tylko bezpośrednio, o adresach od 80h do OFFOh. W miarę upływu czasu, rozwoju nowych technologii i potrzeb użytkowników pojawiły się nowe mikrokontrolery ze zmienionym, lub całkiem nowymi układami wewnętrznymi. Każdy nowy element zmieniał tylko znaczenie kolejnych komórek rejestrów specjalnych. Z 21 rejestrów specjalnych w mikrokontrolerze 8051 do 42 w 80515/535. Lista rozkazów, sposoby adresowania pozostały niezmienione.
Adresy i symbole wszystkich rejestrów specjalnych w mikrokontrolerach 8051,
8052 i 80515/535 pokazano na rysunku. Rejestry, których funkcje są zmienione
lub całkowicie nowe rejestry zostały zacieniowane zgodnie z oznaczeniami
pod rysunkiem.
Adresy i symbole wszystkich rejestrów specjalnych w mikrokontrolerach 8051, 8052 i 80515/535 pokazano na rysunku 6-4. Rejestry, których funkcje są zmienione lub całkowicie nowe rejestry zostały zacieniowane zgodnie z oznaczeniami pod rysunkiem.
Z rysunku widać, że nie wszystkie rejestry są zagospodarowane, np. o adresach 0Elh..0EFh. Wolne rejestry nie mogą być jednak wykorzystane w -programach jako dodatkowe komórki wewnętrznej pamięci RAM. Tylko niektóre z rejestrów mogą pełnić taką funkcje. O tym decyduje producent mikrokontrolera oraz programista. Analizując program wiadomo jakie jest m wykorzystanie układów peryferyjnych, które mogą zmieniać w trakcie swojej pracy zawartość tych rejestrów. Dla przykładu rejestr SBUF związany z transmisją szeregową reprezentuje dwa niezależne rejestry. Jeden do zapisu (rejestr nadawanego znaku), a drugi do odczytu (rejestr odebranego znaku). Odczyt zawartości rejestru SBUF daje inną wartość niż wpisana.
Poniżej omówiono, łącznie z adresami, wybrane rejestry specjalne SFR -mikrokontrolerów rodziny '51. Oznaczenie rw-OOh sygnalizuje:
• możliwość odczytu zawartości rejestru (read),
• możliwość wpisu (write) innych wartości zgodnie z wymaganiami programu,
• zawartość rejestru po sprzętowym zerowaniu mikrokontrolera, 00h.
Akumulator (ACC - Accumulator) - adres OEOh (rw-OOh).
Jest jednym z ważniejszych rejestrów procesora, ponieważ większość rozkazów wykorzystuje ten rejestr. Oznaczany jest w mnemonikach instrukcji ACC (symboliczny adres komórki rejestru specjalnego) lub skróconych symbolem A (nazwa rejestru).
Porty
Porty umożliwiają dołączenie do mi kro kontrolera takich urządzeń zewnętrznych jak klawiatura, pole odczytowe, przekaźniki itp. Najczęściej porty posiadają osiem linii, którymi dane mogą być przesyłane w dwóch kierunkach, tzn. do lub z mikrokontrolera. Porty mogą być cyfrowe - przesyłające dane logiczne, lub analogowe, np. wejścia przetwornika A/C.
Mikrokontroler 8051 posiada cztery dwukierunkowe porty cyfrowe. Każdy port zawiera osiem linii, z których każda może pracować jako niezależna linia wejścia lub wyjścia. Inne mikrokontrolery rodziny '51 zawierają na ogól większą liczbę portów. Porty mogą być wielofunkcyjne, tzn. mogą być wykorzystywane do różnych celów.
Jak to już zostało opisane w rozdziale 5, port PO przy współpracy mikro-kontrolera z zewnętrzną pamięcią programu jest wykorzystywany do wysyłania mniej znaczącego bajtu adresu rozkazu oraz do przyjmowania bajtu rozkazu. Przy współpracy z zewnętrzną pamięcią danych RAM, lub pamięcią programu, przez port PO jest również przesyłany mniej znaczący bajt adresu oraz są przesyłane dane do i z zewnętrznej pamięci RAM, lub z pamięci programu, a port P2 -do wysyłania bardziej znaczącego adresu dla zewnętrznej pamięci programu lub danych.
W mikrokontrolerze 8052 wyprowadzenia P1.0 i Pl.l portu Pl są również wielofunkcyjne, przy czym wyprowadzenie P1.0 może być wejściem taktującym licznik T2, a wyprowadzenie Pl.l - jako wejście T2EX służące do sterowania pracą licznika T2.
W mikrokontrolerze 80C515 linie P1.0 - P1.3 portu Pl mogą być wejściami przerwań zewnętrznych, wejściami przepisującymi zawartość licznika T2 do odpowiednich rejestrów lub wyjściami komparatorów współpracującymi z licznikiem T2. Również linie P1.5 i P1.7 są związane z licznikiem T2.
W porcie P3 każde wyprowadzenie ma swoją alternatywną funkcję, która występuje prawie we wszystkich mikrokontrolerach rodziny '51:
• P3.0/RXD - wejście portu szeregowego
• P3.1/TXD - wyjście portu szeregowego
• P3.2/INT0 - wejście przerwania zewnętrznego lub bramkowania licznika TO
• P3.3/INT1 - wejście przerwania zewnętrznego lub bramkowania licznika Tl
• P3.4/T0 - wejście taktujące licznik TO
• P3.5/T1 - wejście taktujące licznik Tl
• P3.6/WR - wyjście sygnału zapisu do zewnętrznej pamięci RAM
• P3.7/RD - wyjście sygnału odczytu z zewnętrznej pamięci RAM
Porty w mikrokontrolerach mogą mieć różna, budowę wynikająca, z przeznaczania. Na rysunkach są przedstawione schematy portów mikrokontrolerów rodziny '51. Wszystkie one zawierają przerzutnik typu D, który jest elementem rejestru danego portu umieszczonego w obszarze 5FR. Dana wysyłana na wyjście portu jest wpisywana właśnie do tego rejestru, np. rozkazem MOV P1,A, który powoduje przepisanie zawartości akumulatora do rejestru portu Pl. Odczytywanie danej z portu odbywa się poprzez bufory, przy czym, w zależności od rozkazu, dana może być odczytana albo z rejestru portu, albo bezpośrednio z końcówki portu. Pozostałe elementy portów zależą od dodatkowego przeznaczenia danego portu. I tak w porcie PO, rysunek 7-1, znajduje się przełącznik przełączający wejście tranzystora wyjściowego do magistrali adresowej i bezpośrednio do magistrali danych, gdy mikrokontroler pobiera rozkazy z zewnętrznej pamięci programu lub komunikuje się z zewnętrzną pamięcią danych. Rejestr portu jest odłączony od końcówki i jego za wartość nie ma wpływu na sygnał wyjściowy portu. W tym trybie pracy jest również aktywny tranzystor dołączony do zasilania, dzięki czemu można uzyskać większy prąd wyjściowy do sterowania wejść pamięci zewnętrznych. Gdy port PO pracuje jako normalny port, to tranzystor ten pracuje jak źródło prądowe.
Schemat portu PO.
Ponieważ przez port P2 dodatkowo może być przesyłany tylko adres (bardziej znaczący bajt), dlatego jego układ jest prostszy niż portu PO.Zawiera on również przełącznik, dzięki któremu adres może być podany na wyjście portu niezależnie od zawartości rejestru portu. Obciążeniem tranzystora wyjściowego, podobnie jak w pozostałych portach jest rezystor, a w rzeczywistości źródło prądowe.
Konstrukcja pozostałych portów wielofunkcyjnych, wspólna dla całej rodziny mikrokontrolerów '51 jest pokazana na rysunku.W tych portach nie na przełącznika dla dodatkowej funkcji wyjściowej, a sygnał funkcji jest wyprowadzony poprzez bramkę NAND, wspólnie z sygnałem wyjściowym rejestru portu.
Sygnał dodatkowej funkcji z końcówki portu, poprzez dodatkowy bufor, jest doprowadzony do odpowiednich układów, np. do liczników, portu szeregowego, układu przerwań zewnętrznych, itp. Również w przypadku dodatkowej funkcji zewnętrznej do rejestru portu musi być wpisana jedynka, gdyż inaczej tranzystor wyjściowy zostaje wprowadzony w stan nasycenia, zwierając końcówkę portu do masy. Z tego tez powodu, by nie blokować działań dodatkowych funkcji, po zerowaniu mikrokontrolera rejestry wszystkich portów są ustawione w stan 1.
Schemat portu P2
Schemat portu wielofunkcyjnego
Przerwania
Przerwanie to sposób pracy procesora polegający na rym, pod wpływem sygnału zewnętrznego lub pochodzącego z układu wewnętrznego m i kro kontrolera, procesor przerywa wykonywanie bieżącego programu przechodzi do wykonywania podprogramu związanego z sygnałem przerwań. Podprogram obsługi przerwania jest zakończony specjalnym rozkazem, który powoduje, że procesor powraca do wykonywania przerwanego programu. Aby móc kontynuować przerwany program, przed wejściem do podprogramu c sługi przerwania, procesor musi zapamiętać miejsce, w którym nastąpiło przerwanie. Odbywa się to poprzez zapisanie zawartości licznika rozkazów do bulru pamięciowego nazywanym stosem.
W zależności od typu procesora czy mikrokontrolera, w momencie przejścia procesora do obsługi przerwania, na stosie oprócz zawartości licznika rozkazów mogą być składowane automatycznie również zawartości innych rejestrów. Ale w rodzinie '51 wywołanie przerwania, albo rozkaz CALL wywołujący po program, powoduje , że na stosie jest chowana tylko zawartość licznika rozkazów. Zawartości pozostałych rejestrów, np. rejestru PSW, DPTR itp. lub komórek pamięci muszą być chowane programowo.
Również w zależności od typu procesora, adres, od którego rozpoczyna się podprogram obsługi przerwania jest określany w różny sposób. W jednych procesorach może być stały, umieszczony pod ściśle określonym adresem pamięci programu - tak jest w rodzinie '51, w innych może b określany programowo lub przez urządzenie zewnętrzne.
Adresy obsługi przerwań w mikrokontrolerze 80C515/535.
W mikrokontrolerach rodziny '51 adresy podprogramów obsługi przerwań są umieszczone w początkowym obszarze pamięci programu. Jako przykład, w tabeli są podane adresy obsługi przerwań występujące w mikrokon-trole'rze80C515/535.
Źródła przerwań oraz ich adresy z pozycji 1 + 5 są wspólne dla całej rodziny '51. Przerwanie z pozycji 6 jest wspólne dla mikrokontrolerów 8xC52 i 80C515/535. Pozostałe źródła przerwań wraz z ich adresami obsługi występują w procesorze 80C515/535. W pozostałych procesorach tej rodziny, ponieważ struktura wewnętrzna jest inna, mogą występować inne źródła przerwań wraz z przypisanymi do nich adresami. Niezmienna pozostaje tylko zasada, że odstępy pomiędzy kolejnymi adresami obsługi przerwań są nie mniejsze niż 8 bajtów.
Takie rozmieszczenie adresów obsługi przerwań w mikrokontrolerach rodziny '51 powoduje, że dla ominięcia obszaru pamięci programu związanego z obsługą przerwań, pod adresem 0 programu umieszcza się rozkaz skoku do programu głównego, a pod adresami obsługi przerwań - najczęściej tylko rozkaz skoku do podprogramów obsługi przerwań, rysunek:
Jeżeli w trakcie wykonywania programu przyjdzie sygnał przerwania i zostanie on przyjęty przez układ przerwań, to wykonywanie programu zostanie zawieszone i nastąpi skok pod adres związany z występującym przerwaniem. Umieszczony tu rozkaz skoku powoduje skok do podprogramu obsługi przerwania. Po jego wykonaniu następuje powrót do przerwanego programu (rozkaz RETI), w miejsce gdzie nastąpiło przerwanie.
Liczniki
Liczniki służą do zliczania impulsów, pomiarów odcinków czasu, centrowania sygnałów o określonym czasie trwania itp. Dlatego często znajdują się w strukturze wewnętrznej mi kro kontrolerów. Ich budowa, liczba bitów, sposób sterowania, wpisywania i odczytywania zależą od typu mikrokontrolera. Również w rodzinie mikrokontrolerów '51 występują liczniki o różnej budowie i właściwościach, ale dwa podstawowe liczniki oznaczone jako TO i Tl występują we wszystkich elementach tej rodziny w prawie niezmienionej formie.
Są to liczniki 16-bitowe, które składają się z dwóch rejestrów ośmiobitowych oznaczonych odpowiednio dla licznika TO - THO i TLO oraz TH1 i TLI dla licznika Tl (H oznacza część bardziej znaczącą, a L - mniej znaczącą). Liczniki te mogą pracować jako liczniki zliczające impulsy zewnętrzne (counter) lub impulsy z wewnętrznego zegara (timer). Liczą one "w przód", tzn. impuls wejściowy zwiększa stan liczników.
Licznik TO ma cztery tryby pracy, licznik Tl - trzy, takie same jak licznik TO. Do obsługi liczników są przeznaczone rejestry TCON i TMOD :

Znaczniki TFO iTFl są ustawiane w stan 1 sprzętowo, gdy nastąpi przepełnienie odpowiedniego licznika TO lub Tl. Ustawienie ich w stan 1, również programowe, wywoła przerwanie, jeżeli będzie ono odblokowane. Mogą być zerowane programowo lub są zerowane automatycznie po wejściu mikrokontrolera do obsługi przerwania wywołanego ustawieniem znacznika w stan 1.
Każdy ze znaczników rejestru TCON może być zmieniany indywidualnie przez program.
Tryby pracy liczników TO i Tl, źródło sygnałów wejściowych oraz sposób sterowania licznikiem ustala się przez wpisanie do rejestru TMOD odpowiedniego słowa. Rejestr TMOD znajduje się w obszarze SFR pod adresem niepodzielnym przez 8 i dlatego zmianę stanu jego znaczników należy dokonywać poprzez wpis całego bajtu.

Obydwa liczniki mają takie same układy współpracujące :
• przełącznik doprowadzający sygnał wejściowy do liczników albo z wewnętrznego oscylatora poprzez dzielnik :12, albo z zewnątrz mikrokontrolera poprzez końcówki TO (P3.4) i Tl (P3.5) portu P3. Przełącznik jest przełączany znacznikiem C/T. Gdy C/T - 0, to taktowanie liczników odbywa się z układu wewnętrznego, a gdy C/T = 1, to są zliczane impulsy zewnętrzne.
• zespół bramek blokujących pracę liczników. Znacznik TRi służy do programowego uruchamiania pracy licznika. Przy TRi = 0 licznik jest zatrzymany, a przy TRi = 1 - pracuje. Praca licznika może być również uruchamiana sygnałem zewnętrznym. Przy ustawieniu znacznika GATE = 1 licznik pracuje gdy wejście INTi (P3.2 lub P3.3) jest na wysokim poziomie, jest natomiast zatrzymana, gdy wejście to jest na poziomie niskim. Gdy znacznik GATE = 0 praca licznika nie zależy od stanu wejścia INTi.
• przerzutniki przepełnienia liczników TFi, umieszczone w rejestrze TCON. Przepełnienie licznika Ti (przejście ze stanu 1 do stanu 0 na wszystkich bitach licznika) powoduje wpisanie stanu 1 do przerzutnika TFi. Jeżeli przerwanie od licznika jest aktywne, to nastąpi wywołanie procedury obsługi tego przerwania.
Schemat układów liczników TO i Tl pracujących w trybie 0 i 1
Wejścia bramkujące liczników są wspólne z wejściami przerwań zewnętrznych, dzięki czemu zewnętrzny sygnał zamykający bramkę licznika może uruchomić system przerwań.
Tryb pracy liczników wybiera się poprzez odpowiednie nastawienie znaczników M0 i M1:
• Tryb 0 -------------> M1 = 0, M0 = 0
Tryb zero został wprowadzony dla zachowania kompatybilności z rodziną mikrokontrolerów MCS-48, pierwowzorem rodziny '51. W trybie tym rejestr TL pracuje w trybie dzielnikia wstępnego o podziale przez 64 lub 5-bitowego licznika, a rejestr TH jako licznik bądź dzielnik 8 bitowy. Oba rejestry sa połaczone kaskadowo.
• Tryb 1 -------------> M1 = 0, M0 = 1
Tryb 1 jest taki sam jak tryb 0 z tą różnicą, że rejestr TL pracuje jako licznik lub dzielnik 8-bitowy. Obydwa rejestry są połączone kaskadowo tworząc 16-bitowy dzielnik lub licznik.
• Tryb 2 -------------> M1 = 1, M0 = 0
W trybie 2 są połączone w konfiguracji dzielnika 8-bitowego z autodoładowaniem, tzn. z zadawaniem stanu początkowego po przepełnieniu rejestru.
Układ połączeń liczników TO i T1 pracujących w trybie 2.
Rejestr TL pracuje jako dzielnik właściwy, natomiast rejestr TH służy
jako bufor, którego zawartość jest przepisywana do rejestru TL gdy
nastąpi jego przepełnienie. Operacja ta umożliwia otrzymanie dzielnika o zmiennym podziale, przy czym należy pamiętać, że liczniki liczą
"w przód" i dlatego do bufora trzeba wpisywać uzupełnienie do 0ffh liczby podziałowe,. Ponadto, po uruchomieniu dzielnik może zawierać przypadkową wartość początkową, lub 0 po włączeniu zasilania lub zerowaniu procesora. Dlatego przed uruchomieniem dzielnika do rejestru TL należy wpisać taka samą wartość jaka jest wpisywana do rejestru TH. Licznik Tl pracujący w trybie 2 jest często stosowany do taktowania portu szeregowego mikrokontrolera.
• Tryb 3 -------------> M1 = 1, M0 = 1
Tryb 3 występuje tylko dla licznika TO. W tym trybie rejestry TLO i THO pracują jako dwa niezależne 8-bitowe liczniki/dzielniki, rysunek :
Układ połączeń licznika TO pracującego w trybie 3
Rejestr TLO pracuje w strukturze licznika TO (znaczniki TRO, GATE, C/T oraz przerzutnik TFO). Może więc być sterowany i testowany jak licznik TO w trybie 0 i 1. Natomiast rejestr THO jest połączony na stałe z wyjściem zegara wewnętrznego poprzez dzielnik :12 i jest bramkowany znacznikiem TRI. Wyjście tego rejestru jest połączone z przerzutnikiem TF1. Dlatego gdy licznik TO pracuje w trybie 3, to licznik Tl może pracować w pozostałych trybach ale bez możliwości bramkowania jego wejścia i testowania przepełnienia. W tej sytuacji licznik Tl nadaje się praktycznie tylko do taktowania portu szeregowego. Wprowadzenie trybu 3 dla licznika Tl powoduje jego zatrzymanie.
Przy zliczaniu impulsów wewnętrznych (C/T = 0) rejestr licznika jest inkrementowany co jeden cykl maszynowy. Odpowiada to 1/12 częstotliwość, oscylatora. Natomiast przy zliczaniu impulsów zewnętrznych (OT = 1) stan odpowiedniego wejścia licznika jest taktowany podczas każdego cyklu maszynowego.