Intel 8051
Intel 8051 – mikrokontroler stworzony przez firmę Intel w 1980 roku. Zapoczątkował rodzinę mikrokontrolerów MCS-51 (od ang. MicroComputer System) będących udoskonalonymi lub wyspecjalizowanymi mikrokontrolerami o tej samej, ośmiobitowej architekturze i kompatybilnej z pierwowzorem liście rozkazów. Mikrokontrolery należące do rodziny MCS-51 do dziś znajdują szerokie zastosowanie w niemal każdej dziedzinie elektroniki.
Mikrokontrolery te są wykonane w zmodyfikowanej architekturze harwardzkiej. Należą do grupy mikrokontrolerów CISC.
Oprócz możliwości programowania mikrokontrolera w asemblerze rodziny MCS-51, istnieje również możliwość programowania w kompilowanych językach wysokiego poziomu – najczęściej wykorzystywany do tego celu jest język C.
Intel nie produkuje już samodzielnie nowych chipów z serii MCS-51 od marca 2007 roku[1]. Produkcją do dzisiaj zajmują się firmy trzecie, m.in. Dallas Semiconductor, Philips i Atmel. Również różne firmy sprzedają układy z serii MCS-51 jako tzw. IP-core, najczęściej stosowane w bezpośrednio programowalnych macierzach bramek.
Specyfikacja mikrokontrolera 8051
[edytuj | edytuj kod]- ośmiobitowa jednostka arytmetyczno-logiczna (ALU)
- cztery przełączane banki rejestrów roboczych (4 x R0...R7)
- 4 kB pamięci wewnętrznej ROM (pamięć zewnętrzna ROM do 64 kB)
- 128 B pamięci wewnętrznej RAM (pamięć zewnętrzna RAM do 64 kB)
- zbiór rejestrów specjalnych SFR
- układ generatora sygnału taktującego (czyli zegar procesora)
- cztery ośmiobitowe równoległe porty P0...P3
- jeden port szeregowy (obsługuje zarówno transmisję synchroniczną jak i asynchroniczną)
- dwa liczniki/czasomierze działające w jednym z czterech trybów
- jednobitowy procesor funkcji logicznych
- system przerwań z układem priorytetów
Rejestry specjalne
[edytuj | edytuj kod]Obszar pamięci o adresach od 0x80 do 0xFF nazywany jest obszarem rejestrów specjalnych (SFR – Special Function Registers). Rejestry te pozwalają na sterowanie różnymi funkcjami mikrokontrolera. Obszar ten nie jest ciągły (nie wszystkie adresy są zajęte) – umożliwia to ewentualne uzupełnienie obszaru o nowe funkcje.
Układ rejestrów w pamięci
[edytuj | edytuj kod]* – adresowane bitowo (adresy podzielne przez 8)
Adres | Symbol | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|---|---|
0xF0* | B | ||||||||
0xE0* | ACC | ||||||||
0xD0* | PSW | CY | AC | F0 | RS1 | RS0 | OV | - | P |
0xC0* | IP | - | - | - | PS | PT1 | PX1 | PT0 | PX0 |
0xB0* | P3 | /RD | /WR | T1 | T0 | /INT1 | /INT0 | TxD | RxD |
0xA8* | IE | EA | - | - | ES | ET1 | EX1 | ET0 | EX0 |
0xA0* | P2 | ||||||||
0x99 | SBUF | ||||||||
0x98* | SCON | SM0 | SM1 | SM2 | REN | TB8 | RB8 | TI | RI |
0x90* | P1 | ||||||||
0x8D | TH1 | ||||||||
0x8C | TH0 | ||||||||
0x8B | TL1 | ||||||||
0x8A | TL0 | ||||||||
0x89 | TMOD | GATE | C/T | M1 | MO | GATE | C/T | M1 | M0 |
0x88* | TCON | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
0x87 | PCON | SMOD | - | - | - | GF1 | GF0 | PD | IDL |
0x83 | DPH | ||||||||
0x82 | DPL | ||||||||
0x81 | SP | ||||||||
0x80* | P0 |
Ważniejsze rejestry specjalne
[edytuj | edytuj kod]- ACC – akumulator, jeden z najczęściej wykorzystywanych rejestrów, gdyż obsługuje większość operacji arytmetycznych, logicznych, skoków warunkowych i wiele innych
- B – dodatkowy rejestr, wykorzystywany w trakcie operacji mnożenia (MUL) i dzielenia (DIV)
- PSW – rejestr stanu programu (Program Status Word), jest to zbiór różnych flag (wskaźników):
- PSW.0=P – parzystość, flaga jest ustawiana gdy wynikiem operacji jest liczba parzysta,
- PSW.1=F1 – począwszy od 8052, flaga którą może zdefiniować użytkownik,
- PSW.2=OV (Overflow) – przepełnienie, przekroczenie zakresu liczb w kodzie uzupełnienia do 2 (U2),
- PSW.3=RS0 (Register Bank Switch) młodszy bit numeru banku,
- PSW.4=RS1 (Register Bank Switch) starszy bit numeru banku,
- PSW.5=F0 – flaga ogólnego zastosowania,
- PSW.6=AC (Auxiliary Carry) – przeniesienie z młodszej do starszej tetrady (istotne w rozkazach arytmetycznych BCD),
- PSW.7=CY (Carry) – przeniesienie z najstarszego bitu (oznacza np. przekroczenie zakresu przy sumowaniu NKB),
- Porty P0-P3 – wykorzystywane są do komunikacji ze światem zewnętrznym (wszelkimi urządzeniami peryferyjnymi), niektóre mają jeszcze dodatkowe funkcje,
- P0 i P2 – mogą zostać wykorzystanie jako wyprowadzenia szyny systemowej mikrokontrolera
- P1 – port ogólnego zastosowania,
- P3 – port posiada wyspecjalizowane linie (w SFR przedstawiane jako bity),
- RD – odczyt pamięci danych,
- WR – zapis pamięci danych,
- T0,T1 – wejścia timerów zewnętrznych (zliczanie impulsów trybie pracy timerów jako liczniki),
- INT0,INT1 – wejścia zewnętrznych przerwań,
- TxD, RxD – wysyłanie (Transmit) i odbieranie (Receive) danych (Data) przy transmisji szeregowej,
- Sterowanie przerwań,
- IE – zezwolenia dla przerwań (Interrupt Enable),
- EA – ogólne zezwolenie dla przerwań,
- ES – zezwolenie dla przerwań od transmisji szeregowej,
- ET0, ET1 – zezwolenie dla przerwań od timerów,
- EX0, EX1 – zezwolenie dla przerwań zewnętrznych,
- IP – priorytety przerwań (Interrupt Priority),
- PS – priorytet dla przerwań od transmisji szeregowej,
- PT0, PT1 – priorytet dla przerwań od timerów,
- PX0, PX1 – priorytet dla przerwań zewnętrznych,
- TCON – tylko młodsze 4 bity,
- IE0, IE1 – flagi przerwań zewnętrznych (zgłoszenie zewnętrznego przerwania),
- IT0, IT1 – sposób zewnętrznego przerwania (0 – poziom niski, 1 – opadające zbocze),
- IE – zezwolenia dla przerwań (Interrupt Enable),
- DPTR – 16-bitowy wskaźnik adresu danych,
- DPH – starszy bajt wskaźnika,
- DPL – młodszy bajt wskaźnika,
- SP – wskaźnik stosu (Stack Pointer),
Timery 8051
[edytuj | edytuj kod]Sterowanie timerów:
- TMOD – młodsze 4 bity odpowiadają timerowi 0, starsze – timerowi 1
- GATE – bramkowanie, zliczanie impulsów kiedy GATE=0
- C/T – tryb pracy timera (0 – timer wewnętrzny, 1 – licznik impulsów zewnętrznych)
- M0, M1 – ustalają trybu pracy licznika
M1 | M0 | Tryb | |
---|---|---|---|
0 | 0 | 0 | licznik 13-bitowy |
0 | 1 | 1 | licznik 16-bitowy |
1 | 0 | 2 | licznik 8-bitowy z autoprzeładowaniem |
1 | 1 | 3 | T0 i T1 jako osobne liczniki 8-bitowe |
W trybie 3 działa de facto tylko TLx (młodsze 8 bitów licznika), w momencie wygenerowania sygnału przepełnienia, do TLx ładowana jest wartość THx który w tym trybie pełni funkcje rejestru stałej.
- TCON – starsze 4 bity
- TF0, TF1 – flaga przepełnienia timera
- TR0, TR1 – flaga pracy timera (0 – stop, 1 – zliczanie)
Timery generują sygnał TFx przy przekroczeniu maksymalnej wartości – odpowiednio 2^13, 2^16, 2^8. Jako że są to liczniki zliczające w przód, oraz ich inkrementacja następuje co jeden cykl zegarowy w celu kontrolowania odmierzanego przez nie czasu Tx jako wartość początkowa do TH | TL należy wpisać wartość
- Tx = (maksimum zakresu w danym trybie-X)*12 *Tosc
gdzie: maksimum zakresu w trybie 16 bit = 65 536, 8-bitowym = 256, a Tosc = 1/Częstotliwość układu taktującego W trybie 2 należy tę samą wartość wpisać zarówno do rejestrów TH i TL
Inne mikrokontrolery rodziny MCS-51
[edytuj | edytuj kod]Oryginalny układ 8051 firmy Intel jest przestarzały i od dawna nieużywany w nowych konstrukcjach. Jednakże na rynku istnieje wiele udoskonalonych wersji tego mikrokontrolera – od prostych klonów kompatybilnych elektrycznie (pin-to-pin) z pierwowzorem, aż po rozbudowane układy, w których rdzeń 8051 stanowi jedynie małą część systemu.
Mikrokontrolery rodziny MCS-51 kompatybilne z 8051 co do pinów oraz na poziomie asemblera:
- 8052 wersja posiada
- dodatkowy obszar 128 bajtów wewnętrznej pamięci RAM o adresach identycznych z rejestrami specjalnymi. Dla rozróżnienia jest on adresowany indeksowo
- 8KB wewnętrzne pamięci ROM (4 strony)
- trzeci 16-bitowy licznik / czasomierz (timer)
- dodatkowe rejestry specjalne SFR do obsługi trzeciego licznika
- 8031 wersja bez wewnętrznej pamięci ROM
- 83C51 wersja z wewnętrzną pamięcią OTP
- 87C51 wersja z 4KB wewnętrzęj pamięci EPROM zamiast pamięci ROM
- AT89C51 wersja z wewnętrzną pamięcią Flash EEPROM
- AT89S51 wersja AT89C51 programowana szeregowo za pomocą SPI
Mikrokontrolery rodziny MCS-51 kompatybilne z 8051 co do pinów, ale niezgodne na poziomie asemblera
- z rodziny Atmel AT89
- z rodziny Atmel AVR
- ATMEGA161 - 16KB pamięci Flash, 512B pamięci EEPROM, 1KB pamięci RAM
Zmiany w stosunku do oryginalnego układu 8051 obejmują także:
- znacznie zmniejszony pobór mocy, szczególnie w tzw. trybach uśpienia
- zwiększoną częstotliwość taktowania
- miniaturyzację obudów, zwiększenie lub zmniejszenie (w wersjach uproszczonych) liczby wyprowadzeń
- udoskonaloną interpretację sygnałów wejścia-wyjścia oraz sygnału reset (umożliwiającą bardziej elastyczne wykorzystanie portów i zwiększającą odporność na zakłócenia)
- dodatkowe rejestry specjalne SFR, związane m.in. z nowymi układami czasowo – licznikowymi, dodatkowymi wskaźnikami adresów, dodatkowymi portami wejścia / wyjścia, w tym np. interfejsami szeregowymi, wejściami przerwań, przetwornikami analogowo – cyfrowymi, zegarami czasu rzeczywistego, układami szyfrującymi itp.
Swój sukces rodzina MCS-51 zawdzięcza m.in. wyjątkowej łatwości rozbudowy, nie wymagającej jakiejkolwiek modyfikacji listy rozkazów. Wiąże się to ze sposobem uwzględniania dodatkowych elementów w przestrzeni adresowej mikrokontrolera – jest w niej wiele niewykorzystanych adresów, ułatwiających dostęp do nowych elementów za pośrednictwem dodatkowych rejestrów specjalnych (SFR).
Przypisy
[edytuj | edytuj kod]- ↑ MCS 51, MCS 251 and MCS 96 Microcontroller Product Lines, the Intel 186, Intel386 and Intel486 Processors Product Lines, and the i960 32 Bit RISC Processor, PCN 106013-01, Product Discontinuance, Reason for Revision: Add Key Milestone information and revise description of change. Intel, 2006-05-02.
Linki zewnętrzne
[edytuj | edytuj kod]- Mikrokontrolery rodziny 8051 firmy Microchip Technology
- Mikrokontrolery rodziny 8051 firmy. intel.com. [zarchiwizowane z tego adresu (2006-04-09)]. Intel
- Small Device C Compiler (SDCC), darmowy kompilator C dla mikrokontrolerów
- Narzędzia programistyczne, w tym kompilator C dla rodziny 8051 firmy Keil
- Opis 8051 na Elportalu