MCS-51
Rodina MCS-51 je označení pro osmibitové jednočipové mikropočítače se smíšenou harvardskou a Von Neumannovou architekturou (je oddělena programová a datová paměť, ale formát instrukci a dat je totožný a přenáší se po stejné sběrnici[1]) vyvinuté společností Intel a na trh uvedené roku 1980. Základním zástupcem této řady je jednočipový mikrokontrolér Intel 8051. Mikrokontroléry, do této řady náležející, mají všechny rysy v tomto článku popsané stejné, až na drobné detaily (velikost pamětí, absence některých přídavných komponent apod.), které jsou zmíněné u každého typu jednotlivě (na konci článku je jejich seznam). Kvůli vnitřním vlastnostem se více či méně zdařilé klony vyrábějí dodnes a to prakticky všemi firmami zabývající se výrobou čipových zařízení (nejvýznamnějším výrobce je po Intelu Atmel či Motorola, mezi další patří např. Texas Instruments, National Semiconductor, Siemens, Toshiba, či NEC). Své mikrořadiče založené na MCS-51 vyráběla jednu dobu i Tesla. Řada MCS-51 je přímým nástupcem rodiny MCS-48, obsahuje však všestranná vylepšení. Tuto řadu nelze přesně zařadit mezi RISC a CISC, obsahuje od každé něco.
Základní informace
- osmibitová architektura – Veškeré operace jsou osmibitové, kromě adresace a práce s registrem DPTR.
- šestnáctibitová adresace – Jak paměť programu, tak i paměť dat lze adresovat v rozsahu 16 bitů (tj. 64 kB).
- napájení – Obvykle 5 V, existují ale instance (např. od Atmelu), které fungují již od 2,4 V.
- hodinový oscilátor – Je součástí čipu, krystal se však připojuje externě, dnes obvyklé frekvence 0–33 MHz.
- paměť programu – Bývá většinou součástí čipu a je velká 1–64 kB.
- vnitřní datová paměť RAM – Je velká 64–256 bajtů.
- datová paměť XRAM – Může být součástí čipu, přímo lze adresovat až 64 kB.
- sériová jednotka UART – Je součástí snad všech instancí procesorů této rodiny, některé mají i více sériových kanálů.
- čítače/časovače – Bývá jich dva a více.
- přerušení – Zdroje přerušení jsou vnitřní (např. z časovačů nebo sériové linky), mohou být však i externí.
- Zvládají dvojkové i desítkové operace.
- Obsahují bitově adresovatelnou paměť.
- Jednočipy od Intelu dokážou pracovat v teplotě v rozmezí od −40 °C do 70 °C.
Struktura
![Blokové schéma](http://upload.wikimedia.org/wikipedia/commons/3/31/Schema_jadra_8031.png)
![Blokový popis struktury](http://upload.wikimedia.org/wikipedia/commons/4/48/MCS-51_struktura.png)
Na obrázku (výše) je vyobrazena struktura mikropočítače. Obsahuje oscilátor, na který se přes vývody XTAL1 a XTAL2 připojuje krystal (piezoelektrický rezonátor), generující hodinový signál určující mj. frekvenci procesoru (obvykle je tato frekvence 12 MHz, přičemž jeden strojový cykl je 12 cyklů hodinových, jedna instrukce tak trvá 1 μs, složitější 2 μs a instrukce násobení a dělení trvají 4 μs). Bez něj by zařízení nemohlo fungovat. Následují čtyři osmibitové porty (P0–P3), sloužící ke komunikaci s vnějšími zařízeními. Přes porty P0 a P2 se také připojuje vnější paměť (datová nebo programová). Její zapojení je však složitější a bude popsáno později. Následuje vnitřní programová paměť, jejíž velikost se pohybuje v rozmezí 1–64 kB a je u každého typu a výrobce jiná. Poté je přítomna sériová jednotka UART (Universal Asynchronous Receiver-Transmitter) s možností plně duplexní komunikace. Jejím prostřednictvím mohou např. komunikovat dva procesory navzájem. Dále najdeme jednotku s čítači/časovači, ty bývají většinou šestnáctibitové a po dvou kusech. Čítací frekvence může být odvozena od hodinového signálu přicházejícího z krystalu nebo z vnějšího zařízení připojeného pomocí vstupů T0 či T1. Dále tu nalezneme vnitřní datovou paměť RAM, jejíž velikost se pohybuje od 64 bajtů do 256 bajtů. Součástí je paměť pro vlastní data a několik dalších speciálních registrů označovaných jako SFR (Special Function Registers). K řadiči jsou vedeny důležité řídicí signály (zejména pro práci s vnější pamětí), jež budou popsány níže. Předposlední je CPU s aritmeticko-logickou jednotkou (ALU někde též ALJ), která obsahuje kromě standardní sčítačky, odečítačky, násobičky a děličky i jednotku pro booleovské (binární) aritmetické operace. ALU je z důvodu vyšší rychlosti přímo spojena s registry Acc, B a stavovým registrem PSW (Program Status Word). Vlastní CPU je jinak propojena pomocí společné sběrnice prakticky se všemi periferiemi. Poslední jednotkou je řadič přerušení, který se používá pro snadnější komunikaci s vnějšími zařízeními. Počet zdrojů a úrovní priority přerušení je dán typem procesoru. Je možné je maskovat. Procesor je prostřednictvím vývodů Ucc a GND (zem) napájen obvykle napětím +5 V, existují však i řady s napájením +3 V, např. od firem Atmel, Analog Devices, atd., některé typy schopné funkce už od 2,4 V.[zdroj?]
Instance
Označení | Výrobce | Vývodů | Paměť programu | RAM mimo SFR | Zajímavosti |
---|---|---|---|---|---|
AT89C1051 | Atmel | 20 | 1 kB Flash | 64 | Vestavěný analogový komparátor |
AT89C51 | Atmel | 40 | 128 | http://www.atmel.com/dyn/products/product_card.asp?part_id=1930 | |
AT89C2051 | Atmel | 20 | 2 kB Flash | 128 | Vestavěný analogový komparátor |
AT89C4051 | Atmel | 20 | 4 kB Flash | 128 | |
AT89S52 | Atmel | 40 | 8 kB FLASH | 256 | Rozšíření MCS-52, a podpora sériového programování. |
I8031 | Intel | 40 | Bez ROM | 128 | Neobsahuje paměť programu. |
DS80C320/DS80C323 | DALLAS SEMICONDUCTOR | 40 | 64 kB | 256+64 kB |
A mnoho dalších
Paměť a registry
Paměť programu
Jednočip v sobě obsahuje integrovanou paměť pro program a pro data. Programová paměť byla dříve typu ROM, později se přešlo na PROM, EPROM, EEPROM a nakonec FLASH. Dnes se nejčastěji vyrábějí s posledními dvěma vyjmenovanými typy pamětí. Velikost lze rozšířit až na 64 kB (registr PC je tedy široký 16 bitů).[zdroj?]
Datová paměť
Je rovněž součástí čipu, byla vždy typu RAM, po odpojení napájení se tedy celá vymaže. Velikost činí 64–256 bajtů. Je možné k ní přistupovat buď pomocí registrů, nebo pomocí adres. Na obrázku níže je rozdělení datové paměti.[zdroj?]
![Rozdělení datové paměti RAM v mikrořadičích řady MCS-51](http://upload.wikimedia.org/wikipedia/commons/4/47/Mcs-51_pamet.png)
Registry, 00h až 1Fh
Adresy 0–31 jsou tzv. pracovní registry, rozdělené do čtyř sad, každá sada představuje osm osmibitových registrů (R0, R1, R2, R3, R4, R5, R6 a R7 resp. adresy 0, 1, 2, 3, 4, 5, 6 a 7). V každou chvíli lze pracovat pomocí jejich symbolických názvů pouze s jednou sadou, lze však mezi nimi přepínat pomocí instrukce SETB, jejímž prostřednictvím nastavujeme hodnoty bitových registrů RS0 a RS1 (00 – 1. sada, až 11 – 4. sada). Druhou možností, jak pracovat s ostatními pracovními registry, je použít jejich adresu, jak uvádí příklad:
clr RS0 ; Jsme v souboru registrů 0 clr RS1 mov R0,#8 ; Adresa R0 v souboru registrů 1 mov @R0,#123 ; Přiřazeno do R0 souboru 1 ; nyní je v R0 hodnota 8 setb RS0 ; Nyní je v R0 hodnota 123
Bitově adresovatelná paměť, 20h až 2Fh
Adresy 32–47 jsou oproti mnohým verzím jednočipů něčím zvláštní – je možné je bitově adresovat. Každý bit z této oblasti má svou vlastní adresu (0–127). Hodnoty se nastavují prostřednictvím instrukcí SETB (nastaví logickou 1), CLR (nastaví logickou 0) a CPL (neguje hodnotu). Používají se následovně:
SETB P1.0 ; Nastaví log. 1 na portu P1, lince 0 CLR F0 ; Nastavuje log. 0 uživatelskému příznakovému registru F0 CPL 64 ; Neguje bitovou hodnotu na bitové adrese 64
Zbylá datová paměť 30h až 7Fh (nebo 0FFh)
Ve všech instancích je tato paměť přítomna minimálně do adresy 3Fh, běžně však bývá až do adresy 7Fh. U nejnovějších modelů až do 0FFh, zde by sice zdánlivě mohla kolidovat se SFR, tomu je ale zabráněno jejím zpřístupněním pouze přes nepřímou adresaci.[zdroj?]
Tuto oblast paměti lze využít libovolně, například pro globální proměnné programu, v každém případě zásobník (Stack) musí být umístěn v této paměti.[zdroj?]
SFR-Registry 80h
Obecně se jim říká SFR (Special Function Register), každý z nich má předurčené použití a tomu odpovídající vlastní název. Např. prostřednictvím adresy 160 (A0h) tak lze odesílat nebo číst data přes port P2, apod. Názvy těchto jednotlivých registrů uvádí následující tabulka:
![Umístění jednotlivých SFR](http://upload.wikimedia.org/wikipedia/commons/4/4b/Mcs-51_sfr.jpg)
Acc | akumulátor, střadač (někde též A, od angl. slova accumulator), univerzální registr, pracují s ním všechny ALU funkce |
---|---|
B | používá se při násobení |
TH0,TH1 a TL0 a TL21 | dva čítače/časovače |
P0, P1, P2, P3 | V/V porty (jinak též brány) |
DPL, DPH | společně tvoří jeden 16bitový registr DPTR (lze k nim však přistupovat i jednotlivě – DPL tvoří spodních osm a DPH vrchních osm bitů), používá se zejména k adresaci dat v externí datové paměti, přesuny dat provádí instrukce MOVX |
SBUF, SCON | datový registr a řízení sériového přenosu |
TCON, TMOD | řízení časovačů |
PCON | řízení spotřeby |
IP | řízení priority přerušení (B8H) |
IE | řízení povolení přerušení (A8H) – spodních 7 bitů nastavuje jednotlivá přerušení, nejvyšší bit povolí všechna |
SP | (Stack Pointer) – ukazatel vrcholu zásobníku |
PSW | stavový byte (Program Status Word), charakterizuje výsledek předchozí operace, nulovost ACC a podobně. |
PC | (Program Counter, někdy též IP – instruction pointer) – programový čítač (čítač instrukcí) |
Registr PSW (adresa D0h) slouží k indikaci aktuálního stavu procesoru. Lze k němu přistupovat pomocí bitových adres D0h–D7h nebo názvů jeho jednotlivých bitů. Jak jsou jednotlivé bity (flagy, příznaky) řazeny, uvádí následující obrázek:
- P (Parity) – signalizuje paritu střadače, při lichém počtu jedniček se nastaví na hodnotu 1, aktualizuje se každou instrukcí
- OV (Owerflow) – signalizuje přetečení, při zpracovávání čísel se chová jako znaménko. Nastavuje se při aritmetických operacích, u dělení signalizuje pokus dělit nulou.
- RS0 a RS1 – (Register Select) - používá se k přepínání bank RB0 až RB3 (Register Bank) pracovních registrů (R0–R7) jak uvádí následující tabulka:
- F0 – uživatelsky definovatelný bit (příznak; Flag 0)
- AC (Auxiliary Carry) – nastaví se při přenosu mezi čtvrtým a pátým bitem v registru Acc (střadač), význam má pouze u instrukce DAA
- C (Carry) – signalizuje přenos informace mezi osmým a devátým bitem, použije se též při operacích porovnávání
- Jeden bit zůstal nevyužit (rezervován), u některých verzí mikrořadičů je použit a představuje druhý uživatelský bit (příznak; Flag 1) F1.
Externí připojení paměti
Pro komunikaci s externí pamětí programu je používán pro její čtení řídicí signál PSEN (Program Store Enable). Pro komunikaci s externí pamětí dat jsou používány řídicí signály RD (Read; čtení) a WR (Write; zápis). Přístup do paměti programu je vždy realizován 16bitovou adresou. Přístup do paměti dat je realizován použitím 16bitové adresy (pomocí DPTR) nebo 8bitové adresy (nepřímá adresace z registru).[zdroj?]
Podmínky pro přístup k vnější paměti:
- aktivní signál EA (External Access)
- čítač instrukcí PC (Program Counter) obsahuje číslo větší než 0FFFh (1FFFh pro typy s jádrem 8052).
Pokud není v procesoru integrována paměť programu, je signál EA trvale aktivován. Program je pak celý načítán z externí paměti. Když CPU vykonává program v externí paměti, všechny piny portu P2 jsou nastaveny jako výstupní a nemohou být používány pro běžné V/V operace. Během vybavování adres pro externí paměť totiž port P2 vysílá vyšší byte čítače instrukcí (PC). Během tohoto vysílání výstupní budiče jednotlivých bitů portu P2 využívají "silné" zvyšovací odpory (Pullups) a to v případě, kdy bity čítače instrukcí (PC) jsou jedničkové.[zdroj?]
Porty
Mikropočítače řady MCS-51 umožňují externě připojit/ovládat další zařízení (LED diody, snímače, jiné procesory atp.) pomocí portů. Celkem je k dispozici 32 V/V linek, dělených do čtyř osmibitových skupin – brán (P0 – P3). Lze přes ně obvykle posílat pouze digitální signál, některé klony však mají integrován/y i A/D převodník/y, často včetně analogového multiplexeru na jejich vstupu, případně D/A převodník/y, takže umožňují i práci s daty v analogové formě.[zdroj?]
Seznam procesorů firmy Intel
- Intel 8031
- Intel 8032
- Intel 8051
- Intel 8052
- Intel 8054
- Intel 8058
- Intel 8351
- Intel 8352
- Intel 8354
- Intel 8358
- Intel 8751
- Intel 8752
- Intel 8754
- Intel 8758
- Intel 80151
- Intel 83151
- Intel 87151
- Intel 80152
- Intel 83152
- Intel 80251
- Intel 83251
- Intel 87251
Reference
- ↑ http://www.dhservis.cz/docs_soubory/skripta_8051.pdf
Související články
Externí odkazy
Obrázky, zvuky či videa k tématu Intel MCS-51 na Wikimedia Commons
- Popis řady MCS-51
- https://web.archive.org/web/20090928050458/http://www.atmel.com/dyn/products/devices.asp?family_id=604 Seznam u Atmela.
![]() | Tento článek je příliš stručný nebo postrádá důležité informace. Pomozte Wikipedii tím, že jej vhodně rozšíříte. Nevkládejte však bez oprávnění cizí texty. |