10. Mikroprocesor 8051

Mikroprocesor Intel 8051 to typowy, bardzo popularny mikrokontroler 8 bitowy, którego odpowiedniki produkowane są przez wiele firm (np. Phillips, Samsung, Atmel). Mikrokontrolery nazywamy też mikroprocesorami jednoukładowymi lub mikrokomputerami jednoukładowymi. Różnica pomiędzy typowym mikroprocesorem takim jak np. Intel 8086 a mikrokontrolerem polega na tym, że mikrokontroler jest kompletnym, niezależnym systemem komputerowym. Ma „wszystko co trzeba” w środku. W praktyce spotyka się mikrokontrolery 4-bitowe, 8-bitowe i 16-bitowe.

Rys. 1. Funkcjonalny schemat blokowy mikrokontrolera 8051

Ośmiobitowa jednostka centralna mikrokontrolera 8051 może wykonywać 111 rozkazów (49 jednobajtowych, 45 dwubajtowych i 17 trzybajtowych).

Pamięć wewnętrzna układu 8051 składa się z 2 pamięci:

  • pamięci wewnętrznej programu (pamięci ROM)
  • pamięci wewnętrznej danych o pojemności 128 bajtów.

Rys. 2. Architektura mikrokontrolera Intel 8051

Wewnętrzna pamięć programu (pamięć typu ROM) ma pojemność 4 kB i organizację bajtową. Może być rozszerzona do 64 kB przez dołączenie pamięci zewnętrznej.

Wewnętrzna pamięć danych (typu RAM) ma pojemność 128 B i organizację bajtową, ale możliwe jest dołączenie zewnętrznej pamięci danych o pojemności do 64 kB (w ramach osobnej przestrzeni adresowej.

Pamięć wewnętrzna danych 8051 zorganizowana jest ten sposób, że adresy 0-127 stanowią pamięć użytkową, a adresy 128-255 (89H-0FFH) to tzw. rejestry specjalne, czyli rejestry SFR (ang. special function registers)

Rys. 3. Organizacja wewnętrznej pamięci danych w mikrokontrolerze 8051

W pamięci użytkowej słowa o adresach 0-7, 8-15, 16-23, 24-31 stanowią 4 zestawy uniwersalnych rejestrów roboczych (ang. working registers) R0, R1, R2, R3, R4, R5, R6, R7. Rejestry te są dostępne w programie jako rejestry adresowane. Mamy np. instrukcję MOV A, R1. W danym momencie dostępne są rejestry tylko jednego zestawu wskazywanego przez 2 bitowy wskaźnik zestawu rejestrów RS (ang. register bank switch) zawarty w słowie stanu programu.

Pamięć programu jest adresowana przez 16-bitowy licznik rozkazów PC (ang. program counter). Bity 11-15 licznika rozkazów wyznaczają numer strony pamięci natomiast bity 0-10 określają adres na stronie. W czasie zerowania mikrokontrolera licznik PC jest zerowany.

Słowo stanu programu (ang. program status word) - PSW - jest pamiętane w 8-bitowym rejestrze SFR po adresem 0D0H . Słowo PSW może być adresowane bitowo.

W wewnętrznej pamięci danych (w obszarze pamięci użytkowej) może być umieszczony stos (ang. stack) o dowolnej wielkości ograniczonej pojemnością pamięci. Stos jest adresowany przez 8 bitowy wskaźnik stosu SP (ang. stack pointer). SP ma adres 81H w przestrzeni SFR. SP wskazuje wierzchołek stosu (ang. top of the stack) . Zawartosć rejestru SP jest przed każdym zapisaniem bajtu na stos zwiększana o 1, a po każdym odczytaniu ze stosu bajtu zmniejszana o 1. Ze stosu korzystamy zawsze automatycznie w czasie wykonania instrukcji CALL (skok do podprogramu). Na stos zapisujemy wówczas 2 bajtową zawartość licznika rozkazów.

Również automatycznie zapisujemy na stos zawartość licznika rozkazów PC (2 bajty) przy przyjęciu przerwania

Ze stosem współpracują również w sposób standardowy 2 instrukcje PUSH i POP. Za pomocą instrukcji PUSH (z adresowaniem bezpośrednim) można zapisać na stosie zawartość dowolnej wewnętrznej komórki pamięci danych (również rejestrów specjalnych). Do zdejmowania danych ze stosu używamy instrukcji POP.