Sériový kanál

Sériový kanál (nebo také sériová linka, já osobně používám obě dvě označení tak nějak střídavě), který mikroprocesor 8051 obsahuje, má v současné době velký význam. V době uvedení 8051 na trh tomu možná tak nebylo, ale teď je situace jiná - pomocí sériového kanálu lze mikroprocesor 8051 velmi jednoduše spojit s osobním počítačem PC. A toho lze velmi efektivně využít k nejrůznějším účelům. Kromě spojení s PC lze dnes využít sériový kanál v mnoha dalších aplikacích pro komunikaci se zařízeními komunikujících sériovou linkou.
Sériový kanál je u 8051 plně duplexní (dokáže tedy současně data vysílat i přijímat), umožňuje komunikovat ve standardním 8- a 9-bitovém asynchronním režimu nebo 8-bitovém synchronním režimu. Komunikační rozhraní tvoří 3 vodiče - RxD,TxD a zem. Přijímací část sériového kanálu je vybavena vyrovnávacím registrem (bufferem), do kterého je uložena právě přijatá hodnota, čímž je umožněn okamžitý příjem další hodnoty. Přijatá hodnota však musí být z vyrovnávacího registru převzata dříve, než je dokončen příjem následující hodnoty, který by způsobil přepsání původní hodnoty. Mikroprocesor není vybaven příznaky, které indikují ztrátu přijaté hodnoty (chyba vzniklá přeplněním vyrovnávacího registru), chybu rámce a parity nebo indikaci přerušení, které jsou obvyklé u specializovaných obvodů.
Sériový kanál je tvořen dvěma registry SFR, a to registrem SBUF a SCON.

SBUF - Registr sériového kanálu (Serial Data Buffer)
Představuje vysílací i přijímací registr (není tedy vyhražen jeden registr pro vysílání a druhý pro příjem, ale existuje pouze jeden společný pro příjem i vysílání). Zápisem hodnoty do SBUF se naplňuje vysílací registr, čtením z SBUF se přečte hodnota z vyrovnávacího registru, do kterého byla přepsána z přijímacího registru po přijetí celého bytu.


POZN: Registr SBUF je ve skutečnosti tvořen dvěma samostatnými (fyzickými) registry - jeden pro příjem, druhý pro vysílání (aby bylo možné dosáhnout duplexního přenosu). Tyto registry mají ale stejnou adresu 99H, přístup k jednomu nebo druhému (tj.rozlišení registrů) je řízen vnitřním signálem CPU - READ SBUF a WRITE SBUF, a to na základě použití instrukce pro čtení nebo zápis. Tato skutečnost nás ale z pohledu programátora nemusí vůbec zajímat, pro nás je registr SBUF "viditelný" a přístupný jako jediný.


Sériový kanál může pracovat ve čtyřech různých módech, které lze zvolit nastavením příslušných bitů v registru SCON a nejvyššího bitu (tj.MSB a to je bit b7 v našem obvyklém značení) v registru PCON.

SCON - Registr módu a řízení sériového kanálu (Serial Control)
Rozložení bitů v registru SCON je následující:

Rozložení bitů v registru SCON

SM1,SM0 - Kombinací těchto bitů se volí jeden ze čtyř módů sériového kanálu.

SM1 SM0 Mód Typ přenosu Přenosová rychlost (b/s)
0 0 0 synchronní 8-bitový fosc/12
0 1 1 8-bitový UART časovač 1
1 0 2 9-bitový UART fosc/32,  fosc/64
1 1 3 9-bitový UART časovač 1

Mód 0 - 8-bitový synchronní přenos s pevnou přenosovou rychlostí - data se vysílají nebo přijímají vstupem RxD (P3.0) synchronně s hodinovým (posouvacím) signálem, vysílaným na výstupu TxD (P3.1). Přenášená 8-bitová informace se vysílá počínaje bitem s nejnižší váhou (LSB), tak jak ukazuje obr.1. Přenosová rychlost (v bitech za sekundu) je pevná a rovna 1/12 kmitočtu oscilátoru. Maximální přenosová rychlost je tedy 1Mbit/s při 12MHz krystalu. Protože je výstup TxD využit pro vysílání synchronizačního signálu, nelze v tomto módu uskutečnit plně duplexní přenos. Někdy bývá tento mód označován jako posuvný registr, protože takto tento mód vlastně pracuje.

Obr. 1  Sériový kanál v módu 0 - časové průběhy
Sériový kanál v módu 0 - časové průběhy

Mód 1 - 8-bitový asynchronní přenos s programovatelnou přenosovou rychlostí - data se vysílají výstupem TxD, přijímají se vstupem RxD - celkem se se vysílá nebo přijímá 10 bitů, z toho je první bit vždy nulový - ten představuje start bit. Po něm následuje 8 datových bitů, přičemž první bit je bit s nejnižší váhou (LSB). Poslední (desátý) přenášený bit je vždy jedničkový - ten představuje stop bit. Při příjmu se stop bit ukládá do bitu RB8 v registru SCON. Přenosová rychlost je v tomto módu programovatelná a je určena četností (periodou) přetečení čítače/časovače 1 a hodnotou bitu SMOD v registru PCON. Podrobnosti o způsobu nastavení bitu SMOD najdete zde.

Pro výpočet přenosové rychlosti si uvedeme různé vztahy podle použitého módu čítače/časovače 1 :

č/č 1 v módu 2

kde TH1 je obsah č/č 1 (předvolba) a fosc je frekvence oscilátoru (frekvence použitého krystalu).

Předchozí vztah upravený pro určení hodnoty registru TH1 při požadované rychlosti vypadá takto:


Pro dosažení nízkých přenosových rychlostí (viz tabulka níže) je nutné použít č/č 1 v módu 1. V tomto případě ale nesmíme zapomenout po vzniku přerušení provést programové přednastavení obsahu čítače potřebnou 16-bitovou hodnotou (v tomto módu nefunguje automatické obvodové přednastavování, tak jako je tomu v módu 2 čítače/časovače).

č/č v módu 1

Protože hodnoty v registrech TH1 a TL1 mohou být pouze celá čísla, z uvedených vztahů tak vyplývá, že některých přenosových rychlostí dosáhneme jen změnou frekvence oscilátoru (krystalu). Pro většinu standardně používaných rychlostí nám vyjde frekvence krystalu 11,059200 MHz (viz tabulka níže).

Obr. 2  Sériový kanál v módu 1 - časové průběhy
Sériový kanál v módu 1 - časové průběhy

Maximální přenosová rychlost v módu 1 je 62,5 kb/s (při fosc=12MHz, SMOD=1, č/č1 mód 2, TH1=FFH).

Mód 2 - 9-bitový asynchronní přenos s volitelnou přenosovou rychlostí - přijímá se (na vstupu RxD) nebo vysílá se (na výstupu TxD) celkem 11 bitů, přičemž první bit je start bit (vždy log.0), následuje 8 datových bitů (první je LSB), 9.datový bit a posledním přenášeným bitem je stop bit (vždy log.1). Při vysílání je do 9.datového bitu uložena hodnota bitu TB8, při příjímání se získaný 9.datový bit ukládá do bitu RB8 přičemž stop bit se ignoruje. Oba bity RB8 a TB8 se nacházejí v SFR registru SCON. Devátý datový bit může být při vysílání využit jako další, normální datový bit nebo se může použít k přenosu paritního bitu příslušejícímu předchozím 8 bitům. Hodnotu paritního bitu získáme jednoduše tak, že vysílaný byte před samotným přenosem uložíme do střadače, čímž se v registru PSW aktualizuje hodnota paritního bitu P, který indikuje lichou paritu střadače. Obsah bitu P, který je přímo adresovatelný, pak před začátkem vysílání uložíme do bitu TB8.
Přenosovou rychlost v tomto módu můžeme volit nastavením bitu SMOD v registru PCON. Je-li SMOD=1, pak je přenosová rychlost rovna 1/32 frekvence oscilátoru; je-li SMOD=0, pak je přenosová rychlost rovna 1/64 frekvence oscilátoru.
Maximální přenosová rychlost v módu 2 je tedy 375 kb/s (při fosc=12MHz, SMOD=1).

Obr. 3  Sériový kanál v módu 2 a 3 - časové průběhy
Sériový kanál v módu 2 a 3 - časové průběhy

Mód 3 - 9-bitový asynchronní přenos s programovatelnou přenosovou rychlostí - příjem i vysílání dat probíhá stejně jako v módu 2 s tím rozdílem, že v tomto módu je přenosová rychlost určena četností (periodou) přetečení čítače/časovače 1 a hodnotou bitu SMOD v registru PCON. Podrobnosti o způsobu nastavení bitu SMOD najdete zde.

Vztahy pro výpočet přenosové rychlosti v módu 3 jsou shodné se vztahy pro mód 1.

Časové průběhy signálů RxD a TxD při komunikaci v módu 3 ukazuje obr.3 uvedený výše.

Maximální přenosová rychlost v módu 3 je 62,5 kb/s (při fosc=12MHz, SMOD=1, č/č1 mód 2, TH1=FFH).


POZN: V módu 1 a 3, kde je přenosová rychlost odvozena od přetečení časovače 1 (nezávisí na stavu příznakového bitu TF1), se doporučuje zakázat přerušení od tohoto časovače (ale pouze v případě, že časovač 1 pracuje v módu 2 - tedy 8-bitový s automatickým přednastavením). Pokud časovač 1 pracuje v módu 1 - tedy 16-bitový nebo pokud používáme čítač/časovač 0 v módu 3, musíme přerušení od časovače 1 povolit.

Ve všech čtyřech módech se vysílání spustí zápisem dat (bytu) do SBUF, tj. provedením instrukce, která má jako cílový byte registr SBUF. Příjem dat v módu 0 se spouští podmínkou nastavení bitů RI=0 a REN=1. Příjem v ostatních módech se spustí příchodem start bitu při nastaveném bitu REN=1 a RI=0.

Pokračování popisu bitů v registru SCON:

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 SM2=1, pak RI se nenastaví (nemůže být vyvoláno přerušení), jestliže přijatý devátý bit (RB8) ma hodnotu log.0. V módu 1 může být bit SM2 využit ke kontrole platnosti stop bitu a příjmu dat jen s platným stop bitem (viz popis bitu RI). V módu 0 se bit SM2 nevyužívá.
REN - Povolení příjmu (je-li REN=1, je příjem povolen). 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 bit RB8 nevyužívá.
TI - Příznak prázdného vysílacího registru - nastavuje se obvodově v okamžiku odvysílání osmého datové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í od sériového kanálu a proto nemůže být z důvodu nutné "ruční" (programové) identifikace zdroje přerušení nulován obvodově. Uživatel tedy musí sám po přijetí žádosti o přerušení rozlišit, zda se jedná o žádost od příjmu (RI) nebo od vysílání (TI) a teprve potom musí příslušný příznak programově vynulovat. Další podrobnosti o tom, jak to provést najdete zde.
RI - Příznak naplnění vyrovnávacího (přijímacího) registru platnými daty - nastaví se na konci příjmu osmého datového bitu v módu 0 nebo uprostřed příjímaného stop bitu v módu 1 nebo uprostřed příjímaného bitu RB8 v módech 2 a 3. Příznak je nutné stejně jako příznak TI nulovat programově, aby bylo možné rozlišit příčinu přerušení. Přijatá data jsou označena za platná v případě, že v okamžiku vygenerování posledního posunovacího impulzu platí podmínky RI=0 a SM2=0 nebo RB8=1. Pokud tomu tak není, jsou přijatá data (celý rámec) ztracen a příznak RI se nenastaví. Toto platí pro mód 2 a 3. V módu 1 se platnost dat ověřuje stejně, ale za platná jsou data označena při platnosti podmínek RI=0 a SM2=0 nebo přijatý stop bit=1 v okamžiku, kdy je vygenerován poslední posunovací impulz. V módu 0 jsou přijatá data vždy označena za platná.


POZN: Podrobný popis a příklad nastavení sériového kanálu s ukázkou programu pro vysílání znaků najdete zde.

Nastavení standardních přenosových rychlostí sériového kanálu

Pokud chceme komunikovat nějakou "rozumnou" přenosovou rychlostí, musíme k tomu použít módu 1 nebo 3, kde je přenosová rychlost odvozena od četnosti přetečení časovače 1 a nastavení bitu SMOD v registru PCON (nejvyšší bit - b7).

Přenosová
rychlost (b/s)
 fOSC (MHz)  Bit
SMOD
Mód časovače 1 Přednastavení
časovače 1
19200 11,0592 1 2 FDH
9600 11,0592 0 2 FDH
4800 11,0592 0 2 FAH
2400 11,0592 0 2 F4H
1200 11,0592 0 2 E8H
300 11,0592 0 1 FFA0H
110 12 0 1 FEE4H
POZN: Pro přednastavení časovače 1 platí, že v módu 2 se hodnota zapisuje do TH1, pro mód 1 se první byte zleva uloží do TH1 a druhý byte do TL1 (příklad pro rychlost 110 b/s - TH1=FEH, TL1=E4H)

Co je UART a USART?
Jde o zkratky označující typ obvodu realizujícího sériové rozhraní.
Obvod UART (Universal Asynchronous Receiver-Transmitter) zajišťuje přeměnu sériové posloupnosti bitů do paralelního znaku a naopak, přičemž obě funkce jsou na sobě nezávislé - to umožňuje duplexní přenos. Místo zkratky UART se lze někdy setkat se zkratkou ACE (Asynchronous Communications Element).
Obvod USART (Universal Synchronous/Asynchronous Receiver-Transmitter) pracuje stejně jako UART, kromě asynchronního režimu navíc poskytuje možnost synchronního režimu, u něhož je potom možné volit použití interní nebo externí synchronizace, počet synchronizačních znaků atd.
Obvod UART nebo USART lze realizovat buď specializovanými integrovanými obvody (UART=8250,MHB1012; USART=8251) nebo můžeme využít mikroprocesor, ve kterém je UART nebo USART integrován (např. právě 8051).

Podrobný a obsáhlý popis sériového kanálu najdete v dokumentu Intel MCS@51 MICROCONTROLLER FAMILY USER’S MANUAL na stranách 122 až 131 (3-14 až 3-23). Dokument je ke stažení zde.

Zpět na hlavní stránku povídání

Copyright © Michal Fuksa 2001