Mikroprocesory z řady 8051

Mikroprocesor 8051 pochází z roku 1980 a je vývojově procesorem relativně starým. U návrhářů však dosáhl takové obliby, že i v současné době se řada výrobců orientuje na výrobu procesorů založených na jádře procesoru 8051, které je rozšířeno o více či méně dalších periferií. Například firma Philips vyrábí 24 různých typů těchto procesorů majících společné jádro, obr.1, ke kterému jsou připojeny některé z uvedených periferií jako je: paměť programu o velikosti 2kB až 32kB, kterou lze programovat jenom jednou (provedení OTP) nebo několikrát (provedení EPROM), paměť EEPROM pro uchování konstant, rozšířená vnitřní paměť RAM na 256b, 8 nebo 10-bitový A/D převodník obvykle s osmikanálovým analogovým multiplexerem, rozšířené vstupně/výstupní vývody, komparační a záchytný systém nebo dvoudrátová přístrojová sběrnice . Výrobci nabízejí procesory od základního hodinového kmitočtu 12MHz až po 33MHz ve standardním pouzdře DIL, přes provedení PLCC až po malá pouzdra PQFP. Jiné firmy se orientují na procesory s rozšířenými aritmetickými operacemi (Siemens 80C537) nebo s odlišným vnitřním časováním (Dallas 80C320), který při standardním hodinovém kmitočtu má trojnásobný výkon. Sjednocujícím základem všech těchto rozmanitých typů procesorů je vlastní jádro procesoru 8051 (80C51), které si nyní stručně popíšeme.

Obr.1 Prvky rozšiřující vlastnosti základního jádra procesoru 8051

Jádro procesoru 8051

Mikroprocesor 8051 je osmibitový jednočipový mikroprocesor se smíšenou harwardskou a Von Neumanovskou architekturou, u které je oddělena programová a datová paměť, ale formát

instrukcí a dat je totožný a přenáší se po stejné sběrnici. Procesor, jehož vnitřní struktura je blokově zobrazena na obr.2, je schopen samostatné činnosti po připojení vnějšího piezokeramického rezonátoru ("krystalu") na vývody XTAL1 a XTAL2 a jednoho napájecího napětí 5V. Na čipu procesoru je umístěna vlastní procesorová jednotka CPU, tvořená aritmeticko-logickou jednotkou ALJ, která kromě sčítačky/odečítačky obsahuje i násobičku-děličku a booleovskou aritmetickou jednotku. ALJ je přímo propojena s aritmetickými registry ACC, B a PSW (budou popsány dále). CPU je vnitřní společnou sběrnicí propojena s pamětí programu ROM nebo EPROM o kapacitě 4kB (existují i typy bez této paměti), s pamětí RAM o kapacitě 128 bytů a prostřednictvím registrů P0, P1, P2 a P3 se čtyřmi vstupně/výstupními branami P0 až P3, které zajišťují styk procesoru s vnějšími periferiemi. Nechceme-li, případně nemůžeme (procesor je bez vnitřní ROM/ EPROM) využívat procesor v jednočipové konfiguraci, jsou z procesoru vyvedeny řídící signály pro správu vnější programové () nebo datové (,) paměti. Každá z těchto pamětí může mít kapacitu až 64kB. Pro snadnější styk s periferiemi je procesor vybaven systémem přerušení, který zpracovává 5 zdrojů přerušení (2 externí a 3 interní - od každého z dvou časovačů a od sériového kanálu). Jednotlivá přerušení jsou maskovatelná, mají pevně určenou prioritu a programátor jim může přiřadit jednu ze dvou volitelných úrovní priority a celkově, nebo individuálně je maskovat. Čítače, které usnadňují realizaci časování, jsou 16-bitové s hodinovým signálem odvozeným z interního generátoru hodin nebo z vnějších vstupů T0 nebo T1. Pro snažší sériový styk s nadřízenými počítači nebo jinými spolupracujícími procesory je procesor 8051 vybaven duplexním (obousměrným) sériovým kanálem. Procesor je dále vybaven Booleovským procesorem, který umožňuje pracovat s jednotlivými bity vnitřní paměti RAM i interních periferií. Pro základní hodinový kmitočet 12MHz trvají instrukce 1m s nebo 2m s s tím, že instrukce násobení a dělení trvají 4m s.

Organizace paměti

Mikroprocesor 8051 má oddělené adresové prostory programu a dat, které jsou přístupné různými instrukcemi. Paměťový prostor můžeme dále dělit na vnitřní, umístěný na čipu, a vnější, který lze v případě potřeby s pomocí dalších součástek vytvořit. Proti překrývání vnitřního (4kB) a vnějšího (64kB) programového adresového prostoru je procesor vybaven vstupem obr.2. Je-li vstup =0, potom programová paměť je tvořena celou vnější pamětí, je-li vstup =1, potom instrukce v adresovém prostoru 000H - FFFH se čtou z vnitřní paměti ROM nebo EPROM a mimo tento prostor (1000H - FFFFH) ze zbývajících 60kB vnější paměti programu obr.3. Překrývání vnitřního a vnějšího datového adresového prostoru je odstraněno tím, že přístup do každého prostoru je realizován pomocí rozdílných instrukcí. Na obr.4 je základní rozdělení vnitřní datové paměti včetně umístění speciálních registrů. Vnitřní datová paměť RAM 128 bytů je tvořena čtyřmi bankami (0,1,2,3) po osmi registrech R0, R1, až R7 (adresy 00H - 1FH), za kterými je vyhrazeno 16 bytů (adresy 20H-2FH) pro tzv. bitoblast. Jednotlivé bity paměťových míst počínaje nejnižší adresou (20H) a nejnižším bitem (b0 - adresa bitu 00H) jsou vzestupně přímo adresovatelné. Přímo adresovatelných bitů v této oblasti je 128 (posledním bitem s adresou 127 (7FH) je bit b7 na adrese 2FH). Zbývajících 128 adres bitů se využívá k adresování některých významných bitů příslušejících speciálním registrům. Zbývající datová paměť RAM začíná adresou 30H a končí adresou 7FH a je uživateli volně přístupná pro přímé i nepřímé adresování.

Obr.3 Struktura paměťového prostoru 8051 a jeho následovníků

Je-li procesor vybaven rozšířenou vnitřní datovou pamětí v adresovém prostoru 80H až FFH, potom je tato paměť s ohledem na speciální registry přístupná pouze pomocí nepřímého adresování. Vnější datová paměť RAM s kapacitou až 64kB je přístupná přes 16-bitový pomocný ukazatel datové paměti DPTR. Určitou nevýhodou je to, že DPRT může být pouze naplněn konkrétní adresou paměťového místa nebo inkrementován (DPTR nemůže být snadno zmenšován).Tato nevýhoda je částečně odstraněna u dalších typů procesoru, které mají více registrů DPTR. Vnější datová paměť může být přístupná i s pomocí registrů R0 a R1 příslušné aktivní banky, které se využívají k 8-bitovému nepřímému adresování. Zapsáním 8-bitové hodnoty do výstupní brány P2, která představuje horní část adresy při adresování vnější paměti, rozdělíme paměť RAM na 256 bloků po 256 bytech. Nepřímým adresováním pomocí registrů R0 a R1 potom můžeme zapsat nebo přečíst vybraný byte ve zvoleném bloku. Oblast speciálních funkcí (SFR) je tvořena 21 registry, které leží v adresovém prostoru 128 (80H) až 255 (FFH). To znamená za vnitřní pamětí RAM nebo ve stejném prostoru jako leží rozšířená datová paměť RAM u následovníků procesoru 8051. Z tohoto důvodu jsou speciální registry přístupné pouze pomocí přímého adresování bytů nebo případně i bitů ( v registrech SFR, jejichž adresa je dělitelná osmi ).

Registry speciálních funkcí

Všechny informace důležité pro činnost mikroprocesoru a jeho periferních obvodů integrovaných na čipu procesoru, jako jsou čítače, sériový kanál, přerušovací systém a u následovníků 8051 záchytný a komparační systém, jsou soustředěny do souboru registrů tzv. registrů speciálních funkcí. Jednotlivé registry si nyní postupně popíšeme a v případě registrů příslušejících a ovlivňujících činnost periferií popíšeme i s popisem vlastností těchto obvodů.

Obr.4 Rozdělení vnitřní paměti RAM procesoru 8051

A - Střadač je základní registr aritmetickologické jednotky, který vždy obsahuje jeden operand aritmetické nebo logické operace a do něhož se ukládá výsledek této operace. Protože registr dovoluje ve spolupráci s aritmetickologickou jednotkou postupné přičítání zpracovávaných čísel, nazývá se střadač nebo akumulátor. Zvláštností střadače u procesoru 8051 je to, že leží v paměťovém prostoru SFR vnitřní paměti RAM procesoru a je přístupný nejen běžnými instrukcemi, ale i pomocí přímé adresy označované v mnemonice procesoru symbolickým názvem ACC.

B - Registr obsahuje jeden operand (druhý je umístěn ve střadači) pro instrukci násobení nebo dělení. Spolu se střadačem obsahují výsledek operací násobení a dělení. Nejsou-li tyto instrukce využívány, lze jej použít jako univerzální registr.

PSW - Stavové slovo mikroprocesoru se skládá ze 7 bitů, jejichž umístění je zobrazeno na obr.5 a jejich význam je následující:

C - Přenos (Carry) je nastaven při aritmetické operaci, při které dochází k přenosu z osmého () do devátého () bitu a při některých instrukcích porovnání.

AC - Vnitřní přenos (Auxiliary carry) je nastaven dojde-li při sčítání k přenosu mezi čtvrtým () a pátým () bitem střadače. Příznak se využívá pouze v instrukci dekadické korekce DAA, kterou aplikujeme na výsledek součtu dvou dekadických čísel vyjádřených v BCD kódu.

F0 - Uživatelský příznak F0 může být libovolně využíván programátorem k indikaci nějaké události (např. přetečení při výpočtu v aritmetice, identifikace vnější události, atd.). Příznak je pozůstatkem po vývojově předcházejícím procesoru (8048), který nebyl vybaven takovou škálou příznaků.

RS1

RS0

Banka

Adresy reg. R0,...,R7

0

0

0

00H až 07H

0

1

1

08H až 0FH

1

0

2

10H až 17H

1

1

3

18H až 1FH

Tabulka 1.

RS1, RS0 - Určují banku, jejíž registry R0 až R7 budou používány obr.4 (například k nepřímému adresování atd.). Jednotlivé bity RS1 a RS0 lze ovládat programově pomocí logických, přesunových nebo bitových operací. Procesor není vybaven instrukcí pro přepínání bank a po jeho vynulování je aktivní bankou banka 0 (RS1= RS0=0).

OV - Příznak přetečení (Overflow) indikuje přetečení při aritmetické operaci sčítání nebo odečítání, jestliže zpracovávaná čísla považujeme za čísla se znaménkem. Jedná se o případ, kdy součet dvou záporných čísel je kladný (došlo k přenosu mezi bity a nedošlo k přenosu mezi bity ) nebo součet dvou kladných čísel je záporný (nedošlo k přenosu mezi bity a došlo k přenosu mezi bity ), kde bit představuje znaménko. Příznak je též využíván při operaci dělení k identifikaci dělení nulou a při instrukci násobení. P - Příznak parity (Parity flag) indikuje lichou paritu střadače. Je-li ve střadači lichý počet jedniček, potom příznak parity je nastaven P=1. Příznak je aktualizován po každé instrukci a závisí výhradně na obsahu střadače, nikoliv na typu instrukce.

SP - Ukazatel zásobníku (Stack pointer) je osmibitový a na rozdíl od většiny procesorů je při plnění zásobníku inkrementován (hodnota ukazatele je zvětšována o jedničku). Vlastní zásobník je umístěn ve vnitřní datové paměti RAM a může být umístěn kdekoliv v této paměti tj. i v rozšířené části vnitřní datové paměti (adresy 128H až 255H u následovníků 8051), která je přístupná pouze pomocí nepřímého adresování. Po vynulování je nastaven na hodnotu SP=07H a ve většině aplikací musí být pomocí odpovídající instrukce přestaven na jinou hodnotu.

DPL, DPH - Registry DPL a DPH tvoří nižší a vyšší 8 bitovou slabiku 16-bitového ukazatele DPTR, který slouží k 16-bitovému nepřímému adresování vnější datové paměti RAM nebo paměti programu.

PC - Čítač instrukcí (Program counter) je 16-bitový čítač instrukcí, který není přímo programově přístupný.

Čítače/časovače

Mikroprocesor 8051 obsahuje dva 16-bitové čítače, jejichž obsah je přístupný pomocí paměťově mapovaných registrů TH0,TL0 (čítač 0) a TH1,TL1(čítač 1), které určují vyšší a nižší slabiku (8 bitů) příslušného čítače. Hodinový synchronizační signál čítačů může být odvozen z oscilátoru procesoru nebo z vnějšího zdroje pomocí vstupů procesoru T0 a T1. Je-li zdrojem signálu vnitřní oscilátor procesoru, potom čítač je ve funkci časovače a přičítá jedničku za každý strojový cyklus, který je tvořen 12 periodami oscilátoru. Ve funkci čítače vnějších událostí se obsah příslušného registru zvyšuje o jedničku vždy při přechodu signálu Tn z 1® .0. Vstupy T0 a T1 se testují během stavu S5P2 každého strojového cyklu. Zjistí-li se v jednom cyklu úroveň log.1 a v příštím log.0 přičte se k obsahu čítače jednička. Nová hodnota je v čítači nastavena v době S3P1 následujícího cyklu za cyklem, ve kterém byla zjištěna změna. Protože zjištění změny na vstupech Tn trvá 2 strojové cykly (24 period oscilátoru), je maximální čítaný kmitočet vnějšího signálu 1/24 kmitočtu oscilátoru mikropočítače. Logická úroveň čítaného signálu musí zůstat nezměněna vždy alespoň 1 celý strojový cyklus. Konfiguraci čítače/časovače 0 a 1 zajišťujeme naprogramováním registru TMOD . Vlastní čítače se programově spouští nebo zastavují nastavením nebo vynulováním bitu TRn v registru TCON.

TMOD - Registr módu časovačů / čítačů (Timer/Counter mode control) se skládá ze dvou čtveřic bitů obr.6 příslušejících každému ze dvou čítačů/časovačů. Význam jednotlivých bitů je následující: GATE - Řízení hradlování. Je-li GATE=1, potom čítač/časovač n je aktivován (čítá) při vstupu a TRn=1, kde TRn je bit z registru TCON. V tomto režimu je činnost čítače ovlivňována nejenom programově pomocí bitu TRn, ale zároveň i pomocí vnějšího signálu přivedeného na vstup Jak plyne z obr.7 bit GATE se uplatňuje se vstupním signálem v logickém součtu. Je-li GATE=0, potom čítač/ časovač n je aktivní pro TRn=1 (čítač je řízen pouze programově). - Volba čítač/časovač. Bit rozhoduje o zdroji hodinových impulzů, které bude čítač počítat. Je-li , potom se jedná o režim čítač a hodinový signál přichází ze vstupu Tn.

M1,M0 - Volba jednoho ze čtyř módů čítače/časovače.

Mód 0 - M0=M1=0. Režim čítače/časovače je shodný s režimem čítače na procesoru 8048. Osmibitový čítač THn čítá hodinové impulzy vydělené 5 bitovým předděličem tvořeným spodními bity čítače TLn obr.7. Oba čítače čítají vzestupně a vytváří 13-bitový čítač, který při přetečení (přechodu ze samých jedniček na samé nuly) nastaví příslušný příznakový bit TFn v registru TCON, které mohou být využívány jako zdroje přerušení procesoru. Vstup synchronizačního signálu do časovače je povolen tehdy, je-li TRn=1 (čítač je spuštěn) a současně s tím je GATE=0 nebo . Časovač 1 může být též využíván ke generování přenosové rychlosti sériového kanálu v módu 1 a 3.

Mód 1 - M0=1,M1=0. Mód 1 je shodný jako mód 0 s tím rozdílem, že čítače THn a TLn jsou 8-bitové a vytváří tak 16-bitový čítač. Dojde-li k přechodu ze samých jedniček na samé nuly, nastaví se příznak TFn.

Mód 2 - M0=0,M1=1. V módu 2 pracuje registr TLn jako čítač s obvodovým přednastavením na hodnotu uloženou v registru THn při přetečení čítače TLn obr.8. Programové nastavení nové hodnoty v registru THn neovlivňuje současný stav čítače TLn.

Mód 3 - M0=M1=1. V předcházejících módech byla funkce časovače 0 a 1 shodná. V módu 3 dochází u čítače 0 k jeho rozštěpení na dva samostatné osmibitové čítače TL0 a TH0. Čítač TL0 využívá standardní signály ,GATE,TR0, a TF0. Přetečení nastavuje příznak TF1 obr.9. Pracuje-li čítač 0 v režimu 3, potom čítač 1 může pouze generovat přenosovou rychlost pro sériový kanál nebo být využit v aplikaci, která nevyužívá přerušení. Protože bit TR1 je využit pro řízení čítače 0 je zastavení nebo spuštění čítače 1 ovládáno jeho nastavením do módu 3 nebo zrušením módu 3.

TCON - Registr řízení čítače/časovače se skládá ze čtyřech bitů příslušejících oběma časovačům a čtyřech bitů patřících vstupům vnějšího přerušení. Na obr.10 je zobrazeno jejich umístění v registru TCON a mají následující význam:

Obr.8 Čítač/časovač n v módu 2 - 8-bitový čítač s přednastavením

Obr.9 Čítač/časovač 0 v módu 3 - dva 8-bitové čítače

TF0, TF1 - Přetečení čítače/časovače. Bit je nastaven při přechodu časovače z maximální hodnoty do nuly a je automaticky vynulován při přechodu procesoru do odpovídajícího obslužného podprogramu přerušení.

TR0, TR1 - Spuštění čítače/časovače. Bit, který je ovládán programově, zajišťuje spuštění nebo zastavení příslušného čítače. Je-li GATE=1 v registru TMOD příslušného čítače, potom o přivedení nebo přerušení synchronizačního hodinového signálu do čítače rozhoduje vstupní signál .

IE0, IE1 - Přijetí vnějšího přerušení. Příslušný bit je nastaven při sestupné hraně nebo úrovni log.0 na vstupu vnějšího přerušení v závislosti na stavu konfiguračního bitu ITn. Po přechodu procesoru do obslužného podprogramu příslušného přerušení je bit automaticky vynulován.

IT0, IT1 - Konfigurace aktivace vnějšího přerušení. Je-li ITn=1, potom žádost o vnější přerušení je aktivována sestupnou hranou signálu na vstupu . Je-li ITn=0, potom žádost je aktivována úrovní log.0 na vstupu . Je-li signál na vstupu po dlouhou dobu v log.0, může být přerušení vyvoláno i několikrát za sebou, pokud doba přerušení je kratší než délka impulzu na vstupu . Bity se nastavují a nulují programově.

Čítač/časovač T2

Čítač/časovač T2 je implementován v klonech procesoru 8051 počínaje verzí 8052. Může pracovat jako čítač, nebo časovač. Čítač/časovač T2 má tři provozní režimy (viz obr. A1 a A2): -záchytný (capture) -s automatickým přednastavením (autoreload ) -generátor přenosové rychlosti pro seriový kanál

V obvodu 8052 jsou pro realizaci a řízení čítače/časovače T2 implementovány další speciální funkční registry. Tyto registry jsou na obr. A3. Provozní režimy T2 jsou voleny řídícími bity registru T2CON RCLK, TCLK , a TR2 podle následující tabulky.

RCLK+TCLK

TR2

REŽIM

0

0

1

šestnáctibitový a automatickým přednastavením

0

1

1

šestnáctibitový záchytný režim

1

x

1

generátor přenosové rychlosti

x

x

0

vypnuto

Tab. V1 Řízení provozních módů čítače/časovače T2

V záchytném režimu jsou možné dva způsoby provozu, které řídí bit EXEN2 registru T2CON. Pro EXEN2 =0 pracuje T2 jako 16-ti bitový čítač/časovač, který po přetečení nastaví indikátor TF2 a ten, pokud je to povoleno, generuje požadavek obsluhy přerušení. Je-li bit EXEN2=1, pracuje T2 stejně jako v předchozím případě, pouze s jednou funkcí navíc.. Sestupná hrana vnějšího signálu, připojeného na externí vstup T2EX řídí zápis okamžitého obsahu registrů TL2 a TH2 ( T2 ) do záchytných registrů RAP2L a RCAP2H a navíc nastaví příznak EXF2, který může generovat přerušení .

Obr. A1 Záchytný režim T2

Obr. A2 Automatické přednastavení T22

Obsah řídícího registru časovače T2 T2CON je v následující tabulce, význam řídících bitů registru T2CON je uveden v legendě za následující tabulkou.

MSB LSB

TF2

EXF2

RCLK

TCLK

EXEN2

TR2

-TF2 je příznak přetečení T2, je nastavován při řetečení, nulovat je ho nutné programově nemůže být nastaven pokud RCLK, nebo TCLK jsou rovny jedné - EXF2 je příznak T2 registrující vnější událost (sestupnou hranu na vývodu T2EX). Nastavuje se pouze při EXEN2=1, nulován je programově -RCLK je příznak přijímacích hodin seriového kanálu. Je-li nastaven, používá seriový kanál v režimech 1 a 3 k časování přenosu jako časovou základnu impulsy od přetečení T2, pokud je tento příznak nulový časuje příjem seriového kanálu časovač T1 -TCLK je příznak vysílacích hodin seriového kanálu. Je-li nastaven používá seriový kanál v režimech 1 a 3 k časování přenosu jako časovou základnu impulsy od přetečení T2, pokud je tento příznak nulový časuje vysílání seriového kanálu časovač T1 -EXEN2 je příznak , který uvolňuje externí řízení zápisu do záchytného registru a to pouze pokud T2 generuje hodiny pro seriový kanál -TR2 řídící bit spuštění(TR2=1), nebo zastavení T2 (TR2=0) -CT/ volba časovač CT/=0 (vnitřní hodiny = f/12), nebo čítač vnějších událostí CT/=1 T2 čítá na sestupnou hranu -CP/ příznak zachycení (přednastavení). Pokud CP/=1 a současně EXEN2=1, potom při sestupné hraně signálu na vývodu T2EX(P1.1) dochází k přepisu registrůT2 (T2L a T2H) do záchytných registrů RCAP2L a RCAP2H. Pokud je tento příznak nulový a současně EXEN2=1 dochází se sestupnou hranou signálu na vývodu T2EX, nebo při přetečení T2 k přednastavení registrů T2 hodnotou, kterou obsahují záchytné registry RCAP2L a RCAP2H. Pokud je ale nastaven některý z bitů RCLK, nebo TCLK je externí signál ignorován stejně jako samotný příznak CP/ a T2 je přednastaven při každém přetečení.

Přerušení

Pro snažší komunikaci s vnějšími periferiemi je mikroprocesor 8051 vybaven přerušovacím systémem s pěti zdroji přerušení. U následovníků 8051 se počet zdrojů přerušení v závislosti na počtu vnitřních periferií zvětšuje a dosahuje až hodnoty 15. Vnější přerušení a mohou být vyvolána buď logickou úrovní (log.0) nebo změnou logické úrovně (sestupnou hranou 1® 0). Vznikne-li vnější přerušení, je nastaven příslušný příznak IE0, IE1, který je obvodově automaticky vynulován při vyvolání obslužného podprogramu. Přerušení od časovače 0 a 1 se vyvolávají nastavením příznaků TF0 a TF1, které indikují přetečení příslušného čítače. Vyvolá-li se přerušení od časovače, potom odpovídající příznak TFn je vynulován při vyvolání příslušného obslužného podprogramu. Přerušení od sériového kanálu se generuje logickým součtem příznaků RI a TI. Aby uživatel mohl zjistit, zda přerušení bylo generováno příznakem RI (příjem) nebo TI (vysílání), nejsou příznaky automaticky obvodově nulovány při přechodu do obslužného podprogramu. V obslužném programu je programátor nucen nejprve stanovit příčinu přerušení (od RI nebo TI) a potom příslušný příznak programově vynulovat. V obslužném podprogramu pro sériový kanál tak zároveň programově rozhoduje o tom, která žádost (RI nebo TI) bude zpracována dříve a bude tak mít vyšší prioritu. Všechny příznaky, které generují přerušení, mohou být programově vynulovány nebo nastaveny. To znamená, že přerušení mohou být generována i programově nebo vyžaduje-li to situace mohou být nevyřízené žádosti o přerušení programově zrušeny. Každý ze zdrojů přerušení je možné individuálně povolit nebo zakázat nastavením nebo vynulováním příslušného bitu v registru speciálních funkcí IE. Zpracování přerušení znázorňuje obr. 10a.

IE - Registr povolení přerušení (Interrupt enable) se skládá z 5 bitů příslušejících každému z pěti zdrojů přerušení a jednoho bitu zajišťujícího globální zakázání všech přerušení nebo povolení všech povolených přerušení označeného EA. Na obr.11 je zobrazeno umístění jednotlivých bitů v registru povolení přerušení včetně jejich přímých bitových adres s jejichž pomocí mohou být individuálně ovlivněny bez nutné znalosti stavu ostatních bitů v registru. Význam jednotlivých bitů je následující:

EA - Globální povolení přerušení (Enable all). Je-li EA=0, je celý přerušovací systém zablokován a nemůže být přijata jakákoliv žádost o přerušení. Je-li EA=1, potom mohou být přijaty žádosti těch přerušení, která mají nastavený (log.1) svůj povolovací bit tj. ES, ET1, ...atd.

ES - Povolení přerušení od sériového kanálu. Je-li ES=1 a zároveň EA=1, je přerušení od příjmu a vysílání sériového kanálu povoleno.

ET0, ET1 - Povolení přerušení od čítače/časovače 0,1. Je-li ETn=1 a zároveň EA=1, potom je povoleno přerušení způsobené přetečením čítače/časovače n (n=0 nebo 1).

EX0, EX1 - Povolení vnějšího přerušení , . Je-li EXn=1 a zároveň EA=1, potom je povoleno přijetí vnější přerušení ze vstupu . O tom, zda přerušení bude vyvoláno sestupnou hranou signálu na vstupu nebo úrovní log.0, rozhoduje bit ITn v registru TCON.

Pro využití přerušovacího systému mikroprocesoru je nezbytné znát přiřazení priorit jednotlivým přerušením. U procesoru 8051 se výrobce rozhodl pro pevně přidělené priority jednotlivým přerušením v každé ze dvou úrovní priority. V rámci každé úrovně priority (nižší nebo vyšší) má nejvyšší prioritu vnější přerušení (IE0) následované časovačem 0 (TF0), vnějším přerušením (IE1), časovačem 1 (TF1) a sériovým kanálem (RI a TI), které má nejnižší prioritu. Potřebuje-li uživatel z nějakého důvodu přiřadit jednomu z přerušení nejvyšší prioritu, může mu přiřadit vyšší úroveň priority nastavením odpovídajícího bitu v registru IP - registru priority přerušení do log.1. Na obr.12 je zobrazeno umístění bitů úrovně priority jednotlivých zdrojů přerušení včetně jejich bitových adres, na které se můžeme odkazovat uvedenými symbolickými názvy, kde PS přísluší sériovému kanálu, PT0 a PT1 časovačům 0 a 1 a PX0, PX1 vnějším vstupům přerušení , . Přiřazením vyšší úrovně priority dosáhneme toho, že i přerušení s nížší úrovní priority bude přerušeno v důsledku žádosti přerušení s vyšší úrovní. Je-li již jedno přerušení vyvoláno (probíhá obslužný podprogram) nemůže být přerušeno přerušením třeba s vyšší prioritou v dané úrovni priority a musí počkat až na jeho dokončení. Potom budou podle vzájemné priority v dané úrovni postupně zpracovány další žádosti o přerušení. Z toho vyplývá, že přerušení s vyšší úrovní priority již nemůže být přerušeno. Otázka priority přerušení se stává důležitou v případech současného přijetí dvou a více žádostí o přerušení a u systémů využívajících velkého počtu přerušení. I když volba jednotlivých priorit přerušení v dané úrovni vychází ze zkušeností z mnoha realizací mikroprocesorových systémů, nemusí v případě využití mnoha přerušení vyhovovat pouze dvouúrovňové členění. Proto u některých výkonných následovníků (Siemens 80C537) je přerušovací systém členěn do čtyř úrovní priority, který uživateli poskytuje přeci jenom větší možnosti změn v prioritách jednotlivých přerušení. K využití přerušovacího systému musíme ještě znát jakým způsobem je realizováno volání příslušného obslužného podprogramu přerušení.

Zdroj přerušení

Adresa

IE0

Vnější přerušení 0

0003H

TF0

Čítač/časovač 0

000BH

IE1

Vnější přerušení 1

0013H

TF1

Čítač/časovač 1

001BH

RI +TI

Sériový kanál

0023H

Tabulka 2.

Obr.12 Přiřazení bitů úrovně priority přerušením v IP

U procesorů z řady 8051 má každý zdroj přerušení definovanou pevnou adresu, na kterou po přijetí žádosti o přerušení, dokončení probíhající instrukce a uložení návratové adresy (adresy následující instrukce za právě dokončenou instrukcí) do zásobníku, předá procesor řízení. Adresy přerušení jsou od sebe vzdáleny pouze o 8 adresových míst viz. tab.2 a proto na nich bývá obvykle uložena pouze instrukce nepodmíněného skoku na vlastní obslužný podprogram zakončený instrukcí RETI (Return from interrupt).

Žádosti o přerušení (příznaky IE0,IE1,TF0,TF1,RI+TI) se vzorkují v době S5P2 každého strojového cyklu procesoru a vyhodnocují se v následujícím cyklu. Je-li některý z příznaků nastaven a není splněna žádná z podmínek zabraňujících vyvolání obslužného podprogramu, přerušovací systém provede instrukci LCALL (dlouhé volání podprogramu) na příslušnou adresu určenou tab.2. Kromě individuálního nebo globálního zakázání přerušení v registru IE, může jeho vyvolání oddálit právě probíhající přerušení se stejnou nebo vyšší úrovní priority, doposud nedokončená instrukce nebo právě probíhající instrukce RETI (návrat z přerušení) nebo instrukce zasahující do registrů IE a IP. Druhá podmínka zajišťuje, že před přechodem do obslužného podprogramu se rozdělaná instrukce nejprve dokončí. Poslední podmínka zajišťuje, že po instrukci RETI nebo instrukci zasahující do registrů IE a IP je vykonána ještě jedna instrukce a teprve potom je provedeno směrování na příslušný vektor přerušení. Cyklus vyhodnocení se opakuje v každém strojovém cyklu a vyhodnocují se v něm platné (navzorkované) hodnoty v periodě S5P2 předchozího strojového cyklu. Není-li žádost o přerušení obsloužena, protože byla platná některá z blokovacích podmínek, pak v době, kdy už není aktivní se neobslouží, i když podmínky blokování zanikly. Žádost neobslouženého příznaku přerušení se nikde neuchovává (vyjma příznaku), a v každém cyklu vyhodnocení se pracuje s novými hodnotami získanými v předcházejícím strojovém cyklu. Aby vzorkování vnějších přerušení , bylo správné, musí při aktivaci přerušení sestupnou hranou () trvat hodnota log.1 i log.0 na vstupech , alespoň 12 period oscilátoru (jeden strojový cyklus). V případě aktivace nízkou úrovní signálu, musí žádost trvat tak dlouho, dokud nedojde k přechodu do obslužného podprogramu. Nebude-li žádost v průběhu obslužného podprogramu zrušena, potom dojde k opětovnému vyvolání přerušení.

Na obr.13 je zobrazena situace při přijetí žádosti o přerušení v případě, kdy procesor zpracovává jednocyklové instrukce nepracující s registry IE a IP. V cyklu C1 před periodou S5P2 přichází žádost o přerušení, která se vyhodnocuje v cyklu C2. Jsou-li splněny všechny podmínky pro vyvolání přerušení, potom v cyklech C3 a C4 je generována instrukce LCALL na příslušnou adresu obslužného podprogramu. V cyklu C5 potom může být zpracována první instrukce obslužného podprogramu. Vznikne-li žádost o přerušení s vyšší prioritou před periodou S5P2 strojového cyklu C3, potom bude přerušení obslouženo podle výše uvedených pravidel během strojových cyklů C5 a C6, aniž se vykoná jediná instrukce obslužného podprogramu s nižší prioritou. Mezi vznikem požadavku na přerušení a první instrukcí obslužného programu proběhnou nejméně tři strojové cykly. Odezva na přerušení se prodlouží při platné podmínce blokující přechod do obslužného podprogramu. V případě probíhajícího přerušení se stejnou nebo vyšší úrovní priority, je doba čekání závislá na délce a vlastnostech obslužného podprogramu. Není-li vyhodnocení žádostí prováděno v posledním cyklu instrukce, potom prodloužení odezvy nebude větší než 3 strojové cykly (instrukce MUL a DIV trvají 4 cykly). Probíhá-li právě instrukce RETI nebo instrukce operující s IE nebo IP, prodlouží se doba odezvy nejvíce o 5 strojových cyklů (1 cyklus pro dobíhající instrukci a 4 cykly za dokončení nejdelší následující instrukce MUL nebo DIV). Využíváme-li v systému pouze jedno přerušení, potom časová odezva bude vždy delší než 3 a kratší než 9 strojových cyklů.

 

Sériový kanál

Jednou z velkých výhod procesoru 8051, zvláště v době jeho vzniku, byl a je plně duplexní sériový kanál integrovaný na čipu procesoru umožňující komunikaci ve standardním 8 a 9-bitovém asynchronním režimu nebo 8-bitovém synchronním režimu s pevnou přenosovou rychlostí. Tím byla výrazně usnadněna komunikace s nadřízeným počítačem např. typu PC, k jejíž realizaci je v současné době zapotřebí jeden integrovaný obvod (MAX232, MAX233) zajišťující převod sériového kanálu v úrovních TTL na úrovně RS232C (V28). Plně duplexní sériový kanál umožňuje současně vysílat i přijímat hodnoty po tomto kanálu tvořeného minimálně 3 vodiči (RxD,TxD a Zem). Přijímací kanál je vybaven vyrovnávacím registrem, do kterého jsou uložena právě přijatá data, čímž je umožněn okamžitý příjem další dat. Přijatá data však musí být převzata dříve než je dokončen příjem následujících dat, který by způsobil přepsání původních dat. Procesor není vybaven příznaky indikující ztrátu přijatých dat (chybu přeplnění), chybu rámce a parity nebo indikaci přerušení, které jsou obvyklé u specializovaných obvodů.

Přijímací i vysílací registr je přístupný na adrese registru speciálních funkcí se symbolickým označením SBUF - registr sériového kanálu. Zápisem se naplňuje vysílací registr, čtením SBUF je přečtena hodnota přijatá fyzicky odlišným posuvným přijímacím registrem přepsaná do vyrovnávacího registru. Sériový kanál může pracovat ve čtyřech módech v závislosti na naprogramováním registru SCON a nejvyššího bitu v registru PCON.

SCON - Registr módu a řízení sériového kanálu se skládá z 8 bitů, jejichž umístění je zobrazeno na obr.14 a jejich význam je následující: SM0,SM1 jsou Konfigurační bity určují jeden ze čtyř módů sériového kanálu, které jsou popsány tabulkou 3.

SM1,SM0

Mód

Typ přenosu

Bitová rychlost

0 0

0

Synchronní 8 bitový bez rám. synchronizace

0 1

1

8 bitový UART

časovač 1

1 0

2

9 bitový UART

,

1 1

3

9 bitový UART

časovač 1

Tabulka 3.

Obr.15 Časování sériového kanálu v módu 0

SM2 - Bit povolující vytvoření víceprocesorové sériové sběrnice v módu 2 a 3. Je-li v módu 2 a 3 nastaven příznak SM2=1, pak se RI nenastaví (nemůže být vyvoláno přerušení), jestliže přijatý devátý bit (RB8) má hodnotu log.0. V módu 1 může být SM2 využit ke kontrole platnosti stop bitu a příjmu dat s jenom platným stop bitem. V módu 0 se bit SM2 nevyužívá.

REN - Povolení příjmu (REM=1). Bit se nastavuje i nuluje programově

TB8 - Devátý datový bit při vysílání. Vysílá se v módech 2 nebo 3. Nastavuje a nuluje se programově.

RB8 - Devátý datový bit při příjmu. Přijímá se v módech 2 nebo 3. V módu 1 při SM2=0, obsahuje RB8 přijatý stop bit. V módu 0 se RB8 nevyužívá.

TI - Příznak prázdného vysílacího posuvného registru se nastavuje obvodově v okamžiku vysílání 8 přenášeného bitu v módu 0 nebo na začátku vysílání stop bitu v ostatních módech. Příznak TI je společně s příznakem RI zdrojem žádosti o přerušení sériového kanálu a proto nemůže být z důvodu identifikace zdroje (od TI nebo RI) přerušení nulován obvodově. Proto uživatel sám musí po přijetí žádosti rozlišit, zda se jedná o žádost od příjmu (RI) nebo vysílání (TI), a teprve potom příslušný příznak programově vynulovat.

RI - Příznak přijatých platných dat se nastaví na konci příjmu 8 bitu v módu 0 nebo uprostřed přijímaného stop bitu v ostatních módech. Příznak se stejně jako TI nuluje programově, aby bylo možné rozlišit příčinu přerušení.

Pracovní módy seriového kanálu

Mód 0 - Sériová data se vysílají nebo přijímají vstupem P3.0 označeném RxD synchronně s hodinovým posouvacím signálem vysílaným na výstupu TxD=P3.1. Vysílá se 8 datových bitů, počínaje bitem s nejmenší váhou obr.15. Přenosová rychlost je pevná a rovna 1/12 kmitočtu oscilátoru.

Mód 1 - 8-bitový UART obr.16. Hodnoty se vysílají výstupem TxD a přijímají vstupem RxD a skládají se z deseti intervalů určených převrácenou hodnotou přenosové rychlosti v baudech pro přenos jednotlivých bitů. První bit je vždy nulový (log.0) a představuje tzv. start bit, po němž následuje 8 přenášených bitů počínaje bitem s nejmenší váhou a posledním, který je vždy v log.1 a představuje tzv. stop bit (přesně jeden stop bit). Při příjmu se stop bit ukládá do bitu RB8 v registru SCON. Přenosová rychlost je volitelná a je určena periodou přetečení čítače/časovače 1 a hodnotou nejvyššího bitu v registru PCON. Pro přenosovou rychlost můžeme za předpokladu, že čítač 1 pracuje v módu 2, snadno odvodit tento vztah

kde (TH1) je obsah registru TH1a je kmitočet oscilátoru. Pro dosažení nízkých přenosových rychlostí se využívá čítač v módu 1, kde po vzniku přerušení provedeme programové přednastavení potřebnou 16-bitovou hodnotou.

Obr.16 Časování sériového kanálu v módu 1

Obr.17 Časování sériového kanálu v módu 2 a 3

Mód 2 - 9-bitový UART. Při vysílání je na vývodu TxD generováno 11 bitů v odpovídajících 11 intervalech daných přenosovou rychlostí uvedených start bitem (log.0) a ukončených jedním stop bitem (log.1) jako v předcházejícím módu. Přijímaný znak přichází přes vstup RxD. Devátým vysílaným bitem je hodnota bitu TB8 z registru SCON a přijatý 9-tý bit se ukládá do bitu RB8 v registru SCON a stop bit se ignoruje. Devátý bit může být využit k přenosu hodnoty (9 bitů) nebo k přenosu zabezpečovacího bitu například parity P (ochrany proti chybě v jednom bitu při přenosu), kterou získáme z registru PSW, jestliže ve střadači je uložena přenášená hodnota. Přenosová rychlost je dána 1/32 nebo 1/64 kmitočtu oscilátoru v závislosti na hodnotě bitu SMOD v registru PCON.

Mód 3 - 9-bitový UART s programovatelnou přenosovou rychlostí. Příjem i vysílání hodnot probíhá stejně jako v módu 2 s tím, že přenosová rychlost je určena periodou přetečení čítače/časovače 1 a nastavení bitu SMOD.

Ve všech čtyřech režimech se vysílání spouští instrukcí, která využívá SBUF jako cílový registr (zápisem do SBUF). Příjem v módu 0 se spouští podmínkami RI=0 a REN=1. V ostatních režimech se příjem spouští příchodem start bitu při REN=1.

Multiprocesorová komunikace

Režim 2 a režim 3 je vybaven prostředky, které umožňují realizovat multiprocesorovou komunikaci. V těchto režimech se přijímá devět datových bitů, z nichž devátý bit se ukládá do bitu RB8 v řídícím registru sériového kanálu SCON. Sériový kanál lze naprogramovat pomocí bitu SM2 z registru SCOM tak, aby se při příjmu stop bitu aktivovalo přerušení od sériového kanálu jedině tehdy, je-li logická hodnota RB8=1. Této možnosti lze využít v klasické multiprocesorové konfiguraci (Master - slave) následujícím způsobem obr.18. Chce-li nadřízený procesor (master) přenášet do jednoho z podřízených procesorů (slave) blok dat, vyšle nejdříve adresový byte, který indentifikuje cílový procesor. Adresový byte se liší od datového bitu logickou hodnotou právě devátého bitu. U adresového bytu je v devátém bitu log.1, zatímco datový byte obsahuje v devátém bitu log.0. Je-li logická hodnota SM2=1, pak nebude žádný procesor přerušován datovým bytem, avšak adresový byte přeruší všechny podřízené procesory. Testováním přijatého bytu může každý procesor zajistit, zda je adresován a následující datové údaje jsou určeny pro jeho činnost. Adresovaný podřízený procesor vynuluje bit SM2 a připraví se k příjmu datových bytů. Ten podřízený procesor, který nebyl adresován, ponechá svůj bit SM2 nastaven a pokračuje v původní činnosti před přerušením a ignoruje přecházející datové byty. Formát takové zprávy, která se přenáší mezi procesory je tvořen adresou následovanou vlastní informací s délkou n bytů takto

Například pro přenos hodnot 55H a AAH z procesory master do slave 1 bude vypadat následovně

Komunikace z podřízeného do řídícího mikroprocesoru bude probíhat obdobným způsobem s tím, že například jinou adresou vyzve nadřízený procesor jeden z podřízených procesorů k přenosu dat. Ten zajistí připojení výstupu TxD na vstup RxD nadřízeného procesoru a realizuje přenos, který je v takovéto konfiguraci nemusel být uveden adresou. Vzhledem k tomu, že výstupy brány 3, kde je vývod TxD, jsou realizovány s otevřeným kolektorem, mohou být jednotlivé výtupy TxD paralelně spojeny a připojeny na vstup RxD nadřízeného procesoru. Podmínkou takového propojení je, že vysílání bude realizováno pouze jedním podřízeným procesorem.

Režimy se sníženou spotřebou

U aplikací, kde není vyžadována soustavná činnost a jsou kladeny přísné požadavky na spotřebu energie je obvykle nutné u procesorů využívat režimů se sniženou spotřebou. Procesory z řady 8051 umožňují v závislosti na tom, v jaké technologii jsou vyrobeny režimy se sníženým příkonem a se sníženým napájením. U starých procesorů vyrobených v technologii HMOS je snížení příkonu možné pouze v režimu s vypnutým napájením, při kterém chceme uchovat obsah paměti RAM na čipu. Pro tento účel byl procesor vybaven vstupem pro pomocný (záložní) zdroj napětí sdružený se vstupem nulování procesoru RST. Zjistí-li uživatelský systém, že dochází k poklesu napájecího napětí, musí přerušit činnost procesoru a přesunout důležité údaje do paměti RAM na čipu procesoru. Potom připojí zdroj pomocného napětí na vstup RST a vygeneruje tak nulování procesoru (RESET). Tato činnost musí být ukončena dříve než napětí poklesne pod spodní úroveň provozního napětí určeného výrobcem. Po opětovném naběhnutí napájení musí zůstat záložní napětí tak dlouho, dokud nedojde k spolehlivé činnosti oscilátoru procesoru (10ms), nedosáhne alespoň spodní úroveň provozního napětí. Po splnění všech podmínek může být provozní napětí odpojeno a procesor může zahájit normální činnost. Moderní procesory vyrobené v CHMOS technologii jsou vybaveny dva režimy se sníženým příkonem, do kterých lze procesor uvést nastavením příslušných bitů v registru PCOM. Vstupem, na který se přivádí záložní napětí, je vývod pro vlastní napájení .

PCON - Registr řízení napájení (Power control) obsahuje u jádra procesoru 80(C)51 jeden nebo tři bity obr.19. První odlišností tohoto registru od všech předcházejících je to, že jeho bity nejsou bitově adresovatelné a musí být jeho obsah měněn zápisem celého nového bytu. Nejvyšší bit označený SMOD nemá s řízením napájení nic společného a je pouze doplňujícím bitem pro řízení sériového kanálu SMOD sloužícím k zdvojnásobení jeho přenosové rychlosti. Jedná-li se o procesor, který je vyroben v HMOS technologii, potom je tento bit jediným bitem využívaným z registru PCOM. U procesorů vyrobených v technologii CMOS jsou využívány další dva bity označené PD a IDL, které slouží k uvedení procesoru do módů se sníženou spotřebou. Instrukce, která nastaví bitu IDL do log.1 je poslední instrukcí provedenou před přechodem do tzv. Idle módu, u kterého jsou všechny aktivity jádra procesoru zastaveny. Oscilátor i periferní obvody jako je sériový kanál, časovače, atd. pokračují v dál. Zůstává zpracován stav procesoru jako je ukazatel zásobníku, programový čítač, stavové slovo, střadač i zbývající speciální registry a vnitřní stav datové paměti RAM. Stavy vstupně/výstupních bran drží svůj logický stav, který měly v době přechodu do Idle módu. Signály ALE a se stávají neaktivní. Uvedený mód, při kterém klesne spotřeba obvodu na cca 15mA, lze opustit přijetím libovolného nezamaskovaného přerušení některé z periferií nebo vynulováním procesoru. Přijetí přerušení obvodově vynuluje bit IDL a procesor obslouží příslušné přerušení a přejde do normální činnosti. Po provedení instrukce RETI a ještě jediné instrukce může být znovu uveden do módu Idle. Nastavením bitu PD do log.1 uvedeme procesor do tzv. Power down módu, u kterého jsou zastavena činnost celého procesoru včetně periferií i oscilátoru a díky tomu se sníží odběr ze zdroje až na desítky m A. Stejně jako v předcházejícím módu je instrukce, která nastaví bit PD do log.1 poslední instrukcí provedenou před přechodem do power down módu. Zůstává zachován stav registrů speciálních funkcí a vnitřní paměti RAM. Oproti předcházejícímu módu nemohou být generována přerušení od vnitřních periferií a procesor může uvedený mód opustit pouze vynulováním. Tato funkce však znovu definuje obsah všech registrů speciálních funkcí, obsah paměti RAM se nezmění. V tomto režimu může být dále snížen odběr snížením záložního napájení až na hodnotu 3,3V. S výhodou tak lze využít obvodů MAX690 až MAX696 sdružujících watchdog, komparátor napětí a přepínač záložního napájení.

Zapojení vývodů mikroprocesoru 8051

Klasický mikroprocesor 8051 se vyráběl v plastikovém nebo keramickém pouzdře DIL se čtyřiceti vývody obr.19, nyní se většinou využívá plastikového pouzdra PLCC se čtyřiceti čtyřmi vývody. Ke své činnosti vyžaduje jedno napájecí napětí a a připojení piezokeramického rezonátoru ("krystalu") k vývodům XTAL1 a XTAL2 obvodu vnitřního oscilátoru. Procesor je vybaven 4 vstupně/výstupními branami P0 až P3 z nichž P0,P2 a P3 obsahují další funkce, které jsou závislé na tom, zda využíváme vnější paměť programu nebo dat, vnější přerušení, vnější vstupy časovačů nebo sériový kanál. Pro řízení vnější paměti je procesor vybaven řídícími signály ALE (pro zápis spodní poloviny platné adresy A0 až A7) (pro čtení z vnější paměti programu) a a (pro čtení nebo zápis do vnější datové paměti). Kromě uvedených signálů je procesor vybaven již zmíněným vstupem EA, který určuje přístup k vnější programové paměti, a nulovacím vstupem RESET s aktivní úrovní v log.1. Na tomto místě je třeba upozornit na to, že řada následovníků má aktivní úroveň nulovacího impulzu opačnou (log.0), jak bývá u většiny procesorů obvyklé. Na obr.20 je zobrazen nejjednodušší nulovací obvod, který musí zajistit, aby RESET=1 nejméně po dva strojové cykly v době plné činnosti oscilátoru. Ačkoliv se úloha zdá být jednoduchá, je otřeba si uvědomit, že napájecí zdroj může mít relativně pomalý náběh a vnitřní oscilátor je obvykle nastartován mezi 5ms až 10ms po dosažení napájecího napětí. Je třeba připomenout, že tento jednoduchý obvod není vhodný pro systémy se zálohovanou pamětí dat RAM nebo EEPROM. V okamžiku odpojení nebo poklesu napájecího napětí nedojde k vytvoření nulovacího impulzu, který by vyřadil procesor z činnosti po dobu napájecího napětí mimo tolerance stanovené výrobcem. Necháme-li procesor v tomto rozsahu napájecího napětí pracovat, potom má "dostatek času" k přepsání zálohovaných dat. V takových případech musíme použít nulovací obvod (TL7705) nebo nulovací generátor s obvodem watchdog (MAX690 až MAX699). Obvod nulování u verze HMOS je spojen s vývodem nulování RST/VDP a současně se jím přivádí záložní napájecí napětí při úsporném režimu pro paměť RAM. U verze CMOS se záložní napětí přivádí vývodem Ucc. Provedení RST vstupu pro obě verze je na

Obr. 20 Nulovací obvod Obr. 21a), b).Přípojení zálohovacích napěťových zdrojů Obsahy registrů speciálních funkcí po resetu jsou v následující tabulce

registr

obsah

registr

obsah

registr

obsah

registr

obsah

PC

000h

DPTR

0000h

TL0, 1

00h

SBUF

náhodný

ACC

00h

P0-P3

00h

SCON

00H

PCON/H

0xxxxxxxB

B

00h

TMOD

00h

T2CON

00H

PCON/C

0xxx0000B

PSW

00h

TCON

00h

RCAP2H

00H

IP

xx000000B

SP

07h

TH0, 1

00h

RCAP2L

00H

IE

0x000000B

Synchronizační signál je obvykle tvořen vnitřním oscilátorem, ke kterému připojujeme krystal dle obr.22a. Kmitočet oscilátoru u standardního mikroprocesoru 8051 se může pohy- bovat v rozsahu 1,2MHz až 12MHz. U následovníků zůstává spodní kmitočet shodný, ale nejvyšší kmitočet může do- sáhnout až 33MHz. V takovém případě budeme-li využívat synchronizační kmitočty nad 20MHz, pak budeme většinou využívat vnější oscilátory, které připojíme k mikroprocesoru dle obr. 22 b.

Časování centrální procesorové jednotky

Strojový cyklus procesoru se skládá ze šesti stavů označených S1,S2, ... ,S6, z nichž každý je dále rozdělen na dvě fáze P1 a P2. Každý strojový cyklus je tak tvořen 12 fázemi označovanými S1P1, S1P2, S2P1, ... , S6P2 shodnými s periodami synchronizačního oscilátoru.

.

Obr.22 Synchronizace mikroprocesoru 8051

Na obr.23 je zobrazeno časování čtení a vykonání čtyř možných typů instrukcí procesoru 8051 vzhledem k jeho vnitřnímu časování, které je uživateli nedostupné. Pro lepší orientaci jsou na obr.23 zobrazeny i průběhy signálů ALE a XTAL2. Signál ALE se normálně aktivuje dvakrát během jednoho strojového cyklu. Poprvé ve fázi S1P2 až S2P1 a podruhé během S4P2 až S5P1 s výjimkou přístupu do vnější paměti dat (MOVX), kdy v druhém cyklu je vynechán první cyklus ALE. Z tohoto důvodu není vhodné využívat signál ALE k časování v navrhovaném systému.

Realizace jednocyklové instrukce začíná ve fázi S1P2 uložením přečteného operačního znaku do registru instrukcí. Ve stavu S4 ještě téhož strojového cyklu se provádí čtení ještě jednoho bytu z následujícího paměťového místa. Je-li přečtený byte využit v instrukci (dvoubytová a jednocyklová nebo dvoubytová a dvoucyklová instrukce), potom čítač instrukcí je inkrementován. Je-li zpracovávaná instrukce jednobytová a jednocyklová, potom přečtený byte ve stavu S4 je ignorován a čítač instrukcí se nemění. Instrukce je vykonána ve fázi S6P2. V případě jednobytové dvoucyklové instrukce je situace stejná jako u předcházejícího případu s tím, že čtení dalšího bytu je ignorováno třikrát. Jedinou výjimkou je instrukce přístupu do vnější paměti MOVX, která jako 1 bytová dvoucyklová instrukce negeneruje ve fázi S1P2 až S2P1 druhého cyklu signál ALE a nerealizuje oba výběry dalšího bytu (čtecí cyklus externí datové paměti obr.24.). Na obr. 24 je souhrně naznačeno časování externích periferií a interních rozhraní (bran a seriového kanálu). Nižší byte adresy externí datové paměti vystupuje bránou P0 v dobáchS5P1 až S6P1 a musí být zapsána do záchytného registru signálem ALE, signál RD# trvá od S1P1 do S3P2, uvolní výstup datové paměti a ten je vzorkován v době S2P2 a přenesen na interní sběrnici procesoru. Horní byte adresy (obsah DPH) vystupuje bránou P2 v dobách S5P1 až S4P2. Zápis dat do externí datové paměti probíhá obdobně, pouze je ve stejných dobách jako generován signál a data vystupují bránou P0 v dobách S6P2 až S4P1. Při instrukci MOV PORT, SRC (SRC je název obsahu zdrojového registru) se mění stav brány na konci instrukčího cyklu ve fázi S1P1, Při čtení brány (nikoliv obsahu registru brány)

je nutné nejprve zapsat do registru brány slabiku 0FFh a pak instrukcí MOV DEST,Pk (k=0,1,2,3) vzorkovat signály na vývodech brány Pk ve fázi S5P1(brána P0), nebo S5P2 (brány P1,2,3). Ve stejné fázi je vzorkován signál RxD a v návaznosti na fázi S5P2 tj. od fáze S6P1 do fáze S2P2 včetně je roven jedné hodinový signál seriového kanálu. Signál TxD je mění s náběžnou hranou hodin seriového kanálu. Vstupy externích přerušení INT0# a INT1# jsou vzorkovány v každém strojovém cyklu ve fázi S5P2 a pokud jsou aktivní a potvrzené začne se hardwarové volání obsluhy provádět jako příští instrukce. Volání samo trvá dva cykly.

Paralelní vstupy/výstupy

Paralelní číslicové vstupy/výstupy (paralelní číslicové rozhraní procesoru) jsou samozřejmou výbavou každého jednočipového mikropočítače. Jejich obvodové řešení se vyvíjelo od nejjednoduššího uspořádání výstupu s jediným výstupním registrem brány a vlastním výstupem tvořeným spínacím tranzistorem který má v kolektoru upínací rezistor, tvořený spínacím tranzistorem který má v kolektoru upínací rezistor, realizovaný MOS tranzistorem v saturačním režimu, až k čistě obousměrnému provedení brány s třístavovým výstupem, podporovaným třemi registry, výstupním, vstupním a registrem řízení směru (npř.u procesoru fy Siemens 80C166, nebo firmy Motorola 68HC705 ).

Obr. 24. Časování externích pamětí, čtení/zápis bran

Zapojení výstupu brány P1 (bez alternativní funkce - čárkovaný spoj) a současně bran P3 až P6 u klonu npř. 80552, je na obr. 25. Hodnota odporu rezistoru R je 40 až 60 k, což je hodnota příliš velká pro dostatečně rychlý zápis "log. jedničky" na vývod, brány, proto se krátkodobě, na dvě periody oscilátoru, na výstup připíná další upínací rezistor (MOS tranzistor). Obvodové provedení krátkodobého připínání dalšího upínacího rezistoru pro verzi HMOS je na obr. 28 a pro verzi HCMOS na obr. 29. Při čtení hodnot signálů na vývodech bran P1, P3 a dalších je nutné, aby do registrů bran byly u čtených vývodů zapsány jedničky, jinak je čtena hodnota signálu zapsaného do registru brány. Brána P2 je u mikropočítačů s externí pamětí používána jako adresová sběrnice a proto výstupní obvod brány P2 (obr.26) obsahuje multiplexor. V literatuře se brány a P1, P2, P3 označují jako kvasibidirekcionální, jedná se ovšem o výstupy s otevřeným kolektorem a vnitřním upínacím rezistorem. Brána P0 se v rozšířeném módu mikroprocesoru využívá jako multiplexovaná datová/adresová sběrnice. Na rozdíl od ostatních bran nemá vnitřní upínací rezistor.

Obvodové zapojení procesorových bran je na následujících obrázcích.

Obr.25 Základní struktura V/V obvodu brány 1, 3, 4, 5, 6.0 až 6.2

U verze HMOS je horní tanzistor rozepnutý (výstup je stavu vysoké impedance) s vyjímkou, kdy je ve funkci multiplexované sběrnice. Zapojení výstupu brány P0 je na obr. 27. Přípustné zatížení bran P1, P2, P3 představují 4 vstupy LSTTL a brány P0 8 vstupů LSTTL. Pokud brána P0 je používána jako normální paralelní číslicová brána a jsou k ní připojeny MOS obvody s předepsanými vyššími úrovněmi "log. 1" je nutné výstupní úrovně brány P0 zvýšit externími upínacími rezistory (5 až 15k), pokud je brána použita jako externí sběrnice není upínání nutné. Na obrázcích 28. a 29. je naznačeno obvodové řešení výstupu procesoru, které zabezpečí rychlé nabíjení kapacity vývodu brány při změně výstupního signálu 01. Výstup brány je v obou technologiích HMOS i HCMOS doplněn tranzistorem , který při zápisu "jedničky" spíná na vývod procesoru napětí Udd po dobu dvou period kmitočtu oscilátoru fosc. Doplňkový tranzistor (T3n-verze HMOS, T4p-verze HCMOS) má v sepnutém stavu odpor kanálu asi 5kW a jeho spínací signál generuje tvarovač impulsů tvořený zpožďovací linkou, invertorem a logickým členem ( NOR - HMOS a OR - HCMOS).

Obr.26 V/V obvod s vnitřním upínacím rezistorem brána P2

 

Obr.27 Struktura V/V obvodu brána P0

Obr. 28 Obvodové provedení výstupu brány - verze HMOS

Obr. 29 Obvodové řešení brány s otevřeným kolektorem - verze HCMOS

Bitový (booleovský) procesor

Střadačem bitového procesoru je bit přenosu C. Pracuje nad bitově adresovatelnou částí RAM a bity bitově adresovatelných registrů speciálních funkcí (všechny registry v interní paměti výhradně přímo adresované, jejichž adresa je dělitelná osmi beze zbytku). Umožňuje nastavení, nulování, negaci a přesun do jiného bitu. Větvit program podle bitu a provádět logický součin a součet dvou bitů.

Krokování programu 8051

Krokování programu u procesoru 8051 dovoluje struktura a funkce přerušovacího systému uskutečnit programově. Vychází se z toho, že žádost o přerušení nebude akceptována pokud je obsluhován požadavek přerušení se stejnou nebo vyšší prioritou, nebo pokud nebyla provedena alespoň jedna další instrukce po návratové instrukci RETI. Naprogramujeme-li jedno z externích přerušení npř.INT0# tak, aby bylo aktivováno úrovní "log.0", na vývod ITO připojíme generátor jednoho impulsu, jehož šířka je větší než perioda strojového cyklu a zakončíme obslužný program tohoto požadavku na přerušení sekvencí instrukcí : JNB P3.2,$ ; stop pro INT0=0, podmíněný skok na adresu=(PC)=$ JB P3.2,$ ; stop pro INT0=1 (JB P3.2,VOLMON) ;pomíněný skok na adresu volání monitoru místo JB P3.2,$ RETI ; návrat do krokovaného programu a provedení jedné instrukce

V uvedeném těle programu je v závorkách vloženo volání monitoru , který umožní prohlížet a modifikovat obsah vnitřní i vnější paměti procesoru. Signál na vstupu INT0 je vhodné generovat generátorem jednoho pulsu bez zákmitů.

Připojení externích periferií k procesoru 8051

Pokud aplikace procesoru vyžaduje větší paměť, počet vstupů/výstupů, případně další pomocné obvody jako jsou hlídací časovač, obvod reálného času, hlídač napájeciho napětí a pod., je možné k procesoru připojit externí obvody a komunikovat s nimi pomocí bran procesoru jednak standardně, jednak je tzv. paměťově mapovat a ke komunikaci použít externí datovou a adresovou sběrnici procesoru. Ve druhém případě je třeba k zachycení nižšího bytu adresy použít vnější záchytný adresový registr. Některé rozšiřující obvody ve své struktuře obsahují tento registr a jsou pro komunikaci s procesorem přizpůsobeny. Pokud navíc je nutné použít při rozšíření systému další logiku npř. adresové dekodéry, přepínače, jednoduché obvodové řadiče a pod. je vhodné tyto obvody implementovat pomocí programovatelných obvodů PAL, GAL, FPGA. Pro ilustraci je uvedeno : a) rozšíření vstupů/výstupů obvodem 8243, který sice není speciálně určen pro procesor 8051 (byl navržen pro Intelský procesor 8048), ale s programovou obsluhou je možné poměrně efektivně rozšířit počet V/V. Programová obsluha 8243 je uvedena mezi příklady programů 8051. Obsluze je nutno vyhradit 5 vývodů V/V procesoru k přenosu dat a řízení obvodu 8243 a pokud těchto obvodů použíjeme více, dalšími vývody V/V obvody 8243 adresujeme a to buď přímo, nebo prostřednictvím adresového dekodéru. Připojení jednoho obvodu 8243 k procesoru 8051 je na obr.30, jeho výběr je trvalý b) na obr.31 je připojení externí datové a programové paměti, které lze označit jako standardní. U mikropočítačů používaných jako vývojové kity (evaluation boards) se Obr. 30 Rozšíření vstupů/výstupů obvodem 8243

žádá možnost zavádět vyvíjené programy do datové paměťové oblasti a v ní je pak spouštět a ladit. V tom případě je nutné, aby paměťové prostory programový a datový se překrývaly. To se jednoduše docílí tím, že na řídící vstup paměti OE# (output enable) se přivede logický součin řídících signálu procesoru PSEN# a RD# c) na obr. 32 je zobrazeno rozšíření vstupů/výstupů pomocí posuvných registrů obsluhovaných seriovým kanálem procesoru pracujícím v módu 0 (synchronní seriový přenos). V zapojení jsou použity starší posuvné registry 74164 ( 8bitů s paralelními výstupy) a 74165 (8bitů s paralelními vstupy), které nemají třístavové výstupy a je proto nutné, pokud žádáme obousměrný provoz na jediném datovém vstupu procesoru, oddělit seriový výstup vstupního posuvného registru 74165 od seriového vstupu výstupního posuvného registru 74164. Z novějších prvků se doporučují registry 74HC595 (Serial-in/Paralel-out) a 74HC589 (Paralel-in Serial-out), které při propojení seriových vstupů - výstupů nevyžadují přepínací logiku.

Obr. 31 Připojení externí programové a datové paměti

Obr. 32 Rozšíření vstupů/výstupů pomocí posuvných registrů

Obr. 33 Připojení externí programové paměti a rozšíření V/V

d) na obr. 33 je rozšíření vstupů/výstupů a připojení externí programové paměti pomocí kombinovaného obvodu 8355/8755 (2kB ROM/EPROM a dvě paralelní číslicové brány) z rodiny MCS85

Obr. 34 Připojení externí datové paměti , časovače a rozšíření V/V

e) na obr 34 je rozšíření vstupů/výstupů a připojení externí datové paměti pomocí kombinovaného obvodu 8155 (256bitů RAM a dvě paralelní číslicové brány 8bitů a jedna paralelní brána 6bitů) z rodiny MCS85.