1. ZADÁNÍ

Sestavte program pro komunikaci po sériové lince a to přímým programováním registrů asynchronního obvodu UART 8250 dle následujících pokynů:

přijímané a vysílané znaky zobrazujte v oddělených částech obrazovky monitoru, prozkoumejte chování obvodu 8250 při různých rychlostech.

Poznámka: Programy nejprve napište bez použití přerušení, až poté s využitím služeb přerušovacího systému.

2. TEORETICKÁ ČÁST

Rozhraní RS-232 (podle evropské normy V.24) je určeno pro sériový, arytmický přenos dat mezi dvěma jím vybavenými zařízeními přes nějaké přenosové médium, nejčastěji telefonní síť. Pro kratší vzdálenosti je možno toto vynechat a zařízení propojit přímo, nehledě na možnost propojení prakticky s jakýmkoliv zařízením s příslušným obslužným programem. V našem měření použijeme upravený kabel (zvaný nulový modem) na přímé propojení dvou osobních počítačů, vybavených tímto rozhraním.

Standardizovaná specifikace definuje všechny vlastnosti rozhraní tak, aby byla zaručena propojitelnost zařízení různých výrobců. Máme tu především vyjmenování všech signálů, kterými rozhraní ovládáme, popis jejich významu, výkres propojovacích konektorů a způsob přenosu informace po vodičích.

Původní podoba rozhraní využívá ke své práci 25 signálů. Mnoho z nich se nejčastěji v praktických aplikacích nevyskytuje, setkáme se proto s krátkou (4 signály), střední (9) a velkou variantou (všech 25 signálů). My, protože máme k dispozici zástrčku s 25 kolíky, použijeme poslední z nich.

Propojovací kabel má 25 pinový konektor Canon s kolíčky na obou koncích, na počítačích jsou podobné konektory, jenom s dutinkami.

Zařízení komunikují v arytmickém režimu, každý balíček dat (jeho velikost můžeme určit, pro naše účely vybereme 8 bitů) je uvozen synchronizační značkou (start bit) a podobnou i ukončen (stop bit, jehož velikost si můžeme vybrat, my volíme 1). Přenos může být navíc zabezpečen paritou (vybereme žádná). Rychlost komunikace zvolíme napoprvé 1200, potom ji budeme měnit pro účely měření. Řízení toku dat po kanále je hardwarové.

Čip, který ovládá činnost rozhraní, je UART 16550, je však zpětně kompatibilní s verzí 8250 pro PC XT a to jak programově, tak vývodově. Programováním čipu nastavíme konkrétní atributy, se kterými bude pak přenos dat probíhat, použijeme programovací jazyk Pascal. Dovolíme si částečně i využít již hotový kód dostupný v počítačové síti katedry a upravit jeho některé části pro naše měření.

3. KOMUNIKACE BEZ PŘERUŠENÍ

Program se skládá ze tří hlavních částí (funkcí, procedur).

Navíc ještě obsahuje dvě pomocné procedury, které zjistí, zda přišla nová data a jsou připravena pro vyzvednutí (využití pro rx_get) a zda je prázdný výstupní buffer pro zaslání dat (využití pro tx_put).

Hlavní program pak jen již do zadání nějakého ukončovacího podmětu (stisk klávesy Esc) periodicky zkoumá, zda přišla nějaká data a zobrazí je na obrazovce a navíc, pokud jsem stiskli tlačítko klávesnice, zadaná data v případě volného výstupu odešle. Celý program i s komentáři je uveden v příloze 1.

4. KOMUNIKACE S PŘERUŠENÍM

Program se skládá v podstatě se stejných funkcí jako ten bez využití přerušení. Oproti předchozí verzi nastavíme ve funkci init_com rozhraní pro reakci na přerušení od přijatého znaku, v hlavním programu pak zaregistrujeme pro přerušení od sériového portu obslužnou rutinu, která pouze, po zjištění dostupnosti znaku, vypíše přijatá data na obrazovku. Program je uveden v příloze 2.

5. RŮZNÉ RYCHLOSTI

Pokud nastavíme vysílající a přijímající stranu na různé přenosové rychlosti, dojde při interpretaci přijatých znaků k chybám, na obrazovce se zobrazí znaky jiné, než jsme poslali. K jakým chybám dojde, jsme testovali při použití rychlostí 300 a 600 a to oběma směry. K lepšímu zobrazení dat jsme napsali funkci programu, která přijatá data vypíše binárně. Její kód je uveden v příloze 3. Naměřené hodnoty uvádí tabulka 1.

Posílaná data Na 300 přijmeme Na 600 přijmeme
00000000 00000000, 11111000 11100000
00000001 00000010, 11111000 11100000
00000010 00001100, 11111000 11100001
00000011 00001110, 11111000 11100001
00000100 00010000, 11111000 11100010
00000101 00010010, 11111000 11100010

Tabulka 1.

6. ZÁVĚR

Pro obě varianty (bez přerušení a s přerušením) se nám podařilo vytvořit funkční programy, které jsme bez probl

émů vyzkoušeli. Popis jejich funkce uvádí kapitoly 3 a 4.

Prozkoumali jsme i přenos mezi rozhraními s různou rychlostí. Data jsou jsou interpretovány s chybami. Přenosová rychlost 600 je dvakrát větší než 300, proto přijmeme na pomalejší straně dva bajty oproti jednomu odeslanému. I v ostatních případech vidíme chyby.

7. LITERATURA

[1] Šnorek, Miroslav: Periferní zařízení. Vydavatelství ČVUT, 2000.
[2] Cvičení z předmětu 36PZ. Letní semestr 2001/2002.