1. Co dokładnie oznacza „budowa mikrokontrolera”?
W tej lekcji patrzymy na 8051 jak na „mały komputer”, którego działanie da się opisać w czterech obszarach:
- rejestry – szybkie „pamięci wewnątrz CPU” i rejestry sterujące peryferiami (SFR),
- pamięć danych – gdzie lądują zmienne, stos i obszary bitowe,
- porty I/O – jak 8051 steruje wyjściami i jak czyta wejścia,
- czas wykonywania rozkazów – czyli cykl maszynowy i to, skąd biorą się opóźnienia, timery i „ile to trwa”.
2. Rejestry 8051 – podział i rola
W 8051 spotkasz dwa „rodzaje” rejestrów:
- rejestry CPU – potrzebne do obliczeń i adresowania, używane w niemal każdej instrukcji,
- SFR (Special Function Registers) – rejestry specjalne do sterowania portami, timerami, UART, przerwaniami itd.
2.1. Najważniejsze rejestry CPU
| Rejestr | Co robi? | W praktyce (co zobaczysz w EdSim51) |
|---|---|---|
| ACC (A) | Akumulator – centrum działań ALU (dodawanie, AND, OR, przesunięcia, porównania). | Po większości operacji arytmetycznych/logicznych wynik „ląduje” w A. |
| B | Rejestr pomocniczy – głównie dla MUL AB i DIV AB. | W mnożeniu i dzieleniu A i B współpracują jako para. |
| DPTR | 16-bitowy wskaźnik adresu (DPL/DPH). Używany m.in. do tabel w pamięci programu i pamięci zewnętrznej. | Gdy program korzysta z tablic (np. kodów segmentów, znaków LCD), DPTR zwykle wskazuje kolejne elementy. |
| PSW | Słowo stanu programu – flagi (np. C, OV) oraz wybór banku rejestrów. | Po operacjach może zmieniać się flaga przeniesienia C; bank rejestrów wpływa na to, „które R0–R7 są aktywne”. |
| SP | Wskaźnik stosu (Stack Pointer) – gdzie zapisywane są adresy powrotu, rejestry, dane tymczasowe. | Przy CALL i przerwaniach SP rośnie; RET i powrót z przerwania go zmniejsza. |
| PC | Program Counter – licznik rozkazów, wskazuje następną instrukcję do wykonania w pamięci programu. | Przy pracy krokowej zobaczysz, jak PC przeskakuje po kodzie; przy skokach i wywołaniach zmienia się skokowo. |
2.2. SFR – rejestry specjalne (sterowanie sprzętem)
SFR to rejestry w górnej części przestrzeni adresowej (typowo 80h–FFh), które sterują peryferiami. Najczęściej spotykane:
- Porty: P0, P1, P2, P3
- Timery: TMOD, TCON, TH0/TL0, TH1/TL1
- UART: SCON, SBUF
- Przerwania: IE, IP
3. Porty I/O w 8051 – co jest „specjalnego”?
Porty 8051 to nie tylko „8 pinów”. Każdy port ma wewnętrzną logikę (latch) i tranzystory, a niektóre porty pełnią także funkcje magistrali zewnętrznej (adres/dane).
3.1. Obraz 1 – struktura wewnętrzna portu
3.2. Jak działa zapis na port (wyjście)?
Gdy wykonujesz instrukcję typu MOV P1, #0FFh, CPU zapisuje bajt do rejestru portu (SFR). To ustawia stan „latcha” – czyli pamięci, która trzyma informację, jaki stan ma być wystawiony na pinach.
- Bit = 0 – port aktywnie ściąga linię do masy (stan niski).
- Bit = 1 – port „odpuszcza” linię (zależnie od portu: przez pull-up lub w trybie quasi-bidirectional).
3.3. Jak działa odczyt z portu (wejście)?
Przy odczycie (np. MOV A, P1) w 8051 ważne jest, że:
- w niektórych sytuacjach odczyt może zwracać stan pinu, a nie tylko „latcha”,
- żeby używać pinu jako wejścia, często zapisuje się wcześniej „1” do tego bitu (port wtedy nie wymusza zera).
3.4. Port 0 (P0) – dlaczego jest inny?
Port 0 w klasycznym 8051 pełni rolę multipleksowanej magistrali adres/dane dla pamięci zewnętrznej. Z tego powodu:
- często jest opisywany jako „open-drain” / brak stałego pull-up,
- do pracy jako zwykłe wyjście/wejście bywa potrzebny zewnętrzny rezystor podciągający (zależnie od konkretnego układu/klona).
4. Port 3 – piny z funkcjami specjalnymi
Port 3 jest wyjątkowy, bo jego piny mają „drugie życie”: obsługują UART, przerwania zewnętrzne, timery jako liczniki oraz sygnały dostępu do pamięci zewnętrznej.
5. Cykl maszynowy 8051 – skąd bierze się „czas instrukcji”?
Mikrokontroler wykonuje instrukcje w rytmie zegara. Jednak nie każda instrukcja trwa 1 takt. W 8051 wygodnie myśli się o czasie przez pojęcie cyklu maszynowego.
5.1. Zegar, takt i cykl
- takt zegara – pojedyncze „tyknięcie” oscylatora,
- cykl maszynowy – zgrupowanie kilku taktów, w którym CPU wykonuje podstawowy „krok pracy”.
Przykład: kwarc 12 MHz → 1 takt = 1/12 MHz, a 1 cykl maszynowy ≈ 1 µs.
5.2. Obraz 3 – cykl maszynowy (fazy)
5.3. Ile trwa instrukcja?
Instrukcje w 8051 mogą trwać różnie (np. 1, 2, czasem więcej cykli maszynowych) – zależnie od:
- rodzaju operacji (prosta logika vs. dostęp do pamięci zewnętrznej),
- trybu adresowania,
- skoków i wywołań procedur (wpływ na PC i stos).
Na starcie wystarczy Ci zasada: czas programu = (liczba cykli instrukcji) × (czas cyklu maszynowego).
6. Co się dzieje, gdy CPU wykonuje instrukcję?
W uproszczeniu, każda instrukcja to sekwencja kroków:
- PC wskazuje adres następnej instrukcji w pamięci programu.
- CPU pobiera bajt/bajty instrukcji (opcode i ewentualne argumenty).
- CPU dekoduje rozkaz: co zrobić i skąd wziąć dane.
- Wykonuje operację (np. w ALU) i zapisuje wynik do rejestru/pamięci/portu.
- PC jest aktualizowany (zwykle +1/+2/+3, a przy skoku na nowy adres).
6.1. Obraz 4 – ścieżka danych (PC → pamięć → ALU → wynik)
6.2. Mini-przykład myślowy
Rozważ instrukcję: INC P1 (zwiększ wartość rejestru portu 1 o 1).
- CPU pobiera opcode i rozumie: „mam odczytać P1, dodać 1, zapisać do P1”.
- Odczyt to w praktyce odczyt rejestru SFR portu.
- ALU wykonuje +1.
- Wynik wraca do P1 → zmienia się stan latcha → zmieniają się stany pinów portu.
7. Szybka ściąga – co warto zapamiętać po tej lekcji
- PC pokazuje, „gdzie jest program”; SP mówi, „gdzie jest stos”.
- SFR to sterowanie sprzętem – porty, timery, UART, przerwania.
- Port 0 jest inny (magistrala zewnętrzna / często brak pull-up).
- Port 3 ma funkcje specjalne (UART, INT, T0/T1, WR/RD).
- Cykl maszynowy klasycznie = 12 taktów zegara; na tym opiera się „czas instrukcji”.