Parametry
Blokové schéma
Pouzdro
Standardní registry
Popis paměti
Přerušení
Instrukční soubor
Porty

Vstupně-výstupní porty

Vstupně/výstupní porty nám umožňují připojit k mikroprocesoru externí zařízení.
U standardní verze 8051 máme k dispozici 4 v/v porty, z nichž každý má po 8 pinech. Tyto čtyři porty jsou označovány P0, P1, P2 a P3. Pokud chceme označit konkrétní pin určitého portu, pak označení vypadá takto - např. P1.4 , kde 1 před tečkou určuje port a 4 za tečkou je číslo konkrétního pinu příslušejícího k portu 1. Jelikož se jednotlivé piny adresují jako bity, můžeme se setkat s označením bit, např. bit P1.5.

Porty jsou obousměrné - můžeme tedy jednotlivé piny všech portů používat jako vstupní i jako výstupní. Porty hardwarově sestávají ze vstupních vyrovnávacích pamětí, klopných obvodů typu D a výstupních budičů. Vnitřní (funkční) zapojení portů P0 až P3 ukazují obr. 1 až 4.

Vnitřní zapojení jednoho pinu portu P0
Obr.1 Vnitřní zapojení jednoho pinu portu P0



Vnitřní zapojení jednoho pinu portu P0
Obr.2 Vnitřní zapojení jednoho pinu portu P1



Vnitřní zapojení jednoho pinu portu P2
Obr.3 Vnitřní zapojení jednoho pinu portu P2



Vnitřní zapojení jednoho pinu portu P3
Obr.4 Vnitřní zapojení jednoho pinu portu P3



Jak je vidět z obr.1 až 4, vnitřní zapojení vstupně/výstupního obvodu jednotlivých portů se liší.

Stručná charakteristika portů
Port 0 jako jediný nemá ve výstupním budiči zvyšovací odpor - jde tedy o obvod s otevřeným kolektorem. Pokud jej chceme použít jako obecné vstupy/výstupy, musíme k pinům připojit externí odpory, jejichž druhý konec připojíme na +Ucc. Port 0 se také může využívat při styku s vnější pamětí.
Port 1 nemá žádnou alternativní funkci, díky tomu jej můžeme používat bez omezení.
Port 2 se kromě své normální funkce může využívat spolu s portem 0 ke komunikaci s externí pamětí. K tomuto účelu se využívají jen části obou portů - výstupní budiče portu 0 a 2 a vstupní vyrovnávací paměť portu 0. Na portu 0 je časově přepínán výstup nižšího bytu adresy pro externí paměť s datovým bytem, který je zapisován nebo čten z paměti. Port 2 pak vysílá vyšší byte adresy. Tato adresa je tedy 16-bitová, abychom mohli adresovat až 64kB paměti. Port 2 jinak pracuje jako normální port.
Port 3 - všechny piny portu 3 jsou vícefunkční. Kromě standardní funkce navíc tento port poskytuje své piny pro potřeby jiným vnitřním obvodům mikroprocesoru, seznam pinů a jim příslušné alternativní funkce zobrazuje následující tabulka:

Pin Alternativní funkce
P3.0 RXD (serial input)
P3.1 TXD (serial output)
P3.2 INT0 (external interrupt)
P3.3 INT1 (external interrupt)
P3.4 T0 (Timer/Counter 0 external input)
P3.5 T1 (Timer/Counter 1 external input)
P3.6 WR (external Data Memory write strobe)
P3.7 RD (external Data Memory read strobe)


Alternativní funkce pinů portu 3 může být aktivována pouze, pokud bit v SFR příslušný danému pinu obsahuje log.1. Jinak pin zůstává v log.0.

Popis vnitřního zapojení a funkce jednotlivých portů

Obrázky 1 až 4 ukazují funkční zapojení jednoho pinu každého ze 4 portů. V/V pin tedy tvoří synchronní KO typu D (což je jeden bit v oblasti portů v SFR). Ten načte log.hodnotu z vnitřní sběrnice po příchodu log.1 na vstupu C (z vnitřního signálu CPU - Zápis do KO). Výstup Q klopného obvodu je poslán na vnitřní sběrnici, pokud je aktivní (v log.1) vnitřní signál z CPU - Čtení obsahu KO. Skutečný logický stav pinu samotného je poslán na vnitřní sběrnici, pokud je aktivní vnitřní signál CPU - Čtení stavu pinu. Některé instrukce, které čtou z portu, aktivují signál Čtení obsahu KO, některé instrukce aktivují signál Čtení stavu pinu.

Jak je vidět z obr.1 a 3, výstupní budiče portu 0 a 2 jsou přepínatelné na vnitřní sběrnici Adresa a Adresa/Data vnitřním signálem CPU - Řízení (v případě, že využíváme přístup k externí paměti). Během přístupu k externí paměti zůstává stav portu 2 (tedy obsah SFR - oblast P2) nezměněn, naopak do odpovídající oblasti SFR portu 0 jsou zapsány jedničky.

Jak ukazuje obr.4, pokud KO pinu z portu 3 obsahuje jedničku, výstupní log. úroveň pinu je dána stavem vnitřního signálu Alternativní výstupní funkce. Skutečný log.stav pinu je vždy dostupný na vnitřním signálu CPU - Alternativní vstupní funkce.

Porty 1,2 a 3 mají ve výstupních budičích vnitřní zvyšovací odpory (angl. pull-up). Port 0 má naproti tomu výstupy s otevřeným kolektorem (nemá tedy vnitřní zvyšovací odpory). Každý pin kteréhokoliv portu může být nezávisle používán jako vstupní nebo jako výstupní.


Porty 0 a 2 nemohou být používány jako všeobecné v/v piny, pokud jsou používány jako adresově-datová sběrnice při přístupu do externí paměti.

Pokud tedy chceme piny použít jako vstupní, KO příslušného pinu musí obsahovat jedničku, což způsobí zavření FET tranzistoru ve výstupním budiči (FET je připojený přes negovaný výstup KO). Potom pro porty 1,2,3 platí, že pin je v úrovní log.1 díky zvyšovacímu odporu, ale může být přestaven do log.0 vnějším zdrojem připojeným k pinu.

Port 0 se od ostatních portů liší tím, že nemá ve výstupních budičích vnitřní zvyšovací odpory. Místo odporu je zde druhý FET tranzistor (na obr.1 je to ten horní), který se ale využívá jen když port vysílá jedničky během přístupu k externí paměti (na GATE tranzistoru je log.1). V ostatních případech je FET tranzistor zavřený (na GATE je log.0). Proto piny portu 0, používané jako výstupní, se chovají jako obvod s otevřeným kolektorem. Zápisem log.1 do KO zůstávají oba FET tranzistory zavřeny a pin se tak dostává do stavu vysoké impedance.



Po resetu mikroprocesoru jsou do KO všech portů zapsány jedničky (všechny porty jsou tedy nastaveny jako vstupní). Jsou-li do KO následně během programu zapsány log.0, mohou být porty znovu přenastaveny jako vstupní zapsáním jedniček do jejich KO.


Zápis do portu

Při vykonávání instrukce, která mění hodnotu KO portu, nová data přijdou do KO během fáze S6P2 posledního cyklu instrukce. Nicméně, KO portu jsou ve skutečnosti vzorkovány jejich výstupními budiči pouze během fáze 1 kteréhokoliv hod.cyklu. Během fáze 2 drží výstupní budič hodnotu, která byla získána ve fázi 1. Z toho důvodu, nová data v KO portu nepřijdou na výstupní pin portu až do doby následující fáze 1. Další fáze 1 v tomto případě bude až fáze S1P1 dalšího strojového cyklu.

Zápis dat (stavů pinů) do portu - časový průběh

Obr. 5 Zápis dat do portu - časový průběh

Jestliže změna stavu portu vyžaduje přechod z 0 do 1 u portu 1,2 a 3, zvyšovací odpor je snížen až o dva řády během fází S1P1 a S1P2 cyklu, ve kterém dochází k přechodu z 0 do 1. To je uděláno proto, aby se zvýšila rychlost přechodu. Takto snížený zvyš.odpor může dodat až 100-krát větší proud než při své normální hodnotě. Snížení zvyšovacího odporu je umožněno tím, že zvyšovací odpory tvoří FET tranzistory, nikoliv lineární rezistory.

Obr.6 Vnitřní zapojení výstupního budiče

Obr. 6 Vnitřní zapojení výstupního budiče portů 1 a 3, port 2 vypadá obdobně

Zvyšovací odpor sestává ze 3 tranzistorů FET s P kanálem (T1,T2,T3). Tzn. při log.0 na GATE bude otevřen, při log.1 bude zavřen. Stávající tranzistor ve výst.budiči (na obr. 2 až 4, na obr.6 označen jako T4) je FET s N kanálem - při log.0 na GATE je tedy zavřen, při log.1 otevřen.
Tranzistor T1 je otevřen na 2 hodinové cykly po přechodu z 0 do 1 v KO portu. Když je otevřen, otevře zároveň T3 (přes invertor). Tento invertor a tranzistor plní KO, který tak drží log.1.
Pokud pin portu vysílá jedničku (nastaven jako vstupní), může být externím zdrojem (součástkou) přizemněn, což způsobí zavření T3, takže pin pak přechází do stavu vysoké impedance. T2 je velmi malý jakoby zvyš.odpor, který je otevřen vždy, když je T4 zavřený. Je přibližně 10-krát menší než T3. Má tu funkci, že obnovuje log.1 na pinu v případě, že na pinu 1 byla a došlo k její ztrátě vlivem externího zdroje (přizemněním). Port 2 funguje podobně s rozdílem při přístupu do externí paměti - pokud port vysílá adresu, pak při jedničkách v této adrese port ponechává otevřený tranzistor T3 (velký zvyšovací odpor).