Intel 8051

Intel P8051

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

  • 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

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

* – 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

  • 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),
  • 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

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

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
    Intel 87C51
  • 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
    • AT90S44 - 4KB pamięci Flash, 256B pamięci EEPROM, 256B pamięci RAM
    • AT90S8515 - 8KB pamięci Flash, 512B pamięci EEPROM, 512B pamięci RAM
  • 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

  1. 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

  • 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
  • p
  • d
  • e
Intel
8-bitowe
16-bitowe
32-bitowe
Motorola
(Freescale Semiconductor)
8-bitowe
  • 68HC05
  • 68HC08
  • 68HC11
16-bitowe
  • 68HC12
  • 68HC16
  • DSP56k
32-bitowe
  • MPC500
  • MPC 860
  • MPC 8240/MPC 8250
  • MPC 8540/MPC 8560
  • 683XX
ZiLOG
Atmel
Microchip Technology
Texas Instruments
Philips
  • LPC2000
  • LPC900
  • LPC700
Renesas Technology
STMicroelectronics
  • LCCN: sh85067142
  • GND: 4196737-9
  • BnF: 12333452n
  • J9U: 987007555629805171