background image

Lista rozkazów mikrokontrolerów rodziny '51. 

Zestaw rozkazów mikrokontrolera 8051 został zoptymalizowany pod kątem zastosowań w 
układach sterujących. Rozbudowane możliwości operacji na pojedynczych bitach są cechą 

charakterystyczną zestawu instrukcji tego mikrokontrolera. Poszczególne rozkazy 
określają rodzaj wykonywanej czynności, a ich parametry precyzują obiekt (obiekty), na 

których czynność ta ma być wykonana, lub adres pod który ma nastąpić skok. Rozkazy 
mikrokontrolera 8051 można podzielić na następujące grupy: 

operacje arytmetyczne

operacje logiczne

logiczne na bitach

przesyłanie danych

sterowanie pracą programu (skoki, skoki warunkowe oraz wywołania i powroty z 
podprogramów). 

Oprogramowanie tworzy się w asemblerze, najczęściej na komputerze PC, choć istnieją 
konstrukcje układów z wykorzystaniem mikrokontrolera 8051 wyposażone w prosty 

asembler zawarty w pamięci EPROM (np. system DSM-51 pozwalający wpisać i uruchomić 
255 linii programu). 

Lista rozkazów mikrokontrolerów rodziny '51 zawiera 111 instrukcji (49 jednobajtowych, 

45 dwubajtowych i 17 trzybajtowych). W poniższym zestawieniu uwzględniono jedynie 
mnemoniki poszczególnych rozkazów, które są rozpoznawane przez asemblery '51 i one 

właśnie są najczęściej stosowane przy tworzeniu programu. 

W zestawieniu zastosowano następujące oznaczenia: 

Rr - rejestry R0-R7. 

direct - obszar wewnętrznej pamięci danych (128B) i rejestry SFR. 
@Ri - adres z rejestrów indeksowych R0 lub R1. 

bit - bity pamięci danych i SFR adresowalne bezpośrednio. 
#data - stała 8-bitowa. 

#data16 - stała 16-bitowa. 
addr16 - adres 16-bitowy (obszar 64kB). 

addr11 - adres 11-bitowy (w stronie 2kB). 
rel - adres względny -128...+127. 

/bit - negacja bitu. 
(n) - rozkaz wykonywany w n cyklach maszynowych. Brak oznaczenia oznacza 1 cykl. 

Operacje arytmetyczne:

ADD - dodawanie. 
Działanie: A=A+dana. 

Dozwolone argumenty: A,Rr A,direct A,@Ri A,#data 
Modyfikowane znaczniki: C, AC, OV. 

ADDC - dodawanie z przeniesieniem. 

Działanie: A=A+dana+C. 
Dozwolone argumenty: A,Rr A,direct A,@Ri A,#data 

Modyfikowane znaczniki: C, AC, OV. 

1

background image

SUBB - odejmowanie z pożyczką. 

Działanie: A=A-dana-C. 
Dozwolone argumenty: A,Rr A,direct A,@Ri A,#data 

Modyfikowane znaczniki: C, AC, OV. 

INC - inkrementacja. 
Działanie: argument=argument+1 

Dozwolone argumenty: A Rr direct @Ri DPTR(2) 

DEC - dekrementacja. 
Działanie: argument=argument-1. 

Dozwolone argumenty: A Rr direct @Ri 

MUL - mnożenie liczb 8-bitowych, wynik 16-bitowy. 
Działanie: A*B, do A zapisywana młodsza część wyniku, do B starsza. 

Dozwolone argumenty: AB 
Modyfikowane znaczniki: OV, bit C zerowany. 

DIV - dzielenie liczb 8-bitowych, 8-bitowy wynik i 8-bitowa reszta. 

Działanie: A/B, A - wynik, B - reszta. 
Dozwolone argumenty: AB 

Modyfikowane znaczniki: OV, bit C zerowany. 

DA - poprawka dziesiętna. 
Działanie: wykonuje poprawkę dziesiętną liczby 8-bitowej, przekształcając ją do postaci 2 

cyfr w kodzie BCD. 
Dozwolone argumenty: A 

Modyfikowane znaczniki: C. 

Operacje logiczne: 

ANL - iloczyn logiczny AND. 

Działanie: wykonuje logiczny iloczyn na odpowiednich bitach argumentów, wynik zapisuje 
do pierwszego argumentu. 

Dozwolone argumenty: A,Rr A,direct A,@Ri A,#data direct,A direct,#data(2) 

ORL - suma logiczna OR. 
Działanie: wykonuje sumę logiczną odpowiednich bitów argumentów, wynik zapisuje do 

pierwszego argumentu. 
Dozwolone argumenty: A,Rr A,direct A,@Ri A,#data direct,A direct,#data(2) 

XRL - suma mod 2 (XOR). 

Działanie: wykonuje sumowanie mod 2 odpowiednich bitów argumentu, wynik zapisuje 
do pierwszego z nich. 

Dozwolone argumenty: A,Rr A,direct A,@Ri A,#data direct,A direct,#data(2) 

CLR - zerowanie (bajtowe). 
Działanie: zeruje wszystkie bity argumentu. 

Dozwolone argumenty: A. 

CPL - negowanie (bajtowe). 
Działanie: neguje wszystkie bity argumentu. 

Dozwolone argumenty: A. 

2

background image

RL - obrót w lewo. 

Działanie: przesuwa w lewo zawartość akumulatora. 
Dozwolone argumenty: A. 

RR - obrót w prawo. 

Działanie: przesuwa w prawo zawartość akumulatora. 
Dozwolone argumenty: A. 

RLC - obrót w lewo przez C. 

Działanie: przesuwa w lewo zawartość akumulatora, na miejsce najmłodszego bitu 
wpisywana jest dotychczasowa zawartość bitu C, bit najstarszy jest wpisywany jako nowa 

wartość C. 
Dozwolone argumenty: A. 

RRC - obrót w prawo przez C. 

Działanie: przesuwa w prawo zawartość akumulatora, na miejsce najstarszego bitu 
wpisywana jest dotychczasowa zawartość bitu C, bit najmłodszy jest wpisywany jako 

nowa wartość C. 
Dozwolone argumenty: A. 

SWAP - zamiana 4 bitów bajtu. 

Działanie: zamienia miejscami 4 starsze i 4 młodsze bity bajtu. 
Dozwolone argumenty: A. 

Operacje logiczne na bitach:

CLR - zerowanie. 
Działanie: zeruje podany bit. 

Dozwolone argumenty: C bit. 

SETB - ustawienie bitu. 
Działanie: przypisuje danemu bitowi wartość 1. 

Dozwolone argumenty: C bit. 

CPL - negacja. 
Działanie: neguje podany bit. 

Dozwolone argumenty: C bit. 

ANL

(2)

 - iloczyn logiczny AND. 

Działanie: wykonuje iloczyn logiczny dwóch bitów, wynik zapisuje w pierwszym. 

Dozwolone argumenty: C,bit C,/bit. 

ORL

(2)

 - suma logiczna OR. 

Działanie: wykonuje sumę logiczną dwóch bitów, wynik zapisuje w pierwszym. 

Dozwolone argumenty: C,bit C,/bit. 

MOV - kopiuj. 
Działanie: wpisuje do pierwszego bitu wartość zapisaną w drugim. 

Dozwolone argumenty: C,bit bit,C(2). 

3

background image

Przesyłanie danych:

MOV - kopiuj. 
Działanie: wpisuje do pierwszego operandu zawartość drugiego. 

Dozwolone argumenty: A,Rr A,direct A,@Ri A,#data Rr,A Rr,direct(2) Rr,#data direct,A 
direct,Rr(2) direct,direct(2) direct,@Ri(2) direct,#data(2) @Ri,A @Ri,direct(2) @Ri,data 

DPTR,#data16(2). 

MOVC

(2)

 - kopiuj z pamięci programu. 

Działanie: kopiuje bajt kodu (zawartości pamięci programu). 

Dozwolone argumenty: A,@A+DPTR A,@A+PC. 

MOVX

(2)

 - kopiuj z/do zewnętrznej pamięci danych. 

Działanie: kopiuje bajt z/do komórki zewnętrznej pamięci danych wskazanej rejestrem 

indeksowym. 
Dozwolone argumenty: A,@Ri A,@DPTR @Ri,A @DPTR,A. 

XCH - zamień. 

Działanie: wymienia między sobą zawartość dwóch rejestrów. 
Dozwolone argumenty: A,Rr A,direct A,@Ri. 

XCHD - zamień młodsze 4 bity. 

Działanie: wymienia między dwoma rejestrami zawartość ich 4 młodszych bitów. 
Dozwolone argumenty: A,@Ri. 

PUSH

(2)

 - przesłanie bajtu na stos. 

Działanie: inkrementuje zawartość rejesru SP i kopiuje zawartość komórki pod adres 
wskazywany przez SP. 

Dozwolone argumenty: direct. 

POP

(2)

 - pobranie bajtu ze stosu. 

Działanie: kopiuje zawartość komórki wskazywanej przez SP do komórki podanej w 

wywołaniu i dekrementuje zawartość SP. 
Dozwolone argumenty: direct. 

Skoki

(2)

:

ACALL - wywołanie podprogramu w stronie 2kB. 
Działanie: zapisuje na stos zawartość PC i wykonuje skok do adresu początku procedury. 

Dozwolone argumenty: addr11. 

LCALL - wywołanie podprogramu. 
Działanie: zapisuje na stos zawartość PC i wykonuje skok do adresu początku procedury. 

Dozwolone argumenty: addr16. 

RET - powrót z procedury. 
Działanie: pobiera ze stosu zawartość licznika rozkazów i przekazuje sterowanie do 

znajdującego się tam adresu. 

RETI - powrót z procedury obsługi przerwania. 
Działanie: pobiera ze stosu zawartość licznika rozkazów i przekazuje sterowanie do 

znajdującego się tam adresu. 

4

background image

LJMP - rozkaz skoku w obszarze 64kB. 
Działanie: wpisuje do licznika rozkazów podany adres. 

Dozwolone argumenty: addr16. 

AJMP - rozkaz skoku w stronie 2kB. 
Działanie: zastępuje 11 młodszych bitów PC wartością podaną w wywołaniu. 

Dozwolone argumenty: addr11. 

SJMP - rozkaz skoku w obszarze 256B. 
Działanie: następuje zmiana zawartości PC o wartość w kodzie U2 podaną w wywołaniu. 

Dozwolone argumenty: rel. 

JMP - rozkaz skoku w trybie pośrednim. 
Działanie: przepisuje do PC wartość będącą sumą zawartości rejestru indeksowego i 

bazowego. 
Dozwolone argumenty: @A+DPTR. 

JZ - skok warunkowy. 

Działanie: wykonuje skok, jeżeli zawartość akumulatora równa jest 0. 
Dozwolone argumenty: rel. 

JNZ - skok warunkowy. 

Działanie: wykonuje skok, jeżeli zawartość akumulatora jest różna od 0. 
Dozwolone argumenty: rel. 

JC - skok warunkowy. 

Działanie: wykonuje skok, jeżeli bit przeniesienia C jest ustawiony. 
Dozwolone argumenty: rel. 

JNC - skok warunkowy. 

Działanie: wykonuje skok, jeżeli bit przeniesienia C jest wyzerowany. 
Dozwolone argumenty: rel. 

JB - skok warunkowy. 

Działanie: wykonuje skok, jeżeli dany bit jest ustawiony. 
Dozwolone argumenty: bit,rel. 

JNB - skok warunkowy. 

Działanie: wykonuje skok, jeżeli dany bit jest wyzerowany. 
Dozwolone argumenty: bit,rel. 

JBC - skok warunkowy. 

Działanie: gdy dany bit jest ustawiony, to nastąpi skok i wyzerowanie bitu. 
Dozwolone argumenty: bit,rel. 

CJNE - skok warunkowy, zależny od wyniku porównania. 

Działanie: następuje porównanie operandów, jeżeli są różne, to następuje skok. 
Dozwolone argumenty: A,direct,rel A,#data,rel Rr,#data,rel @Ri,#data,rel. 

Modyfikowane znaczniki: C (ustawiany, jeżeli pierwszy operand mniejszy od drugiego). 

DJNZ - skok warunkowy, zależny od wyniku dekrementacji. 
Działanie: następuje dekrementacja zawartości operandu, jeżeli zawartość nie osiągnęła 

zera, to nastąpi skok. 
Dozwolone argumenty: Rr,rel direct,rel. 

5

background image

Specyficznym rozkazem nie kwalifikującym się do powyższych grup jest rozkaz NOP (jego 

kod binarny to 00H). Jego wykonanie nie wywołuje żadnych efektów, zajmuje jedynie 
czas 1 cyklu maszynowego. Często jest on wykorzystywany jako rezerwacja miejsca 

pamięci przeznaczonego na późniejszą rozbudowę programu, lub jako niewielkie (1 cykl) 
opóźnienie w wykonywaniu programu. 

6

background image

Wstęp 

Jednym z najpopularniejszych obecnie mikrokontrolerów 8-bitowych, jest układ 8051. Na 

jego bazie powstała duża rodzina mikrokontrolerów. Poszczególne układy rodziny różnią 
się między sobą zestawem, scalonych razem z procesorem, urządzeń peryferyjnych. 

Strona ta ma na celu przedstawienie ogólnej architektury oraz budowy jednego z 
najpopularniejszych obecnie: mikrokontroler 8051. Układ ten jest jedną z najlepszych 

metod nauczenia się metod i sposobów programowania. Mikrokontroler 8051 jest 
programowany na poziomie asemblera (tzw. Język programowania niskiego poziomu).Dla 

użytkownika rozkazy zapisane są w postaci symbolicznej, znacznie czytelniejszej dla 
człowieka niż cała masa zer i jedynek. Umożliwia on również pracę na komputerze 

połączonym z układem DSM-51 Za pomocą kabla RS232 (port COM1 systemu z wolnym 
portem komputera). Po włączeniu zasilania system wypisuje na wyświetlaczu: DSM-51 

MODE 0 >>PC CONTROL<< i oczekuje na polecenia z komputera. Polecenia te mogą być 
wydawane przez program DSM51.EXE lub DSM51RUN.EXE. Służą one przede wszystkim 

do przesłania programu użytkownika z komputera i uruchomieniu go w systemie DSM-51. 
Dzięki systemowi transmisji równoległej 8255 (zawartym w układzie) jest możliwe 

również dołączenie do mikrokontrolera zewnętrznych układów sterowanych przez system 
DSM-51. Najprostszym przykładem jest model przedstawiający skrzyżowanie dróg, które 

po podłączeniu do układu steruje sygnalizacją świetlną skrzyżowania. Układ ten posiada 
masę innych zalet tu nie wymienionych tak więc niewątpliwie mikrokontroler 8051 jako 

jeden z najuniwersalniejszych, a zarazem najprostszych urządzeń tego typu zasługuje na 
uwagę i zainteresowanie. 

7

background image

Aby poznać i zrozumieć działanie i zastosowania mikrokontrolera 8051 należy najpierw 
zrozumieć czym są mikrokontrolery oraz czym różnią się one od mikroprocesorów. Tak 

więc mikrokontroler to pojedynczy układ scalony, w którym w jednej strukturze zawarto 
mikroprocesor oraz pewien zestaw często potrzebnych elementów zewnętrznych. Takie 

połączenie umożliwia budowę kompletnych sterowników mikroprocesorowych, w których 
wszystkie funkcje spełnia jeden układ scalony. 

Z kolei mikroprocesor (µP) jest automatem sekwencyjnym, synchronicznym 

wykonującym dołączony z zewnątrz program. Częstotliwość zegara µP. decydująca m.in. 
o szybkości pracy jest ograniczona zawsze od góry i przeważnie od dołu. Wykonywany 

program składa się z tzw. rozkazów (instrukcji), są to niepodzielne dla programisty 
czynności, które może wykonać µP. Zwykle występują µP. z tzw. stałą listą instrukcji 

narzuconą przez projektanta µP. która może być albo uniwersalna albo zorientowana (np. 
w kierunku przetwarzania danych, sterowania, przetwarzania sygnałów analogowych w 

postaci cyfrowej). Ponadto występują także rozwiązania w których wykorzystujący µP. 
definiuje własną listę rozkazów, składając je z czynności prostych. Sekwencje tych 

czynności są zawarte w dołączonej zewnętrznie, tzw. stałej pamięci mikroprogramu. W 
µP. o stałej liście instrukcji pamięć taka znajduje się wewnątrz struktury. Namiastką 

własnych rozkazów są tak zwane emulatory, tj. Instrukcje wywołujące zdefiniowaną 
wcześniej sekwencję rozkazów nie na zasadzie instrukcji CALL, lecz posiłkując się 

numerem emulatora (adres znajduje się w tabeli stanów wyjątkowych). W zależności od 
tego ile bitów może równolegle przetwarzać µP. mówimy o układach 4, 8, 12, 16, 32, 64-

bitowych. Aby powstał system µP. musimy doń dołączyć pamięć programu, pamięć 
danych i niezbędne układy peryferyjne (wejścia / wyjścia). W skład typowego µP. 

wchodzą następujące podzespoły: 

  Licznik programu PC (program counter). Służy do adresacji pobieranego przez µP. 

kodu programu z dołączonej pamięci. 
  Układ arytmetyczno-logiczny ALU. Z tym układem wykonawczym związany jest rejestr 

tzw. bitów warunkowych (statusowy, flagowy), którego poszczególne bity informują o 
efekcie przeprowadzonej w ALU operacji. 

  Wskaźnik stosu SP (stack pointer). Podstawowym zastosowaniem SP jest 
zapamiętywanie adresu powrotnego przy wywołaniu z różnych miejsc tej samej 

procedury. 
  Rejestry. Rejestry wewnętrzne dostępne software'owo służą do chwilowego 

przechowywania danych, adresów, tzw. przesunięć, bądź wartości indeksujących co 
związane jest z różnymi trybami adresacji argumentów. 

  Układy sterowania, synchronizacji, zegarowe, multipleksery, bufory szyn 
zewnętrznych, dekodery instrukcji, które zapewniają właściwe działanie µP., układy te z 

oczywistych względów nie występują w zapisie kodu programów. µP. łączy się z 
pamięciami i układami we. / wy. Za pomocą szeregu sygnałów (jedno-, dwukierunkowe, 

trójstanowe, typu otwarty kolektor OC). Sygnały te łączymy w zespoły funkcjonalne tzw. 
szyny. Wyróżniamy szyny: 

- adresową

- danych
- sterującą

8

background image

Pozostałe cechy układu 8051 to: 

  rozbudowane zasoby wewnętrzne (np. programowalne układy czasowe, układ 

transmisji szeregowej, układ przerwań, wewnętrzna pamięć programu i danych), 
  możliwość dołączenia zewnętrznej pamięci programu i danych po 64 kB każda, 

  rozwinięta, jednolita lista rozkazów. 

Wady układu to: 

  brak możliwości współpracy z innymi układami czynnymi (np. DMA) na wspólnej 

szynie, 
  brak możliwości współpracy z wolnymi układami we/wy i wolnymi pamięciami. 

Mikrokomputery rodziny MCS-51 są aktualnie produkowane w wielu odmianach przez 
wiele firm. Poszczególne układy są jednak zgodne pod względem programowym z ich 

pierwowzorem, zazwyczaj posiadają jakieś dodatkowe elementy lub rozbudowane zasoby 
8051. 

9

background image

W mikrokontrolerze 8051 możemy wyróżnić następujące bloki: 

arytmometr,

  

 

pamięć danych,

  

 

blok rejestrów specjalnych,

  

 

pamięć programu,

  

 

porty wejścia/wyjścia,

  

 

programowany układ czasowy,

  

 

układ transmisji szeregowej,

  

 

układ przerwań,

  

 

generator sygnału taktującego,

  

 

układ sterowania (wraz ze sterowaniem trybami uśpienia - obniżonego poboru

  

 

mocy - tylko w nbsp;80C51).

 

Rysunek przedstawia uproszczony schemat blokowy mikrokontrolera 8051.

Cykl maszynowy mikrokontrolera 8051 składa się z sześciu stanów oznaczonych S1 do 

S6. Każdy ze stanów trwa dwa okresy sygnału taktującego, oznaczonych jako fazy P1 i 
nbsp;P2. Wynika z nbsp;tego, że czas trwania cyklu maszynowego wynosi 12 taktów 

zegara, co dla częstotliwości rezonatora równej 12MHz daje czas 1us. Czas wykonywania 
instrukcji wynosi jeden, dwa lub cztery cykle maszynowe, w zależności od instrukcji. Na 

rysunku przedstawiono cztery różne cykle rozkazowe dla czterech różnych instrukcji.

10

background image

Przebieg a) przedstawia cykl rozkazowy instrukcji jednobajtowej wykonywanej w 
nbsp;pojedynczym cyklu maszynowym, przebieg b) przedstawia przypadek wykonywania 

instrukcji dwubajtowej wykonywanej w pojedynczym cyklu maszynowym, przebieg c) 
obrazuje wykonanie instrukcji jednobajtowej wykonywanej w nbsp;ciągu dwóch cykli 

maszynowych. 

W związku z nbsp;multipleksowaniem szyny adresowej A0-A7 i szyny danych, 
mikrokontroler musi generować dodatkowy sygnał sterujący zewnętrznym buforem 

zatrzaskowym - tym sygnałem jest ALE. Sygnał ten jest generowany podczas pobierania 
każdego słowa rozkazu dwukrotnie w każdym cyklu maszynowym. Wyjątek stanowi 

rozkaz MOVX (oraz MOVC przy dostępie do zewnętrznej pamięci programu) realizujący 
dostęp do pamięci zewnętrznej. Instrukcja ta jest jednobajtowa, wykonywana w 

nbsp;dwóch cyklach maszynowych. W nbsp;pierwszym cyklu następuje odczyt kodu 
instrukcji (pierwszy sygnał ALE) oraz ustawienie adresu żądanej komórki pamięci (drugi 

sygnał ALE). W nbsp;drugim cyklu maszynowym następuje odczyt/zapis szyny danych - 
nie może wówczas wystąpić sygnał ALE, gdyż zniszczyłby on nbsp; wcześniej ustawiony 

adres komórki pamięci. 

11

background image

Arytmometr 

Podstawowymi elementami składowymi arytmometru są: 

8-bitowa jednostka arytmetyczno-logiczna z układem korekcji dziesiętnej,

rejestry pomocnicze używane przy wykonywaniu obliczeń (niedostępne dla 
programisty),

dekoder rozkazów.

Z arytmometrem współpracują ponadto dwa rejestry 

bloku rejestrów specjalnych

: 

akumulator (ACC) irejestr B. Akumulator najczęściej zawiera jeden zoperandów i 

zapisywany jest w nim wynik operacji, rejestr B jest natomiast wykorzystywany przy 
operacjach mnożenia i dzielenia. 

Argumentami operacji wykonywanych przez arytmometr mogą być również inne rejestry 
specjalne, komórki pamięci lub dane podawane bezpośrednio. 

Arytmometr może wykonywać następujące operacje za argumentach ośmiobitowych: 

dodawanie,

dodawanie z nbsp;przeniesieniem,

odejmowanie z nbsp;pożyczką,

inkrementacja,

dekrementacja,

mnożenie w nbsp;naturalnym kodzie binarnym dające 16-bitowy wynik,

dzielenie w nbsp;naturalnym kodzie binarnym dające 8-bitowy wynik i nbsp;8-
bitową resztę,

iloczyn logiczny, suma logiczna i nbsp;suma modulo 2,

zerowanie, negacja i nbsp;rotacja zawartości akumulatora,

korekcja dziesiętna zawartości akumulatora.

Arytmometr może wykonywać operacje logiczne również na pojedynczych bitach. Dla 
tych operacji akumulatorem jest bit przeniesienia C słowa stanu PSW. 

Rejestr specjalny PSW nbsp; bezpośrednio współpracuje z nbsp;arytmometrem. Jego 
zawartość opisuje cechy wyniku ostatnio wykonywanej operacji. 

bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0

C

AC

F0

RS1

RS0

OV

-

P

Słowo stanu PSW

Znaczenie poszczególnych bitów jest następujące: 

P (ang. parity) - znacznik parzystości; ustawiony na "1" informuje o nbsp;nieparzystej 
liczbie jedynek w nbsp;akumulatorze. Jest ustawiany po wykonaniu każdego rozkazu, w 

nbsp;zależności od zawartości akumulatora. 
OV (ang. overflow) - znacznik nadmiaru dla dodawania i odejmowania w nbsp;kodzie U2. 

Dla mnożenia "1" wskazuje niezerową wartość rejestru B, dla dzielenia "1" oznacza 
wystąpienie dzielenia przez zero. 

RS0, RS1 - bity wyboru bloku rejestrów roboczych. 

RS1 RS0

Wybrany blok:

12

background image

0

0

blok 0

0

1

blok 1

1

0

blok 2

1

1

blok 3

Znaczenie bitów RS0 i RS1

F0 - znacznik uniwersalny do dowolnego wykorzystania. 

AC (ang. auxiliary carry) - znacznik przeniesienia połówkowego; ustawiany w 
nbsp;przypadku wystąpienia przeniesienia z nbsp;ACC.3 na ACC.4. 

C (ang. carry) - znacznik przeniesienia; ustawiany w przypadku wystąpienia przeniesienia 
z nbsp;pozycji siódmego bitu akumulatora. 

13

background image

Pamięć danych 

Na wewnętrzną pamięć danych składają się dwa bloki: 128 bajtów ciągłego obszaru 
pamięci RAM oraz obszar 128 bajtów niespójnego 

bloku rejestrów specjalnych (SFR) 

mikrokontrolera. 

Adresy 48-127 (30H-7FH)

Pamięć danych użytkownika

Adresy 32-47 (20H-2FH)

Pamięć adresowana bitowo (adresy 0-127 (0H-7FH))

Adresy 24-31 (18H-1FH)

Rejestry R0-R7 - blok 3

Adresy 16-23 (10H-17H)

Rejestry R0-R7 - blok 2

Adresy 8-15 (8H-0FH)

Rejestry R0-R7 - blok 1

Adresy 0-7 (0H-7H)

Rejestry R0-R7 - blok 0

Mapa pamięci RAM mikrokontrolera 8051.

Obszar od adresu 0 do 31 (0H-1FH) zajmują cztery banki rejestrów roboczych, po osiem 
rejestrów w banku (wybierane bitami RS1 i RS0 rejestru PSW). Rejestry te mają 

oznaczenia R0 do R7 i mogą być wykorzystywane do przechowywania danych. Wyjątek 
stanowią rejestry R0 i R1 każdego bloku, które mogą być wykorzystane do indeksowego 

adresowania wewnętrznej i zewnętrznej pamięci danych. Po wyzerowaniu 
mikrokontrolera sygnałem RST użytkownik ma do dyspozycji blok 0. 

Obszar pamięci o adresach 32-47(20H-2FH) może być używany do przechowywania 

dowolnych danych wykorzystywanych wprogramie. Cechą tego obszaru jest to, że 
możliwe jest zaadresowanie pojedynczego bitu komórki pamięci. Bity te są dostępne pod 

adresami 0-127 (0H-7FH), aadres bitu, który chcemy zaadresować, można określić przy 
użyciu wzoru: (n-32)*8+i, gdzie n jest adresem słowa pamięci, a i jest numerem bitu w 

tym słowie. Wynika z tego, że adresy te pokrywają się z adresami komórek pamięci, 
jednak nie stanowi to przeszkody, gdyż do pojedynczych bitów odwołują się specyficzne 

rozkazy mikrokontrolera, co pozwala jednoznacznie stwierdzić czy adresowana jest 
komórka czy pojedynczy bit. 

Obszar pamięci o adresach 48-127 (30H-7FH) nie posiada już żadnych specyficznych 

własności i wykorzystywany jest jak zwykła pamięć o organizacji bajtowej. 

Mimo różnych własności poszczególnych obszarów pamięci, cała pamięć może być 
adresowana jak pamięć o bajtowej organizacji w sposób bezpośredni lub indeksowy przy 

użyciu rejestrów R0 i R1. 

W wewnętrznej pamięci danych umieszczany jest stos programu. Może on być 
umieszczony w dowolnym miejscu przez zapis odpowiedniego adresu do rejestru SP 

będącego wskaźnikiem stosu, jednak po wyzerowaniu mikrokontrolera sygnałem RST 
wskaźnik stosu przyjmuje wartość 7. SP należy do bloku rejestrów specjalnych, a jego 

zawartość wskazuje na ostatnie zajęte słowo stosu. Wskaźnik stosu jest inkrementowany 
przed każdym zapisem na stos i dekrementowany po każdym odczycie. 

Oprócz pamięci wewnętrznej danych możliwe jest dołączenie do mikrokontrolera 

zewnętrznej pamięci danych o pojemności do 64kB. Ponieważ mikrokontroler nie posiada 
osobnych rozkazów do dostępu do urządzeń wejścia-wyjścia, to w obszarze adresowym 

64kB zewnętrznej pamięci danych mogą być również umieszczane rejestry dołączanych 
do systemu urządzeń we/wy.

Blok rejestrów specjalnych mikrokontrolera 8051 

14

background image

Blok rejestrów specjalnych (SFR; ang. Special Function Registers) znajduje się w 

niespójnym obszarze 

pamięci danych

 mikrokontrolera o adresach 128-240 (80H-0F0H). 

Obszar rejestrów SFR mikrokontrolera '51 jest wykorzystywany dwojako - z jednej strony 

umieszczone są w nim wszystkie (za wyjątkiem licznika rozkazów i czterech banków 
rejestrów R0-R7) rejestry sterujące pracą mikrokontrolera lub wykorzystywane 

bezpośrednio przy wykonywaniu programu; z drugiej zaś strony rejestry SFR stanowią 
rodzaj interfejsu pomiędzy mikroprocesorem a układami peryferyjnymi umieszczonymi 

wewnątrz mikrokontrolera. Wszystkie operacje sterowania wewnętrznymi układami 
peryferyjnymi oraz przesyłania danych między nimi a CPU, odbywają się właśnie za 

pośrednictwem rejestrów SFR. Dostęp do każdego z tych rejestrów możliwy jest 
wyłącznie w trybie adresowania bezpośredniego. Nazwy rejestrów SFR są zazwyczaj 

nazwami predefiniowanymi w asemblerach mikrokontrolerów rodziny '51, więc 
najczęściej nie trzeba znać adresu danego rejestru - wystarczy pamiętać jego nazwę. 

Nazwa

Adres

Pełniona funkcja

P0

128 (80H)

Port we/wy 0

SP

129 (81H)

Wskaźnik stosu

DPL

130 (82H)

Rejestr indeksowy DPTR (mniej znaczący bajt)

DPH

131 (83H)

Rejestr indeksowy DPTR (bardziej znaczący bajt)

PCON

135 (87H)

Rejestr sterujący stanami uśpienia

TCON

136 (88H)

Rejestr sterujący układów czasowych 0 i 1

TMOD

137 (89H)

Rejestr trybu pracy układów czasowych 0 i 1

TL0

138 (8AH) Rejestr danych układu czasowego 0 (mniej znaczący)

TL1

139 (8BH) Rejestr danych układu czasowego 1 (mniej znaczący)

TH0

140 (8CH) Rejestr danych układu czasowego 0 (bardziej znaczący)

TH1

141 (8DH) Rejestr danych układu czasowego 1 (bardziej znaczący)

P1

144 (90H)

Port we/wy 1

SCON

152 (98H)

Rejestr sterujący układu transmisji szeregowej

SBUF

153 (99H)

Rejestr danych układu transmisji szeregowej

P2

160 (0A0H) Port we/wy 2

IE

168 (0A8H) Rejestr maski przerwań

P3

176 (0B0H) Port we/wy 3

IP

184 (0B8H) Rejestr priorytetów przerwań

PSW

208 (0D0H) Słowo stanu procesora

ACC

224 (0E0H) Akumulator

B

240 (0F0H)

Rejestr ogólnego przeznaczenia

Rejestry specjalne mikrokontrolera 8051.

Dodatkowo wszystkie rejestry umieszczone pod adresami podzielnymi przez 8 dostępne 
są także bitowo. Adres określonego bitu można określić posługując się zależnością 

adres=m+n, gdzie "m" jest adresem rejestru SFR, a "n" jest numerem adresowanego 
bitu (licząc od 0). 

15

background image

Rejestry SFR adresowalne bitowo. 

Nazwy i adresy poszczególnych bitów. 

SFR

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

P0

P0.7 

135

P0.6 

134

P0.5 

133

P0.4 

132

P0.3 

131

P0.2 

130

P0.1 

129

P0.0 

128

TCON

TF1 

143

TR1 

142

TF0 

141

TR0 

140

IE1 

139

IT1 

138

IE0 

137

IT0 

136

P1

P1.7 

151

P1.6 

150

P1.5 

149

P1.4 

148

P1.3 

147

P1.2 

146

P1.1 

145

P1.0 

144

SCON

SM0 

159

SM1 

158

SM2 

157

REN 

156

TB8 

155

RB8 

154

Ti 

153

RI 

152

P2

P2.7 

167

P2.6 

166

P2.5 

165

P2.4 

164

P2.3 

163

P2.2 

162

P2.1 

161

P2.0 

160

IE

EA 

175

174

ET2 

173

ES 

172

ET1 

171

EX1 

170

ET0 

169

EX0 

168

P3

P3.7 

183

P3.6 

182

P3.5 

181

P3.4 

180

P3.3 

179

P3.2 

178

P3.1 

177

P3.0 

176

IP

191

190

PT2 

189

PS 

188

PT1 

187

PX1 

186

PT0 

185

PX0 

184

PSW

215

AC 

214

F0 

213

RS1 

212

RS0 

211

OV 

210

209

208

ACC

ACC.7 

231

ACC.6 

230

ACC.5 

229

ACC.4 

228

ACC.3 

227

ACC.2 

226

ACC.1 

225

ACC.0 

224

B

B.7 

247

B.6 

246

B.5 

245

B.4 

244

B.3 

243

B.2 

242

B.1 

241

B.0 

240

Niektóre spośród rejestrów SFR, które nie są aktualnie wykorzystywane do sterowania 
zasobami mikrokontrolera można wykorzystać jako pamięć o dostępie bezpośrednim, 

jednak pod warunkiem, że zmiana zawartości danego rejestru nie wpłynie na pracę 
programu i funkcjonowanie mikrokontrolera.

Pamięć programu mikrokontrolera 8051 

16

background image

Standardowy mikrokontroler 8051 posiada 4KB pamięci programu typu ROM 

programowane maską. Niektóre wersje układu posiadają pamięć EPROM lub EEPROM. 
Pamięć programu przechowuje kody operacji przeznaczonych do wykonania przez 

mikroprocesor, może także służyć do przechowywania stałych używanych w programie. 
Pamięć programu adresowana jest przez 16-bitowy licznik rozkazów (PC, ang. Program 

Counter). Mikrokontroler 8051 może także korzystać z zewnętrznej pamięci programu o 
pojemności do 64KB. To, z której z tych pamięci pobierane są rozkazy zależy od stanu 

wyprowadzenia EA'. W przypadku korzystania z wewnętrznej pamięci programu, 
wyprowadzenie EA' musi być ustawione w stan wysoki. Jeśli pojemność wewnętrznej 

pamięci programu jest niewystarczająca, część programu może być umieszczona w 
pamięci zewnętrznej. Wówczas dopóki wartość licznika rozkazów nie przekracza rozmiaru 

wewnętrznej pamięci programu, rozkazy pobierane są z pamięci wewnętrznej. 
Przekroczenie przez licznik rozkazów wartości 0FFFH powoduje pobieranie rozkazów z 

zewnętrznej pamięci programu. Jeśli mikrokontroler ma korzystać wyłącznie z 
zewnętrznej pamięci programu, wyprowadzenie EA' musi być ustawione w stan niski. W 

większości mikrokontrolerów rodziny '51 wyprowadzenie EA' nie posiada wewnętrznego 
rezystora podciągającego i nie może pozostawać nie podłączone ("wisieć w powietrzu"). 

Zerowanie (RST) mikrokontrolera powoduje ustawienie licznika rozkazów w stan 0000H, 

tak więc początek programu musi być umieszczony pod adresem 0000H. Zwykle 
umieszczana jest tam instrukcja skoku do dalszego obszaru pamięci programu, ponieważ 

począwszy od adresu 0003H pierwsze kilkadziesiąt bajtów wykorzystywane jest przez 
procedury obsługi przerwań: 

Adres

Zawartość

0003H Początek procedury obsługi przerwania zewnętrznego INT0'
000BH Początek procedury obsługi przerwania z układu czasowego T0
0013H Początek procedury obsługi przerwania zewnętrznego INT1'
001BH Początek procedury obsługi przerwania z układu czasowego T1
0023H

Początek procedury obsługi przerwania z układu transmisji szeregowej

Umieszczenie procedur obsługi przerwań 8051 w pamięci programu.

PC zawiera adres aktualnego rozkazu przeznaczonego do wykonania. Rozkaz ten jest 

pobierany z pamięci do rejestru rozkazów (rejestr ten nie jest dostępny programowo). Na 
podstawie zawartości rejestru rozkazów, dekoder rozkazów steruje wyborem źródła 

argumentu, miejsca umieszczenia wyniku, funkcjami arytmometru itp. - w ten sposób 
mikroprocesor wykonuje zadaną operację. Jeżeli nie jest wykonywany rozkaz skoku, to 

zawartość licznika rozkazów jest inkrementowana po odczycie każdego bajtu z pamięci 
programu. 

Porty wejścia/wyjścia mikrokontrolera 8051 

17

background image

Linie we/wy mikrokontrolera 8051 pogrupowane są w cztery 8-bitowe porty: 

  

P0

 - linie P0.0/AD0 - P0.7/AD7 

  

P1

 - linie P1.0 - P1.7 

  

P2

 - linie P2.0/A8 - P2.7/A15 

  

P3

 - linie P3.0/RxD', P3.1/TxD', P3.2/INT0', P3.3/INT1', P3.4/T0, P3.5/T1, 

P3.6/WR', P3.7/RD' 

Wszystkie linie portów P0-P3 pracujące jako standardowe linie wejścia/wyjścia są 

niezależne pod względem kierunku przesyłania informacji. Rejestry P0-P3 złożone z 
przerzutników poszczególnych linii wchodzą w skład 

bloku rejestrów specjalnych

, przy 

czym możliwe jest adresowanie ich poszczególnych bitów, co umożliwia bezpośrednie 
sterowanie pojedynczymi liniami we/wy. Funkcje i struktura linii we/wy są odmienne dla 

każdego z układów P0-P3 

Struktura portu P0. 

Na rysunku przedstawiono strukturę pojedynczej linii portu P0. Osiem takich struktur 

tworzy port P0 dostępny poprzez blok rejestrów specjalnych. W czasie normalnej pracy 
jako wejście/wyjście (stan 0 na linii sterowanie) tranzystor T1 jest wyłączony, a stan 

tranzystora T2 zależy bezpośrednio od stanu przerzutnika D, który wchodzi w skład 
rejestru P0 bloku SFR. Jeżeli w przerzutniku zapisana jest jedynka, to tranzystor T2 jest 

wyłączony i wyjście układu przechodzi w stan wysokiej impedancji. W przypadku 
wpisania zera, T2 jest włączony i na wyjściu panuje stan niski. Wyjścia układu P0 

podczas wyprowadzania informacji zachowują się jak linie typu otwarty dren. Wymaga to 
dołączenia zewnętrznego rezystora podciągającego w celu uzyskania wysokiego poziomu 

napięcia odpowiadającego jedynce wpisanej do przerzutnika. Podczas wprowadzania 
informacji stan linii zewnętrznej jest wprowadzany poprzez bufor na wewnętrzną szynę 

danych, jednak aby odczyt linii portu był możliwy, wcześniej do przerzutnika musi zostać 
wpisana jedynka. 

Istnieje grupa rozkazów mikrokontrolera, które odczytują, modyfikują i ponownie 

zapisują zawartość rejestru P0 (P1, P2, P3). Są to rozkazy typu 

RMW

 (ang. Read-Modify-

Write). Poszczególne bity rejestru odczytywane są przez bufory dołączone do wyjścia Q 

przerzutnika, ich wartość jest przekazywana do arytmometru, gdzie następuje wykonanie 
operacji, a następnie nowa wartość jest ponownie wprowadzana do przerzutnika. 

Układ P0 oprócz funkcji we/wy pełni rolę szyny danych multipleksowanej z mniej 

znaczącą częścią szyny adresowej podczas realizacji dostępu do pamięci zewnętrznej. 
Wtedy stan linii sterującej S=1 i tranzystory T1 i T2 są sterowane wewnętrzną linią 

adresu/danych. Poziom niski włącza T2 i wyłącza T1 co powoduje stan "0" na wyjściu 
układu; poziom wysoki wyłącza T2 i włącza T1 powodując stan wysoki na wyjściu - nie 

ma przy tym konieczności instalowania rezystora podciągającego. Dane z szyny danych 

18

background image

odczytywane są w taki sam sposób jak przy pracy portu jako wejście/wyjście. 

Wykonanie dostępu do pamięci zewnętrznej powoduje zapisanie samych jedynek do 
rejestru P0, niszcząc tym samym przechowywaną w nim informację. Z tego powodu 

korzystanie z pamięci zewnętrznej wyklucza w zasadzie możliwość korzystania z P0 jako 
wejścia/wyjścia. Każdą linię portu P0 można obciążyć ośmioma wejściami TTL-LS. 

Struktura portu P1. 

Na rysunku przedstawiono pojedynczą linię portu P1. Przerzutnik D będący jej 

elementem wchodzi w skład rejestru P1 bloku SFR. Modyfikacji stanu przerzutnika D 
można dokonać rozkazami zapisu lub 

RMW

, tak jak w przypadku układu P0. Przerzutnik 

D steruje bezpośrednio tranzystorem wyjściowym. Rezystor zapewnia ustalenie 
wysokiego poziomu napięcia przy wyłączonym tranzystorze (jedynka w przerzutniku). 

Podczas wprowadzania informacji rozkazami odczytu linii zewnętrznej wymagane jest 
zapisanie jedynki do przerzutnika D. Linie układu P1 nie pełnią żadnych dodatkowych 

funkcji. Można je obciążać czterema wejściami TTL-LS. 

Struktura portu P2. 

Na rysunku przedstawiono budowę pojedynczej linii portu P2. Zasada działania linii portu 

P2 jest taka sama jak portu P1, pod warunkiem, że dodatkowe funkcje tego układu nie są 
wykorzystywane (stan niski na linii sterowanie). Dodatkowo jednak, podczas dostępu do 

pamięci zewnętrznej, port P2 pełni rolę bardziej znaczącej części szyny adresowej (A8-
A15). Wtedy przy pomocy linii S=1 (sterowanie) zostaje przełączony multiplekser i 

19

background image

sterowanie tranzystora wyjściowego pochodzi z wewnętrznej linii adresu. Zawartość 
przerzutnika D nie jest niszczona i jego zapisany w nim stan pojawia się na wyjściu portu 

po zakończeniu cyklu dostępu o pamięci. 

W przypadku realizacji dostępu do zewnętrznej pamięci danych przy użyciu rejestrów 
indeksowych R0 i R1 mikroprocesor ustawia tylko młodsze osiem bitów adresu, a stan 

portu P2 nie zmienia się. Linie portu P2 można obciążać czterema wejściami TTL-LS. 

Struktura portu P3. 

W porcie P3 wszystkie linie pełnią dodatkowe funkcje, jednak w podstawowym trybie 

pracy jako wejście/wyjście działanie portu P3 nie różni się w niczym od działania portów 
P1 i P2.W zależności od tego czy realizowana funkcja dodatkowa jest 

wyjściem

 (TxD, RD', 

WR') czy 

wejściem

 (pozostałe oprócz RxD) lub pełni 

obie funkcje

 (RxD), różna jest 

struktura linii portu. Wykorzystanie dodatkowej funkcji linii jest możliwe jedynie po 

zapisaniu jedynki do przerzutnika D. W przypadku wyjść (P3.1/TxD', P3.6/WR', P3.7/RD') 
tranzystor T sterowany jest odpowiednim sygnałem wewnętrznym realizującym daną 

funkcję. Dla realizacji funkcji będącej wyjściem stan wyprowadzenia zewnętrznego 
podawany jest za pośrednictwem stale otwartego bufora na wewnętrzną linię 

mikrokontrolera. Linie portu P3 można obciążać czterema wejściami TTL-LS. 

Tranzystor symbolizujący stopień wyjściowy linii portów jest w rzeczywistości bardziej 
skomplikowaną strukturą, której schemat przedstawia rysunek. 

Zapis do przerzutnika następuje w ostatniej fazie cyklu maszynowego, a wpisana wartość 

pojawia się na wyjściu linii portu w pierwszej fazie następnego cyklu maszynowego - 
wyjściowy bufor linii portu sprawdza stan przerzutnika tylko podczas pierwszej fazy 

każdego cyklu zegarowego, a wykryty stan utrzymuje przez czas trwania drugiej fazy. 
Zmiana zawartości przerzutnika ze stanu niskiego na wysoki powoduje włączenie 

tranzystora T1, który pozostaje aktywny przez dwa cykle zegarowe. Tranzystor ten ma 
dużą wydajność prądową, spełnia rolę rezystora podciągającego o małej wartości 

rezystancji, a jego włączenie ma na celu przyspieszenie przejścia ze stanu logicznego 0 
do 1. Wpisanie do przerzutnika "1" powoduje dodatkowo włączenie T2, który jest 

włączony do momentu zmiany zawartości przerzutnika na "0". T2 stanowi rezystor 
podciągający o dużej wartości rezystancji i ma za zadanie utrzymanie linii w stanie 

wysokim. Włączenie T1 powoduje również włączenie T3, który również stanowi rezystor 
podciągający o dużej rezystancji. T3 jest jednak aktywny tylko wtedy, gdy napięcie na 

linii portu jest wyższe niż 1-1.5V. Jeżeli zostanie na linii portu wymuszony stan niski, to 
T3 jest wyłączony i jako jedyne obciążenie pozostaje tranzystor T2, co wpływa korzystnie 

20

background image

na zmniejszenie strat mocy w układzie. Jeżeli zaś linia pracuje jako wyjście, to 
równoczesna praca T2 i T3 powoduje zwiększenie wydajności prądowej wyjścia. Jeżeli do 

przerzutnika zostaje wpisane "0" to aktywny jest tylko tranzystor T4.

21

background image

Układy licznikowe mikrokontrolera 8051 

Mikrokontroler 8051 wyposażony jest w dwa układy licznikowe T0 i T1.Każdy z tych 
liczników składa się z dwóch ośmiobitowych połówek. Połówki te są widziane przez 

mikroprocesor jako 

rejestry specjalne

 TH0 i TL0 dla układu T0 oraz TH1 i TL1 dla układu 

T1. Każdy z obu liczników może pracować jako licznik (zlicza wówczas impulsy 

zewnętrzne) lub jako czasomierz (zlicza cykle maszynowe mikrokontrolera). Układy 
licznikowe mogą pracować w trybach 0, 1, 2 i 3. Wybór trybu pracy i sterowanie 

zliczaniem odbywa się za pośrednictwem 

rejestrów SFR

: TCON i TMOD

Rejestr:

bit 7

bit 6

bit 5

bit 4

bit 3

bit 2

bit 1

bit 0

TCON

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

TMOD

GATE

C/T'

M1

M0

GATE

C/T'

M1

M0

Rejestry sterujące pracą układów licznikowych.

Znaczenie poszczególnych bitów jest następujące: 

Rejestr TCON

TF1 - wskaźnik przerwania od licznika T1. Bit ustawiany sprzętowo wskutek 
przepełnienia licznika T1, zerowany sprzętowo w chwili rozpoczęcia wykonywania 
procedury obsługi przerwania. Możliwe programowe wywołanie przerwania.

TR1 - bit włączający (TR1=1) układ licznikowy T1.

TF0 - wskaźnik przerwania od licznika T0. Bit ustawiany sprzętowo wskutek 
przepełnienia licznika T0, zerowany sprzętowo w chwili rozpoczęcia wykonywania 
procedury obsługi przerwania.Możliwe programowe wywołanie przerwania.

TR0 - bit włączający (TR0=1) układ licznikowy T0.

IE1 - wskaźnik przerwania zewnętrznego INT1'. Ustawiany sprzętowo w wyniku 
wykrycia opadającego zbocza (lub niskiego poziomu w zależności od trybu pracy) 
na wyprowadzeniu INT1' mikrokontrolera. Zerowany sprzętowo w wyniku 

rozpoczęcia wykonywania procedury obsługi przerwania (tylko jeśli przerwanie 
jest aktywowane zboczem).Jeśli przerwanie jest aktywowane poziomem, to stan 

bitu odpowiada stanowi na wyprowadzeniu INT1' mikrokontrolera.

IT1 - bit określający stan wyprowadzenia INT1' aktywujący przerwanie: 0 - 
przerwanie aktywowane niskim poziomem, 1 - przerwanie aktywowane 
opadającym zboczem.

IE0 - jak IE1, dotyczy wyprowadzenia INT0'.

IT0 - jak IT1, dotyczy wyprowadzenia INT0'.

Rejestr TMOD

Rejestr jest podzielony na dwie 4-bitowe części zawierające bity o jednakowym 
znaczeniu. Cztery starsze bity rejestru tyczą się układu licznikowego T1, młodsze cztery 

bity dotyczą układu T0. 

GATE - bit sterujący bramkowaniem licznika. Dla GATE=1 zliczanie następuje, 
gdy sygnał INTn' i bit TRn odpowiadające danemu licznikowi są w stanie wysokim. 
Jeżeli GATE=0, to zliczanie następuje, gdy bit TRn danego licznika jest ustawiony.

C/T' - bit określający źródło zliczanych impulsów przez dany układ licznikowy: "0" 
oznacza zliczanie cykli maszynowych (impulsów o częstotliwości F

xtal

/12), "1" 

oznacza zliczanie impulsów zewnętrznych (z wyprowadzenia Tn odpowiadającego 
danemu licznikowi).

22

background image

M1, M0 - bity wyboru trybu pracy dla danego układu licznikowego:

M1

M0

Tryb pracy:

0

0

Tryb 0

0

1

Tryb 1

1

0

Tryb 2

1

1

Układ T0 - tryb 3, układ T1 zatrzymany

Znaczenie bitów M1 i M0 rejestru TMOD.

Przy pracy liczników w trybie czasomierza inkrementacja licznika następuje w każdym 

kolejnym cyklu maszynowym. W przypadku wykorzystywania układu w trybie licznika, 
jego zawartość jest zwiększana w odpowiedzi na opadające zbocze sygnału wejściowego. 

Detekcja zbocza odbywa się jednak synchronicznie z cyklem pracy mikrokontrolera przez 
testowanie stanu odpowiedniej linii wejściowej w każdym cyklu maszynowym. Jeżeli w 

pierwszym cyklu wykryto stan wysoki, a w następnym stan niski, to następuje 
zwiększenie zawartości licznika. Aby każde zbocze opadające zostało wykryte, to każdy 

stan na linii wejściowej nie może trwać krócej niż czas trwania jednego cyklu 
maszynowego, zatem maksymalna częstotliwość sygnału o wypełnieniu 50% jest 

ograniczona do wartości 1/24 F

xtal

Tryby pracy układów licznikowych mikrokontrolera 8051 posiadają następujące 

właściwości:

Tryb 0.

Tryb pracy 0 jest identyczny dla obu liczników. Na rysunku przedstawiono strukturę 
logiczną licznika T0 pracującego w ;trybie 0 (analogiczna jest struktura licznika T1 w 

trybie 0). 

Stan licznika jest określony zawartością odpowiedniego rejestru THn oraz pięciu 
młodszych bitów rejestru TLn. Przepełnienie tego 13-bitowego licznika spowoduje 

ustawienie odpowiedniego bitu przerwania TFn. Przebieg zliczania i źródło impulsów są 
określane za pomocą odpowiednich ustawień bitów sterujących pracą liczników (TCON, 

TMOD). 

23

background image

Tryb 1.

Tryb 1 jest identyczny dla obu liczników. Strukturę licznika T0 pracującego w trybie 1 
przedstawiono na rysunku. Tryb pracy 1 pod względem logicznym jest identyczny z 

trybem 0. Różnica polega na długości licznika: w trybie 1 zliczanie następuje w 16-
bitowym liczniku złożonym z rejestrów TLn i THn odpowiedniego układu licznikowego. 

Tryb 2.

Tryb 2 jest identyczny dla obu liczników. Strukturę licznika T0 pracującego w trybie 2 
przedstawiono na rysunku. W trybie 2 liczniki pracują jako 8-bitowe z automatycznym 

przeładowywaniem. Przepełnienie licznika TLn nie tylko ustawia odpowiedni znacznik 
przerwania TFn, lecz również powoduje przepisanie zawartości THn do odpowiedniego 

rejestru TLn. Nie powoduje to zmiany zawartości rejestru THn. 

Tryb 3.

Tryb 3 jest jedynym trybem różnym dla układów T1 i T0. Schemat logiczny układu 
licznikowego T0 pracującego w trybie 3 przedstawiono na rysunku. 

24

background image

W trybie 3 może pracować tylko układ T0. Wprowadzenie układu T1 w tryb 3 powoduje 
jego zatrzymanie. Układ T0 w trybie 3 stanowi dwa niezależne liczniki 8-bitowe, 

utworzone z rejestrów TL0 i TH0. Rejestr TL0 pracuje w układzie identycznym jak w 
trybach 0 i 1, z tą różnicą, że zliczanie następuje w liczniku 8-bitowym. Rejestr TH0 

pracuje również jako licznik 8-bitowy, może on jednak zliczać wyłącznie impulsy o czasie 
trwania cykli maszynowych mikrokontrolera. Do sterowania zliczania TH0 wykorzystano 

bity sterujące TR1 i TF1 układu czasowego T1. Wprowadzenie układu T0 w tryb 3 
ogranicza zatem wykorzystanie układu T1 do zastosowań nie wymagających 

wykorzystania przerwania (wyłączenie licznika T1 następuje w wyniku wprowadzenia go 
w jego własny tryb 3) i wówczas układ T1 jest najczęściej wykorzystywany do generacji 

sygnału taktującego dla układu transmisji szeregowej. 

25

background image

Układ transmisji szeregowej mikrokontrolera 8051 

Łącze szeregowe mikrokontrolera 8051 umożliwia prowadzenie synchronicznej lub 
asynchronicznej transmisji danych. Transmisja asynchroniczna jest transmisją full-

duplex, natomiast synchroniczna jest transmisją half-duplex. Układ odbiornika posiada 
bufor odbiorczy, co pozwala na realizację procesu odbierania kolejnej danej przed 

pobraniem przez mikroprocesor danej już odebranej. Jest to jednak bufor jednobajtowy, 
więc nie odczytanie danej przez mikroprocesor przed końcem kolejnej transmisji 

powoduje utratę odebranego wcześniej bajtu. 

Podczas realizacji transmisji asynchronicznej nadawane dane wysyłane są linią TxD, zaś 
odbierane przez linię RxD. Podczas transmisji synchronicznej dane są odbierane i 

nadawane po linii RxD, a na linię TxD wysyłany jest sygnał taktujący. 

Do konfiguracji pracy układu transmisji szeregowej służy rejestr SCON z 

bloku SFR

: 

bit 7

bit 6

bit 5

bit 4

bit 3

bit 2

bit 1

bit 0

SM0

SM1

SM2

REN

TB8

RB8

TI

RI

Rozmieszczenie bitów rejestru SCON.

SM0SM1 określają tryb pracy układu transmisji szeregowej:

SM1

SM0

Tryb pracy układu:

0

0

Tryb 0, transmisja synchroniczna

0

1

Tryb 1, transmisja asynchroniczna

1

0

Tryb 2, transmisja asynchroniczna

1

1

Tryb 3, transmisja asynchroniczna

Konfiguracja trybów pracy układu transmisji szeregowej.

SM2 steruje przejściem w tryb komunikacji wieloprocesorowej. Dla transmisji 
synchronicznej zalecane SM2=0, dla transmisji asynchronicznej SM2=1 powoduje 

ustawienie wskaźnika przerwania RI tylko wtedy, jeżeli bit stopu (transmisja 8-
bitowa) lub dziewiąty bit (transmisja 9-bitowa) jest równy jeden.

REN - bit włączający odbiornik: 1 - włączenie, 0 - wyłączenie.

TB8 - dziewiąty bit danych nadawanych podczas transmisji dziewięciobitowej.

RB8 - dziewiąty bit odebranej danej podczas transmisji dziewięciobitowej.

TI - wskaźnik przerwania nadajnika. Informuje o zakończeniu transmisji danej i 
gotowości nadajnika do przesyłania następnej. Bit musi być zerowany 
programowo przez procedurę obsługi przerwania.

RI - wskaźnik przerwania odbiornika. Informuje o prawidłowym odbiorze danej i 
jej gotowości do pobrania przez mikroprocesor. Bit musi być zerowany 

programowo przez procedurę obsługi przerwania.

26

background image

Tryb 0.

Tryb 0 posiada następujące cechy: 

transmisja synchroniczna,

prędkość transmisji stała i równa 1/12 F

xtal

,

przesyłane 8 bitów danych.

Nadawanie danych następuje wnastępnym cyklu maszynowym po wpisaniu danej przez 
mikroprocesor do rejestru SBUF. Dane nadawane są po linii RxD począwszy od najmniej 

znaczącego bitu. Jednocześnie na linii TxD pojawiają się impulsy taktujące. Po nadaniu 
ośmiu bitów linie RxD i TxD powracają do stanu "1" i ustawiany jest bit TI. 

Odbiór informacji rozpoczyna się poprzez ustawienie bitu REN=1 i RI=0. W następnym 

cyklu maszynowym podany zostaje sygnał taktujący na linię TxD i następuje odczyt 
informacji bit po bicie (począwszy od najmniej znaczącego). Po odebraniu ośmiu bitów, 

cała odebrana informacja przepisywana jest do rejestru SBUF i ustawiany jest wskaźnik 
przerwania RI. 

Tryb 1.

Tryb 1 posiada następujące cechy: 

transmisja asynchroniczna,

płynnie regulowana prędkość transmisji,

przesyłany jest bit startu równy "0", osiem bitów danych (od LSB), bit stopu 
równy "1",

Sygnałem taktującym transmisji są impulsy przepełnienia licznika T1 układu czasowego. 

Na szybkość transmisji ma również wpływ stan bitu SMOD rejestru PCON. Wyzerowanie 
bitu SMOD powoduje dwukrotne zmniejszenie prędkości transmisji. Szybkość transmisji 

możemy określić według wzoru V=(2

SMOD

*F przepełniania T1)/32. Licznik T1 może 

pracować w dowolnym z trybów, jednak należy pamiętać o jego cyklicznym 

przeładowywaniu w razie konieczności. Często stosuje się tutaj tryb 2 licznika T1 (z 
automatycznym przeładowywaniem - odpada konieczność programowego 

przeładowywania licznika), wtedy wzór na prędkość transmisji ma następującą postać: 
V=(F

xtal

*2

SMOD

)/(32*12*(256-TH1))

Transmisję rozpoczyna zapis bajtu do rejestru SBUF. Wówczas w takt impulsów o 

częstotliwości F

przepełnienia T1

/16 rozpoczyna się wysyłanie po linii TxD: bitu startu ("0"), 8 

bitów danych, bitu stopu ("1"). Po wysłaniu bitu stopu ustawiony zostaje wskaźnik 

przerwania TI i linia TxD jest ustawiona w stan "1". 

Jeżeli odbiornik jest włączony (REN=1), to bada on cały czas stan na wejściu RxD. Jeżeli 
wykryje opadające zbocze, to traktuje je jako początek bitu startu i następnie dokonuje 

kolejnego próbkowania w połowie czasu trwania bitu startu (według ustalonej prędkości 
transmisji) i jeżeli na linii RxD nadal panuje stan niski, to oznacza to, że został odebrany 

bit startu i następnie linia RxD jest próbkowana w połowie czasu trwania każdego bitu 
danych. Sposób zakończenia odbioru zależy od bitów RI i SM2 oraz od wartości 

odebranego bitu stopu: 

27

background image

Jeżeli RI=1 to cały odebrany bajt jest ignorowany i odbiornik rozpoczyna na nowo 
nasłuchiwanie linii RxD.

Jeżeli RI=0 i bit stopu ma wartość "1", to odbiór kończy się w sposób poprawny, 
czyli następuje wówczas przepisanie odebranego bajtu do rejestru SBUF, wartość 

bitu stopu jest zapisywana do bitu RB8 i następuje ustawienie wskaźnika 
przerwania RI.

Jeżeli RI=0 i bit stopu ma wartość "0", a SM2=1, to odebrany bajt jest 
ignorowany. Jeżeli zaś SM2=0, to odbiór kończy się w sposób poprawny. 

Sterowanie bitem SM2 umożliwia sprzętowe odrzucanie bajtów odebranych z 
błędem ramki.

Tryb 2.

Tryb 2 posiada następujące cechy: 

transmisja asynchroniczna,

dwie, zależne od częstotliwości taktowania mikrokontrolera, prędkości transmisji,

przesyłany jest bit startu równy "0", dziewięć bitów danych, bit stopu równy "1".

W trybie pracy możliwe są do uzyskania dwie prędkości transmisji - która z nich zostanie 
wybrana zależy od wartości bitu SMOD rejestru PCON. Prędkość można wyznaczyć z 

zależności: V=F

xtal

*2

SMOD

/64

Transmisja danych w trybie 2 zachodzi identycznie jak w trybie 1, z tym, że jest 
transmitowany dziewiąty bit danych zapisany w bicie TB8, a odbierany dziewiąty bit jest 

zapisywany w bicie RB8. Warunki poprawnego odebrania informacji są identyczne jak w 
trybie 1, z tym, że pod uwagę bierze się tu dziewiąty bit danych, a nie bit stopu (w trybie 

2 bit stopu nie wpływa na proces odbioru). 

Transmitowany i odbierany dziewiąty bit może zostać wykorzystany do przesyłania bitu 
kontroli parzystości. 

Tryb 3.

Tryb 3 posiada następujące cechy: 

transmisja asynchroniczna,

płynnie regulowana prędkość transmisji,

przesyłany jest bit startu równy "0", dziewięć bitów danych, bit stopu równy "1".

Tryb 3 stanowi połączenie właściwości trybów 1 i 2. W trybie tym układ transmisji 
szeregowej jest taktowany sygnałem przepełnienia licznika T1, tak samo określa się 

również prędkość transmisji. Logiczne cechy transmisji są identyczne jak w trybie 2.

28

background image

Układ przerwań mikrokontrolera 8051 

Mikrokontroler 8051 jest wyposażony w priorytetowy, dwupoziomowy układ przerwań. 
Układ przerwań jest specjalizowaną strukturą logiczną, której zadaniem jest 

monitorowanie stanu wskaźników przerwań i zgłaszanie faktu ustawienia określonego 
wskaźnika do układu sterowania. W mikrokontrolerze 8051 przerwanie może zostać 

wywołane przez jedno z pięciu wskaźników. Cztery ze wskaźników umieszczone są w 
rejestrze TCON

bit 7

bit 6

bit 5

bit 4

bit 3

bit 2

bit 1

bit 0

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

Bity rejestru TCON.

Znaczenie poszczególnych bitów jest następujące: 

TF1 - wskaźnik przerwania od licznika 

T1 układu czasowego

.

TF0 - wskaźnik przerwania od licznika 

T0 układu czasowego

.

TR1TR0 - sterowanie licznikami T1 i T0 (nie istotne dla układu przerwań).

IE1 - wskaźnik przerwania zewnętrznego INT1'.

IE0 - wskaźnik przerwania zewnętrznego INT0'.

IT0IT1 - sposób zgłaszania odpowiednich przerwań zewnętrznych: 0 - 
zgłaszanie niskim poziomem napięcia, 1 - zgłaszanie zboczem opadającym.

Piątym źródłem przerwania jest 

układ transmisji szeregowej

. Przerwanie to jest zgłaszane 

przez ustawienie dowolnego z bitów RI lub TI rejestru SCON

W przypadku przerwań zewnętrznych i od układów czasowych, wskaźniki przerwania są 

sprzętowo zerowane po przyjęciu zgłoszenia przerwania (za wyjątkiem sytuacji, gdy 
przerwanie zewnętrzne jest zgłaszane niskim poziomem). Wskaźniki przerwania z układu 

transmisji szeregowej muszą być zerowane programowo przez procedurę obsługi 
przerwania, gdyż sprzętowe zerowanie uniemożliwiłoby określenie, który ze wskaźników 

(RI czy TI) przerwanie wywołał. 

Do uaktywniania poszczególnych przerwań i określania ich priorytetów przeznaczone są 

rejestry sterujące IE i IP

Rejestr

bit 7

bit 6

bit 5

bit 4

bit 3

bit 2

bit 1

bit 0

IE

EA

-

-

ES

ET1

EX1

ET0

EX0

IP

-

-

-

PS

PT1

PX1

PT0

PX0

Rejestry sterujące układu przerwań.

Znaczenie bitów rejestru IE: 

EA - ustawienie bitu włącza układ przerwań, wyzerowanie wyłącza układ przerwań 
(blokuje wszystkie przerwania).

ES - ustawienie bitu powoduje włączenie obsługi przerwania z układu transmisji 
szeregowej.

ET1ET0 - ustawienie bitów powoduje włączenie obsługi przerwań z 
odpowiednich liczników (T1 i T0).

29

background image

EX1EX0 - ustawienie bitów powoduje włączenie obsługi odpowiednich przerwań 
zewnętrznych.

Rejestr IP służy do określenia poziomu poszczególnych przerwań. "0" lub "1" na 
poszczególnych pozycjach przyporządkowują dane przerwanie do poziomu odpowiednio 0 

lub 1. 

PS - ustalanie poziomu priorytetu przerwania z układu transmisji szeregowej.

PT1PT0 - poziomy priorytetów przerwań z odpowiednich liczników.

PX1PX0 - poziomy priorytetów odpowiednich przerwań zewnętrznych.

Podczas realizacji procedury obsługi przerwania poziomu 0 może nastąpić jej przerwanie 
przez procedurę obsługi przerwania o poziomie 1 - nie może jednak wystąpić sytuacja 

odwrotna. Nie może również wystąpić wzajemne przerywanie procedur obsługi przerwań 
z tego samego poziomu. 

Dodatkowo podczas realizacji programu może wystąpić jednoczesne zgłoszenie dwóch lub 

więcej przerwań o tym samym poziomie. Powoduje to wybranie do wykonania przez 
układ przerwań obsługi przerwania o najwyższym priorytecie według kolejności: INT0' 

(priorytet najwyższy), TF0INT1'TF1RI+TI (priorytet najniższy). 

Przyjęcie przerwania powoduje sprzętową generacje rozkazu LCALL z adresem procedury 
obsługi przerwania, właściwym dla każdego przerwania (patrz "

Pamięć programu

"). 

Przyjęcie przerwania jest możliwe jednak tylko wtedy, gdy obecnie nie jest wykonywane 
przerwanie o równym lub wyższym priorytecie, trwa aktualne wykonywanie jakiegoś 

rozkazu (układ obsługi przerwania musi poczekać do zakończenia wykonywania tego 
rozkazu) lub jeżeli jest wykonywany adres powrotu z procedury obsługi przerwania RETI, 

rozkaz dostępu do rejestrów IE i IP, lub jakikolwiek rozkaz po nich wykonywany.

Generator sygnału taktującego 

30

background image

Mikrokontroler 8051 posiada wbudowany generator sygnału zegarowego, mogący 

współpracować z rezonatorem kwarcowym lub ceramicznym. Generator wytwarza sygnał 
taktujący mikrokontroler o częstotliwości równej częstotliwości zastosowanego rezonatora 

(układ powoduje wzbudzenie rezonatora na częstotliwości podstawowej). 

Przygotowanie generatora (a zarazem całego mikrokontrolera) do pracy polega na 
dołączeniu do wyprowadzeń XTAL1 i XTAL2 rezonatora (kwarcowego lub ceramicznego) 

oraz dwóch kondensatorów według poniższego schematu: 

Wartość pojemności kondensatorów nie jest zbyt istotna: dla rezonatora kwarcowego 
producent zaleca wartości w granicach 20-40pF, dla rezonatora ceramicznego 45-60pF. 

Możliwe jest również taktowanie mikrokontrolera sygnałem z zewnętrznego generatora. 

Częstotliwość sygnału powinna zawierać się w przedziale zalecanym przez producenta 
(dla układu 8051 w granicach 1.2-12MHz), a wypełnienie powinno być równe 50% (choć 

niektórzy producenci dopuszczają taktowanie sygnałem o innym wypełnieniu). Sposób 
podłączenia generatora do mikrokontrolera jest różny w zależności od technologii 

wykonania układu. Dla mikrokontrolerów wykonanych w technologii NMOS sygnał z 
generatora należy podłączyć do wyprowadzenia XTAL2, a wyprowadzenie XTAL1 

połączyć z masą układu. W przypadku mikrokontrolerów wykonanych w technologii CMOS 
(z literą C w nazwie, np. 80C51) sygnał generatora podłącza się do wyprowadzenia 

XTAL1, natomiast wyprowadzenie XTAL2 pozostawia się nie podłączone. Producenci 
mikrokontrolerów stawiają również wymagania co do parametrów elektrycznych sygnału 

taktującego. Najczęściej od sygnału generatora oczekuje się następujących parametrów: 
w stanie niskim napięcie nie powinno przekraczać 0.75V, natomiast w stanie wysokim nie 

powinno być niższe niż 2.5V w przypadku układów NMOS lub 3.5V w przypadku 
mikrokontrolerów CMOS. 

Powyższe cechy generatora taktującego będącego na wyposażeniu mikrokontrolera 8051 

są w większości przypadków identyczne dla innych mikrokontrolerów rodziny '51 (także 
dla układu 80C552). Zazwyczaj najbardziej znaczącą różnicą jest maksymalna 

częstotliwość rezonatora (zewnętrznego generatora) taktującego mikrokontroler. Dla 
układu 80C552 maksymalna częstotliwość taktująca wynosi 20MHz (dla niektórych wersji 

30MHz).

Układ sterowania mikrokontrolerów '51 

31

background image

Najważniejszym zadaniem układu sterowania jest dekodowanie przesłanego z pamięci 

programu rozkazu i generacja na jego podstawie odpowiednich sygnałów sterujących 
pozostałymi elementami mikrokontrolera. Z układem sterowania współpracuje licznik 

rozkazów PC (16-bitowy rejestr zawierający adres kolejnego rozkazu przeznaczonego do 
wykonania) i rejestr rozkazów (rejestr przechowujący ostatnio pobrany rozkaz). 

Współpracuje z nim także układ przerwań (układ sterowania jest odpowiedzialny za 
sprzętową generację rozkazu LCALL wywołania procedury obsługi przerwania). 

Układ sterowania jest odpowiedzialny za generację następujących sygnałów 

zewnętrznych: 

PSEN' - strob odczytu z zewnętrznej pamięci programu.

RD' - strob odczytu z zewnętrznej pamięci danych.

WR' - strob zapisu do zewnętrznej pamięci danych.

ALE - sygnał sterujący buforem zatrzaskującym młodszy bajt adresu pamięci 
zewnętrznej.

Do układu sterowania są natomiast doprowadzone następujące sygnały zewnętrzne: 

EA' - linia wyłączająca wewnętrzną pamięć programu.

RST - linia zerowania mikrokontrolera.

Ponieważ po dołączeniu zasilania do mikrokontrolera jego rejestry i układy mogą 

przyjmować trudne do przewidzenia stany, natychmiast po włączeniu zasilania powinien 
zostać wygenerowany sygnał zerujący. Prawidłowe wyzerowanie mikrokontrolera polega 

na podaniu na wyprowadzenie RST stanu "1" przez co najmniej 2 cykle maszynowe. 
Podczas włączania zasilania poziom wysoki powinien być utrzymywany dłużej (ok. 10-

20ms) w związku z koniecznością wzbudzenia się wewnętrznego generatora, a czynność 
tą wykonuje poniższy układ: 

Po włączeniu zasilania układu, poziom wysoki utrzymuje się na wyprowadzeniu RST przez 
czas ładowania kondensatora. Stała czasowa obwodu RC z zapasem zapewnia konieczny 

czas występowania poziomu wysokiego na wyprowadzeniu. Podczas normalnej pracy 
możliwe jest wyzerowanie mikrokontrolera przez naciśnięcie przycisku RESET, co 

spowoduje doprowadzenia poziomu wysokiego do wyprowadzenia RST i rozładowanie 
kondensatora. Po zwolnieniu przycisku poziom wysoki na wyprowadzeniu RST utrzyma 

się do czasu naładowania kondensatora (podobnie jak przy włączeniu zasilania). Sygnał 
RESET powoduje inicjację wszystkich zasobów mikrokontrolera: 

ustawienie zawartości wskaźnika stosu SP=7.

ustawienie jedynek na wszystkich liniach 

portów we/wy

.

wyzerowanie pozostałych 

rejestrów specjalnych

 (jedynie SBUF przyjmuje 

nieokreśloną zawartość).

zawartość pamięci danych pozostaje nie zmieniona (po włączeniu zasilania jest 
nieokreślona).

32

background image

Układ sterowania mikrokontrolera wykonanego w technologii CMOS (80C51) steruje 
również trybami oszczędzania energii. Od strony programowej ustawienie określonego 

trybu odbywa się za pośrednictwem rejestru PCON

bit 7

bit 6

bit 5

bit 4

bit 3

bit 2

bit 1

bit 0

SMOD

-

-

-

GF1

GF0

PD

IDL

Bity rejestru PCON mikrokontrolera 80C51

SMOD - odpowiedzialny za określenie prędkości transmisji prze

układ transmisji 

szeregowej

.

GF1GF0 - bity ogólnego przeznaczenia.

PD - bit sterujący przejściem mikrokontrolera w stan uśpienia PD (ang. Power 
Down
); ustawienie powoduje przejście do stanu uśpienia, zerowany jest 
sprzętowo przy wyjściu ze stanu uśpienia.

IDL - bit sterujący przejściem mikrokontrolera w stan uśpienia IDL (ang. Idle); 
ustawienie powoduje przejście do stanu uśpienia, zerowany jest sprzętowo przy 

wyjściu ze stanu uśpienia.

Układy wykonane w technologii NMOS posiadają w rejestrze PCON tylko bit SMOD. 

Ustawienie bitu IDL powoduje wprowadzenie mikrokontrolera w stan uśpienia IDL. 
Następuje wówczas odłączenie wewnętrznego sygnału taktującego od jednostki 

centralnej i mikrokontroler nie wykonuje żadnego rozkazu. Zachowany zostaje stan 
pamięci wewnętrznej, wszystkich rejestrów specjalnych i linii we/wy. Działa układ 

transmisji szeregowej, układ czasowy i układ przerwań. Wyjściowe sygnały ALE i PSEN' 
przyjmują poziomy nieaktywne. Wyprowadzenie mikrokontrolera następuje przez 

zgłoszenie dowolnego, włączonego przerwania. Następuje wówczas wyzerowanie bitu 
IDL, wykonanie programu obsługi przerwania i przejście do wykonywania programu 

głównego od miejsca, w którym został ustawiony stan uśpienia. 

Ustawienie bitu PD powoduje wprowadzenie mikrokontrolera w stan uśpienia PD. 
Następuje wówczas wyłączenie generatora sygnału taktującego i zatrzymanie wszystkich 

funkcji mikrokontrolera. Sygnały ALE i PSEN' przyjmują poziomy niskie, a napięcie 
zasilające Vcc może być wówczas obniżone do wartości 3V. Zachowana zostaje zawartość 

pamięci wewnętrznej, rejestrów specjalnych i linii we/wy. Aby wyprowadzić 
mikrokontroler ze stanu uśpienia PD, należy przywrócić normalną wartość napięcia Vcc i 

wygenerować sygnał RESET. Stracona wówczas zostaje zawartość rejestrów i linii portów 
we/wy. 

Jednoczesne ustawienie bitów IDL i PD powoduje wywołanie trybu uśpienia PD. 

Mikroprocesory rodziny '51 w stanach uśpienia pobierają około 0.2 do 15% mocy 
pobieranej podczas normalnej pracy.

33

background image

Opis wyprowadzeń mikrokontrolera 8051 

Porty są to wyprowadzenia 8-bitowe. Port może pełnić role wyjścia informacji binarnej. 

Tak więc, jeżeli zachodzi potrzeba procesor może wpisać do portu dowolną liczbę binarną 
z zakresu 0...255, np. 48 (binarnie 48=00110000). Końcówki dowolnego portu procesora 

mogą pełnić zarówno rolę wejść jak i wyjść. 

schemat wyprowadzeń >>>

  

 

1. PORT 1 (P1) to końcówki o numerach 1...8
- Oznaczenia poszczególnych końcówek portu P1 wskazują nam kolejną pozycje bitu. 

34

background image

Istotną zaletą portów uniwersalnych procesora (w tym także P1) jest możliwość 
indywidualnego ustawiania poziomu logicznego na każdym wyprowadzeniu nie zależnie. 

Nie trzeba zatem zapisywać całej liczby do portu aby np. zmienić stan tylko na jednym 
wyprowadzeniu, wystarczy ustawić w (rozkazem SETB) lub wyzerować (rozkazem 

(CLR)odpowiedni bit rejestru portu P1. Port można ustawić także jako wejście informacji 
logicznej. Każde z wyprowadzeń staje się wtedy wyjściem o wysokiej impedancji, dzięki 

temu dowolny poziom logiczny podany z wyjścia jakiegoś układu cyfrowego może być 
odczytany poprzez piny portu a informacja czy tym stanem była logiczna "1" czy "0" 

zostaje wykorzystana przez procesor dla dalszego jego działania w zależności od 
spełnianej funkcji. Procesor może odczytać stany logiczne, jakie z zewnątrz podano na 

końcówki portu.. poziomy logiczne napięć wejściowych portów muszą zawierać się w 
przedziale napięć mikrokontrolera, czyli w zakresie 0...5V. detekcja poziomów logicznych 

odbywa się jak dla bramek CMOS, stąd wartości progowe napięć tych stanów są zbliżone 
do połowy napięcia zasilającego. W trybie odczytu z portu P1 końcówki są wewnętrznie 

podczepiane do plusa zasilania poprzez wbudowane w 80C51 rezystory co wymusza 
odczyt wysoki z portu w wypadku nie podłączenia końcówki portu . 

2. PORT 3 (P3) to końcówki o numerach 10...17

- podobnie jak w przypadku portu P1, port P3 może być wyjściem lub wejściem..
- pinyP3.0(RXD) i P3.1(TXD) mogą pełnić rolę portu transmisji szeregowej.

W praktyce poprzez te dwa wyprowadzenia można przesłać informację (bajty i bity) z i 
do procesora z innych układów cyfrowych w sposób szeregowy, tzn. bit po bicie.

- alternatywną funkcją końcówek P3.2 (INTO\ ) oraz P3.3 (INT1) jest funkcja detekcji 
przerwań zewnętrznych. Przerwanie w tym przypadku odnosi się do zmiany stanu 

logicznego ( na omawianym wyprowadzeniu P3.2 lub P3.3) z "1" na "0". W efekcie "we 
wnętrzu" procesora 8051 została ustawiona tak zwana flaga - znacznik zgłoszenia 

przerwania.
- końcówki (P3.4 i P3.5) oznaczone na diagramie z rysunku 2 jako T0 i T1 pełnią 

dodatkową funkcję wejść uniwersalnych, programowalnych liczników wbudowanych w 
strukturę 8051. Procesor 80C51 zawiera dwa bliźniacze liczniki T0 iT1 maksymalnie mogą 

one zliczać do 216= 65536, po czym zostają wyzerowane liczniki. Liczniki te oprócz 
zliczania impulsów z wejść T0 i T1 mogą także zliczać impulsy wewnętrzne, pochodzące z 

generatora mikrokontrolera. Liczniki mogą być programowane przez użytkownika a więc 
można np. zmniejszyć ich pojemność do 28 lub 213 , można także zapisać w nich 

wartość początkową lub zatrzymać je w dowolnym momencie lub uruchomić. 
- końcówki P3.6 (WR\) i P3.7(RD\) pin WR\ jest sygnałem zapisu do zewnętrznej pamięci 

danych , a końcówka RD\ wysyła sygnał do odczytu.. W praktycznych zastosowaniach 
jako elementy pamięci wykorzystuje się układy statycznych RAM - czyli w skrócie SRAM. 

Procesor potrafi zaadresować maksymalnie 65536 komórek pamięci (bajtów).

3. PORT 2 (P2) to końcówki o numerach 21...28
- są to wyprowadzenia drugiego 8- bitowego portu procesora.

- port P2 spełnia wszystkie funkcje podobnie jak P1.
- dodatkowo przez końcówki portu P2 podawane jest w razie potrzeby starsza część 

adresu (A8...A15) przy dostępie do zewnętrznej pamięci danych (SRAM) a także 
programu (np. EPROM). 

4. PORT 0 (P0) to końcówki o numerach 32...39
- podstawowe funkcje portu jako dwukierunkowej bramy do wymiany danych są takie 

35

background image

same jak w przypadku portów P1 i P2 
- różnicą jest zwiększona obciążalność tego portu oraz fakt nie posiadania wbudowanych 

rezystorów podciągających końcówki portu do plusa zasilania w wypadku odczytu.. 
Bardzo ważną rolę jaką pełni P0, jest funkcja multipleksowanej magistrali danych i 

młodszej części adresu. multipleksowanej w praktyce znaczy przełączalnej czyli raz na 
końcówkach portu P0 procesor może wystawić bajt danych np. do zapisu zewnętrznej 

pamięci danych, w innym przypadku adres w celu wybrania potrzebnej komórki pamięci 
SRAM do której ma być zapisana. 

5. Końcówka 9 (RST) czyli reset.

- powoduje skasowanie układu, a więc natychmiastowe przerwanie wykonywanych 
czynności i rozpoczęcie cyklu działania procesora od samego początku (od włączenia 

zasilania układu). Czas trwania dodatniego impulsu kasującego zależy od częstotliwości z 
jaką pracuje mikroprocesor. Z reguły w typowych zastosowaniach czas 1ms zupełnie 

wystarczy. W układach praktycznych RST dołączamy układ który generuje wymagany 
impuls zerujący. Głównym elementem układu "reset" jest kondensator elektrolityczny 

wartość jego wynosi od 10 do 22 F jest on niezbędny do prawidłowej generacji impulsu 
resetu przez układy wewnętrzne mikrokontrolera. Widoczny na rysunku klawisz służy do 

resetowania procesora bez konieczności wyłączania napięcia zasilającego. 

6. Końcówki 18 i 19 (XTAL1 i XTAL2)
- końcówki te służą do łączenia zewnętrznego rezonatora kwarcowego o częstotliwości 

zależnej od potrzeb użytkownika, ale także od wersji układu 8051. W praktyce 
częstotliwość ta może wynosić od 1,2MHz do 12...16MHz. dołączony do tych pinów 

rezonator kwarcowy umożliwia pracę wbudowanemu w 8051 generatorowi, który 
"napędza" cały mikroprocesor. Od częstotliwości rezonatora ściśle zależy szybkość 

działania mikrokontrolera . 

7. Końcówka 20 (Vss) 
- końcówka ujemnego napięcia zasilającego - masy (GND)

8. Końcówka 29 (PSEN\)

- w przypadku pracy procesora z zewnętrzną pamięcią programu (np. EPROM) końcówka 
ta wysyła sygnał odczytu z tej pamięci. W praktyce jest dołączona do wejścia OE\ 

współpracującej pamięci EPROM. Procesor chcąc odczytać kolejne rozkazy z zewnętrznej 
pamięci programu podaje poziom niski na końcówkę "PSEN" a następnie dokonuje 

odczytu . 

9. Końcówka 30 (ALE)
- sygnał pojawiający się na tym wyprowadzeniu można nazwać "sygnałem zapisu adresu" 

do dodatkowego zewnętrznego układu.

10. Końcówka 31 (EA\)
- powinna być dołączona do masy jeżeli mikroprocesor pobiera rozkazy w zewnętrznej 

pamięci programu lub do plusa zasilania (+5V) jeżeli z wewnętrznej. W pewnych 
układach procesor pomimo że posiada wewnętrzną pamięć programu , ze względu na 

zbyt małą pojemność musi sięgać do zewnętrznej pamięci w takim przypadku pin EA\ 
powinien być dołączony do plusa zasilania , tak aby procesor po jego "resecie" mógł 

rozpocząć pracę pobierając rozkazy z wbudowanej pamięci programu. Dołączenie pinu 
EA\ do masy blokuje wewnętrzną pamięć programu.

11. Końcówka 40 (Vcc)

- końcówka zasilania mikroprocesora 8051. Napięcie względem końcówki Vss (czyli 
masy) z reguły nie może przekroczyć 6,5V .Dlatego układ mikrokontrolera zasilany jest 

napięciem 5V 0,25V.

36