Untitled - NOSTALCOMP
Transkript
Untitled - NOSTALCOMP
Obsah:strana 1.Úvod. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2. Seznámení s mikropočítačem PMI-80. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.1 Mikroprocesor MHB8080A a jeho podpůrné obvody. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2 Obvody paměti a periferií. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.3 Obvody vstupu a výstupu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3. Jednoduché úlohy s PMI-80. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.1 Programování mikroprocesoru MHB8080A. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.2 První úlohy s PMI-80. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.3 Stopky. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.4 Programování paralelního stykového obvodu MHB8255A. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 4. Popis základního programového vybavení PMI-80. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.1 Výpis monitoru PMI-80. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 5. Aplikace s mikropočítačem PMI-80. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 5.1 Dálnopis jako vstupní a výstupní zařízení. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 5.2 Připojení sériové tiskárny C2111 Consul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 5.3 Řízení stejnosměrného motorku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 5.4 Číslicově analogový a analogově číslicový převodník. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 5.5 Programátor pamětí EPROM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 5.6 Měření teploty termistorem, měření kapacity kondenzátoru. . . . . . . . . . . . . . . . . . . . . . . . . . . 44 5.7 Počítačové hry. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 5.7.1 Pípající hrací kostka. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 5.7.2 Dvojkové zobrazení obsahu paměti. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 5.7.3 Světelné noviny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 5.7.4 Mikrovarhany. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 6. Doplňky a úpravy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 6.1 Zlepšení práce s magnetofonem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 6.2 Doplňky. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 6.3 Zdroj pro mikropočítač a další aplikace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 - Literatura. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Přílohy A B C.1 C.2 C.3 D E F Tabulka instrukcí mikroprocesoru MHB8080A Tabulka zpětného převodu kódu na instrukci Mikropočítačové jádro PMI-80 Obvody paměti a periferií Obvody vstupu - výstupu Rozmístění součástek na desce Rozmístění signálů na konektorech K1, K2, K3 Schéma napájecího zdroje SN 080 3 1. Úvod V době velkého rozmachu mikroprocesorové techniky je velmi důležité, aby se s jejími principy seznámil co nejširší okruh zájemců, zejména z řad mládeže. Jako nejúčinnější způsob výuky základů mikroprocesorové techniky lze doporučit aktivní práci na konkrétním systému v součinnosti s teoretickou přípravou. Jako jeden z nejvhodnějších (a zároveň nejdostupnějších) systémů pro výuku základů mikroprocesorových systémů se v současné době jeví školní mikropočítač PMI-80 z produkce k. p. TESLA Piešťany. Předkládaná publikace slouží zejména jako rozšiřující materiál základní uživatelské příručky (15), na niž pochopitelně navazuje a doplňuje ji. Řadu příkladů aplikací jak programových tak obvodových lze však využít i na zcela jiných systémech. Publikace vznikla na základě autorových zkušeností z práce kroužku mládeže, na základě prací vlastních i zkušeností jiných. Autor považuje za milou povinnost poděkovat Ing. P. Hlaváčkovi z 303. ZO Svazarmu v Brně za poskytnutí řady materiálů použitých v publikaci. Dále autor děkuje své ženě Drahomíře za pochopení a pomoc při konečné úpravě rukopisu. Autor Jablonec n. Nisou - 2. září 1985 5 2. Seznámení s mikropočítačem PMI-80 Školní mikropočítač PMI-80 je zařízení, které je určeno především pro potřeby výuky programování a práce s mikroprocesorovým systémem. Blokové schéma na obrázku 1 nám napovídá o struktuře tohoto zařízení. Jádrem mikropočítače PMI-80 je tzv. tříobvodový mikroprocesor MHB8080A společně se dvěma podpůrnými obvody MH8224 (generátor základní frekvence mikroprocesoru) a MH8228 (systémový řadič). Toto mikropočítačové jádro generuje většinu signálů systémové sběrnice mikroprocesoru MHB8080A, které jsou vyvedeny na konektor K1; do jádra též vstupují některé signály nutné pro řízení práce mikroprocesoru. Základní programové vybavení mikropočítače PMI-80 (program MONITOR) je uloženo v paměťovém obvodu typu PROM MHB8608 s kapacitou 1024 osmibitových slabik (říkáme též 1 kByte). Toto programové vybavení umožňuje veškerou činnost mikropočítače PMI-80, obsluhu klávesnice, zobrazovače a spolupráce s kazetovým magnetofonem přes konektor K3. Kapacitu paměti PROM lze zdvojnásobit přímo na desce osazením naprogramovaného obvodu MHB8708 do objímky. Do tohoto obvodu si může uživatel naprogramovat své vlastní programy. Uživatelské programy a data, případně systémové proměnné se ukládají do paměti typu RWM (RAM) typu MHB2114 (2 kusy) s kapacitou 1 kB. Pro ovládání obvodů klávesnice, zobrazovače a styku s kazetovým magnetofonem slouží programovatelný stykový obvod MHB8255A. Tento obvod je určen pro paralelní komunikaci přes tři obousměrné brány. Zde jsou využity dvě brány pro daný účel, třetí brána (PB) je k dispozici uživateli. Desku lze osadit ještě jedním obvodem tohoto typu, který je potom plně k dispozici uživateli. Ve funkci dekodéru adres je využit obvod MH3205. Každý z jeho osmi adresovacích výstupů je aktivní v rozsahu 1 kB počínaje adresou 0000H a konče 1FFFH. Poznamenejme jen, že písmenko H na konci označuje, že číslo je uvedeno v hexadecimálním (t.j. šestnáctkovém) vyjádření. Na desce mikropočítače jsou využity jen některé adresovací výstupy a ty zbylé jsou vyvedeny společně s vývody bran obvodů MHB8255A na konektor K2. Vzhledem k tomu, že komunikace mikropočítače s prostředím (s klávesnicí, zobrazovačem a magnetofonem) je z velké části zabezpečena programově, je technická realizace poměrně jednoduchá. Obsluha klávesnice a zobrazovače je záležitostí obvodu MH1082 a sedmi tranzistorů, z nichž každý rozsvěcí jeden ze sedmi segmentů zobrazovací jednotky. Styk s magnetofonem je vyřešen skutečně jednoduše a mnohdy může být zdrojem pochyb o správné činnosti. Drobnými úpravami lze dosáhnout podstatně lepších výsledků a tím i spolehlivosti celého styku s magnetofonem (viz kapitola 6). Vezměme si nyní k ruce schémata (viz příloha C) a popišme si jednotlivé části podrobněji. 6 2.1 Mikroprocesor MHB8080A a jeho podpůrné obvody Již v úvodu této kapitoly jsme uvedli, že tzv. jádrem mikropočítače PMI-80 je mikroprocesor MHB8080A a jeho podpůrné obvody MH8224 a MH8228. Podrobný popis funkce mikroprocesoru by vydal na celou další publikaci, proto zájemce odkazujeme na (8). Pro účely naší publikace si funkci mikroprocesoru shrneme do obrázku 2, kde je vyobrazeno blokové schéma. Mikroprocesor MHB8080A je vlastně integrovaný obvod s vysokou hustotou integrace jednotlivých prvků - tranzistorů. Je vyroben technologií NMOS, což znamená, že základním stavebním prvkem integrovaného obvodu je tranzistor řízený elektrickým polem s kanálem typu N. Mikroprocesor MHB8080A pracuje s osmibitovou datovou sběrnici a taktéž s osmibitovou aritmeticko-logickou jednotkou. Ve vnitřní struktuře mikroprocesoru MHB8080A se nachází osmibitový střadač A (akumulátor), šest osmibitových registrů B, C, D, E, H a L, které lze po dvojicích spojovat do tzv. registrových párů BC, DE a HL, dále pak pětibitový registr příznakových bitů (společně s A tvoří tzv. stavové slovo PSW - Program Status Word), šestnáctibitový programový čítač PC (Program Counter) a konečně šestnáctibitový ukazatel zásobníku SP (Stack Pointer). Ostatní registry z obr. 2 jsou vnitřní registry mikroprocesoru a nejsou programově přístupné. Vykonání jedné instrukce lze popsat zjednodušeně asi takto: mikroprocesor vyšle na adresovou sběrnici obsah programového čítače PC. Nyní se vyšle čtecí impuls a na datové sběrnici se předpokládá obsah paměťového místa na adrese určené obsahem PC. Obsah datové sběrnice se považuje v této fázi za instrukci a uloží se tedy v instrukčním registru. Z instrukčního registru se informace přesune do dekodéru instrukcí, kde se vygeneruje řada řídicích signálů - mikroinstrukcí. Tyto signály řídí činnost mikroprocesoru podle přijaté instrukce. Po vykonání instrukce se zvýší obsah programového čítače na adresu následující instrukce a rozeběhne se nový instrukční cyklus. Podrobnější popis může zájemce najít např. v (3), (4), (8), (9) nebo (12). Nyní ještě pro úplnost popíšeme všechny vstupní a výstupní signály mikroprocesoru MHB8080A: A0 - A15 - šestnáctibitová adresová sběrnice D0 - D7 - osmibitová datová sběrnice (obousměrná) SYNC - signál indikující probíhající strojní cyklus DBIN - signál indikující, že datová sběrnice je přepnuta ve směru do mikroprocesoru WR - při stavu log. 0 je na datové sběrnici připravena informace (data) k zapsání do paměti nebo periferie READY - přivedení log. 1 na tento vstup způsobí přechod mikroprocesoru do stavu čekání (WAIT), což je velice výhodné pro práci s pomalými pamětmi nebo periferiemi WAIT - signál indikující přechod mikroprocesoru do stavu WAIT (reakce na READY = log. 1) 7 HOLD - přivedení log. 1 na tento vstup způsobí po dokončení strojního cyklu odpojení datové a adresové sběrnice (uvedení těchto sběrnic do třetího stavu - stavu vysoké impedance); řídící sběrnice zůstává aktivní! HLDA - signál potvrzující přechod datové a adresové sběrnice do třetího stavu INTE - signál indikující stav vnitřního klopného obvodu umožňujícího příjem žádosti o přerušení. Stav tohoto klopného obvodu lze měnit instrukcemi EI a DI, po signálu RESET se tento klopný obvod nuluje (DI - Disable Interrupt - přerušení zakázáno) INT - vstup pro příjem žádosti o přerušení pravidelného vykonávání posloupnosti instrukcí; žádost je přijata, je-li INTE = log. 1. RESET - nulovací vstup mikroprocesoru; používá se zejména pro uvedení mikroprocesoru do počátečního stavu (nuluje PC, klopný obvod INTE a HLDA) ⧲1, ⧲2 - vstupní svorky pro připojení hodinových signálů z obvodu MH8224 (signály ⧲1 i ⧲2 mají úroveň napětí 12V) Připojením specializovaných obvodů MH8224 a MH8228 získáme celé mikropočítačové jádro. Tyto obvody vytváří dalších 5 systémových signálů a vstupní signály časově upravují: MEMR, MEMW- signály určené pro čtení a zápis z a do paměti IOR, IOW - signály určené pro čtení a zápis z a do periferních zařízení (při těchto signálech je aktivních dolních osm adresových vodičů) INTA - potvrzení přijetí povolené žádosti o přerušení. Tento výstup má ještě jednu zvláštní funkci: připojíme-li jej přes odpor 1 kΩ k napájecímu napětí +12 V, vznikne tak jednoduchý přerušovací systém s jedinou úrovní přerušení (generuje se instrukce RST7) BUSEN - signál pro odpojení vnější datové sběrnice od mikropočítačového jádra STSTB - signál slouží obvodu MH8228 ke vzorkování stavového slova z datové sběrnice V příloze C.1 je uvedeno schéma mikropočítačového jádra mikropočítače PMI-80. Jde o obvyklé zapojení doporučené výrobcem a dnes už prakticky klasické. Všechny signály datové, adresové a řídící sběrnice jsou vyvedeny na kontakty konektoru K1 (viz příloha E). 8 2.2 Obvody paměti a periferií Paměťové a periferní obvody přímo navazují na mikropočítačové jádro. Umožňují vlastně celou funkci zařízení. Schéma těchto obvodů na mikropočítači PMI-80 jsou na obrázku v příloze C.2. Všimněme si nyní některých částí. Integrovaný obvod IO8 typu MH3205 má zde funkci dekodéru adres paměti. Každý z jeho osmi výběrových výstupních signálů je aktivní v rozsahu 1 kByte. Tabulka č. 1 znázorňuje rozdělení paměti po těchto blocích s uvedením který obvod je v dané oblasti aktivní: Tabulka 1 Adresa (hexa) Aktivní obvod Poznámka 0000 - 03FF IO4 (PROM č.1) základní Monitor 0400 - C7FF IO5 (EPROM č.2) rozšíření 0800 - CBFF vyvedeno na 42K1 0C00 - OFFF vyvedeno na 44K1 1000 - 13FF vyvedeno na 43K1 1400 - 17FF vyvedeno na 38K1 1800 - 1BFF vyvedeno na 36K1 1C00 - 1FFF IO6, IO7 (RWM) základní paměť RWM 2000 - 3FFF přeloží se modulo 2000H zpět 4000 - FFFF dekodér zablokován Z tabulky 1 plyne, že první blok o kapacitě 1 kByte je obsazen pamětí PROM (resp. EPROM) se základním programovým vybavením - Monitor, druhý blok je volný a je určen uživateli pro případné rozšíření. Dalších pět výběrových signálů lze vhodně využít při vytváření vnějších obvodů. Poslední osmý signál pro rozsah adres 1C00 až 1FFF vybírá paměťové obvody RWM typu MHB2114 (2 ks). Z paměti RWM je prakticky celý rozsah určen uživateli pro jeho programy a data, pouze malá část paměti je obsazována systémovými proměnnými (viz tab. 2). Do skupiny obvodů periferií patří integrované obvody IO9 a IO10 typu MHB8255A, což jsou tzv. programovatelné paralelní stykové obvody. Podrobný popis těchto obvodů, jejichž složitost lze přirovnat k mikroprocesoru, je uveden v (7) nebo (8). V základní konfiguraci mikropočítače PMI-80 je osazen jen jeden obvod MHB8255A, a to na pozici IO10. Dvě osmibitové brány tohoto obvodu jsou využity uvnitř systému; brána PA jako vý9 stupní pro ovládání segmentů zobrazovače a pro výstup signálu pro magnetofon, brána PC zčásti jako výstupní pro výběr pozice zobrazovače a zčásti jako vstupní pro čtení informace z klávesnice a pro příjem signálu z magnetofonu. Zbylá osmibitová brána PB je tedy k dispozici uživateli. Uživatel potom může možnosti mikropočítače PMI-80 rozšířit vložením druhého obvodu MHB8255A do pozice IO9, který je potom plně k dispozici. Programovatelné paralelní stykové obvody MHB8255A jsou připojeny k systémové sběrnici datovými signály D0 až D7, signálem RESET, kterým lze obvod vynulovat (všechny brány se nastaví do vstupního režimu), dále pak signály IOR a IOW, které jsou připojeny na vstupy RD a WR pro řízení čtení a zápisu. Adresovací a výběrové vstupy obvodů A0, A1 a CS jsou zapojeny podle tabulky 3. Tabulka 3 Obvod A0 A1 CS Adresový rozsah CWR PA PB PC Poznámka IO9 A0 A1 A3 X4 - X7 X7 X4 X5 X6 rozšíření IO10 A0 A1 A2 X8 - XB XB X8 X9 XA základní Jak jsme již naznačili, integrované obvody MHB8255A jsou programovatelné obvody a tudíž před započetím činnosti je nutno je naprogramovat do režimu, v němž požadujeme, aby pracovaly. Znamená to, že do registru řídicího slova CWR musíme zapsat informaci o způsobu práce. Protože v kapitole 3, 4 se budeme podrobněji zabývat programováním obvodu MHB8255A, zde jen uvedeme tvar řídicího byte pro řízení kanálu PB v základním obvodu IO10: PB jako vstup - do CWR zapsat 8AH PB jako výstup - do CWR zapsat 88H V příloze C.2 je uvedeno schéma této části PMI-80 (společně s paměťovými obvody). Vývody obvodů IO9 a IO10 jsou přivedeny na kontakty konektoru K2. Rozmístění vývodů tohoto konektoru je v příloze E. 2.3 Obvody vstupu a výstupu Pro komunikaci a styk mikropočítače PMI-80 s prostředím slouží jako základní vstupní jednotka klávesnice s 25 tlačítky (z toho dvě systémová - RESET a INTERRUPT), jako základní výstupní jednotka devítimístný zobrazovač (displej) tvořený sedmi segmentovými číslovkami. Jako další jednotka vstupu a výstupu slouží obvodové zabezpečení styku s magnetofonem přes konektor K3. Na magnetofonovém pásku (resp. kazetě) lze námi vytvořený program nebo data uchovat a později přehrát zpět do paměti. 10 Z celkového počtu 25 tlačítek je 23 programově čteno a dekódováno v součinnosti se zobrazováním informace na zobrazovači. Ze schématu v příl. C.3 je zřejmé, že zobrazování údajů na jednotlivých pozicích zobrazovače se děje postupně, {chybějící pasáž textu cca 5 slov} Pro každou z devíti pozic musí dostat programovatelný stykový obvod IO10 typu MHB8255A novou informaci o obsahu. Znamená to, že pro každou pozici se musí na bitech brány PA0 až PA6 objevit informace o tvaru znaku a na bitech brány PC0 až PC3 informace o pozici znaku na zobrazovači. Má-li se např. na druhé pozici rozsvítit číslo 1, musí se na bráně PA objevit 01111001=79H a na bráně PC 1101. Zbylé vyšší bity jsou pro funkci zobrazovače nevýznamné. Integrovaný obvod IO12 typu MH1082 je využit jako dekodér a výkonový budič řádů zobrazovače. Při zobrazování se postupné objeví na všech výstupech IO12 stav logické nuly (tzv. putující nula), na zbylých je stav logické jedničky. Není-li stisknuto žádné tlačítko, na vstupech PC4 až PC6 bude log. 1. Při stisku některého tlačítka se na jednom ze vstupů objeví log. 0. Ze znalosti právě zobrazované pozice na zobrazovači lze programově přiřadit příslušný kód tlačítka a zároveň zabezpečit protizákmitovou ochranu. Pro uložení dat a programu na magnetofonovém pásku (kazetě) je PMI-80 vybaven programovým obsloužením a jednoduchým obvodovým řešením pro styk s touto periferií. Nahrávání na magnetofon je programově realizováno jako sériové vysílání jednotlivých bitů. Každý významový bit je uváděn tzv. startovním bitem a ukončen tzv. koncovým bitem. Jestliže potom doba vyslání jednoho bitu je 3,2 ms, bude celková doba vyslání jednoho osmibitového bytu 24 x 3,2 = 76,8 ms, což znamená rychlost přenosu informací 13 bytů/sec. Každý nahrávaný blok paměti (o délce maximálně 256 bitů) je uváděn jedním bytem nesoucím identifikační číslo souboru, podle něhož lze při zpětném přehráváni informace z magnetofonu do PMI-80 soubory identifikovat a najít požadovaný. Je však nutno vést si o nahrávkách evidenci. Na magnetofonový pásek (resp. kazetu) se informace nahrávají jako frekvenčně modulovaný záznam s frekvencí 5 kHz. Stav log. 1 má trvání 16 period, stav log. 0 je bez signálu. Po vytvoření součinového signálu PA6 (základní frekvence - BURST) a PA7 (data) pomocí hradla NAND IO11 vývod 8 se signál tvaruje na přibližně sinusový (obr. 3) a v tomto tvaru posílá do magnetofonu. Při přehrávání nahrávky do počítače programový segment pro přehrávání (LOAD) očekává sériový tok „vlnových balíků“ v určitém rozestupu. Tranzistory T2 a T3 s pomocí pasivních součástek tvarují vstupní signál z magnetofonu na tvar logického signálu. Ten je potom přiveden na bit brány PC7, kde je programově čten a dekódován do původní podoby (obr. 4). V kapitole 6 je uvedeno zapojení, kterým lze podstatně zlepšit spolehlivost práce s magnetofonem. 11 3. Jednoduché úlohy s PMI-80 V předchozí části naší publikace jsme se seznámili s funkcí jednotlivých bloků mikropočítače PMI-80. Nyní se budeme věnovat využití tohoto mikropočítače. Úvodem však ještě jednu kapitolu. 3.1 Programování mikroprocesoru MHB8080A V části 2.1 jsme poznali, že jádrem PMI-80 je mikroprocesor MHB8080A s podpůrnými obvody. Mikroprocesor je sekvenční obvod, jehož činnost je řízena předpisem - programem. Znamená to, že mikroprocesor pracuje podle předem zadaných instrukci. Tato množina instrukcí, která tvoří předpis činnosti sekvenčního automatu, se nazývá program. Mikroprocesor MHB8080A vyžaduje, aby instrukce a datové údaje byly uloženy mimo mikroprocesor v paměťových obvodech. Teprve odtud mikroprocesor údaje čte a zpracovává (pokud je pochopitelně program v pořádku). Protože vnitřní stavba mikroprocesoru je založena na osmibitové datové a šestnáctibitové adresové sběrnici, je maximální adresovatelnost mikroprocesoru MHB8080A (tedy maximální kapacita připojené paměti) 2^16 = 65536 Byte = 64 kByte, přičemž jednotka 1 Byte znamená 8 bitů. Znamená to, že mikroprocesor MHB8080A je schopen pracovat s 65536 osmibitovými paměťovými buňkami. Instrukce mikroprocesoru MHB8080A lze rozdělit podle délky do tří skupin: a) instrukce jednobytové - většina instrukcí pro práci s jednotlivými registry, logické a aritmetické operace, rotace a pod. b) instrukce dvoubytové pro práci a daty o délce 8 bitů, resp. instrukce pro práci s periferiemi, c) instrukce tříbytové - instrukce skoků, volání podprogramů, instrukce pro práci s šestnáctibitovými daty apod. Zde stojí za zmínku, že u těchto instrukcí za operačním kódem (t. j. první byte instrukce) následuje vždy nižší byte a jako poslední vyšší byte. Každá z instrukcí mikroprocesoru (příloha A), kterým mikroprocesor „rozumí“, má svůj specifický úkol. Proto má každá svůj mnemokód — zkratkové slovo, které v krátkosti vystihuje hlavní funkci instrukce. Takže např. instrukce JMP (operační kód C3H) je instrukcí skoku, přičemž anglicky se skok řekne jump (čti džamp). Instrukce MVI má zase svůj mnemokód z anglického výrazu move immediate (vlož následující, rozumí se data). Tak bychom mohli pokračovat se všemi instrukcemi. Tabulka mnemokódů instrukčního souboru mikroprocesoru MHB8080A s převodem do strojové podoby v šestnáctkové soustavě je uvedena v příloze A, v další příloze B je uvedena tabulka převodu opačného. Jak poznáte sami, pro krátké a jednoduché programy je lehké převést mnemokódy instrukcí do strojového kódu, případné program psát přímo v něm. Pro rozsáhlejší programy je však tento způsob už neefektivní a mnohdy i nereálný. Pro automatický převod mnemokódů do strojového kódu byly vytvořeny tzv. překladače - asemblery. Asembler umožňuje přeložit program psaný v jazyku symbolických adres do konkrétní strojové podoby s adresami konkrétními. Výsledkem jsou podklady pro skutečné vložení posloupnosti informací do paměti mikropočítače. Z dalších kapitol naší publikace vyplynou další výhody překladačů. Nyní jen dodejme, že program jednou vložený 12 do paměti mikropočítače již lze jen velmi obtížně opravovat. Je nutno přeadresovat skoky, přepsat některé obsahy v paměti jinou informací a pod. Vzhledem k tomu, že práce s překladačem je mnohem výhodnější, budeme dále předpokládat, že jej máme k dispozici. Programy budeme proto psát vždy v jazyce symbolických adres pro mikroprocesor MHB8080A, který si dále v krátkosti popíšeme. I ti (a bude jich většina), kteří překladač nebudou mít k dispozici záhy poznají, že i ruční překlad je mnohem výhodnější než přímé vkládáni instrukcí do paměti a při každé opravě nutnost oprav a přesunů. Ruční překlad provedete podle tabulek v přílohách A a B. Nejinstruktivněji popíšeme jazyk symbolických adres mikroprocesoru MHB8080A příkladem programu: 1 2 ENT: 3 4 ABC: 5 DATA: 6 ORG 1C00H JMP ABC LXI H,DATA MOV A,L EQU 345AH END ; ; ; ; ; ; DEFINICE POC. ADRESY SKOK NA NAVESTI ABC VLOZI DO H DVA BYTE DO A OBSAH L DEFINICE PROMENNE DATA UKONCI PREKLAD Po přeložení dostaneme výpis budoucího obsahu paměti: 1C00 C3 06 1C 1C03 21 5A 34 1C067D Pokud bychom chtěli ať už z jakýchkoliv důvodů vložit mezi řádky 3 a 4 řádek nový, při ruční práci to znamená posunout obsah paměti od adresy 1C06 o tolik byte dále, kolik je délka vkládané instrukce (resp. instrukcí), a to může být někdy hodně. S překladačem stačí řádek vložit a spustit překlad. Bude-li vložený řádek např.: CALL F61DH bude výpis překladu mít tvar: 1C00 C3 09 1C 1C03 21 5A 34 1C06 CD 1D F6 1C097D kdežto ve zdrojovém programu pouze přibude nový řádek. 13 3.2 První úlohy s PMI-80 Po připojení mikropočítače ke zdroji (např. SN 080, příloha F) a po jeho zapnutí se na zobrazovači objeví úvodní hlášení - „PMI-80“. Tak mikropočítač ohlásí, že je připraven s námi komunikovat. Stejně se nám ohlásí po stisku tlačítka RE (REset). Nyní už bude skutečně záležet jen na nás, co budeme chtít naprogramovat. Vyzkoušejme nyní, jak vlastně mikroprocesor plní instrukce. Vytvoříme jednoduchý program pro vykonávání aritmetických a logických operací mezi dvěma čísly. Vývojový diagram takové úlohy je velice jednoduchý (obr.5). Předpokládejme nyní, že hodnoty X a Y máme pro jednoduchost uloženy v paměti na adresách A1 a A2, výsledek operace uložíme na adresu A3. Program pro sčítání čísel X a Y bude potom v asembleru 8080 mít podobu: Program 1 ORG1C00H LDA A1 MOV C,A LDA A2 ADD C STA A3 JMP 0000H END ; ; ; ; ; ; ; A <- X uloží X do C A <- Y A <- Y + X = Z, výsledek (A3) <- Z skok do monitoru pseudoinstr. pro překladač Již zde jsme hned v počátku narazili na problém všech programátorů: jak efektně a přitom efektivně (tedy jasně a jednoduše) naprogramovat vstupní a výstupní operace. Programátor většinou ví, co chce naprogramovat a problém teoreticky i prakticky vyřeší. Avšak nejvíce práce a času potom zabírá vymyšlení vstupování dat do programu a zobrazení výsledku. V našem programu jsme předpokládali vstupní data uložena „někde v paměti“ a výsledek jsme uložili opět na paměťové místo. Toto řešení jistě není elegantní a za chvíli nám přestane vyhovovat. Prozatím se však s tím smíříme. Nyní tedy program vložíme do paměti PMI-80 podle tabulky 4. Místo asemblerovských hodnot A1 až A3 jsme dosadili hodnoty A1=1F00H, A2=1F02H a A3=1F04H. Na adresy A1=1F00H a A2=1F02H vložíme nyní X=1CH a Y=C6H. Po spuštění programu (tzn. EX 1C00 =) se prakticky ihned objeví úvodní hlášení PMI-80, které oznamuje, že program je vykonán. Nyní si prohlédněme obsahy paměťových lokalit, kde se nachází vstupní data a výsledek. Na adresové pozici 1F04H se má objevit výsledek sečtení C6H+1CH=E2H. Změníme-li nyní v programu 1 instrukci ADD C (kód 81H) na instrukci SUB C (kód 91H), po spuštění programu se musí jako výsledek na adrese 1F04H objevit C6H-1CH=AAH. Tímto 14 způsobem můžeme vyzkoušet i jiné instrukce pro operaci mezi dvěma registry (t.j. AND C, ORA C, XRA C) a ověřit si jejich funkci pro různá vstupní data X a Y. Jistě nám brzy přestane stačit omezená schopnost programu 1 a proto ze znalostí základní firemní dokumentace využijeme některé monitorovské podprogramy. Jsou to CLEAR (adresa 00ABH) pro výmaz obsahu zobrazovače, OUTDA (00F2H) pro uloženi údajů do datové části zobrazovače, MODDA (00FBH) pro práci s datovou částí zobrazovače a konečně OUTKE (0116H), který dynamicky ovládá zobrazovač a klávesnici. Program 1 lze se znalosti těchto podprogramů „vylepšit“ do poněkud dokonalejší podoby: Program 2 1C00 3E 23 1C02 CD AB 00 1C05 CD FB 00L: 1C08 32 00 1F 1C0B CD FB 00 1C0E 32 02 1F 1C11 81 1C12 32 04 1F 1C15 32 FA 1F 1C18 CD F2 00 1C1B CD 16 01 1C1E C3 05 1C ORG 1C00H MVX A,23H ; CALL CLEAR ; CALL MODDA ; STA 1F00H ; CALL MODDA ; STA 1F02H ; ADD C ; STA 1F04H ; STA 1FFAH ; CALL OUTDA ; ; CALL OUTKE ; JMP L ; znak vymazání obsahu zobrazovače zadání X uloží X zadání Y uloží Y operace výsledek do prac. registru přepis obsahu prac.registru do datové části zobrazovače obrazování pokračování po stisku čísla Program 2 umožňuje poněkud „komfortněji“ zadávat vstupní údaje a na závěr nám i výsledek zobrazí na zobrazovači. Program podle levé části výpisu vložte do paměti mikropočítače, dobře si rozmyslete a vyzkoušejte jeho funkci. 3.3 Stopky Nyní, když už umíme řídit zobrazování údajů na zobrazovači, si můžeme naznačit další možnosti aplikací mikropočítačů. Půjde o program pro postupné zobrazování čísel ve vzestupné řadě od nuly do FFH (půjde tedy o osmibitový údaj), jinými slovy naprogramujeme čítač modulo 256 (což je totéž co FFH). Vývojový diagram této úlohy je na obr. 6. Jde tedy o velice jednoduchý problém a tedy i jednoduchý program. Využijeme přitom další monitorovský podprogram DISP (0140H). 15 Program 3 1C00 3E 19 1C02 CD AB 00 1C05 3E 00 1C07 32 FA 1F 1C0A 16 20 L1: 1C0C00 L2: 1C0D CD F2 00 1C10 CD 40 01 1C13 15 1C14 C2 0C 1C 1C17 3A FA 1F 1C1A 3C 1C1B00 1C1C 32 FA 1F 1C1F C3 0A 1C ORG 1C00H MVI A,19H CALL CLEAR ; MVI A,0 STA 1FFAH ; MVI D,20H ; NOP CALL OUTDA ; CALL DISP ; DCR D ; JNZ L2 LDA 1FFAH INR A ; NOP STA 1FFAH JMP L1 vymazání vynulování registru definice čas. konst. přepíše obsah 1FFAH na zobr. zobrazuje zpoždění inkrement registru Program 3 na počátku vymaže zobrazovač, dále je vynulován pracovní registr na adrese 1FFAH a je definována časová konstanta, neboli konstanta úměrná době zobrazováni jednoho číselného údaje. Poté se hodnota z datového registru naplní do datové části zobrazovače (t.j. vpravo) a obsah registru je nyní zobrazován podprogramem DISP tak dlouho, dokud nebude obsah registru D nulový. Poté je obsah datového registru zvýšen o jedničku a celý děj se opakuje. Zkusme nyní modifikovat časovou konstantu na adrese 1C0BH na 80H. Děj se úměrně zpomalí. Vložme nyní na volné místo na adrese 1C1B místo instrukce NOP instrukci DAA (=27H). Tato instrukce nám zaručí, že na zobrazovači se budou objevovat postupně jen čísla z desítková soustavy. Instrukce DAA (Decimal Adjust Accumulator) provádí totiž tzv. dekadickou korekci obsahu akumulátoru A. Po čísle 09 nebude tudíž následovat šestnáctkové číslo 0A, nýbrž číslo 10. Jistě oceníme výhody této instrukce, i když si musíme uvědomit, že se nám nyní nepodaří dostat na displej větší číslo nežli 99. Nyní nás může napadnout zastavit čítání čísel, tedy vytvoření jakýchsi stopek. Využijeme tlačítka I pro generování přerušení hlavního programu. V kapitole 2.1 jsme již uvedli, že při příchodu žádosti o přerušení lze jednoduše vygenerovat instrukci RST7 přivedením 12V na vývod INTA obvodu MH8228 přes odpor 1 kΩ. Ze schématu C.1 vyplývá, že právě tato možnost je využita u PMI-80 po stisku tlačítka I (samozřejmě pokud je přerušení povoleno instrukcí EI). Instrukce RST7 má prakticky stejnou funkci jako instrukce CALL 0038H, tedy volá podprogram na adrese 0038H. U mikropočítače PMI—80 je na adrese 0038H jednoduché obsloužení žádosti o přerušení. Na obr. 7 je znázorněn způsob obsluhy žádosti o přerušení u mikropočítače PMI-80. Z obrázku je patrné, že je-li přerušení povoleno (instrukce EI), tak bezprostředně po přijetí žádosti o přerušení (zde tedy stisku tlačítka I) se další přerušení zakáže (klopný obvod INTE se překlopí do stavu DI) a vygeneruje se instrukce RST7. Ta způsobí, že po dokončení právě probíhající instrukce programu uloží mikroprocesor adresu násle16 dující instrukce do sklípku a přejde na adresu 0038H. Zde se u PMI-80 nachází instrukce skoku do paměti RWM na adresu 1FE6H. Na uživateli nyní bude, jak se s obsluhou vypořádá. Podprogram pro ošetření žádosti o přerušení musí končit instrukcí RET. Náš program 3 nyní upravíme pro demonstraci obsluhy tlačítka I. Po stisku tohoto tlačítka se musí obsah zobrazovače vynulovat. Na adresu 1C0CH vložíme instrukci EI (FBH), čímž povolíme přerušení. Nyní před spuštěním programu musíme ještě vytvořit obslužný podprogram pro ošetření žádosti o přerušení. Nejprve na adresu 1FE6H vložíme programový řádek: 1FE6 C3 00 1DREST7: JMP PRER a na adrese 1D00H se bude nacházet obslužný podprogram PRER: 1D00 3E 00 PRER:MVI A,0 1D02 32 FA 1F STA 1FFAH 1D05C9 RET ; vynulování registru Úpravou programu 3 a vytvořením předchozího krátkého podprogramu pro obsluhu přerušení dosáhneme toho, že po stisku tlačítka I (interrupt) se vynuluje obsah datového registru, tedy čítač začne po uvolnění tlačítka čítat opět od nuly. Abychom však mohli náš program nazvat stopky, místo korekce dekadické (instrukce DAA) provést korekci šedesátkovou, neboť jak známo sekundy se měří v šedesátkové soustavě. Program 3 tedy upravíme na program 4: Program 4 1C00 3E 19 1C02 CD AB 00 1C05 3E 00 L0: 1C07 32 FA 1F 1C0A 16 20 L1: 1C0C FB L2: 1C0D CD F2 00 1C10 CD 40 01 1C13 15 1C14 C2 0C 1C 1C17 3A FA 1F 1C1A 3C 1C1B 27 1C1C FE 60 1C1E D2 05 1C 1C21 32 FA 1F 1C24 C3 0A 1C ORG 1C00H MVI A,19 CALL CLEAR ; MVI A,0 ; STA 1FFAH MVI D,SEC ; EI ; CALL OUTDA CALL DISP DCR D JNZ L2 LDA 1FFAH INR A ; DAA ; CPI 60H ; JNC L0 ; STA 1FFAH ; JMP L1 vymazání zobrazovače vynulování registru časová konstanta přerušení povoleno přičtení 1 dekad. korekce hlídání přetečení sekund vynulování uloží novou hodnotu 17 Nyní po stisku tlačítka I dojde k zastavení čítání čísel a k následnému vynulování. Po uvolnění tlačítka I se tedy naše stopky opět rozeběhnou. Pozorný čtenář si může nyní vytvořit stopky poněkud dokonalejší, které budou nejen zobrazovat sekundy ale i minuty. Program se potom trochu zpomalí a bude nutno zmenšit časovou konstantu SEC na adrese 1C0B. 3.4 Programování paralelního stykového obvodu MHB8255A Paralelní stykový obvod MHB8255A, který je osazen v PMI-80 na pozici IO10, resp. po rozšíření i na pozici IO9, je programovatelný obvod z rodiny periferních obvodů řady 825X. Patří sem např. obvody 8251, 8253 a další. Tyto obvody se svou složitostí řadí do kategorie jednoúčelových mikroprocesorů, neboť jejich vnitřní struktura je velice podobná struktuře mikroprocesorových obvodů. V základním materiálu (15) je uveden stručný popis obvodu MHB8255A, omezíme se zde spíše na aplikace. Programovatelný paralelní stykový obvod MHB8255A, jehož blokové schéma je na obr. 8, umožňuje vytvoření tří osmibitových lokálních datových sběrnic pomocí tří obousměrných bran (portů) PA, PB a PC, případně dvou řízených komunikačních sběrnic za pomoci tzv. přejímání (handshaking). V tomto případě se datové komunikace účastní brány PA a PB, brána PC je vyhrazena řídícím komunikačním signálům. Tím je umožněno provádět s obvodem MHB8255A celou škálu různých druhů komunikace mezi mikropočítačem a jeho periferními obvody pouze změnou v programu. Před zahájením komunikace pomocí MHB8255A je nutno obvod naprogramovat. Tomu slouží z programového hlediska tzv. řídicí instrukce, kterou zapíšeme do řídícího registru obvodu za stavu A0 = A1 = log. 1. Tento stav je zajištěn technickým vybavením. U PMI-80 jsou adresy řídicích registrů a jednotlivých bran podle tab. 3. Tvar řídicí instrukce je na obr. 9a, tvar instrukce bitového programování brány PC na obr. 9b. Obvod MHB8255A se může provozovat ve třech režimech (tzv. módech), z nichž nejjednodušší je režim 0. V tomto režimu lze naprogramovat kteroukoliv bránu jako vstupní nebo jako výstupní, bránu PC můžeme dokonce rozdělit na dvě poloviny a každé z nich přisoudit opět jiný směr komunikace. V režimu 1 se obvod rozdělí na dvě prakticky rovnocenné části, čímž vzniknou dvě vstupní nebo výstupní brány s podporou tzv. přejímání (angl. handshake - „potřesení rukou“). Pojem přejímání si vysvětlíme na obr. 10. Předpokládejme, že máme k mikropočítači (μC) připojit periferní zařízení, např. tiskárnu, které je co do rychlosti zpracování vstupní informace pomalejší nežli mikropočítač. Pomalejší periferie tedy musí nutně „zdržovat“ mikropočítač a tudíž ten musí čekat na svého pomalého spolupracovníka. Chce-li totiž vyslat informaci (znak) do periferie, vyšle o tomto budoucím záměru periferii zprávu signálem OBF (output buffer full - výstupní vyrovnávací paměť plná). Periferie potvrdí (nebo nepotvrdí) příjem této zprávy svým signálem ACK (acknowledge - potvrzení). Dokud mikropočítač toto potvrzení nedostane, nemůže vyslat novou informaci (nový znak) do periferie. A pokud by ji přesto vyslal, tato informace se nutně ztratí. 18 Obdobně si vysvětlíme připojení vstupní periferie k mikropočítači (obr. 11). V tomto případě musí periferie testovat stav signálu IBF (input buffer full - vstupní vyrovnávací paměť (ještě) plná, tedy nepřečtená). V případě, že si mikropočítač ještě „nenašel čas“ a nepřečetl si poslední zapsanou informaci ve vstupní vyrovnávací paměti, bude signál IBF v aktivním stavu. V okamžiku přečtení se IBF nastaví do stavu neaktivního a tehdy může periferie zapsat novou informaci pomocí signálu STB (strobe - záznamový puls). Tyto dvě výše popsané funkce - vstup a výstup údajů - může obvod MHB8255A vykonávat v režimu 1 a říkáme jim přejímání. Na obr. 12 jsou vyobrazena možná zapojení obvodu v režimu 1. Oproti obr. 10 a 11 se zde objevují nové signály INTR (interrupt request - požadavek na přerušení). Tyto signály lze použít ve větších systémech jako zdrojové signály žádosti o přerušeni a o obsloužení stykového obvodu. Přerušení lze podobně jako u mikroprocesoru dovolit nebo zakázat nastavením klopného obvodu INTE. Žádost o přerušení je možno též číst ve stavovém slově stykového obvodu (obr. 13), což je vlastně stav brány PC. V režimu 2 pracuje brána PA jako řízená obousměrná sběrnice. Způsob řízení komunikace vznikl vlastně sloučením řízení vstupu a výstupu dat v režimu 1 dohromady (obr. 14a). Brána PB je v tomto režimu neaktivní. Signál požadavku na přerušeni INTRA v tomto případě slučuje obě logické podmínky pro generování signálů INTRA v režimu 1, to znamená, že podmínka pro jeho vznik je: INTRA = IBF * INTE2 * STB * RD + OBF * INTE1 * ACK * WR Slovně bychom řekli: požadavek na přerušení vznikne těsně po zápisu nové informace do vstupní vyrovnávací paměti nebo po vyslání obsahu výstupní vyrovnávací paměti do periferie. V obou případech musí být přerušení pro příslušný směr datové komunikace povoleno (t. j. INTE1 = PC6 pro výstup dat a INTE2 = PC4 pro vstup dat). Tvar stavového slova (resp, stav brány PC) při režimu 2 je na obr. 14b. Jako příklad využití obvodu MHB8255A v režimu 2 je na obr. 15 uvedeno blokové schéma připojení řadiče pružného disku. V tomto případě stykový obvod pracuje střídavě v režimu 2 (přenos dat) a v režimu 0 (řízení). Na závěr této kapitoly uvedeme jednoduchý příklad použití programovatelného stykového obvodu MHB8255A. Pro jednoduchost zvolíme základní režim 0 a jako periferní zařízení použijeme jednoduchý výstupní zesilovač a akustický měnič — sluchátko. Toto zařízení (pokud tento jednoduchý obvod tak nazveme) umožní vytvářet zvukové vlny, přičemž kmitočet signálu lze programově měnit. Na obr. 16 je nakresleno zapojení tohoto jednoduchého demonstračního obvodu a příslušný program je v tab. 5. 19 4. Popis základního programového vybavení PMI-80 Pro celou řadu aplikací mikropočítače PMI-80 je výhodné znát jeho základní firemní programové vybavení. Pro tyto programy se vžil i u nás název Monitor, neboť monitoruje (tedy zde čte a zobrazuje) základní funkce mikropočítače, obsluhuje základní vstupní a výstupní zařízení. Většinou pak Monitory obsahují i další užitečné podprogramy využitelné v uživatelských programech. V každém případě není znalost firemního programového vybavení na škodu žádnému uživateli mikropočítače, neboť zde lze nalézt celou řadu zajímavých programových „fint“. Na obr. 17 je uveden vývojový diagram Monitoru PMI-80. Odtud je patrno, že většinu času tráví mikropočítač zobrazováním výstupního registru zobrazovače (VRZ) pomocí podprogramu OUTKE (adresa 0116H). Tento podprogram zabezpečuje nejen zobrazování obsahu VRZ nýbrž i „osahávání“ tlačítek (pochopitelně kromě REset a Interrupt). Zabezpečuje rovněž správné převzetí hodnoty z tlačítka. Bez toho by na zobrazovači naskočilo např. několik stejných čísel vlivem mechanických zákmitů tlačítek. Vlastní funkci zobrazování a čtení tlačítek zabezpečuje podprogram DISP (adresa 0140H). Převod kódu tlačítek se provádí pomocí obsahu tabulky TABIN (adresa 01A3H). Z tabulky TABIN je patrné, že kód tlačítek je velmi jednoduchý a lehce identifikovatelný; kódy číselných tlačítek mají formát 1000XXXXB, kódy tlačítek funkčních mají formát 1001XXXXB. Po stisku tlačítka přejde vykonávání Monitoru do další části, kde se testuje kód stisknutého tlačítka a podle toho se program dále větví. Po stisku číselného tlačítka se na zobrazovači objeví varovný nápis „Error“, který uživateli napovídá, že nestiskl funkční tlačítko. V opačném případě je proveden skok podle funkčního tlačítka. Vedle obsluhy zobrazovače je tedy v Monitoru dále šest funkčních částí, z nichž má každá za úkol obsloužit jedno z šesti funkčních tlačítek. 20 21 ;PROCEDURA RESET (POCATECNI NASTAVENI) PMI-80 ---------------------------------------------------------------0000 3E8A RESET:MVI A,8AH ;RIDICI SLOVO V/V PORTU: PA:VYSTUP PB:VSTUP PCH:VSTUP PCL:VYSTUP 0002 D3FB OUT PPI ;JE ZAPSANO DO RIDICIHO REG. 0004 00 NOP ;UKLIDNENI DATOVE SBERNICE 0005 C32E00 JMP 002EH ;PRESKOK PROGRAMU PRO RST 1 ---------------------------------------------------------------002E 21D91F LXI H,1FD9H ;ADRESA VRCHOLU ZASOBNIKU DO HL:1FD9 0031 22E41F SHLD 1FE4H ;A JEJI ULOZENI V ZAS.MONIT. 1FE4:D91F 0034 C33D00 JMP 003DH ;PRESKOK PROG. OBSLUHY RST 7 ---------------------------------------------------------------0038 C3E61F RST7: JMP 1FE6H ;SKOK NA ADRESU OBSLUHY RST7, PRIPRAVENOU UZIVATELEM TOHOTO PRERUSENI ---------------------------------------------------------------003D 21E701 LXI H,01E7H ;ADRESA ZPRAVY MONITORU DO HL:01E7: 1E 13 16 01 19 1F 08 00 1E (T.J. “PMI -80”) 0040 31D91F LXI SP,1FD9H;ADRESA VRCHOLU ZASOBNIKU DO SP:1FD9 0043 22FC1F SHLD 1FFCH ;ADRESA ZPRAVY MONITORU DO 1FFC:E701 (UKAZATELE VYSTUPNIHO REGISTRU PRO ZOBRAZENI) 0046 CD1601 CALL OUTKE ;ZOBRAZENI A TEST KLAVESNICE:DISP:”PMI -80” (MONITOR CEKA NA STLACENI LIBOVOLNE KLAVESY) 0049 21EF1F LXI H,1FFCH ;ADRESA LEVE SEGMENTOVKY DO HL:1FEF 004C 22FC1F SHLD 1FFCH ;A JEJI ULOZENI DO UKAZATELE 1FFC:EF1F 004F 3E1D MVI A,1DH ;KOD ‘?’ DO STRADACE A:1D 0051 CDAB00 CALL CLEAR ;PRIPRAVA ZOBRAZENI:?........ 0054 CD1601 CALL OUTKE ;ZOBRAZENI A TEST KLAVESNICE DISP:?........ (MONITOR CEKA NA STLACENI FUNKCNI KLAVESY) 0057 210B02 LXI H,020BH ;ADR.TAB.FUNKCNICH KLAVES: HL:020B (020E 0211 0214 0217 021A) -------------------------------;OBSAH TABULKY PAMETI: 020B:927200 912902 975A02 9A7E02 944C03 938C03 005A 0606 MVI B,06 ;POCITADLO FUNKCNICH KLAVES B:06 005C BE CMP M ;SROVNANI KODU KLAVESY VE STRADACI S KODEM V TABULCE 005D 23 INX H ;ZVETSENI HL,NEOVLIVNI’CY’A’Z’ HL:020C 020F 0212 0215 0218 021B 005E CA6D00 JZ 006DH ;Z=1, SKOK PRI SROVNANI KODU STLACENE KLAVESY A KODU V TABULCE 0061 23 INX H ;Z=0, NESROVNANO,ZVETSENI ADR. HL:020D 0210 0213 0216 0219 021C 0062 23 INX H ;UKAZATELE V TABULCE NA HL:020E 0211 0214 0217 021A 021D 0063 05 DCR B ;ZMENSENI POCITADLA FN KLAVES B:05 04 03 02 01 00 0064 C25C00 JNZ 005CH ;B≠0, DALSI FUNKCNI KLAVESA # # # # # = 0067 210202 LXI H,0202H ;B=0, ADRESA ZPRAVY “ERROR” DO HL:0202 006A C34000 JMP 0040H ;SKOK NA VYPIS ZPRAVY MONITORU O TOM, ZE NEBYLA STISKNUTA FUNKCNI KLAVESA - VIZ VYSE ---------------------------------------------------------------006D 4E MOV C,M ;NIZSI BYTE ADRESY Z TAB. DO C:72 29 5A 7E 4C 8C 006E 23 INX H ;ADRESA VYSSIHO BYTU V TAB. HL:020D 0210 0213 0216 0219 021C 006F 66 MOV H,M ;VYSSI BYTE ADRESY Z TAB. DO H:00 02 02 02 03 03 0070 69 MOV L,C ;NIZSI BYTE ADRESY Z C DO HL:0072 0229 025A 027E 034C 038C 0071 E9 PCHL ;SKOK NA PROGRAM FUNKCE PC:0072-M 0229-G 025A-B 027E-R 034C-S 038C-L ---------------------------------------------------------------;KONEC PROCEDURY RESET Výpis monitoru PMI-80: 22 ; ;FUNKCE: M-MEMORY (UMOZNUJE ZMENU ADRESY A PO STLACENI ‘=’ ZMENU DAT,DALSI ‘=’ZVYSI ADRESU O +1 A LZE MENIT DATA) ; G-EXECUTE (UMOZNUJE ODSTARTOVAT UZIVATELSKY PROGRAM OD ZADANE ADRESY STLACENIM KLAVESY ‘=’) ; B-BREAK STOP (NA VLOZENOU ADRESU Z KLAVESNICE UMISTI INSTRUKCI RST 1 CIMZ UMOZNI VSTUP DO MONITORU) ; R-REGISTRY (UMOZNUJE ZOBRAZENI OBSAHU DVOJIC REGISTRU NA DISPLEJI) ; S-SAVE (UMOZNUJE UCHOVANI OBSAHU PAMETI OD ZADANE ADRESY NA MAGNETOFON, NUTNO ZADAT PORAD. CISLO BLOKU) ; L-LOAD (PROCEDURA NAHRAVANI Z MAGNETOFONU NA ZVOLENOU ADRESU PAMETI. NAHRAVA SE BLOK URCENEHO CISLA) ; ;PROCEDURA FUNKCE ‘M’ MONITORU ---------------------------------------------------------------0072 3E16 MVI A,16 ;KOD FUNKCE ‘M’ DO STRADACE A:16 0074 CDAB00 CALL CLEAR ;PRIPRAVA ZOBRAZENI:M........ 0077 CDD700 CALL MODAD ;ZOBRAZENI A MODIFIKACE ADRESY 007A 7E MOV A,M ;OBSAH MODIFIKOVANE ADRESY DO A:XY 007B 32FA1F STA 1FFA ;A JEHO ULOZENI DO VYST.REG. 1FFA:XY 007E 3E18 MVI A,18H ;KOD ZNAKU “=” DO STRADACE A:18 0080 02 STAX B ;A JEHO ULOZENI DO VYST.REG. 1FF5:18 0081 CDFB00 CALL MODDA ;ZOBRAZENI A MODIFIKACE DAT DISP:M ADR.=XY 0084 2AF81F LHLD 1FF8H ;BEZNA VSTUPNI ADRESA Z 1FF8 HL:ADR. 0087 3AFA1F LDA 1FFA ;MODIFIKOVANA DATA Z 1FFA DA A:ND -(NOVA DATA) 008A 77 MOV M,A ;A JEJICH ULOZENI NA ADRESE ADR.:ND 008B 23 INX H ;ZVETSENI ADRESY BEZNYCH DAT HL:AD+1 008C 22F81F SHLD 1FF8H ;A JEJI ULOZENI V ZASOBNIKU 1FF8:AD+1 008F CDBB00 CALL OUTAD ;ZOBRAZI ADRESU A NOVA DATA DISP:M ADR.=ND 0092 C37A00 JMP 007A ;POKRACUJE MODIFIKACE DAT. VYSTUP Z PROCEDURY:STLACENIM FUNKCNI KLAVESY ---------------------------------------------------------------;KONEC PROCEDURY FUNKCE ‘M’ ; ;PROCEDURA OUTAD PMI-80, ROZKLADAJICI 2 BYTY ADRESY NA 4 HEXADECIMALNI ZNAKY DO VYSTUPNIHO REGISTRU DISPLEJE ;VSTUPY: BC-ADRESA LEVE ZE CTYR SEGMENTOVEK, NA NEZ BUDE ZOBRAZENA DVOUBYTOVA ADRESA VE TVARU CTYR ZNAKU ; HL=(1FF9,8)=FEDC: DVOUBYTOVA ADRESA, KTERA MA BYT ZOBRAZENA DISPLEJEM (VSTUPNI ARGUMENT) ;PRI POUZITI TECHTO VSTUPU SE PROCEDURA VOLA: CALL 00C1, STANDARDNI VOLANI: CALL 00BB (OUTAD) ---------------------------------------------------------------00BB 01F11F OUTAD:LXI B,1FF1H ;ADRESA 3. SEGMENTOVKY ZLEVA BC:1FF1 00BE 2AF81F LHLD 1FF8H ;BEZNA (ZOBRAZOVANA) ADRESA HL:FEDC 00C1 7C MOV A,H ;VYSSI BYTE ADR. DO STRADACE A:FE 00C2 CDC600 CALL X+4 ;PRVNI PRUCHOD PODPROGRAMEM 00C5 7D MOV A,L ;PRI 2. PRUCHODU NIZSI BYTE ADRESY A:DC A:BD (PRO PP OUTDA) 00C6 D5 PUSH D ;UCHOVANI DE V ZASOBNIKU 00C7 57 MOV D,A ;STRADAC DO POMOCNEHO REG. D:FE(11111110) DC(11011100) BD(10111101) 00C8 0F RRC ;PRESUN LEVE TETRADY VPRAVO A:7F(01111111) 6E(01101110) DE(11011110) 00C9 0F RRC ;A NAOPAK CTYRNASOBNOU ROTACI A:BF(10111111) 37(00110111) 6F(01101111) 00CA 0F RRC ; A:DF(11011111) 9E(10011011) B7(10110111) 00CB 0F RRC ; A:EF(11101111) CD(11001101) D8(11011011) 00CC 6E0F ANI 0FH ;PONECHANI PRAVE TETRADY A:0F(00001111) 0D(00001101) 0B(00001011) 00CE 02 STAX B ;A ULOZENI DO VYST.REG.DISP. 1FF1:0F 1FF3:0D 1FF6:0B 23 03 7A E60F 02 03 D1 C9 INX B ;DALSI ADR.VYST.REG.DISPLEJE BC:1FF2 1FF4 1FF7 MOV A,D ;PUVODNI BYTE ADR. Z POM. REG. A:FE DC BD ANI 0F ;PONECHANI PRAVE TETRADY A:0E 0C 0D STAX B ;ULOZENI DO VYST. REG. DISP. 1FF2:0E 1FF4:0C 1FF8:0D INX B ;ADRESA DALSI SEGMENTOVKY BC:1FF3 1FF5 1FF8 POP D ;NAVRAT PUVODNIHO OBSAHU DE RET ;NAVRAT Z 1. PRUCHODU NEBO PODPROGRAMU ;POUZE JEDENKRAT PROCHAZI TOUTO PROCEDUROU PODPROGRAM OUTDA (CALL 00F2), ROZKLADAJICI BYTE DAT NA DVA ZNAKY 00F2 01F61F OUTDA:LXI B,1FF6H ;ADRESA DVOU PRAVYCH SEGMENTU BC:1FF6 00F5 2AFA1F LHLD 1FFAH ;BYTE BEZNYCH VSTUPNICH DAT HL:XYBD (XY JE OBSAH ADRESY 1FFB, KTERY NEVYUZIVAME) 00F8 C3C500 JMP 00C5H ;SKOK DO PROCEDURY OUTAD, JEDEN PRUCHOD, UMOZNUJICI ROZDELENI BYTU NA 2 ZNAKY PRO ZOBRAZENI ; ; ;ANALYZA PROCEDURY MODAD PMI-80, KTERA ZOBRAZUJE 4 ZNAKY DVOUBYTOVE ADRESY A UMOZNUJE JEJICH ZMENU Z KLAVESNICE ;VOLA PROCEDURY OUTAD A OUTKE; PREDPOKLADANY OBSAH (1FF8,9)=DCFE JE MODIFIKOVAN NA 3412 00D7 CDBB00 MODAD:CALL OUTAD ;ROZLOZI 2 BYTY ADR. NA 4 ZNAKY 00DA CD1601 CALL OUTKE ;ZOBR.ADR.A JEJI MOD.Z KLAVES. A: 81 82 83 84 90 (STLACENO”=”) 00DD C8 RZ ;Z=1,STLACENO”=”,POTVRZENI ADRESY - NORMALNI NAVRAT Z PROCEDURY Z=1,RZ 00DE D29701 JNC 0197H ;CY=0,STLACENA FUNKCNI KLAVESA - VYSTUP Z PROCEDURY PO CHYBE 00E1 2AF81F LHLD 1FF8H ;BEZNA VSTUPNI ADRESA DO HL:FEDC(1111 1110 1101 1100) PRIKLAD ADRESY ULOZENE NA 1FF8,9 00E4 E60F ANI 0FH ;PONECHANI PRAVE TETRADY KODU A: 01 02 63 04 00E6 29 DAD H ;POSUV OBSAHU HL VLEVO HL:FDBB(1111 1101 1011 1000) 00E7 29 DAD H ;O CTYRI BITY, UVOLNENI HL:FB78(1111 1011 0111 0000) 00E8 29 DAD H ;PRAVE TETRADY PRO NOVY HL:F6EO(1111 0110 1110 0000) 00E9 29 DAD H ;ZNAK Z KLAVESNICE HL:EDC0(1110 1101 1100 0000)DC10 C120 1230 00EA 85 ADD L ;NOVY ZNAK ADR. DO PRAVE TETR. A: C1 12 23 34 00EB 6F MOV L,A ;A JEHO PRESUN DO REGISTRU L: HL:EDC1 DC12 C123 1234 00EC 22F81F SHLD 1FF8H ;UCHOVANI MODIFIK. ADRESY 1FF8:C1ED 12DC 23C1 3412 00EF C3D700 JMP MODAD ;POKRACOVANI MODIF. ADRESY ---------------------------------------------------------------0197 21F001 LXI H,01F0H ;ADR.ZPRAVY, ERR-ADRES HL:01F0 019A C34000 JMP 0040H ;ZOBRAZENI ZPRAVY MONITOREM (BYLA-LI OMYLEM STLACENA FUNKCNI KLAVESA MISTO SESTNACTKOVE) ; ; ;ANALYZA PROCEDURY MODDA PMI-8O, KTERA ZOBRAZI BYTE DAT A UMOZNI JEHO ZMENU Z KLAVESNICE 00FB CDF200 MODDA:CALL OUTDA ;ROZLOZENI BYTU DAT NA 2 ZNAKY HL:(1FFA)=00BD - PREDPOKLADANY OBSAH BYTU DAT 00FE CD1601 CALL OUTKE ;ZOBR. DAT A MODIF. Z KLAVES. A:88 (STLACENA KLAV. ‘8’) B9 (STLACENA KLAVESA ‘9’) 90 0101 C8 RZ ;Z=1,STLACENO’=’,POTVRZENA DATA - NORMALNI NAVRAT Z PROCEDURY Z=l 0102 D29D01 JNC 019DH ;CY=0,STLACENA FUNKCNI KLAVESA - VYSTUP Z PROCEDURY PO CHYBE 0105 000000 NOP ;PRAZDNE OPERACE (3x) HL:00BD=0000 0000 1011 1101 0BD8=0000 1011 1101 1000 0108 E60F ANI 0FH ;PONECHANI PRAVE TETRADY KODU A: 08 09 010A 29 DAD H ;POSUV HL VLEVO O TETRADU HL:017A=0000 0001 0111 1010 17B0=0001 0111 1011 0000 010B 29 DAD H ; HL:02F4=0000 0010 1111 0100 2F60=0010 1111 0110 0000 010C 29 DAD H ; HL:05E8=0000 0101 1110 1000 5EC0=0101 1110 1100 0000 010D 29 DAD H ; HL:08D8=0000 1011 1101 0000 B089=1011 1101 1000 0000 010E 85 ADD L ;NOVY ZNAK DAT DO PRAVE TETR. A: D8 89 00CF 00D0 00D1 00D3 00D4 00D5 00D6 24 010F 6F MOV L,A ;A JEHO PRESUN DO REGISTRU L HL:0BD8=0000 1011 1101 1000 B089-1011 1101 1000 1001 0110 22FA1F SHLD 1FFA ;UCHOVANI MODIFIKOVANYCH DAT 1FFA: D8 89 0113 C3FB00 JMP MODDA ;POKRACOVANI MODIFIKACE DAT ---------------------------------------------------------------019D 21F901 LXI H,01F9H ;ADRESA ZPRAVY. ERR= DATA HL:01F9 01A0 C34000 JMP 0D40H ;ZOBRAZENI ZPRAVY MONITOREM (PRI CHYBNEM STLACENI FUNKCNI KLAVESY MISTO SESTNACTKOVE) ; ; ;PROCEDURA ENTRY PMI-8O 0008 22DF1F ENTRY:SHLD 1FDF ;UCHOVANI HL PRO ZOBRAZENI 1FDF:LLHH 000B E1 POP H ;HODNOTA PC PRI PRERUSENI DO HL:(PC) 000C 22E21F SHLD 1FE2H ;A JEJI UCHOVANI NA ADRESE: 1FE2:(PC) 000F 210000 LXI H,0000 ;VYNULOVANI HL UMOZNI UCHOVAT 0012 39 DAD SP ;HODNOTU SP PRED PRERUSENIM: HL:(SP) 0013 22E41F SHLD 1FE4 ;A PRO ZOBRAZENI JI ULOZI NA 1FE4:(SP) 0016 21DD1F LXI H,1FDDH ;ADRESA VRCHOLU ZASOB. MONIT. HL:1FDD 0019 F9 SPHL ;A JEJI ULOZENI DO SP:1FDD 001A C5 PUSH B ;UCHOVANI BC V TOMTO ZASOB. 1FDB:CCBB 001B D5 PUSH D ;UCHOVANI DE V TOMTO ZASOB. 1FD9:EEDD 001C F5 PUSH PSW ;UCHOVANI AF PRES ZASOBNIK 1FD7:FFAA 001D E1 POP H ;DO REGISTROVEHO PARU HL:AAFF 001E 22DF1F SHLD 1FDD ;A ODTUD NA ADRESY 1FDD:FFAA 0021 2AEC1F LHLD 1FEC ;ADRESA BREAK STOPU PROGRAMU: HL:BRST 0024 3AEE1F LDA 1FEE ;UCHOVANY KOD INSTRUKCE DO A:INSTRUKCE Z MISTA BREAK STOP 0027 77 MOV M,A ;JEJI VRACENI ZPET DO PROG. BRST:PUVODNI INSTRUKCE 0028 212002 LXI H,0220H ;ADRESA ZPRAVY “BR-STOP” DO HL:0220 002B C34000 JMP 0040H ;SKOK DO MONITORU,VYPIS NA DISP:”BR-STOP” ;BRST ZNAMENA ADRESU PUVODNIHO PROGRAMU, NA NIZ BYLA ULOZENA INSTRUKCE CF (RST 1) FUNKCI BREAK STOP ;PUVODNI INSTRUKCE JE UCHOVAVANA V ZASOBNIKU MONITORU NA ADRESE 1FEE ;ADRESA TETO INSTRUKCE JE UCHOVAVANA NA ADRESE 1FEC ;JE-LI ZA ADRESOU UVEDENO VICE BYTU,JSOU ULOZENY NA NASLEDUJICICH VYSSICH ADRESACH ; ; ;PROCEDURA CLEAR PMI-80 00AB 110800 CLEAR:LXI D,0008 ;POCITADLO POZIC DISPLEJE DO DE:0008 00AE 2AFC1F LHLD 1FFCH ;ADRESA Z UKAZATELE VYST.REG HL:1FEF 00B1 19 DAD D ;VYPOCTENA ADR.SEGMENTOVKY, HL:1FF7 1FF6 1FF5 1FF4 1FF3 1FF2 1FF1 1FF0 00B2 3619 MVI M,19H ;ZNAK MEZERY NA TUTO ADRESU, (HL):19 19 19 19 19 19 19 19 00B4 1D DCR E ;ZMENSENI POCITADLA POZIC, DE:0007 0006 0005 0004 0003 0002 0001 0000 00B5 C2AE00 JNZ x-7 ;E≠0, DALSI SEGMENTOVKA 00B8 2B DCX H ;E=0, ADRESA SEGMENTOVKY V, HL: 1FEF 00B9 77 MOV M,A ;UCHOVANI OBSAHU STRADACE NA 1FEF: AA 00BA C9 RET ;NAVRAT Z PODPROGRAMU CLEAR ;PODPR0GRAM PRIPRAVI KODY MEZER NA ADRESY SEGMENTOVEK A OBSAH STRADACE NA ADRESU LEVE SEGMENTOVKY ;ZOBRAZENI TETO INFORMACE NA DISPLEJI MUSI ZAJISTIT PP DISP NEBO OUTKE ; 25 ; ;PROCEDURA OUTKE PMI-80 0116 CD4001 OUTKE:CALL DISP ;ZOBRAZENI A TEST KLAVESNICE 0119 D21601 JMC OUTKE ;CY=0, NEBYLA STLACENA KLAVESA 011C 0F RRC ;CY=1, OBNOVENI OBSAHU STRADACE A:KOD KLAVESY 011D 4F MOV C,A ;KOD KLAVESY DOCASNE DO REG. C:KOD KLAVESY 011E CD4001 CALL DISP ;TEST UVOLNENI KLAVESY 0121 DA1E01 JC x-3 ;CY=1,NENI JESTE UVOLNENA 0124 CD4001 CALL DISP ;ZOBRAZENI A NASTAVENI CY CY=1:PRIZNAK STLACENE KLAVESY JAKO JEDEN Z VYSTUPU PP OUTKE 0127 79 MOV A,C ;KOD KLAVESY VRACEN DO REG. A:KOD KLAVESY - DRUHY VYSTUP PP OUTKE 0128 FE90 CPI 90H ;BYLA STLACENA KLAVESA ANO:Z=1, PRIZNAK STLACENI ‘=’, JE DALSIM VYSTUPEM PP OUTKE 012A C9 RET ;NAVRAT Z PP OUTKE DO MONITORU NEBO PROGRAMU ;VYSTUPY PP OUTKE: A,C KOD STLACEME KLAVESY ; CY=1 PRIZNAK STLACENE KLAVESY ; Z=1 PRIZNAK STLACENI KLAVESY ‘=’ ;POUZIVA REGISTRY: A,C, OSTATNI UCHOVAVA ; ; ;ANALYZA PODPROGRAMU DISP PMI-80 PRI JEHO PRVNIM VOLANI PO ZAPNUTI MIKROPOCITACE ;KODY KLAVES PRVE RADY TLACITEK 01A3:80 84 88 91 8D 8C 89 8Ř 81 ;KODY KLAVES DRUHE RADY TLACITEK 01AC:82 86 8A 9A 8F 8E 88 87 83 ;KODY KLAVES TRETI (NEUPLNE) RADY TLACITEK 0183:FF 94 93 FF 97 92 FF FF 90 ;ZPRAVA MONITORU PO RESET (“PMI -80”) 01E7:1E 13 16 01 19 1F 08 00 1E ;ADRESA ZASOBNIKOVE PAMEETI SP :1FD9 ;UCHOVANI TETO ADRESY V ZASOBNIKU MONITORU 1FE4:D91F ;ADRESA MONITORU UCHOVAVAJICI ADRESU ZPRAVY 1FFC:E701 SP :1FD7: NAVRATOVA ADRESA PROGRAMU VOLAJICIHO PROCEDURU DISP 0140 E5 DISP: PUSH H SP :1FD5: LLHH 0141 C5 PUSH B SP :1FD3: CCB6 0142 D5 PUSH D SP :1FD1: EEDD 0143 110000 LXI D,0000 ;VYNULOVANI PARU DE DE :0000 0146 42 MOV B,D ;VYNULOVANI REG. B B :00 0147 7A MOV A,D ;VYNULOVANI REG. A A :00 0148 32FE1F STA STATUS ;VYNULOVANI BUNKY STATUS 1FFE:00 014B 3E7F LOOP1:MVI A,7F ;BYTE ZHASNUTI SEGMENTOVKY A :7F 014D D3F8 OUT PA ;VYSTUP TOHOTO BYTU PA :7F 014F 00 NOP ;UKLIDNENI DATOVE SBERNICE 0150 7B MOV A,E ;ADRESA SEGMENTOVKY DO A A :00 01 02 03 04 03 06 07 08 0151 2F CMA ;DOPLNEK ADRESY PRO DEKOREM A :FF FE FD FC F8 FA F9 F8 F7 0152 D3FA OUT PC ;ADRESACE SEGMENTOVEK ZLEVA PC :FF FE FD FC FB FA F9 F8 F7 0154 00 NOP ; DE :0000 0001 0002 0003 0004 0005 0006 0007 0008 0155 2AFC1F LHLD UKBVF ;ADRESA ZPRAVY Z 1FFC DO HL HL :01E7 0158 19 DAD D ;HL+DE DO HL HL :01E7 01E8 01E9 01EA 01EB 01EC 01ED 01EE 01EF 0159 4E MOV C,M ;ZNAK ZPRAVY DO REG. C BC :001E 0013 0016 0001 0019 001F 0008 0000 001E 015A 21BE01 LXI H,TPREV ;ADRESA TAB. PREVODU DO HL HL :01BE 01BE 01BE 01BE 01BE 01BE 01BE 01BE 01BE 013D 09 DAD B ;HL+BC DO HL HL :01DC 01D1 0104 01BF 01D7 01DD 01C6 01BE 01DC 26 025A 025C 0183 0184 0185 0188 0189 018B 018C 018F 0192 0193 0194 0195 0196 015E 015F 0161 0162 0163 0166 0169 016B 016E 0170 0171 0173 0174 0175 0178 0179 017C 017D 0180 0181 0182 7E MOV A,M ;ZNAK V KODU SEGMENTOVKY A :5D 0C 48 06 7F 3F 00 40 5D D3F8 OUT PA ;ZOBRAZENI ZNAKU DISPLEJEM ZNAK:” P M I 8 0 “ 00 NOP ; 3AFE1F LDA STATUS ;KOD STLACENE KLAVESY A :00 XY XY XY XY XY XY XY XY B7 ORA A ;TEST NESTLACENI KLAVESY A :00 XY XY XY XY XY XY XY XY C28801 JNZ NOKEY ;A≠0, BYLA STLACENA KLAVESA 0E09 MVI C,09 ;POCET KLAVES V RADE DO C C :09 219A01 LXI H,TABK-9;ADR.TAB.KLAVES -9 DO HL HL :019A DBFA IN PCH ;VSTUP CASTI KODU KLAVESY PC:0KLM0000 00 NOP ;K=0-STLACENA,K=1-NESTLACENA A :0KLM0000 E670 ANI 070H ;MASKA VSTUPU KODU KLAVESY A :0KLM0000 07 RLC ;ROTACE VLEVO PRES CY: CY=0 A :KLM00000 07 RLC ; CY=K A :LM00000K D28201 JNC PRVA ;STLACENA KLAVESA PRVE RADY 07 RLC ; CY=L A :M00000KL D28101 JNC DRUHA ;STLACENI KLAVESY DRUHE RADY 07 RLC ; CY=M A :00000KLM DA8801 JC NOKEY ;NESTLACENA ZADNA KLAVESA BC :0009 09 DAD B ;BC+HL DO HL 0009+019A=01A3 09 DRUHA:DAD B ;BC+HL DO HL 0009+019A=01A3 0009+01A3=01AC 09 PRVA: DAD B ;BC+HL DO HL 0009+019A=01A3 0009+01A3=01AC 0009+01AC=01B5 ; DE :0000 0001 0002 0003 0004 0003 0006 0007 0008 19 DAD D ;DE+HL DO HL HL : 01A5 01B1 01BD 7E MOV A,M ;KOD KLAVESY V KODU SEGMENT. A : 88 8E 90 32FE1F STA STATUS ;UCHOVANI KODU V PAMETI 1FFE: 88 8E 90 1C NOKEY:INR E ;ADRESA DALSI SECM.A KLAV. DE :0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 3E0A MVI A,0AH ;CISLO POSLEDNI +1 SEGMENT. A :0A BB CMP E ;BYLA JIZ POSLEDNI SEGMENT. # # # # # # # # # = C24601 JNZ LOOP1 ;NE -DALSI SEGM. A KLAVESY 3AFE1F LDA STATUS ;KOD STLACENE KLAVESY DO A A : 88 07 RLC ;NASTAVENI PRIZNAKU STLAC.KLAV. CY=1 A=11 D1 POP D ;NAVRAT PUVODNIHO OBSAHU DE SP :1FD3 DE:DDEE C1 POP B ; SP :1FD3 BC:BBCC E1 POP H ; SP :1FD7 HL:HHLL C9 RET ;NAVRAT Z PODPROGRAMU DISP SP :1FD9 ;TABULKA ZANKU V KODU SEGMENTOVEK: 01BE:40 79 24 30 19 12 02 78 00 18 01C8:08 03 46 21 06 0E 07 23 2F 0C 01D2:47 63 48 71 37 7F 09 2B 0B 2C 01DC:5D 3F 42 61 78 11 FF FF FF FF ; ; ;PROCEDURA BREAK POINT PMI-80 ;NA ZVOLENE ADRESE NAHRADI PUVODNI INSTRUKCI PRIKAZEM ‘CF’ (RST 1), CIMZ DONUTI PROGRAM SKOCIT DO MONITORU ;POTOM LZE ANALYZOVAT OBSAHY REGISTRU A PAMETOVYCH BUNEK, ZDA SE VYVIJEJI V SOULADU S POZADAVKY PROGRAMU 3E0B BREAK:MVI A,OSH ;ZNAK ‘B’ - SYMBOL BREAK POINT A:0B CDAB00 CALL CLEAR ;PRIPRAVA ZOBRAZENI: B........ 27 3E20 CDAB00 2AE21F 22F81F CDD700 2AF81F 22E21F 3E06 D3F8 00 3E0F D3FA 00 21D91F F9 D1 C1 F1 2AE41F F9 2AE21F E5 2ADF1F C9 0229 022B 022E 0231 0234 0237 023A 023D 023F 0241 0242 0244 0246 0247 024A 024B 024C 024D 024E 0251 0252 0255 0256 0259 027E 3E12 0280 CDAB00 2AEC1F 22F81F CDD700 2AF81F 22EC1F 7E 32EF1F 36CF 2AE21F 2B 22E21F C32902 025F 0262 0265 0268 026B 026E 026F 0272 0274 0277 0278 027B 1FECH 1FF8H MODAD 1FF8H 1FECH A,M 1FEE M,CFH 1FE2H H 1FE2H EXEC ;ADRESA ZASTAVENI PRO BR.POINT HL:BRPO ;A JEJI ULOZENI DO ZASOBNIKU 1FF8:POBR ;ZOBRAZENI A MODIF.TETO ADR. 1FF8:241D (PRIKLAD ADRESY PRO BREAK POINT: 1D24) ;PRESUN TETO ADRESY PRES REG. HL:1D24 ;DO ZASOBNIKU MONITORU 1FEC:241D ;PUVODNI INSTRUKCE PROGRAMU A:XY ;JE UCHOVANA V ZASOB. MONIT. 1FEE:XY ;A NAHRAZENA INSTRUKCI RST1 1D24:CF -KTERA ZPUSOBI PRERUSENI PROGRAMU SKOKEM MA ADR. 0008 ;ADRESA POCATKU PROGRAMU HL:1D00 ;JE ZMENSENA O JEDNICKU HL:1CFF ;A ULOZENA DO ZASOB. MONIT. 1FE2:FF1C ;SKOK DO PROCEDURY EXECUTE, KTERA UMOZNI ODSTARTOVANI PROGRAMU ; ; ;PROCEDURA EXECUTE PMI-80, ZAJISTUJE SPUSTENI UZIVATELSKEHO PROGRAMU OD ZADANE ADRESY ;PREDPOKLADEJME, ZE NAVAZUJE BEZPROSTREDME NA PROCEDURU BREAK POINT EXEC: MVI A,20H ;PRIZNAK PROCEDURY ‘G’ DO A:20 CALL CLEAR ;PRIPRAVA ZOBRAZENI, G........ LHLD 1FE2H ;STARTOVACI ADRESA PROGRAMU HL:1CFF SHLD 1FF8H ;JE ULOZENA DO ZASOB. MONIT. 1FF8:FF1C CALL MODAD ;ZOBRAZENA A MODIFIKOVANO 1FF8:001D -NA ADRESU SKUTECNEHO ZACATKU PROGRAMU LHLD 1FF8H ;A PRES REGISTROVY PAR HL:1D00 SHLD 1FE2H ;UCHOVANA V ZASOB. MONITORU 1FE2:001D MVI A,06H ;PRIPRAVA ZNAKU ‘E’ (EXEC) A:06 OUT 0F8H ;POSLAN PRES PORT PA NA DISP. NOP ;UKLIDNENI SBERNICE MVI A,0FH ;ADRESA LEVE SEGMENTOVKY PRES A:0F OUT 0FAH ;POSLANA DO PORTU PC A DISP. DISP:E........ NOP ;UKLIDNENI SBERNICE LXI H,1FD9H ;OBNOVENI ADRESY V UKAZATELI HL:1FD9 SPHL ;VRCHOLU ZASOBNIKU SP:1FD9 POP D ;OBNOVA PUVODNICH OBSAHU DE:DDEE POP B ;REGISTRU (PRED PRERUSENIM AJ.)BC:BBCC POP PSW ; AF:AAFF LHLD 1FE4H ;ADRESA VRCHOLU ZASOBNIKU PRES HL:1FD9 SPHL ;DO UKAZATELE TETO ADRESY SP:1FD9 LHLD 1FE2H ;ADRESA ZACATKU PROGRAMU PRES HL:1D00 PUSH H ;UCHOVANA V ZASOBNIKU JAKO 1FD7:001D -NAVRATOVA ADRESA Z PODPROGRAMU LHLD 1FDFH ;OBNOVENI PUVODNIHO OBSAHU HL:HHLL RET ;DO PC JE ULOZENA STARTOVACI PC:1D00 -ADRESA UZIVATELSKEHO PROGRAMU, CIMZ JE OOSTARTOVAN ; ; ;PROCEDURA ZOBRAZENI OBSAHU REGISTRU PMI-80 (ULOZENYCH V ZASOBNIKOVE PAMETI, NAPR. PROCEDUROU ENTRY) ;PREDPOKLADANE OBSAHY REGISTRU JSOU: AA,FF,BB,CC,DD,EE,HH,LL,SPSP (FF PRO PRIZNAKOVY REGISTR, AC NENI PLNE VYUZIT REG: MVI A,12H ;SYMBOL FUNKCE ‘R’ DO STRADACE A :12 CALL CLEAR ;PRIPRAVA ZOBRAZENI.R. ...... LHLD SHLD CALL LHLD SHLD MOV STA MVI LHLD DCX SHLD JMP 28 0283 CD1601 CALL OUTKE ;ZOBRAZENI A CTENI KLAVESY, OZNACUJICI DVOJICI REGISTRU 0286 D26700 JNC 0067H ;STLACENA FUNKCNI KLAVESA, SKOK NA ZOBRAZENI ZPRAVY, “ERROR” 0289 E60F ANI 0FH ;PONECHANI PRAVE TETRADY KODU A :0X - X=PRAVA POLOVINA KODU KLAVESY 028B 010600 LXI B,0006H ;NASTAVENI CITACE REGISTRU BC:0006 028E 212A01 LXI H,012AH ;ADRESA TABULKY KODU KLAVES HL:012A 0291 0B DCX B ;ZMENSENI CITACE REGISTRU BC:0005 0004 0003 0002 0001 0000 0292 09 DAD B ;VYPOCTENI ADRESY S KODEM 0X HL:012F 012E 012D 012C 012B 012A 0293 0C INR C ;TEST NULOVOSTI CITACE REG. BC:0006 0005 0004 0003 0002 0001 0294 0D DCR C ; BC:0005 0004 0003 0002 0001 0000 0295 CA4F00 JZ 004F ;KONEC PROCEDURY,SKOK DO MONITORU 0298 BE CMP M ;SROVNANI KODU KLAVESY S M=((HL)):0A 0B 0D 09 08 0299 C28E02 JNZ 028EH ;Z=0,NESROVNANI OBSAHU,SKOK 029C 212F01 LXI H,012FH ;Z=1,SROVNANI,ADRESA KODU KLAV.HL:012F 012F 012F 012F 012F 029F CDCD02 CALL 02CDH ;PODPROGRAM CTENI NAZVU REGISTRU ---------------------------------------------------------------02CD 0600 MVI 8,00 ;VYNULOVANI REGISTRU B, POTOM BC:0005 0004 0003 0002 0001 02CF 09 DAD B ;VYPOCTENI ADRESY V TABULCE HL:0134 0133 0132 0131 0130 02D0 6E MOV L,M ;KONSTANTA Z TABULKY DO L : 0F 0C 0E 14 13 02D1 261F MVI H,1FH ;PRIMA KONSTANTA DO H, POTOM: HL:1F0F 1F0C 1F0E 1F14 1F13 02D3 C9 RET ; ---------------------------------------------------------------02A2 5D MOV E,L ;KONSTANTA DO POMOC. REGISTRU E : 0F 0C 0E 14 13 02A3 213401 LXI H,0134H ;ADRESA DALSI TABULKY HL:0134 0134 0134 0134 0134 02A6 CDCD02 CALL 02CDH ;PODPROGRAM CTENI NAZVU DRUHEHO REGISTRU Z PARU ---------------------------------------------------------------02CD 0600 MVI B,00 ;VYNULOVANI REGISTRU B, POTOM BC:0005 0004 0003 0002 0001 02CF 09 DAD B ;VYPOCTENI ADRESY V TABULCE HL:0139 0138 0137 0136 0135 0200 6E MOV L,M ;PRENOS ZNAKU Z TABULKY DO L : 0A 08 0D 1A 05 02D1 261F MVI H,1FH ;PRIMA KONSTANTA DO H, POTOM: HL:1F0A 1F0B 1F0D 1F1A 1F05 02D3 C9 RET ; ---------------------------------------------------------------02A9 63 MOV H,E ;OBSAH POMOC. REG. DO H, POTOM HL:0F0A 0C0B 0E0D 141A 1305 02AA 22F61F SHLD 1FF6H ;PRENOS DO VYST REG.DAT DISP 1FF6:0A0F 0B0C 0D0E 1A14 0513 (REG.PARY V KOOU PMI-80) 02AD C5 PUSH B ;DOCASNE UCHOVANI BC V ZASOB.1F07:0500 0400 0300 0200 0100 02AE CDCA02 CALL 02CAH ;PODPROGRAM CTENI ADRESY ZASOBNIKU, UCHOVAVAJICI OBSAHY REGISTROVYCH PARU ---------------------------------------------------------------02CA 213901 LXI H,0139H ;ADRESA DALSI TABULKY HL:0139 0139 0139 0139 0139 02CD 0600 MVI B,00 ;VYNULOVANI REGISTRU B,POTOM BC:0005 0004 0003 0002 0001 02CF 09 DAD B ;VYTVORENI ADRESY V TABULCE HL:013E 013D 013C 013B 013A 02D0 6E MOV L,M ;NIZSI BYTE ADRESY ZASOBNIKU L : DD DB D9 DF E4 02D1 261F MVI H,1FH ;VYSSI BYTE ADRESY ZASOBNIKU HL:1FDD 1FDB 1FD9 1FDF 1FE4 02D3 C9 RET ;NA NIZ JSOU UCHOVANY OBSAHY REGISTROVYCH PARU ---------------------------------------------------------------0281 E5 PUSH H ;DOCASNE UCHOVANI HL V ZASOB 1FD5:DD1F DB1F D91F DF1F E41F 0282 4E MOV C,M ;OBSAH PRAVEHO REGISTRU PARU C : FF CC EE LL SPL 02B3 23 INX H ;ZVETSENI ADRESY ZASOBNIKU HL:1FDE 1FDC 1FDA 1FE0 1FE5 29 0300 0302 0304 0307 030A 030D 0310 0313 0316 0319 031C 031D 0320 0323 0326 0329 032A 032D 0330 0333 0336 0337 0338 0339 033A 033B 033D 033E 0341 02B4 02B5 0286 0289 02BC 02BD 02BE 02BF 02C0 02C1 02C2 02C3 02C4 02C7 MOV MOV SHLD CALL POP MOV STAX INX MOV STAX POP DCR JNZ JMP H,M L,C 1FF8H MODAD D A,L D D A,H D B C 029CH 004FH ;OBSAH LEVEHO REGISTRU Z PARU H :AA ;PRENOS OBSAHU PRAVEHO REG. DO HL:AAFF ;OBSAH REG.PARU DO ZAS.MONIT.1FF8:FFAA ;ZOBR. REG.PARU,ZMENA OBSAHU 1FF8:F7A7 ;ADRESA ZASOB.PAMETI REGIST. DE:1FDD ;OBSAH PRAVEHO REGISTRU DO A : F7 ;A JEHO UCHOVANI V ZASOBNIKU (DE): F7 ;ZVETSENI ADRESY ZASOB.PAMETI DE:1FDE ;OBSAH LEVEHO REGISTRU DO A :A7 ;A JEHO UCHOVANI V ZASOBNIKU (DE):A7 ;NAVRAT BC ZE ZASOBNIKU BC:0005 ;ZMENSENI CITACE REGISTRU BC:0004 ;SKOK NA ZOBR. DALSIHO REG. PARU ;KONEC PROCEDURY, NAVRAT DO MONITORU BB BBCC CCB8 C7B7 1FDB C7 C7 1FDC B7 B7 0004 0003 DD DDEE EEDD E7D7 1FD9 E7 E7 1FDA D7 D7 0003 0002 HH HHLL LLHH L7H7 1FDF L7 L7 1FE0 H7 H7 0002 0001 SPH SPSP SPSP 77SP 1FE4 77 77 1EE5 SP SP 0001 0000 ; ; ;PROCEDURA ‘TIN’, PRIKLAD CTENI ZAVADECIHO TONU (ASI 21,6 MS) A BYTU CISLA BLOKU ZAZNAMU NA MGP 0608 TIN: MVI B,08 ;POCITADLO BITU CTENEHO BYTU B :08 1600 MVI D,00 ;VYNULOVANI CITACE DELKY BITU D :00 (CITAC DELKY TRVANI ZAZNAMU JEDNOHO BITU NA MGP) CD4203 CTE1: CALL INBIT ;CTENI SIGNALU Z MAGNETOFONU CY=0 DA0403 JC x-3 ;CY=1,CTENA 1 (NAHODNE), NAVRAT # CD4203 CALL INBIT ;CY=0,CTENA 0 NEBO MEZERA CY=0 DA0403 JC x-9 ;CY=1,NAHODNE, NAVRAT DO CYKLU # CD4203 CTE0: CALL INBIT ;CY=0,CTENA MEZERA CY=0...0 1 * DRUHY A DALSI PRUCHOD PROCEDUROU D21003 JNC x-3 ;CY=0,MEZERA,CTE DAL = = # * * CD4203 CALL INBIT ;CY=1,NAHODNA NEBO ZAVAD. TON CY: 1(ZAV.TON DELKY 21,6MS)* (START BIT) * (‘1’VYZN.BIT) D21003 JNC x-9 ;CY=0,MEZERA,CTE DALE ‘8’ #(256X80=20,4MS +1,2MS)* 24H VZORKU * 24H VZORKU 15 CTE1: DCR D ;CY=1,ZAVADECI TON,-l DO D : FF FE....01 00 FF....F2*F1 F0....CF CE*CD CC....AB AA CD4203 CALL INBIT ;ZAV.TON+START+VYZN.’1’ BITY CY: 1 1 1 1 1 1 *1 1 1 0 *1 1 1 0 DA1C03 JC x-4 ;CY=1,ZAV.TON+START BIT = = = = = = *= = = # *= = = # CD4203 CALL INBIT ;CY=0,DROP OUT, CTE DALE CY: ZAV.TON: 256+15 VZORKU * 0 * 0 DA1C03 JC x-10 ;CY=1,CTI DAL ‘1’ * # * # 14 CTE0: INR 9 ;CY=0,VYZN.’0’+ST0P BIT,+1 DO D : 17 16....01 00 FF....F3*F2 F1....D0 CF* AB CD4203 CALL INBIT ;CTENI VYZN.’0’+ STOP BITU CY: 0 0 0 0 0 0 *0 0 0 0 *0 0 0 0 D22903 JNC K-4 ;CY=0, CTE DALE ‘0’ STOP BIT(0),24H VZORKU * ‘0’ VYZN. *CD CC....AC AB CD4203 CALL INBIT ;CY=1,NAHODNE, POKRACUJ * * STOP BIT (0) D22903 JNC x-10 ;CY=0,CTE DALE ‘0’ 7A MOV A,D ;CY=1,OBSAH D SE MUZE MENIT A :CD DB DB 24 24 24 24 24 17 RAL ;NASTAVENI CY CTENYM BITEM CY,A:1,9A 1,B6 1,B6 0,48 0,48 0,48 0,48 0,48 79 MOV A,C ;NACTENI PREDCHOZIHO OBSAHU A : 00 80 C0 E0 70 38 1C 0E 1F RAR ;CY=CTENY BIT ZPET DO STRANCE A : 80 C0 E0 70 38 1C 0E 07 4F MOV C,A ;A JEHO UCHOVANI V REGISTRU C : 80 C0 E0 70 38 1C 0E 07 1600 MVI D,00 ;NASTAVENI CITACE DELKY BITU D :00 05 DCR B ;ZMENSENI POCITADLA BITU B :07 06 05 04 03 02 01 00 C21C03 JNZ 031C ;B≠0, # # # # # # # = C9 RET ;KONEC CTENI BYTU,NAVRAT,NACTENY BYTE JE ULOZEN V REGISTRU C: RET,C:07 66 69 22F81F CDD700 D1 7D 12 13 7C 12 C1 0D C29C02 C34F00 30 034C 034E 0351 0354 0357 035A 035D 0360 0300 0302 0304 0307 030A 030D 0310 0313 0316 0319 031C 031D 0320 0323 0326 0329 032A 032D 0330 0333 0336 0337 0338 0339 033A 033B 033D 033E 0341 ; ; ;PROCEDURA TIN’ PRO 1. BYTE DAT (36H) ZA CISLEM BLOKU ZAZNAMU (07) NA MGP 0608 TIN: MVI B,08 ;POCITADLO BITU V BYTU B :08 1600 MVI D,00 ;CITAC DELKY ZAZNAMU BITU CD4203 CTE1: CALL INBIT ;CTE 9.START BIT CISLA BLOKU CY:1 0...1 0 DA0403 JC x-3 ;CY=1,START BIT A VYZN.’1’ = # = # CD4203 CALL INBIT ;CY=0,DR0UP OUT NEBO ‘0’VYZN. CY: 1 0 DA0403 JC x-9 ;CY=1,CTENA ‘1’,SKOK DO CYKLU = # CD4203 CTE0: CALL INBIT ;CTE VYZN.’0’ NEBO STOP PIT CY: 0 0...0 1 D21003 JMC x-3 ;CY=0,CTE ‘0’,SKOK DO CYKLU # CD4203 CALL INBIT ;CY=1,NAHODNA NEBO START BIT CY: 1 D21003 JNC x-9 ;CY=0,CTE ‘0’,SKOK DO CYKLU #(START BIT) *(‘1’VYZN.BIT) * (STOP BIT) 15 CTE1: DCR D ;CY=1,START BIT l.BITU l.BYTU D : FF FE....DD DC*DB DA....B8 B7* CD4203 CALL INBIT ;CTE START BIT A ‘1’VYZN.BIT CY: 1 1 ....1 0/1*1 1 ....1 0 * DA1C03 JC x-4 ;CY=1,CTE ‘1’,SKOK DO CYKLU = = ....= # *= = ....= # * CD4203 CALL INBIT ;CY=0,DROP OUT NEBO VYZN.O’ CY: 0 * 0 * DA1C03 JC x-10 ;CY=1,CTE ‘1’,SKOK DO CYKLU # * # * 14 CTE0: INR D ;CY=0,ZVETSENI CITACE DELKY D : 24 23....02 01*00 FF....DE DD* *B8 B9...DA DB CD4203 CALL INBIT ;CTENI VYZN’0’ A STOP BITU CY: 0 0 ....0 0 *0 0 ....0 0 * *0 0 ...0 0 D22903 JNC x-4 ;CY=0,CTE’0’,SK0K DO CYKLU (STOP BIT + ‘0’ VYZN.BIT) * CD4203 CALL INBIT ;CY=1,NAHODNA NEBO DALSI START BIT D22903 JNC x-10 ;CY=0,CTE ‘0’,SK0K DO CYKLU 7A MOV A,D ;CY=1,OBSAH D SE MUZE t^NIT A : 24 DB DB 24 DB 0B 24 24 17 RAL ;NASTAVI CY CTENOU ‘1’CI’0’ CY,A:0,48 1.B6 1,B6 0,48 1,B6 1,B6 0,48 0,48 79 MOV A,C ;NACTENI PREDCHOZIHO OBSAHU A : 07 03 81 C0 60 B0 DB 6C 1F RAR ;BIT Z CY ZPET DO STRADACE A : 03 81 C0 60 B0 D8 6C 36 4F MOV C,A ;UCHOVANI NOVEHO OBSAHU A V C : 03 81 C0 60 B0 D8 6C 36 1600 MVI D,00 ;NASTAVENI CITACE DELKY BITU D : 00 05 DCR B ;ZMENSENI POCITADLA BITU B :07 06 05 04 03 02 01 00 C21C03 JNZ 031CH ;B≠0,CTI DALSI BIT ZAZNAMU # # # # # # # = C9 RET ;KONEC CTENI BYTU,NAVRAT DO PROCEDURY LOAD,NACTENY BYTE JE V REGISTRU C: RET,C:36 ;KONEC PROCEDURY ‘TIN’ ;CITAC DELKY BITU V D MUZE NABYVAT HODNOTY KOLEM (00 - 24H)=DC, JE-LI CTENA ‘1’, T.J. HODNOT. DO, DC, DB ;A HODNOT KOLEM (00+24H)=24 PRI CTENI ‘0’, T.J. 23, 24, 25. JE TO DANO MOZMYM KOLISANIM DELKY ZAZNAMU BITU NA MGP ; ; ;FUNKCE ‘S’SAVE PMI-80 UMOZNUJE UCHOVAT NA MAGNETOFONU AZ 256 BYTU DAT, ZAZNAM FAZOVOU MODULACI 3E05 SAVE: MVI A,05H ;ZKRATKA PROCEDURY ‘S’ DO A :05 CDAB00 CALL CLEAR ;PRIPRAVA ZOBRAZENI = S........ CDD700 CALL MODAD ;ZOBRAZENI A URCENI ADRESY 1FF8:1C00 OD NIZ SE BUOOU DATA ZAZNAMENAVAT CDFB00 CALL MODDA ;URCENI CISLA BLOKU ZAZNAMU 1FFA:07 - TOTO CISLO IDENTIFIKUJE ZAZNAM NA MAGNETOFONU 219500 LXI H,0095H ;ADRESA ZPRAVY “MG RUN” DO HL:0095 22FC1F SHLD 1FFCH ;A JEJI ULOZENI DO ZASOBNIKU CD1601 CALL OUTKE ;ZOBR.”MG RUN”,CEKA NA POTVRZENI ZPRAVY LIBOVOLNOU KLAVESOU (MIMO.RE+I) 3E23 MVI A,23H ;ZNAK ‘O’ V KOOU SEGMENTOVEK A :23 31 0362 D3F8 OUT PA ;A JEHO VYSLANI DO PORTU A PA:23 0364 3E0F MVI A,0FH ;ADRESA LEVE SEGMENTOVKY 00 A :0F 0366 D3FA OUT PC ;KOD POZICE LEVE SEGMENTOVKY PC:0F 0368 16F0 MVI D,0F0H ;DELKA UVODNIHO TONU ZAZNAMU D :F0 =240 PULPERIOD X 90 MKSEC = 21,60 MSEC 036A 3EC7 MVI A,0C7H ;MASKA ZAVADECIHO TONU A :C7 036C CDF002 CALL 02F0H ;ZAZNAM ZAVADECIHO TONU 036F 3AFA1F LDA 1FFAH ;CISLO BLOKU ZAZNAMJ A :07 0372 4F MOV C,A ;JE ULOZENO DO “VYSTUP.REG” C :07 0373 CDD402 CALL TOUT ;A ZAZNAMENANO NA MAGNETOFON PRIKLAD ROTACE BYTU ‘07’ VE STRADACI A CY, OUT PA 0376 3E10 MVI A,10H ;SYMBOL ZAZNAMU ‘T’ (TAPE) DO A :10 BIT 07 00000111 0 0378 CDAB00 CALL CLEAR ;PRIPRAVA ZOBRAZENI,T........ 0. 03 00000011 1 C7 037B 2AF81F LHLD 1FF8H ;ADRESA 1.BYTU DAT DO HL:1C00 1. 81 10000001 1 C7 037E 4E MOV C,M ;BYTE DAT DO “VYST.REGISTRU” C :BD 2. C0 11000000 1 C7 037F CDD402 CALL TOUT ;A JEHO ZAZNAM NA MAGNETOFON 3. E0 11100000 0 47 0302 2C INR L ;ADRESA NASLEDUJICIHO BYTU DAT HL:1C01 4. 70 01110000 0 47 0383 C27E03 JNZ 037E ;CYKL AZ DO VYNULOVANI REG. L 5. 38 00111000 0 47 0386 219E00 LXI H,009EH ;ADRESA ZPRAVY “MG STOP” HL:009E 6. 1C 00011100 0 47 0389 C34300 JMP 0043H ;SKOK DO MONITORU S VYPISEM ZPRAVY “MG STOP” 7. 0E 00001110 0 47 ----------------------------------------------------------------8. 07 00000111 0 47 02D4 0609 TOUT: MVI B.09H ;POCITADLO BITU, 8+1 B :09 (BIT NAVIC JE ODDELOVACI PRO SYNCHRONIZACI CTENI V TIN) 02D6 3EC7 MVI A,0C7H ;MASKA START BITU ZAZNAMU A :C7 C7 C7 C7 C7 C7 C7 C7 C7 02D8 CDEE02 CALL 02EE ;ZAZNAM START BITU LOG:1 1 1 1 1 1 1 1 1 02DB 79 MOV A,C ;”VYST. REGISTR” PREPSAN DO A :07 03 81 C0 E0 70 38 1C 0E 02DC 1F RAR ;POSUV VPRAVO PRES CY: A,CY:03,1 81,1 C0,1 E0,0 70,0 38,0 1C,0 0E,0 07,0 02DD 4F MOV C,A ;VYSLEDEK ZPET DO “VYST.REG.” C :03 61 CO EO 70 38 1C 0E 07 02DE 3E8F MVI A,8FH ;MASKA VYZNAMOVEHO BITU A :8F 8F 8F 8F 8F 8F 8F 8F 8F 02E0 1F RAR ;ROTACE VPRAVO PRES CY, A :C7 C7 C7 47 47 47 47 47 47 02E1 CDEE02 CALL 02EE ;ZAZNAM VYZNAMOVEHO BITU LOG:1 1 1 0 e 0 0 0 0 02E4 3E47 MVI A,47H ;MASKA STOP BITU A :47 47 47 47 47 47 47 47 47 02E6 CDEE02 CALL 02EE ;ZAZNAM STOP BITU LOG:0 0 0 0 0 0 0 0 0 02E9 05 DCR B ;ZMENSENI POCIT.BITU PRENOSU B :08 07 06 05 04 03 02 01 00 02EA C2D602 JNZ 02D6H ;B≠0,SK0K NA PRENOS DALSIHO BITU # # # # # # # # = 02ED C9 RET ;B=0,ZAPSAN BYTE+ODDELOVACI BIT _----__----__----__--____--____--____--____--____--____--... ----------------------------------------------------------------- 1 1 1 0 0 0 0 O (VYZN.BITY) 02EE 1620 MVI D,20H ;POCET PULPERIOD ZAZNAM TONU D :20 (PRIKLAD ZAZNAMU START BITU = LOG 1) 02F0 03F8 OUT PA ;VYSTUP DAT DO PORTU A PA:C7 87 C7 87 C7 87 C7 87 ... C7 87 02F2 1E04 MVI E,04H ;DOBA PULPERIODY TONU (ASI 90 MIKROSEKUND) 02F4 10 DCR E ;CYKL VYTVARENI TONU 1 0 1 0 1 0 1 0 ... 1 0 02F5 C2F402 JNZ 02F4 ;(PA7 X PA6) VYTVAREJI VYSTUP -----_____-----_____-----_____-----_____ ... -----_____ 02F8 EE40 XRI 40H ;DOPLNEK BITU A6 STRADACE A :87 C7 87 C7 87 C7 87 C7 ... 87 C7 02FA 15 DCR D ;ZMENSENI POCIT.PERIOD TONU D :1F 1E 10 1C 1B 1A 19 18 ... 01 00 02FB C2F002 JNZ 02F0H ;SKOK NA ZAZNAM OPACNE PULPERIODY 02FE C9 RET ;D=0,KONEC ZAZNAMU BITU (20H=32D PULPERIOO: X 90MKSEC = 2,88MSEC -TRVANI ZAZMAMU BITU) ----------------------------------------------------------------02EE 1620 MVI D,20H ;POCET PULPERIOD ZAZNAM.TONU D :20 (PRIKLAD ZAZNAMU STOP BITU = LOG 0) 02F0 D3F8 OUT PA ;VYSTUP DAT DO PORTU A PA:47 07 47 07 47 07 47 07 ... 47 07 32 1E04 1D C2F402 EE40 15 C2F002 C9 MVI E,04H ;DOBA PULPERIODY TONU DCR E ;CYKL VYTVARENI TONU 0 0 0 0 0 0 0 0 ... 0 0 JNZ 02F4H ;VYSTUP (PA7 X PA6) _______________________________________________________ XRI 40H ;DOPLNEK BITU A6 STRADACE A :47 07 47 07 47 07 47 07 ... 47 07 DCR D ;ZMENSENI POCIT>PERIOD TONU D :1F 1E 1D 1C 1B 1A 19 18 ... 01 00 JNZ 02F0H ;SKOK NA ZAZNAM OPACNE PULPERIODY RET ;D=0, KONEC ZAZNAMU BITU ;KONEC PROCEDURY FUNKCE SAVE ; ; ;FUNKCE ‘L’ LOAD PMI-80 UMOZNUJE CTENI AZ 256 BYTU DAT Z MAGNETOFONU, ZAZNAMENANYCH FAZOVOU MODULACI ;ZAVADECI TON TRVA ASI 21,6 MSEC, START BIT - VYZNAMOVY BIT - STOP BIT ASI 2,88 MSEC KAZDY 038C 3E14 LOAD: MVI A,14H ;ZKRATKA PROCEDURY ‘L’ DO A :14 038E CDAB00 CALL CLEAR ;PRIPRAVA ZOBRAZENI L........ 0391 CDD700 CALL MODAD ;URCENI ADRESY UKLADANI DAT 1FF8:001C -PRIKLAD ZVOLENE ADRESY: 1C00 0394 CDFB00 CALL MODDA ;URCENI CISLA CLCKU ZA7NAMU 1FFA:07 -PRIKLAD CISLA STEJNEHO JAKO PRI SAVE 0397 219500 LXI H,0095H ;ADRESA ZPRAVY “MC-RUN” HL:0095 039A 22FC1F SHLD 1FFCH ;JE UCHOVANA VE VYST REGIST. 1FFC:9500 039D CD1601 CALL OUTKE ;ZOBRAZENI, PROGRAM CEKA NA POTVRZENI ZPRAVY “MC-RUN” STLACENIM LIBOVOLNE KLAVESY (MIMO=RE+I) 03A0 2AF81F LHLD 1FF8H ;ADRESA UKLADANI DAT DO HL:1C00 03A3 3E07 MVI A,07H ;SYMBOL ‘T’ V KODU SEGMENTOVEK A :07 03A5 D3F8 OUT PA ;JE VYSLAN DO PORTU A PA:07 03A7 3E0F MVI A,0FH ;KOD POZICE LEVE SEGMENTOVKY A :0F 03A9 D3FA OUT PC ;JE VYSLAN DO PORTU C PC:0F DISP T........ 03AB 1600 MVI D,A0H ;KONSTATNTA MINIMALNI MEZERY D :A0 MEZI BLOKY DAT NEBO PRED 1. BLOKEM DAT 03AD CD4203 CALL INBIT ;CTENI ZACATKU MGP NEBO MEZERY MEZI BLOKY ZAZNAMU NA MGP 03B0 DAAB03 JC x-5 ;CY=1,PRI CTENI BLOKU S NIZSIM CISLEM NEZ OCEKAVANY BLOK -SKOK PRI CTENI LOG 1 03B3 15 DCR D ;CY=0,CTENA LOG 0 BLOKU ZAZNAMU S NIZSIM CISLEM, NEBO CTENA MEZERA MEZI BLOKY (ZACATEK MGP) 0384 C2AD03 JNZ x-7 ;D≠0,CTE DALE MEZERU,AZ DO 0387 CD0003 CALL TIN ;D=0,POKRACUJE CTENI MEZERY, ZAVADECIHO TONU BLOKU DAT A BYTU S CISLEM TOHOTO BLOKU 03BA 3AFA1F LDA 1FFAH ;CISLO BLOKU ZAZNAMENANYCH DAT A :07 038D B9 CMP C ;SROVNANO S PRECTENYM CISLEM A : ? 03BE C2CC03 JN2 03CCH ;Z=0, JE RUZNE, PODEJ ZPRAVU 03C1 CD0003 CALL TIN ;Z=1, JE STEJNE, CTE SE ZAZNAM 03C4 71 MOV M,C ;A ZAPISE BYTE DO PAMETI 03C5 2C INR L ;ZVETSI SE ADRESA PAMETI 03C6 C2C103 JNZ x-5 ;L≠00, SKOK NA DALSI CTENI DAT 03C9 C38603 JMP 0386H ;L=00, KONEC CTENI, SKOK NA VYPIS ZPRAVY “MG-STOP”, KONEC PROCEDURY ----------------------------------------------------------------03CC DAE703 JC 03E7H ;CY=1, CISLO OCEK.BLOKU (A)<(C) CISLO CTENEHO BLOKU 03CF 3E0F MVI A,OFH ;CY=0, ZNAK ‘F’ DO STRADACE A :0F 03D1 CDABOO CALL CLEAR ;PRIPRAVA ZOBRAZENI=F........ 03D4 79 MOV A,C ;CISLO CTENEHO BLOKU DO A :01 02 03 04 05 06 03D5 01F61F LXI B,1FF6H ;ADRESA 8.+9. SEGMENTOVKY BC:1FF6 03D8 CDC600 CALL 00C6 ;PRIPRAVA ZOBRAZENI CISLA BLOKU MGP V POLI DAT DISPLEJE 03DB 21EF1F LXI H,1FEFH ;ADRESA LEVE SEGMENTOVKY HL:1FEF 02F2 02F4 02F5 02F8 02FA 02FB 02FE 33 03DE 22FC1F SHLD 1FFCH ;UCHOVANA VE VYST.REG.ZASOB. 1FFC:EF1F 03E1 CD1601 CALL OUTKE ;ZOBRAZENI,ODMITNUTI BLOKU:F 1C00:01...02...03...04. .05...06 STLACENIM LIBOVOLNE KLAVESY 03E4 C3A003 JMP 03A0H ;POKRACUJE CTENI DAT 03E7 21ED03 LXI H,03EDH ;ADRESA ZPRAVY: “MG-SPAT” DO HL:03ED 03EA C39A03 JMP 039AH ;SKOK NA ZOBRAZENI ZPRAVY, VRACENI PASKY NA ZACATEK, NOVE CTENI PO STLACENI KLAVESY (MIMO RE+I) -------------------------------;PODPROGRAM CTENI JEDNOHO BITU Z MAGNETOFONU 0342 1E02 INBIT:MVI E,02 ;CITAC PRO VZORKOVANI SIGNALU E :02 01 START BIT: 2880/80 =36D VZORKU 0344 1D DCR E ;Z MAGNETOFONU KAZDYCH ASI E :01 00 VYZN BIT: -”=24H VZORKU 0345 C24403 JNZ x-1 ;E≠0, 80 MIKROSEKUND # = STOP BII: -”- =2,88 MSEC 0348 DBFA IN PC ;E=0, CTENI VZORKU SIGNALU A :X0000000, CY=Y 034A 17 RAL ;POSUN VLEVO PRES CY BIT CY: X,A :0000000Y X=1, START BIT NEBO ‘1’ VYZNAMOVY BIT 034B C9 RET ;NAVRAT DO VOLAJICIHO PROGRAMU X=0, ‘0’ VYZNAMOVY BIT NEBO STOP BIT ;PRUMERNA DOBA VZORKOVANI JE DANA CASEM PROVEDENI PP INBIT (55 MKSEC) A VOLANIM TOHOTO PP SE SKOKY (25 MKSEC) ; ; ; 0095 1E TMGRN:DB 0096 1E DB 0097 20 DB 0098 19 DB 0099 19 DB 009A 12 DB 009B 15 DB 009C 1B DB 009D 1E DB 009E 1E TMGSP:DB 009F 16 DB 00A0 20 DB 00A1 19 DB 00A2 05 DB 00A3 10 DB 00A4 11 DB 00A5 13 DB 00A6 IE DB 00A7 FF DB 00A0 FF DB 00A9 FF DB 00AA FF DB 1E 16 20 19 19 12 15 1B 1E 1E 16 20 19 05 10 11 13 1E FF FF FF FF ; ;M ;G ;SP ;SP ;R ;U ;N ; ; ;M ;G ;SP ;S(5) ;T ;o ;P ; 012B 08TSFK: 012C 09 012D 0D 012E 0B 012F 0A 0130 13 0131 14 0132 0E 0133 0C 0134 0F 0135 05 0136 1A 0137 0D 0138 0B 0139 0A 013A E4TAR: 013B DF 013C D9 013D DB 013E DD 013F FF 08 09 0D 0B 0A 13 14 0E 0C 0F 05 1A 0D 0B 0A E4 DF D9 DB DD FF ;SP ;HL ;DE ;BC ;AF (PSW) ;P ;L ;E ;C ;F ;S ;H ;D ;B ;A ;DOLNI BYTE ADRESY PRO SP ;HL ;DE ;BC ;AF 34 DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB 01A3 80TABIN:DB 01A4 84 DB 01A5 88 DB 01A6 91 DB 01A7 8D D8 01A8 8C DB 01A9 89 DB 01AA 85 DB 01AB 81 DB 01AC 82 DB 01AD 86 DB 01AE 8A DB 01AF 9A DB 01B0 8F DB 01B1 8E DB 01B2 8B DB 01B3 87 DB 01B4 83 DB 01B5 FF DB 01B6 94 DB 01B7 93 DB 01B8 FF DB 01B9 97 DB 01BA 92 DB 01BB FF DB 01BC FF DB 01BD 90 DB ‘0’ ;spodni rada ‘4’ ‘8’ ‘EX’ ‘D’ ‘C’ ‘9’ ‘5’ ‘1’ ‘2’ ; stredni rada ‘6’ ‘A’ ‘R’ ‘F’ ‘E’ ‘B’ ‘7’ ‘3’ FFH ; horni rada ‘S’ ‘L’ FFH ‘BR’ ‘M’ FFH FFH ‘=’ TABULKA PREVODU NA SEDMISEGMENTOVY ZOBRAZOVAC 01BE 40 79 24 30 19 12 02 78 00 10 08 03 46 21 06 0E ZNAKY 0 1 2 3 4 5 6 7 8 9 A B C D E F 01CE 07 23 2F 0C 47 63 48 71 37 7F 09 2B 0B 2C 5D 3F ZNAKY t o r P L u M J = H n h ? “ 01DE 42 61 7B 11 FF FF FF FF FF ZNAKY G J , Y TABULKA ZAKLADNIHO OHLASENI 01E7 “PMI -80” TABULKA CHYBOVYCH HLASENI 01F0 Err=AdrES Err= dAtA Error 35 020B 92 TABFC:DB 020C 72 00 DW 020E 91 DB 020F 29 02 DW 0211 97 DB 0212 5A 02 DW 0214 9A DB 0215 7E 02 DW 0217 94 DB 0218 4C 03 DW 021A 93 DB 021B 8C 03 DW 021D FF FF FF DB 92H ;tlačítko MEMD 91H ;tlačítko EXEC 97H ;tlačítko BREAK 9AH ;tlačítko REG 94H ;tlačítko SAVE 93H ;tlačítko LOAD FFH,FFH,FFH M EX BR R S L TABULKA HLASENI BREAK 0220 Br-StoP 5. Aplikace s mikropočítačem PMI-80 Tato kapitola má být hlavním těžištěm publikace. Obsahuje celou řadu návodů na vylepšení mikropočítače z hlediska obsluhy, přináší a shrnuje poznatky z jeho provozu, ukazuje možnosti jeho použití všude tam, kde to struktura mikropočítače dovoluje. Tato kapitola se má stát vodítkem pro kroužky mládeže, které hlavně budou se školním mikropočítačem PMI-80 pracovat. Má ukázat na možnosti zařízení, které sice není schopno přímo zpracovávat matematické nebo grafické úlohy, pomůže však nejen pochopit strukturu mikroelektronických prvků a zařízení, ale i ukázat, co všechno je možno chtít po tak relativně jednoduchém mikropočítači, jakým je PMI-80. 5.1 Dálnopis jako vstupní a výstupní zařízení Jak jsme již naznačili v kapitole 3.4 je možné pomocí stykového obvodu MHB8255A vytvořit sériové rozhraní pro připojení pětistopého dálnopisu. Tyto dálnopisy se postupně vyřazují z činnosti a pro účely výpisů mohou ještě docela dobře posloužit. Z elektrického hlediska je dálnopis tvořen na vstupu cívkou (elektromagnet) a na výstupu kontaktem. Nyní si v krátkosti vysvětlíme základní principy dálnopisné komunikace (viz např. (6), (7)). Dálnopisný provoz pracuje za pomoci sériového přenosu dat, u starších dálnopisů pomocí proudové smyčky (u pětistopého dálnopisu asi 40 mA). Uzavření smyčky značí stav logické jedničky (H), rozpojený obvod značí stav logické nuly (L). Na obr. 18 je uveden příklad dálnopisného znaku (jde o písmeno W, resp. číslo 2). Z obrázku je tedy patrné, že na počátku znaku se vyšle po dobu trvání jedné časové jednotky stav log. 0. Tomuto stavu říkáme start-bit. Potom následuje v našem případě pět informačních (tedy datových) bitů postupně počínaje bitem D0 až D4. 36 Na konec je vysílán závěrný prvek, kterému říkáme stop-bit. Doba trvání tohoto bitu je u asynchronního provozu nejméně jednu časovou jednotku. Tím je dosaženo srovnání a ustálení signálů ve vysílači a přijímači. Tomuto způsobu komunikace se též někdy říká start-stopní. Pro pětistopé dálnopisy je používána časová jednotka v rozmezí 10 až 20 ms. To odpovídá rychlosti komunikace 50 až 100 bitů za sekundu (jednotkou je 1 Baud = 1 Bd). Nejčastěji se používá rychlost 50 Bd, někdy je možno dálnopis nastavit i na rychlost vyšší. Jak poznáme, jde o rychlost dosti malou, neklesejme však na mysli, vzhledem k ceně za zařízení se s tímto faktem můžeme klidně spokojit. Pro komunikaci mezi PMI-80 a dálnopisem budeme potřebovat rozhraní, které nám převede napěťové úrovně logiky TTL, se kterými pracuje mikropočítač, na proudovou smyčku. Příkladem jednoduché realizace takového rozhraní může být např. obvod z obr. 19, který umožňuje obousměrnou komunikaci. Potřebujeme k tomu 2 kusy malých modelářských relátek (ta tvoří galvanický oddělovač obvodů mikropočítače a dálnopisu) a 1 integrovaný obvod MH7405 (6 invertorů s otevřeným kolektorem). Vstupní obvod mikropočítače potom tvoří kontakt relé Re 1 a jeden invertor. Vzniklý datový signál v úrovni TTL (zde označený DIN) přivedeme na špičku 41K2, tj. D7. Výstupní obvod je poněkud výkonovější a tvoří jej zesilovače pomocí hradel a relé Re2. Z důvodů ochrany výstupních tranzistorů integrovaného obvodu je zde použita dioda. Výstup DOUT přivádíme ze špičky 48K2, tj. D0. Celá další obsluha je řešena pomocí programu. Pětistopé dálnopisy používají pro komunikaci kód MTA 2 podle doporučení CCITT 2 (viz tab. 6). Protože obsahuje pouze 32 možných kombinací, nebylo by možné v něm vyjádřit všechny znaky. Proto jsou v abecedě MTA 2 vyhrazeny dvě kombinace pro zvláštní řídicí povely pro přeřazení typového válce. Jde o povel A... (písmenová změna) a 1... (číslicová změna). Po vyslání těchto znaků dojde k mechanickému přeřazení typového válce z čísel na písmena nebo naopak. Je jasné, že se tím prodlužuje celková doba potřebná pro přenos dané informace. Programová obsluha komunikace mezi dálnopisem a mikropočítačem PMI-80 sestává ze dvou základních podprogramů - CI (console input) pro vstup znaku z dálnopisu a CO (console output) pro výstup znaku do dálnopisu. Podprogram CI (tab. 7) přijme dálnopisný znak a ve tvaru 000X XXXX jej uloží do registru C. Podprogram CO (tab. 8) předpokládá tvar znaku pro výstup podle tab. 6 v registru C a před vysláním do dálnopisu jej upraví na tvar 11XX XXX0, tj. doplní start-bit a dva stop-bity. Související podprogramy TIME10 a TIME20 vytvářejí časové konstanty 10 a 20 ms (viz též tab. 8). Pomocí podprogramů CI, CO (a pochopitelně TIME10 a TIME20) lze vytvářet další programové vybavení. Protože oba hlavní podprogramy „umí“ jen přijmout, resp. vyslat dálnopisný znak, musíme jinými podprogramy zabezpečit rozeznání znaků podle tabulky a následný převod do (resp. ze zvoleného) vnitřního kódu uvnitř mikropočítače, řídit přeřazení apod. Nyní si názorně ukážeme, jak k tomuto problému přistupovat. 37 Zvolme za vnitřní kód mikropočítače šestnáctkovou soustavu (tj. číslo 0 bude vyjádřeno jako 00H, číslo 1 jako 01H až číslo 15 jako 0FH). Vytvořme nyní program pro tisk čísla ve výše uvedeném kódu na dálnopisu. Protože ve zvoleném kódu se vyskytují jak znaky číselné (0 až 9) tak znaky písmenové (A až F) musíme hlídat i příslušné změny (přeřazení). Zvolme například tento způsob: V paměti mikropočítače (v našem případě PMI-80) vytvoříme tabulku podobnou tab. 6. Každý „řádek“ této tabulky bude sestávat ze dvou bytů. První byte obsahuje znak ve významu číslice, druhý ve významu písmena. Znaky bez použitelného významu nahradíme např. znakem FFH. Nahlédneme-li do tab. 6, už můžeme začít plnit naši novou tabulku. První řádek tabulky bude obsahovat FFH FFH, druhý řádek 03H 0EH, třetí FFH FFH atd. Podprogram pro tisk jednoho znaku tedy nejprve vyhledá ten „svůj“ znak a poté vyšle dálnopisný kód rovnající se pozici nalezeného řádku znaků v tabulce. Je však zřejmé, že na jednom řádku tabulky mají vždy dva znaky jeden dálnopisný kód. Máme-li tedy např. vytisknout znak „E“, který se nalézá na druhém řádku tabulky, podprogram bude vysílat do dálnopisu kód 4/2 = 2 = 00010, pochopitelně se nyní doplní start-bit a stop-bit. Toto uspořádáni má ještě jednu výhodu. Liché znaky v tabulce (tj. první v řádku) vyžadují přeřazení číselné, sudé znaky písmenové. Nyní stačí uložit si do paměti stav aktuálního přeřazení (které musí být shodně nastaveno i na vlastním dálnopisu!) a před každým dalším tiskem znaku se jen přesvědčit, zda je přeřazení správně nastaveno. Pokud se bude tisknout znak se stejným přeřazením, jaké je aktuálně nastaveno, vytiskneme přímo požadovaný znak. Pokud se však má tisknout znak s opačným přeřazením, musíme nejprve do dálnopisu vyslat dálnopisný kód příslušného přeřazení a teprve poté znak. Na obr. 20 je znázorněn vývojový diagram podprogramu CHROUT (Character Output - výstup znaku) pro tisk znaku v šestnáctkové soustavě na dálnopisu. Tento podprogram využívá již předtím vytvořený podprogram CO (tab. 8). Podprogram CHROUT (tab. 9) umožňuje vytisknout znak z registru C na dálnopisu s hlídáním příslušného přeřazení. Jako příklad využití podprogramu CHROUT je v tab. 10 uveden program DUMP (výpis), který umožňuje vypsat na dálnopisu obsah paměti mezi dvěma adresami specifikovanými na počátku programu. Tento program je poměrně velmi jednoduchý a zájemce nechť si za domácí úkol vytvoří příslušný vývojový diagram programu. Program DUMP umožňuje vypsat na dálnopisu obsah paměti mezi dvěma pevně v programu zadanými adresami ADRPOC a ADRKON. Budeme-li chtít tyto adresy modifikovat z dálnopisu, musíme vytvořit podprogram pro překlad dálnopisného kódu do šestnáctkové soustavy, tedy jakýsi opačný podprogram k podprogramu CHROUT. Nazveme náš nový podprogram CHRIN (Character Input - vstup znaku). Vývojový diagram podprogramu CHRIN je na obr. 21, výpis podprogramu je v tabulce 11. Odtud je patrné, že podprogram umožňuje přijímat dálnopisné znaky a překládat je do šestnáctkové (hexadecimální) soustavy podle tab. 6 (resp. podle konkrétní tabulky TAB v podprogramu CHROUT podle tab. 9). Znaky se postupně vytisknou na dálnopisu, přeloží a ukládají do registrového páru HL, dokud nestiskneme buď CR (návrat vozíku) nebo mezerník. Pokud stiskneme jiné tlačítko na dálnopisu nežli z množiny (0,1,...9,A,...F,CR,SP), znak je ignorován (což se však na tisku neprojeví) a tudíž do HL není přibráno žádné nové číslo. Podprogram se dostává opět do stavu příjmu nového znaku 38 z dálnopisu. Pomocí podprogramu CHRIN lze nyní vytvořit příslušné komunikační programy mezi dálnopisem a našim mikropočítačem PMI-80. Tuto úlohu vám ponecháváme k realizaci. 5.2 Připojení sériové tiskárny Consul C2111 Zde můžete namítnout, že připojeni tiskárny C2111 je velkým přepychem. Autor přesto doufá, že ukázka připojení tohoto zařízení není na tomto místě vůbec náhodně a řada uživatelů jej jistě uvítá. Sériový tiskací mechanizmus (dále STM) Consul C2111 je zařízení určené pro malé a střední výpočetní systémy. Umožňuje provádět tisk pomoci mozaikové hlavy složené ze sedmi jehliček. Každá jehlička tiskne jeden řádek ve znaku výpisu. STM Je vybaveno vnitřním elektronickým řízením vlastních mechanizmů. Komunikace STM s prostředím se provádí standardním kódem KOI-8, což je určitá modifikace známé původní americké normy ASCII. V základní verzi vyžaduje STM C2111 paralelní zápis znaku v úrovni TTL. Pro řízení činnosti STM je třeba znát funkci všech 25 špiček konektoru kanálu KK. V tab. 12 je uveden krátký popis všech signálů a jejich označení. Časová závislost stykových signálů mezi STM a počítačem (obecně zdrojem signálu) je uvedena na obr. 22. Ostatní signály, které bezprostředně pro komunikaci nevyužijeme, je nutno náležitě ošetřit, aby STM správně pracoval. Vlastní realizace připojení STM sestává ze dvou částí: z části technické a programové. Na obr. 23 je znázorněno obecnější schéma připojení STM k mikropočítači. Musíme tedy zrealizovat 9 linek výstupních (8 datových a jednu řídící) a jednu linku vstupní (rozumí se vzhledem k mikropočítači). V konkrétním případě mikropočítače PMI-80 budeme výstupní komunikační linku pro připojení STM realizovat přídavným obvodem MHB8255A v pozici IO9. V kapitole 3.4 jsme již naznačili možnosti tohoto obvodu a na obr. 12 byly uvedeny příklady připojení výstupního zařízení v režimu přejímání. Nyní budeme toto zapojení konkretizovat. Obvod MHB8255A naprogramujeme do režimu 1 pro bránu B, takže na PC2 bude vstup signálu AC (potvrzení dat), výstup signálu SC (vzorkování) z bitu PC1 musíme pro naše účely invertovat. To lze jednoduše provést např. pomocí tranzistoru. Na obr. 24 je uvedeno schéma zapojení rozhraní mezi PMI-80 a STM Consul C2111. Programový segment LPRT (line printer) uvedený v tabulce 13 je velice jednoduchý, neboť větší část práce při řízení komunikace přebírá obvod MHB8255A, Budeme-li tedy chtít napsat na tiskárně jeden znak, musíme naplnit registr C binární hodnotou podle tab. 14 (tabulka kódu KOI-7) a zavolat podprogram LPRT. Pro účely tisku hexadecimálních číslic musíme provést převod. V tab. 15 je uveden podprogram DMP, obdoba programu DUMP z předchozí kapitoly, který umožňuje vypsat obsah paměti mezi dvěma adresami. 39 5.3 Řízení stejnosměrného motorku Velmi názornou aplikací mikropočítače je řízení stejnosměrného motorku (např. modelářského IGRA). Tento motorek vyžaduje pro řízení rychlosti a směru otáček změnu napájecího napětí a jeho polarity. Pomocí mikropočítače lze řízení zjednodušit do programové obsluhy, přičemž napájecí napětí bude konstantní. Na obrázku 25 je uvedeno schéma připojení motorku k mikropočítači PMI-80. V tomto případě není nutné rozšiřovat základní vybavení mikropočítače, neboť využijeme základní programovatelný obvod MHB8255A. Je však nutno doplnit dva tranzistory pro převod napěťových úrovní a čtyři tranzistory do můstkového komplementárního zapojení. Dvojice tranzistorů v můstku se v tomto případě chová jako výkonový invertor (z logického hlediska). Smysl otáčení motorku je dán kombinací bitů PB0 a PB1. Při kombinaci 01 se bude otáčet motorek na jednu stranu, při kombinaci 10 opačně. Při shodné logické úrovni na obou bitech se motorek točit nebude. Rychlost točení motorku bude dána rychlostí spínání napájecího napětí. Celý program (obr. 26) je koncipován jako jakýsi jednoduchý překladač řídicího programu. Řídicí program sestává z kombinace tří po sobě následujících bytů v paměti počínaje adresou 1D00H. První byte řídí směr otáčení: ÚKON 01H směr 1 02H směr 2 03H motor stojí 00H ukončení programu Druhý byte určuje dobu trvání úkonu, třetí byte určuje rychlost otáčení motorku. Výpis programu je v tab. 16. Příklad řídicího programu pro ukázku ovládání motorku je v tab. 17. Po spuštění programu (od adresy 1C00H) se motorek začne rozbíhat ve třech stupních, zpomalovat ve třech stupních, potom nastane reverzování a totéž se opakuje pro opačný směr točení. 5.4 Číslicově-analogový a analogově-číslicový převodník V celé řadě aplikaci číslicové a počítačové techniky je třeba zpracovávat analogové signály, většinou jde o napětí. Protože však počítače umí pracovat pouze se signály logickými, tedy logickou nulou a jedničkou, musíme provést převedeni analogového signálu na určitý kód. Potom určitému logickému stavu bude odpovídat určitá analogová úroveň signálu. Z teorie již víme, že budeme-li pracovat s n bity, budeme schopni jejich pomocí rozlišit 2n logických stavů. Potom budeme schopni rozlišit i stejný počet úrovní zpracovávaného analogového signálu. 40 Číslo n vždy potom zvolíme podle dvou hledisek: a) jakou rozlišovací schopnost a tudíž i přesnost převodu mezi číslicovou a analogovou veličinou budeme požadovat, b) jak rozsáhlé n (tedy počet bitů) jsme schopni v reálném čase zpracovávat. První hledisko je celkem pochopitelné: naší snahou zřejmě bude pracovat s co největší přesností. Avšak druhé hledisko nás vrací „trochu na zem“. S velkým počtem bitů budeme mít vždy celou řadu starostí a doba zpracovávání bude vždy neúměrně velká. Zvolme pro naše počáteční úvahy n nám velmi blízké, neboť celou dobu s ním pracujeme, a to je n = 8. Znamená to, že budeme schopni rozlišit z daného rozsahu analogové veličiny 28 = 256 různých stavů a tudíž i 256 úrovní. Z toho potom plyne i přesnost zpracováváni lepší než 0,4%. Tato přesnost bude v celé řadě demonstračních příkladů velmi dobrá a nevyžaduje složitou obsluhu. Pokud bychom požadovali přesnost lepší, museli bychom zvolit počet bitů větší. Zabývejme se nejprve převodem číslicově-analogovým, kdy chceme jednoznačně přiřadit každému z 2n logických stavů jednu analogovou úroveň. Jedním z nejjednodušších technických prostředků realizace číslicově-analogového (dále Č/A) převodníku je odporová síť typu R-2R zapojená v obvodu operačního zesilovače. Na obr. 27 je nakresleno schéma velmi jednoduchého Č/A převodníku s operačním zesilovačem OZ1 (polovina integrovaného obvodu MA1458). Tento způsob Č/A převodu je v současné době prakticky nejužívanějším a obdobně pracují všechny známé Č/A převodníky (MDAC-08, AD7520 a j.). Lze odvodit, že přírůstek napětí mezi dvěma sousedními binárními stavy je ΔUv yst = Uvst 2n -1 Každý bit se tedy podílí na celkovém přírůstku výstupního napětí podle své váhy, takže celkově binární informace o n bitech způsobí, že na výstupu operačního zesilovače bude analogové výstupní napětí Uanalog = Uvst n 2 -1 n ∑K ⋅2 i=1 i−1 i Kde Ki je váha příslušného i-tého bitu (může nabývat buď log. 0 nebo log. 1). V případě realizace Č/A převodníku podle obr. 27 je tedy n = 8 a Uvst ≐ -2V (vyplývá to z logických úrovní uvnitř stykového obvodu). Programová obsluha Č/A převodníku je velmi jednoduchá, neboť spočívá jen ve vyslání osmibitového údaje do stykového obvodu IO9 (po příslušném naprogramování brány PA na výstup). 41 Pro realizování převodu opačného, tedy analogově číslicového (dále A/Č), bude velmi užitečné využít v předchozí části popsaného Č/A převodníku. Jestliže Č/A převod bylo možno realizovat poměrně jednoduše a s libovolnou přesností jen pomocí obvodového řešení, A/Č převod vyžaduje jisté programové obsloužení, což se projeví navenek časovou prodlevou mezi zadáním analogového údaje a výstupem jeho číslicového ekvivalentu. Na obr. 28 je uvedeno blokové schéma principiálního A/Č převodníku. Jádrem A/Č převodníku je tedy již popsaný Č/A převodník, na jehož číslicový vstup je připojen v tomto případě mikropočítač. Ten zapíše do Č/A převodníku číslicový údaj. V napěťovém komparátoru dojde k porovnání analogového napětí ekvivalentního vstupní číslicové informaci s přivedeným napětím, které hodláme převést na číslicový údaj. Výsledkem je logický signál KOMP indikující vztah mezi oběma veličinami. Vnější zařízení (zde mikropočítač) musí tedy tak dlouho vkládat číslicové hodnoty na vstup Č/A převodníku, až je dosaženo shody mezi Uvst a Uanalog. Nyní bude již záležet jen na konkrétní realizaci obsluhy převodu vnějším zařízením (mikropočítačem), neboť jedině tam lze za daných technických prostředků dosáhnout co možná nejrychlejšího A/Č převodu. Podle obr. 29 doplníme obvod Č/A převodníku (obr. 27) na zapojení A/Č převodníku pro naše školní účely. Využijeme přídavného stykového obvodu MHB8255A (v pozici IO9), přičemž pro číslicový výstup údajů do Č/A převodníku využijeme bránu PA, pro vstup logického signálu z komparátoru (signál KOMP) využijeme jeden bit brány PB (např. PB0). Programové obsloužení A/Č převodníku nám pomůže osvětlit obr. 30. Tento způsob aproximace (přiblížení) analogového signálu se nazývá metoda půlení intervalu nebo též metoda progresivní aproximace. Předpokládejme pro jednoduchost jen čtyřbitový převod. Na počátku vložíme do Č/A převodníku číslicový údaj znamenající polovinu možného intervalu, tedy 1000 (binárně). Komparátor nám ohlásí porovnání logickým stavem KOMP=1, tedy že skutečné vstupní napětí leží v horní části půleného intervalu. Ponecháme tedy nejvyšší bit v log. 1 (vždyť hledané napětí leží v horní části intervalu) a nastavíme polovinu horního intervalu pomoci log. 1 na následujícím bitu, tedy 1100. Komparátor ohlásí KOMP=0, tudíž přetečení. Znamená to, že hledané napětí leží ve spodní části tohoto nového intervalu. Proto vynulujeme bit posledně nastavený a nastavíme následující, takže dostaneme 1010. Komparátor ohlásí KOMP=1, takže jedničku ponecháme a nastavíme poslední bit do jedničky, dostaneme 1011. Protože v posledním cyklu komparátor ohlásí opět K0MP=1, ponecháme stav číslicové informace v posledním bitu a můžeme říci, že jsme provedli A/Č převod. Protože jsme provedli n = 4 kroků, převod jsme ukončili. Tato metoda převodu má velkou výhodu v tom, že rychlost převodu je stále konstantní, neboť vždy provedeme stejný počet kroků. Na obr. 31 je uveden vývojový diagram A/Č převodu pomocí metody postupné (progresivní) aproximace. V tabulce 18 je uveden program ADCNV (Analog-digital Convertor) umožňující A/Č převod vstupního napětí Uvst v obvodu podle obr. 29 na ekvivalentní číselnou hodnotu v rozmezí 00H až FFH (tj. dekadicky v rozsahu 0 až 255). Po uskutečnění převodu je hodnota uložená v datovém registru (adresa 1FFAH) zobrazována na zobrazovači mikropočítače až do doby stisku libovolného tlačítka (kromě RE nebo I). Tehdy se spustí nový A/Č převod. 42 Za pozornost ještě stojí vysvětlit význam podprogramu WAIT (čekej). Tento podprogram způsobí jistou prodlevu mezi vysláním testovací kombinace do Č/A převodníku a jeho následnou odezvou. Na našem mikropočítači je použití tohoto zpožďovacího podprogramu spíše „pro parádu“, protože vnitřní hodiny mikropočítače jsou dosti pomalé a tudíž doba mezi vysláním testovací kombinace a příjmem signálu KOMP je dostačující. Pokud bychom však pracovali s vyšším kmitočtem hodin, museli bychom odezvu Č/A převodníku zpozdit, aby došlo k ustálení děje. 5.5 Programátor pamětí EPROM Budeme-li si vytvářet vlastní programy, které budou vhodné pro častější použití (např. naprogramování nového monitorovského programu pro obsluhu dálnopisu apod.), budeme potřebovat zařízení schopné naprogramovat paměti typu ROM (Read Only Memory = paměť jen pro čtení), resp. programovatelné paměti se schopností opětného vymazání ultrafialovými paprsky. Tyto paměti se označují jako EPROM (Erasable Programmable ROM = mazatelné programovatelné paměti ROM). Typickým představitelem paměti typu EPROM je integrovaný obvod MHB8708, jež je použit i v našem mikropočítači PMI-80. Tato paměť má organizaci 1024 x 8 bitů, tj. kapacita paměti je 1 kByte. V nenaprogramovaném stavu jsou v paměťových buňkách paměti zapsány log. 1 a programováním se na plovoucí hradlo tranzistoru MOS v paměťové buňce přivede náboj, který způsobí otevření tohoto tranzistoru. Tranzistor sepne, a tak se změní stav paměťové buňky z log. 1 na log. 0. Náboj na plovoucím (tj. volném) hradle tranzistoru MOS setrvá asi 50 let, což je předpokládaná maximální doba života zařízení, v němž je paměť použita. Pro nás je to doba dosti dlouhá. Přivedení náboje na plovoucí hradlo tranzistoru v paměťové buňce vyžaduje poněkud složitější způsob zápisu, než je tomu u paměti RWM. Na obr. 32 jsou znázorněny časové průběhy signálů na vstupech obvodu MHB8708 v režimu čtení (a) a při režimu programováni (b). Z obrázku je patrné, že vstup obvodu označený CE/WE má dvojí funkci: při čtení uvolňuje přístup k čtecímu zesilovači, v režimu programování umožňuje připojením +12V zápis do paměti. Úloha naprogramovat paměťový obvod je jako stvořená pro mikropočítačové řízení za určité jednoduché podpory technických prostředků. S výhodou využijeme programovatelný stykový obvod MHB8255A v pozici IO9 (přídavný). Na obr. 33 je schéma navrhovaného programátoru připojitelného k mikropočítači PMI-80. Celý programátor je ovládán a napájen z PMI-80, až na programovací napětí +24V, které je nutno přivést z externího zdroje. Brána PA obvodu IO9 (MHB8255A) slouží k přenosu dat z předem připravené paměťové oblasti mikropočítače (v našem případě např. 1C00H) do programované paměti EPROM, případně opačně (při verifikaci) tj. ověřování správnosti. Brána PB slouží k přenosu dolních osmi bitů adresy EPROM, brána PC obsluhuje zbylé signálové špičky paměti a řídí činnost programátoru. Dva nejnižší bity PC0 a PC1 přenáší zbylé dva adresové bity A8 a A9, bit PC7 řídí spínání programovacího napětí +24V, bit PC6 řídí režimy paměti EPROM (programování a verifikace) a konečně PC5 ovládá signalizační svítivou diodu pro indikaci práce programátoru. 43 Vysvětlíme si ještě funkci spínacího obvodu programovacího napětí tvořeného tranzistory T1, T2 a T3. Tranzistor T3 při sepnutí otevře tranzistor T2. Tím se na špičku 18. paměťového obvodu přivede napětí +24V a odporem R4 začne téct proud. Pokud dosáhne hodnoty dané vztahem IR4max = UBET1 ⋅R2 25mA R 4 ⋅(R2 + R3 ) začne se otevírat i tranzistor T1, a tím se začne přivírat tranzistor T2. Obvod tak stabilizuje programovací proud a nedovolí, aby programovací příkon přesáhl asi 0,3W. Obsluha programátoru vyžaduje určité časování signálů podle obr. 32, takže ji raději svěříme mikropočítači. Vývojový diagram programu pro obsluhu programátoru je na obr. 34. Protože v základním vybavení mikropočítače PMI-80 máme k dispozici kapacitu paměti RWM pouze 1kB, nebudeme schopni naprogramovat celou paměť EPROM najednou. Budeme proto postupovat tak, že si vždy připravíme 256 Bytů (tj. 1/4 kB) od adresy 1C00H do 1CFFH, které přitom naprogramujeme na příslušné místo do paměti EPROM. Výpis programu EPR pro řízení programovacího zařízeni je v tab. 19. Program EPR pracuje tedy takto: po spuštění (např. EX 1E00) se rozsvítí indikační dioda D1 indikující programovací režim. V každém cyklu se do paměti EPROM zapíše jeden byte z předem připravené paměťové oblasti v PMI-80. Poté se přečte obsah EPROM a porovná se zapisovanou informací. Pokud nastane shoda, tj. byte se zapsal do EPROM, přejde se k další adrese. Pokud však informace nesouhlasí, cyklus se ještě 15x opakuje. Pokud ani poté nenastane souhlas, je chyba zřejmě v obvodu (např. špatně vymazaný) a musíme programování ukončit. V tomto případě začne blikat dioda D1. Z tohoto cyklu se lze dostat stiskem tlačítka I (interrupt), který způsobí přechod do obslužného programu ENTRY (adresa 0008H), který se ohlásí hlášením „br-stop“ na zobrazovači PMI-80. Nyní si můžeme prohlédnout dvojím stiskem R a B obsah registrového páru BC, v němž je uložena adresa paměťové buňky, kterou se nepodařilo naprogramovat. V případě úspěšného naprogramování (cca. po 1 minutě) dioda D1 zhasne a na zobrazovači se objeví taktéž hlášení „br-stop“. Nyní můžeme po odladění nebo přípravě nových dat nebo programu v paměťové oblasti 1C00H až 1CFFH změnit adresu EPAD na 0100H a zarážku ZAR na adrese 1E70H na 02H, program EPR opět spustit a naprogramovat druhé čtvrt-kilo. V tabulce 20 jsou uvedeny hodnoty EPAD (EPROM ADresa) a ZAR pro 4 možné kombinace při programování jednotlivých čtvrtkil do EPROM. 5.6 Měření teploty termistorem, měření kapacity kondenzátorů Pro měření teploty se v praxi často používá termočlánků nebo tepelně závislých odporových snímačů, příp. termistorů. Pro další zpracování získaných údajů pomocí mikropočítače se napěťový signál musí převést na číslicovou informaci. Zde si naznačíme způsob převodu napěťového signálu na číslicový, jiný než u A/Č převodníku z kapitoly 5.4. 44 Na obr. 35 Je znázorněn jednoduchý RC obvod se spínačem. Jestliže v čase t = 0 rozepneme spínač S, bude průběh napětí uC na kondenzátoru C popsán rovnicí: uC (t) = U⋅(1− e − t RC ) Znamená to, že napětí uC, bude vzrůstat exponenciálně od nuly k hodnotě napětí U. Změníme-li některou z hodnot R nebo C, změní se časová konstanta obvodu τ = RC a strmost vzrůstání napětí uC. Položme nyní některou z hodnot uC rovnu UT (= prahové napětí). Pro dvě různé hodnoty τ1 a τ2 potom bude platit t1 τ 1 R1C1 = = t2 τ 2 R2C 2 Praktický význam posledního vztahu je v tom, že změnou časové konstanty o Δτ se projeví jako změna v době nárůstu napětí na kondenzátoru C do hodnoty UT o Δt. Jde tedy o přímou úměru. Jako praktický příklad si uvedeme měření teploty pomocí termistoru. Na obr. 36 je schéma měřícího obvodu, který je prakticky obdobou principiálního schématu z obr. 35. Pouze funkci spínače S vykonává tranzistor T. Na obr. 37 je uveden vývojový diagram programového řešení této úlohy. Na začátku vynulujeme registr HL pro určení časové prodlevy t a sepne se tranzistor T ve funkci spínače S. Po chvíli, nutné pro vybití kondenzátoru C, se spínač rozepne a čeká se, kdy napětí na kondenzátoru C dosáhne prahové úrovně UT (v našem případě úroveň log. 1). Při každém cyklu přičítáme do registru HL jedničku. Ve chvíli, kdy napětí na C dosáhne log. 1, provedeme číselnou úpravu obsahu HL na číslo pro zobrazení a toto číslo zobrazíme. V tab. 21 je uveden výpis programu TEPL umožňující měřit teplotu pomocí termistoru R29. Není ale vyloučeno, že nahradímeli termistor konstantním rezistorem, dostaneme mikropočítačový měřič kapacity. Nacejchování údaje provedeme úpravou podprogramu UPRAVA. V této kapitole jsme demonstrovali využití jednoduchého RC obvodu pro účely převodu časových údajů do číslicové podoby. Přesnost těchto obvodů však není velká, neboť vstupy logických obvodů nejsou dokonalé komparátory a pokaždé je hodnota prahového napětí trochu jiná. K přesnějším aplikacím slouží účelové logické obvody, např. monostabilní klopné obvody typu 74121 nebo 74123, resp. známý časovací obvod 555. Na obr. 38 je ukázka realizace stejného obvodu jako na obr. 36, avšak s integrovaným monostabilním obvodem 74121. Výsledky získané při aplikaci tohoto zapojení jsou podstatně přesnější, takže ji předurčují k dalšímu využití. Podstatnou měrou je však výsledek úměrný vhodně volené úpravě získaného údaje pomocí podprogramu UPRAVA. Zde jsme, jak je ostatně patrné, předpokládali jednoduchou závislost. 45 5.7 Počítačové hry Na závěr této kapitoly věnované aplikačním příkladům použití mikropočítače PMI-80 jsme vybrali čtyři programy spadající do kategorie počítačových her. I když otázka počítačových her při procesu učení je velmi diskutovatelná, lze očekávat, že po prostudování a následném pochopení programů získáme mnoho postřehů a podnětů pro další konkrétní aplikace (už třeba ne ve formě hry). Proto doporučujeme předkládané programy podrobně přečíst a analyzovat. Jistě zde naleznete mnoho zajímavých programových obratů. 5.7.1 Pípající hrací kostka Tento program je určen pro hráče společenské hry „Člověče, nezlob se“ a podobných. Program se po odstartování (EX 1C60 =) spouští stiskem tlačítka 0. Po uvolnění tlačítka se vygeneruje pseudonáhodné číslo v rozsahu 1 až 6 (odpovídá házecí kostce) a na připojeném zesilovači (např. magnetofon připojený v konektoru K3 pro nahrávání) se ozve vygenerovaný počet pípnutí a následně se objeví číslo i na zobrazovači. Výpis programu je uveden v tab. 22. 5.7.2 Dvojkové zobrazení obsahu paměti Jak už je ostatně z názvu patrné, tento program není vlastně hrou. Program totiž umožňuje zobrazovat obsah paměti od zadané adresy (= ZONA) nejen v běžném šestnáctkovém tvaru, nýbrž i ve tvaru dvojkovém (binárním). Výpis programu je v tab. 23. 5.7.3 Světelné noviny Tento program umožňuje simulovat funkci běžících světelných novin. Pro ilustraci se po spuštění programu na zobrazovači postupně objeví text: „dovolte mi, abych se predstavil, jsem PMI-80“ Pomocí tohoto programu lze vytvářet instrukce při běhu programů (např. komentáře apod.), což mnohdy usnadní aplikaci vytvořeného programu. Výpis je v tabulce 24. 5.7.4 Mikrovarhany Tento program umožňuje na připojeném zesilovači (např. magnetofonu s příposlechem) zahrát melodii. Z mikropočítače PMI-80 se stává jednohlasý melodický nástroj. Výpis programu je v tabulce 25. 46 6. Doplňky a úpravy Školní mikropočítač PMI-80 je sice finálním výrobkem, nicméně naše zvídavost a nadšení nás vede a nutí jej stále vylepšovat a doplňovat. Všem, kteří chtějí možnosti PMI-80 rozšířit, je určena tato kapitola naší publikace. 6.1 Zlepšení práce s magnetofonem V kapitole 2.3 jsme naznačili funkci vstupních a výstupních obvodů pro styk s magnetofonem. Tyto obvody jsou řešeny velmi jednoduše, což vede ve většině případů k jejich chybné funkci. Obvod pro výstup dat z magnetofonu (MGOUT) vyžaduje pro správnou funkci poměrně velkou úroveň výstupního signálu z magnetofonu (min. 3V efektivní hodnota). Proto bude vhodné doplnit vstupní dvoutranzistorový zesilovač ještě jedním tranzistorem podle (14). Zapojení pracuje spolehlivě od výstupního napětí z magnetofonu 1,5V (mezivrcholová hodnota), což znamená, že při přehrávání z magnetofonu do PMI-80 není nutno vyřazovat reproduktor magnetofonu z funkce pro velkou hlasitost. Z desky plošných spojů vyjmeme součástky R5, C3 a R6, přerušíme spoj mezi bází T2 a kondenzátorem C4. Na uvolněné místo zapájíme součástky podle obrázku 39. 6.2 Doplňky Pro celou řadu aplikací bude vhodné doplnit konektor K2 výstupem napájecích napětí, které jsou ostatně výrobcem vyvedeny na konektoru K1. Propojení provedeme podle tab. 26. V některých případech se při provozu PMI-80 (ale i jiných mikropočítačů) stává, že po stisku tlačítka RE (reset) zhasne zobrazovač a není možné mikropočítač uvést do výchozího stavu. Příčinou bývá teplotní závislost obvodu IO1 (MH8224). Závadu lze ve většině případů odstranit zapojením kondenzátoru o kapacitě 100 pF mezi špičky 1 a 8 tohoto obvodu. 6.3 Zdroj pro mikropočítač a další aplikace Tato kapitola je určena především těm, kteří nemají pro svůj mikropočítač napájecí zdroj (např. SN 080 viz příloha F), pozornost k ní mohou upřít však i ti, kteří hledají zdroj pro uskutečnění aplikací mikropočítače (např. práce s operačními zesilovači a pod.). Na obr. 40 je blokové schéma zdroje. Je odtud patrno, že je tvořen čtyřmi oddělenými zdroji, výjimku tvoří dvojice zdrojů +12V a -12V. Pro tento účel je zde použit operační zesilovač ve funkci komparátoru. Na jeden jeho vstup je přiveden střed děliče tvořeného dvěma shodnými odpory R. Uprostřed děliče je tedy poloviční napětí, v našem případě potenciál 0V. Druhý vstup operačního zesilovače je uzemněn. Na výstupu komparátoru dostáváme regulační signál v závislosti na rozdílu dvou napětí +12V a -12V. Toto regulační napětí reguluje zápornou větev zdroje. 47 Za pozornost stojí ještě signálová cesta vedená z výstupu zdroje -5V do zdroje +12V. Tak je zabezpečena podmínka, aby napětí -5V nabíhalo jako první a jako poslední vypínalo. V případě, kdy napětí -5V nenaběhne (z důvodů např. zkratu), napětí +12V nevzroste nad nebezpečnou mez. Tím jsou chráněny součástky mikropočítače, které to vyžadují (tzn. mikroprocesor, paměťové obvody a j.). Na obr. 41 je schéma konkrétní realizace zdroje. Všechny zdroje jsou realizovány tzv. tříbodovým stabilizátorem typu MA78xx. Výjimku tvoří záporná větev zdroje -12V, kde je jako regulační prvek použit tranzistor KD617. Funkci komparátoru zastává operační zesilovač MAA741. Potenciometrem R6 lze nastavit přesně symetrii obou větví zdroje. Funkci pojistky proti výpadku napětí -5V tvoří vypínací obvod Ty1, D15, D16, R3 a R4. V klidovém stavu (tj. při ustálení napětí -5V a +12V) je na katodě D16 napětí blízké 0V. Tyristor Ty1 není sepnut. Jestliže z jakýchkoliv důvodů napětí -5V zmizí (tj. přiblíží se 0V), napětí na katodě D16 se zvětší nad hodnotu zápalného napětí tyristoru, Ty1 sepne a tím zkratuje výstup zdroje +12V. V tom okamžiku vysadí samozřejmě i záporná větev tohoto zdroje. Po opětném náběhu napětí -5V je nutno zdroj buď vypnout nebo zkratovat svorky +12V a 0V. Pro realizaci zdroje je nutno použít bezpečnostní transformátor, pro naše účely např. jádro EI 20 x 32, počet závitů vinutí L1 1644 vodičem Cu ∅0,18mm, vinutí L2 63 závitů vodičem Cu ∅0,72mm, L3 63 závitů vodičem Cu ∅0,26mm, vinutí L4 2x 95 závitů (vinout bifilárně) vodičem Cu ∅0,32 mm. Při dodržení, těchto parametrů bude zdroj schopen dodat na svorce +5V proud 1,5A, na svorce -5V proud 0,2A a na svorkách +12V proudy 0,3A. Maximální příkon je tedy asi 18W, pro jištění použijeme rychlou pojistku 0,2A. 48 Literatura (1) (2) Aleksenko, A. G., Galicyn, A. A., Ivannikov, A. D.: Proektirovanie radioelektronnoj apparatury na mikroprocessorach, Moskva Radio i svjaz 1984 Artwick, B. A.: Microcomputer Interfacing, Prentice-Hall, Inc, 1980, ruský překlad Seprjaženie mikro-EVM s vněšnimi ustrojstvami, Moskva Mašinostroenie 1983 (3) Balašov, E.P., Puzankov, D. B.: Mikroprocessory i mikroprocessornye sistěmy, Moskva Rádio i svjaz 1981 (4) Bernard, J. M. a kol.: Od logických obvodů k mikroprocesorům, 1.-4. díl, Praha SNTL 1982 - 1984 (5) Blatný, J., Krištoufek, K., Pokorný, Z., Kolenička, J.: Číslicové počítače, Praha SNTL-ALFA 1980 (6) Daneš, J. a kol.: Amatérská radiotechnika a elektronika, 1. díl, Naše vojsko, Praha 1984 (7) Dlabola, F., Starý, J.: Systémy s mikroprocesory a přenos dat, Praha NADAS 1984 (8) Dědina, B., Valášek, P.: Mikroprocesory a mikropočítače, 2. vydání, Praha SNTL 1983 (9) Slípka, J.: Navrhování mikroprocesorových systémů, Praha SNTL 1985 (10) Starý, J.: Mikropočítač a jeho programování, Praha SNTL 1984 (11) Tóth, Š.: Školský mikropočítač PMI-80, časopis Amatérské rádio řada A č. 7/84, 8/84 a 11/84 (12) Zdeněk, J.: Technika mikropočítačů, Praha ČVTS 1983 (13) -: Ročenka Sdělovací techniky 1985 Praha SNTL 1984 (14) -: Uživatelům PMI-80, časopis Amatérské rádio řada A č. 12/84, 2/85, 3/85 (15) -: Uživatelská příručka PMI-80, Tesla Piešťany 1982 49 Tabulka 1 Rozdělení adres paměti mikropočítače PMI-80 2 Seznam systémových proměnných 3 Adresování obvodů MHB8255A 4 Překlad programu 1 5 Výpis programu TON pro demonstraci funkce MHB8255A 6 Tabulka mezinárodní dálnopisné abecedy MTA2 7 Výpis podprogramu CI pro vstup znaku 8 Výpis podprogramu CO pro výstup znaku 9 Výpis podprogramu CHROUT 10 Výpis programu DUMP pro výpis obsahu paměti 11 Výpis podprogram CHRIN 12 Popis signálů tiskárny C2111 13 Výpis podprogramu LPRT pro tisk na tiskárně C2111 14 Tabulka abecedy KOI-7 (dříve též ASCII) 15 Výpis programu DMP 16 Výpis programu pro řízení ss motorku 17 Sekvence úkonů pro program dle tab. 16 18 Výpis programu ADCNV pro A/Č převod 19 Výpis programu EPR pro obsluhu programátoru pamětí EPROM 20 Tabulka hodnot proměnných v programu EPR 21 Výpis programu TEPL 22 Výpis programu - pípající hrací kostka 23 Výpis programu - dvojkové zobrazení 24 Výpis programu - světelné noviny 25 Výpis programu - mikrovarhany 26 Doplnění konektoru K2 50 Tabulka 1 1FD9 E (vrchol sklípku) 1FDAD 1FDB C 1FDC B 1FDD příznakové bity 1FDE A 1FDF L 1FE0 H ↑ místo pro uložení stavu registrů 1FE1 1FE2 1FE3 adresa místa zarážky (break point) + 1 1FE4 SPL 1FE5 SPH 1FE6 1FE7 místo pro uložení obsluhy přerušení (tlačítko X) 1FE8 1FE9 1FEA 1FEB 1FEC 1FED adresa místa zarážky (break point) 1FEE paměť instrukce z místa zarážky 1FEF 1FF0 1FF1 1FF2 1FF3 výstupní registr zobrazovače (VRZ) 1FF4 1FF5 1FF6 1FF7 lFF8 adresa nebo čtyřbytové data pro zobrazení 1FF9 v adresové části zobrazovače (MODAD) 1FFA 1FFB data pro zobrazení v datové části zobrazovače (MODDA) 1FFC 1FFD ukazatel VRZ (implicitně 1FEFH) 1FFE 1FFF STATUS (kód stisknutého tlačítka) 51 Tabulka 4 Překlad programu 1 1C00 3A 00 1F 4F 3A 02 1F 81 32 04 1F C3 00 00 Tabulka 5 1C00 3E 88 TON: MVI A,88H 1C02 D3 FB OUT 0FBH 1C04 3E 55 MVI A,55H 1C06 D3 F9 VYST:OUT 0F9H 1C08 06 50 MVI B,PER 1C0A 05 DOBA:DCR B 1C0B C2 0A 1C JNZ DOBA 1C0E 07 RLC 1C0F C3 06 1C JMP VYST ; ; ; ; ; ; ; ; ; naprogramování obvodu 8255A do režimu 0 a bránu PB-výstup A <- O101010101b postupně vyšle 0,1, ... určuje dobu periody odčítá počítadlo dokud není B = 0 rotace akumulátoru vlevo opakuje Tabulka 6 Dálnopisný kód CCITT 2 (MTA 2) Kód Význam bin. hex 00000 00 00001 01 00010 02 LF 00011 03 - 00100 04 00101 05 ‘ S 00110 06 8 00111 07 7 01000 08 01001 09 # 01010 0A 01011 01100 01101 0D 01110 0E 01111 0F 52 čísl. Kód písm. Význam bin. hex čísl. písm. nepoužito 10000 10 5 T 3 10001 11 + Z 10010 12 ) L 10011 13 2 W 10100 14 10101 15 6 Y I 10110 16 0 P U 10111 17 1 Q 11000 18 9 0 D 11001 19 ? B 4 R 11010 1A 0D BEL J 11011 1B 0C , N 11100 1C . M F 11101 1D / X : C 11110 1E = ( K 11111 1F E A SP CR H G 1... V A... Poznámky: LF (line feed) - nový řádek, CR (carriage return) - návrat vozíku, SP (space) - mezera, BEL (L) zvonek, 1... - číslicová změna, A... - písmenová změna, symbol # je v dálnopisném provozu nazýván KDO TAM (německy WER DA?), pokud je to možné, nahrazuje se s ním chybějící znak * Tabulka 7 Podprogram CI 1F00 01 00 05CI: LXI B,0500H 1F03 DB F9 CI5: IN F9H 1F0507 RLC 1F06 DA 03 1F JC CI5 1F09 CD 3B 1F CALL TXME10 1F0C DB F9 IN F9H 1F0E 07 RLC 1F0F DA 03 1F JC CI5 1F12 CD 45 1FCI10:CALL TIME20 1F15 DB F9 IN F9H 1F1717 RAL 1F18 79 MOV A,C 1F19 1F RAR 1F1A 4F MOV C,A 1F1B 05 DCR B 1F1C C2 12 1F JNZ CI10 1F1F0F RRC 1F200F RRC 1F210F RRC 1F22 4F MOV C,A 1F23 C9 RET ; B<-5, C<-0 ; A7<-PB7 ; čeká na start—bit ; čeká 10ms ; ; ; ; test start—bitu chyba - znovu čeká 20ms datový bit ; vloží nový bit ; bylo přijato již 5 bitů? ; ještě ne ; v C je přijatý byte ; ve tvaru 000X XXXX Tabulka 8 Podprogramy CO, TIME10 = TIME20 1F24 06 08 CO: 1F26 79 1F2707 1F28 E6 FE 1F2A F6 C0 1F2C 4F 1F2D D3 F9 CO5: 1F2F 0F MVI B,8 MOV A,C RLC ANI FEH ORI C0H MOV C,A OUT F9H RRC ; nastavení počítadla bitu ; doplní start-bit ; doplní stop-bity ; vyšle ven bit A0 (PB0) ; připraví následující bit 53 1F30 4F MOV C,A ; 1F31 CD 45 1F CALL TIME20 ; 1F34 79 MOV A,C 1F35 05 DCR B ; 1F36 C2 2D 1F JNZ CO5 ; 1F39 C9 RET ; 1F3A00 NOP 1F3B 11 B6 01TIME10:LXI D,01B6H; 1F3E 1B CEK: DCX D 1F3F 7A MOV A,D 1F40 B3 ORA E 1F41 C2 3E 1F JNZ CEK 1F44C9 RET 1F45 11 6B 03TIME20:LXI D,036BH; 1F48 C3 3E 1F JMP CEK uloží čeká 20ms vyslány všechny bity? ještě ne konec čekací smyčka 10ms čekací smyčka 20ms Tabulka 9 1E80 21 B6 1ECHROUT:LXI H,TAB; 1E83 06 00 MVI B,0 ; 1E85 7E CHR5: MOV A,M ; 1E86 B9 CMP C ; 1E87 CA 93 1E JZ SHODA 1E8A 78 MOV A,B 1E8B FE 40 CPI 40H ; 1E8D D0 RNC ; 1E8E 04 INR B 1E8F 23 INX H 1E90 C3 85 1E JMP CHR5 ; 1E93 78 SHODA: MOV A,B ; 1E94 1F RAR ; 1E95 F5 PUSH PSW 1E96 3A B5 1E LDA PAMZM; 1E991F RAR 1E9A07 RLC 1E9B07 RLC 1E9C07 RLC 1E9D 4F MOV C,A ; 1E9E 3A B5 1E LDA PAMZM 1EA107 RLC 1EA207 RLC 1EA3 B9 CMP C ; 1EA4 C4 AC 1E CNZ ZMENA; 1EA7 F1 POP PSW ; 1EA8 4F MOV C,A 54 adresa tabulky překlad (TAB) znak z tabulky (HL) = C ? B = 64 ? konec při chybS další znak kód CY <- 0/1.../, 1 (A...) A <- (paměť přeřazení) C <- aktuální přeražení je shoda v přeřazení? ne -> vyšle přeřazení kód znaku 1EA9 C3 24 1F JMP CO ; 1EAC 79 ZMENA: MOV A,C 1EAD0F RRC 1EAE 0F RRC ; 1EAF 32 B5 1E STA PAMZM; 1EB2 C3 24 1F JMP CO ; 1EB5 C6 PAMZM: DS 1 ; 1EB6 FF FF TAB: FFH FFH ; 1EB8 03 0E ; 1EBA FF FF 1EBC FF 0A 1EBE FF FF 1EC0 FF FF 1EC2 0* FF 1EC4 07 FF 1EC6 FF FF 1EC8 FF 0D 1ECA 04 FF 1ECC FF FF 1ECE FF FF 1ED0 FF 0F 1ED2 FF 0C 1ED4 FF FF 1ED6 05 FF 1ED8 FF FF 1EDA FF FF 1EDC 02 FF 1EDE FF FF 1EE0 06 FF 1EE2 00 FF 1EE4 01 FF 1EE6 09 FF 1EE8 FF 0B 1EEA FF FF 1EEC FF FF 1EEE FF FF 1EF0 FF FF 1EF2 FF FF 1EF4 FF FF vyšle znak pro tisk úprava na správný tvar uloží změnu vysláni změny paměť změny (např. 1100 0110) tabulka pro překlad (jde vlastně o tab. 6) Tabulka 10 1E00 21 00 00DUMP: LXI H,ADRPOC; počáteční adresa 1E03 11 10 00 LXI D,ADRKON; koncová adresa 1E06 E5 PUSH H 55 1E07 D5 PUSH D 1E08 CD 51 1E CALL INITO ; 1E0B 0E 1F MVI C,”A...”; 1E0D CD AC 1E CALL ZMENA 1E10 C0 3C 1E CALL CRLF ; 1E13 0E 09 MVI C,”D” 1E15 CD 24 1F CALL CO 1E18 CD 46 1ELOOP: CALL SPACE ; 1E1B D1 POP D 1E1C E1 POP H 1E1D CD 4B 1E CALL COMP ; 1E20 23 INX H 1E21 D2 00 00 JNC MONITOR 1E24 E5 PUSH H 1E25 D5 PUSH D 1E26 7E MOV A,M ; 1E27 F5 PUSH PSW 1E2807 RLC 1E2907 RLC 1E2A07 RLC 1E2B07 RLC 1E2C E6 0F ANI 0FH 1E2E 4F MOV C,A ; 1E2F CD 80 1E CALL CHROUT 1E32 F1 POP PSW 1E33 E6 0F ANI 0FH 1E35 4F MOV C,A ; 1E36 CD 80 1E CALL CHROUT 1E39 C3 18 1E JMP LOOP 1E3C 0E 08 CRLF: MVI C,”CR” 1E3E CD 24 1F CALL CO 1E41 0E 02 MVI C,”LF” 1E43 C3 24 1F JMP CO 1E46 0E 04 SPACE:MVI C,”SP” 1E48 C3 24 1F JMP CO 1E4B 7C COMP: MOV A,H 1E4C BA CMP D 1E4DC0 RNZ 1E4E 7D MOV A,L 1E4F BB CMP E 1E50C9 RET 1E51 3E 88 INITO:MVI A,88H ; 1E53 D3 FB OUT 0FBH 1E55C9 RET 56 inic. 8255A srovnání přeřazení nový řádek mezera HL<DE ? A <- (HL) horní nibble dolní nibble inic. PB výstup Tabulka 11 1D80 21 00 00CHRIN:LXI H,0000H; 1D83 11 B6 1ECHR10:LXI D,TAB ; 1D86 CD D1 1D CALL INITI ; 1D89 CD 00 1F CALL CI ; 1D8C CD 51 1E CALL INITO ; 1D8F FE 04 CPI “SP” ; 1D91 CA 46 1E JZ SPACE ; 1D94 FE 08 CPI “CR” ; 1D96 CA 3C 1E JZ CRLF ; 1D99 FE 1F CPI “A...” ; 1D9B CA CB 1D JZ PRER 1D9E FE 1B CPI “1...” ; 1DA0 CA CB 1D JZ PRER 1DA3 FE 00 CPI 00H 1DA5 CA 83 1D JZ CHR10 1DA8 41 MOV B,C ; 1DA9 CD 24 1F CALL CO ; 1DAC E5 PUSH H ; 1DAD 26 00 MVI H,0 1DAF 78 MOV A,B ; 1DB0 07 RLC ; 1DB1 4F MOV C,A ; 1DB2 3A B5 1E LDA PAMZM ; 1DB5 E6 01 ANI 01H ; 1DB7 81 ADD C ; 1DB8 6F MOV L,A 1DB9 19 DAD D ; 1DBA 7E MOV A,M ; 1DBB E1 POP H 1DBC 0E FF MVI C,0FFH ; 1DBE B9 CMP C 1DBF CA 83 1D JZ CHR10 ; 1DC2 29 DAD H 1DC3 29 DAD H 1DC4 29 DAD H 1DC5 29 DAD H ; 1DC6 B5 ORA L ; 1DC7 6F MOV L,A ; 1DC8 C3 83 1D JMP CHR10 ; 1DCB CD AC 1EPRER: CALL ZMENA ; 1DCE C3 83 1D JMP CHR10 1DD1 3E 8A INITI:MVI A,8AH ; 1DD3 D3 FB OUT FBH ; 1DD5C9 RET počáteční vynulování počáteční adresa tabulky inicializace -PB vstup 0 <- znak (=A) inicializace -PB výstup jde o mezeru? mezera a konec jde o CR? nový řádek a konec písmenová změna číslicová změna uloží znak vyšle do dálnopisu uchová stav HL znak 2x (vynásobí dvěma) C <- přijatý znak x2 A <- (paměť změny) A <- 0000 000Z A <- 2x znak + Z HL <- TAB+Z+2x znak A <- HL ignorovaný znak znak je ignorován rotace HL vlevo o 1 hexa řád vloží nové číslo do HL další znak uloží přijatou změnu inicializace 8255A PB jako vstup 57 Tabulka 12 Popis signálů STM C2111 AO - signál připravenosti STM přijímat data SO - signál připravenosti data vysílat (do) AC - řízení přenosu dat (STM) SC - řízení přenosu dat (mikropočítač) SI-1-8 - signály vysílané kódové kombinace SP - paritní bit (9. bit datového slova) SI-9 - signál pro STM - povoluje kontrolu paritySI-10- konec bloku informací SI-11- nulování STM (“L” - nuluje) SI-12- volba plynulého režimu AI-1 - signál chybné parity ze STM AI-2 - signál provádění řádku ze STM AI-3 - signál mechanické chyby ze STM AI-4 - signál autonomního režimu STM - KK/O KK/J KK/M KK/K KK/A-H KK/S KK/T KK/Q KK/R KK/W KK/U KK/Z KK/Y KK/X Tabulka 13 Podprogram LPRT pro tisk znaku na STM C2111 a inicializační podprogram INIT 1F00 79 LPRT:MOV A,C ; 1F01 D3 F5 OUT F5H ; 1F03 F5 PUSH PSW 1F04 DB F6 LP: IN F6H ; 1F06 E6 01 ANI 01H 1F08 CA 04 1F JZ LP ; 1F0B F1 POP PSW 1F0CC9 RET 1F0D 3E 9D INIT:MVI A,9DH ; 1F0F D3 F7 OUT F7H ; 1F11 3B 05 MVI A,05H ; 1F13 D3 F7 OUT F7H 1F15C9 RET 58 přesun znaku do A znak -> PB (v režimu 1) A <- PC test INTRB naprogr.- brána PB do rež. 1 tj. do tzv. přejímání nastavení INTEb = 1 Tabulka 14 Kódová tabulka kódu ISO 7 (K0I 7), dříve tzv. ASCII a6 0 0 0 0 1 1 1 1 a5 0 0 1 1 0 0 1 1 a4 0 1 0 1 0 1 0 1 a3 a2 a1 a0 HEX 0x 1x 2x 3x 4x 5x 6x 7x 0 0 0 0 x0 NUL DLE SP 0 @ P ` p 0 0 0 1 x1 SOH DC1 ! 1 A Q a q 0 0 1 0 x2 STX DC2 “ 2 B R b r 0 0 1 1 x3 ETX DC3 # 3 C S c s 0 1 0 0 x4 EOT DC4 $ 4 D T d t 0 1 0 1 x5 ENQ NAK % 5 E U e u 0 1 1 0 x6 ACK SYN & 6 F V f v 0 1 1 1 x7 BEL ETB ‘ 7 G v G w 1 0 0 0 x3 BS CAN ( 8 H X h x 1 0 0 1 x9 HT EM ) 9 I Y i y 1 0 1 0 xA LF SUB * : J Z j z 1 0 1 1 xB VT ESC + ; K [ k { 1 1 0 0 xC FF FS , < L \ l | 1 1 0 1 xD CR GS - = M ] m } 1 1 1 0 xE SO RS . > N ^ n - 1 1 1 1 xF SI US / ? 0 _ o DEL Tabulka 15 1E80 21 00 00DMP: 1E83 11 00 01 1E86 CD 0D 1F 1E89 CD B1 1ETADR: 1E8C 7C 1E8D CD C0 1E 1E90 7D 1E91 CA C0 1E 1E94 CD BB 1ETOBS: 1E97 7E LXI H,ADRPOC ; LXI D,ADRKON ; CALL INIT ; CALL CROUT ; MOV A,H CALL BYTP ; MOV A,L CALL BYTP ; CALL SPACE ; MOV A,M ; počáteční adresa koncová adresa inicializace 8255A (2.) nový řádek tisk horního bytu adresy tisk dolniho bytu adresy mezera A <- (HL) (obsah paměti) 59 1E98 CD C0 1E CALL BYTP ; 1E9B CD D2 1E CALL COMP ; 1E9E D2 AB 1E JNC KONEC 1EA1 23 INX H ; 1EA2 7D MOV A,L ; 1EA3 E6 0F ANI 0FH ; 1EA5 CA 89 1E JZ TADR ; 1EA8 C3 94 1E JMP TOBS ; 1EAB CD B1 1EKONEC:CALL CROUT 1EAE C3 00 00 JMP MONITOR; 1EB1 0E 0D CROUT:MVI C,’CR’ ; 1EB3 CD 00 1F CALL LPRT 1EB6 0E 0A MVI C,”LF” ; 1EB8 C3 00 1F JMP LPRT 1EBB 0E 20 SPACE:MVI A,”SP” ; 1EBD C3 00 1F JMP LPRT 1EC0 F5 BYTP: PUSH PSW ; 1EC107 RLC 1EC207 RLC 1EC307 RLC 1EC407 RLC 1EC5 CD D8 1E CALL HEXAS ; 1EC8 CD 00 1F CALL LPRT ; 1ECB F1 POP PSW 1ECC CD D8 1E CALL HEXAS 1ECF C3 00 1F JMP LPRT ; 1ED2 7C COMP: MOV A,H 1ED3 BA CMP D 1EDk C0 RNZ 1ED5 7D MOV A,L 1ED6 BB CMP E 1ED7C9 RET 1ED8 E6 0F HEXAS:ANI 0FH 1EDA FE 0A CPI 10D ; 1EDC DA E1 1E JC HX5 ; 1EDF 06 07 ADI ‘A’-’9’-1 1EE1 C6 30 HX5: ADI ‘0’ 1EE3 4F MOV C,A 1EE4C9 RET 60 jeho tisk HL == DE ? HL=HL+1 A dolní byte adresy končí L na nulu? ano tisk nového řádku ne pokračuje v tisku konec výpisu návrat vozu nový řádek mezera podprogram pro tisk bytu převod hexa na ASCII tisk horního nibble tisk dolního nibble jde o číslo menší než 10? ano Tabulka 16 1C00 3E 88 1C02 D3 03 1C04 21 00 1D 1C07 01 FF 1F 1C0A 56 1C0B 3E 00 1C0D BA 1C0E CA 00 00 1C11 23 1C12 5E 1C13 23 1C14 7A 1C15 D3 01 1C17 7E 1C18 CD 30 1C 1C1B 3E FF 1C1D D3 01 1C1F 3E 03 1C21 CD 30 1C 1C24 C3 14 1C 1C27 FF 1C28 FF 1C29 FF 1C2A FF 1C2B FF 1C2C FF 1C2D FF 1C2E FF 1C2F FF 1C30 F5 1C31 78 1C32 B1 1C33 C2 43 1C 1C36 1D 1C37 C2 40 1C 1C3A 23 1C3B F1 1C3C C1 1C3D C3 07 1C 1C40 01 FF 1F 1C43 0B 1C44 F1 1C45 3D 1C46 C2 30 1C 1C49 C9 1C4A FF MVI A,88 OUT 03 ; LXI H,1D00 LXI B,1FFF MOV D,M ; MVI A,00 CMP D ; JZ 0000 ; INX H MOV E,M ; INX H MOV A,D ; OUT 01 MOV A,M ; CALL 1C30 ; MVI A,FF OUT 01 MVI A,03 CALL 1C30 JMP 1C14 RST 7 RST 7 RST 7 RST 7 RST 7 RST 7 RST 7 RST 7 RST 7 PUSH PSW ; MOV A,B ORA C JNZ 1C43 DCR E ; JNZ 1C40 ; INX H ; POP PSW ; POP B JMP 1C07 ; LXI B,1FFF; DCX B POP PSW ; DCR A JNZ 1C30 ; RET ; RST 7 naprogramování 8255A D <- (HL) = B1 jde o 00H? ano -> konec E <- (HL) = B2 A <- B1 - úkon A <- B3 - rychlost vytváří periodu B3 B2 <- D2-1 doba vypršela? ano - krok v tab. „příkazů“ A <- B3 nový „příkaz“ řízení zákl. časová základna A <- B3 konec periody? ano 61 Tabulka 17 1D00 01 30 08 01 30 06 01 30 04 01 20 05 01 20 07 01 1D10 20 09 10 30 08 10 30 06 10 30 04 00 Tabulka 18 1F00 3E 8B ADCNV:MVI A,8BH ; naprogramování IO9 (8255A) 1F02 D3 F7 OUT 0F7H ; PA-výstup, PB-vstup 1F04 01 00 80AD1: LXI B,8000H ; C <- 0, B=ukazatel 1F07 78 MOV A,B ; první testovací kombinace 1F08 D3 F4 AD5: OUT 0F4H ; vyšle test. kom. do Č/A 1F0A CD 2D 1F CALL WAIT ; převodníku a čeká dobu TIME 1F0D DB F5 IN 0F5H ; B0 <- KOMP 1F0F 1F RAR ; CY <- KOMP 1F10 D2 16 1F JNC NUL ; KOMP=0 (U[vst] < U[analog]) 1F13 79 MOV A,C ; A <- dílčí výsledek 1F14 B0 ORA B ; přenese jedničku do A 1F15 4F MOV C,A ; dílčí výsledek do C 1F16 78 NUL: MOV A,B ; ukazatel 1F17 0F RRC ; rotace směrem k nižším bitům 1F18 47 MOV B,A ; uložení 1F19 DA 20 1F JC ADEND ; CY=1 -> konec převodu 1F1C B1 ORA C ; dílčí výsl. s novou pozicí 1F1D C3 08 1F JMP AD5 ; další cyklus 1F20 79 ADEND:MOV A,C ; A <- výsledek 1F21 32 FA 1F STA 1FFAH ; výsledek do datového reg. 1F24 CD F2 00 CALL OUTDA ; naplní VRZ 1F27 CD 16 01 CALL OUTKE ; zobrazuje 1F2A C3 04 1F JMP AD1 ; po stisku tlačítka znova 1F2D 11 20 00WAIT: LXI D,TIME; konstanta zpoždění 1F30 7A W5: MOV A,D 1F31 B3 ORA E 1F32 1B DCX D 1F33 C2 30 1F JNZ W5 1F36C9 RET 62 Tabulka 19 1E00 21 00 1CEPR: LXI H,1C00H; 1E03 3E 80 MVX A,80H ; 1E05 D3 F7 OUT CWR 1E07 01 00 00 LXI B,EPAD ; 1E0A 3E 20 MVI A,20H ; 1E0C 79 PROG1:MOV A,C ; 1E0D D3 F5 OUT PB 1E0F 78 MOV A,B ; 1E10 E6 20 ORI 20H ; 1E12 D3 F6 OUT PC ; 1E14 1E 10 MVI E,10H ; 1E16 7E PROG2:MOV A,M ; 1E17 D3 F4 OUT PA ; 1E19 3E 04 MVI A,04H 1E1B CD 79 1E CALL TIME ; 1E1E 78 MOV A,B ; 1E1F E6 A0 ORI A0H ; 1E21 D3 F6 OUT PC 1E23 3E 18 MVI A,18H 1E25 CD 79 1E CALL TIME ; 1E28 78 MOV A,B 1E29 E6 20 ORI 20H ; 1E2B D3 F6 OUT PC 1E2D 3E 04 MVI A,04H 1E2F CD 79 1E CALL TIME ; 1E32 78 MOV A,B 1E33 E6 60 ORI 60H ; 1E35 3E 04 MVI A,04H 1E37 CD 79 1E CALL TIME ; 1E3A 3E 90 MVI A,90H ; 1E3C D3 F7 OUT CWR 1E3E DB F4 IN PA ; 1E40 57 MOV D,A 1E41 3E 80 MVI A,80H ; 1E43 D3 F7 OUT CWR 1E45 78 MOV A,B 1E46 E6 20 ORI 20H ; 1E48 D3 F6 OUT PC 1E4A 7E MOV A,M ; 1E4B BA CMP D ; 1E4C CA 6C 1E JZ POKR ; 1E4F 1D DCR E ; 1E50 C2 16 1E JNZ PROG2 1E53 FB CHYBA:EI ; 1E54 3E CF MVI A,CFH ; poč. adresa v RWM všechny brány na výstup relat. adresa EPROM D=1 (rozsvítí D1) A <- AL A <- AH A <- A v 0010 0000 PC <- AH, D=1 max. počet pokusů A <- (HL) progr. data τ[1] A <- AH P <- 1 (+24V) τ[2] P <- 0 τ[3] [WE] = 0V τ[4] brána PA na vstup A <- data z EPROM všechny brány výstup [WE] = 12V data souhlasí data? ano ne - ještě jeden pokus povoleno přerušení instrukce RST1 63 1E56 32 E6 1F 1E59 3E 40 1E5B D3 F6 BLIK: 1E5D EE 20 1E5F 21 E0 FF 1E62 11 01 00 1E65 19 CEK: 1E66 D2 65 1E 1E69 C3 5B 1E 1E6C 03 POKR: 1E6D 23 1E6E 78 1E6F FE 01 1E71 C2 0C 1E 1E74 3E 00 1E76 D3 F6 1E78 CF 1E793D TIME: 1E7A C2 79 1E 1E7DC9 STA 1FE6H MVI A,40H OUT PC XRI 20H LXI H,FFE0H LXI D,0001H DAD D JNC CEK JMP BLIK INX B INX H MOV A,B CPI ZAR JNZ PROG1 MVI A,0 OUT PC RST1 DCR A JNZ TIME RET ; obsluha přerušení ; dioda svítí (nesvítí) ; provede negaci D ; HL <- HL+DE ; zarážka ; skok do ENTRY Tabulka 20 EPAD ZAR 1. čtvrtkilobyte 0000H 01H 2. čtvrtkilobyte 0100H 02H 3. čtvrtkilobyte 0200H 03H 4. čtvrtkilobyte 0300H 04H Tabulka 21 1C00 3E 1C02 CD 1C05 3E 1C07 D3 1C09 21 1C0C 3E 1C0E D3 1C10 CD 1C13 3E 64 10 TEPL: AB 00 88 T5: FB 00 00 01 F9 2E 1C 8B MVI A,10H ; CALL CLEAR MVI A,88H ; OUT CWR ; LXI H,0000H; MVI A,01H ; OUT F9H ; CALL WAIT ; MVI A,8BH ; „t“ PB - výstup IO10 vynulování HL sepne T brána PB vybití C PB - vstup 1C15 D3 FB OUT FBH 1C17 DB F9 T10: IN F9H ; 1C190F RRC 1C1A 0F RRC ; 1C1B 23 INX H 1C1C D2 17 1C JNC T10 1C1F CD 35 1C CALL UPRAVA ; 1C22 22 F8 1F SHLD 1FF8H 1C25 CD BB 00 CALL OUTAD 1C28 CD 16 01 CALL OUTKE ; 1C2B C3 05 1C JMP T5 ; 1C2E 3E 00 WAIT: MVI A,0 1C30 3D W5: DCR A 1C31 C2 30 1C JNZ W5 1C34C9 RET 1C35 7D UPRAVA:MOV A,L 1C36 D6 80 SUI 80H ; 1C38 6F MOV L,A 1C39 7C MOV A,H 1C3A DE 7F SBI 7FH ; 1C3C 67 MOV H,A 1C3DC9 RET A <- PB CY <- D1 numer. úprava HL zobrazuje po stisku tlačítka odečte 80H odečte 7FH Tabulka 22 „Pípající hrací kostka“ podle AR A7/84, upraveno pro PMI-80 Výstup na připojený magnetofon jako monitor zvuku. Výstup počtu pípnutí na zobrazovači. Start stlačením klávesy 0 (nula), obdobně pokračování. Startovací adresa: EX:1C60= 1C60 CD 40 01START:CALL DISP 1C63 D2 60 1C JNC START 1C66 FE 01 CPI 01 1C68 C2 60 1C 1C6B 06 07 JNZ START GENER:MVI B,07H ; PP zobrazovač, stisk klávesy CY=1, kód kl.v a (změněn PO RLCJJJ) ; návrat při nestisknuté klávese ; test, zda byla stlačena klávesa 0 (PO RLC má KOD 01 místo 80) ; nebyla stlačena klávesa 0 nebo byla stlačena jiná klávesa ; max. generované čís- 65 1C6D 05 1C6E CA 6B 1C DCR B JZ GENER lo +1 do generátoru náhodných čísel ; B=0, skok na začátek generátoru 1C71 CD 40 01 CALL DISP ; PP DISP testuje, zda byla uvolněna klávesa 0 1C74 DA 6D 1C JC GENER+2; cykl. je-li klávesa ještě stlačena 1C77 58 MOV E,B ; uchování vygenerovaného náhodného čísla v E pro zobrazení 1C78 16 FF TON: MVI D,0FFH ; délka trvání pípnutí do D 1C7A 3E C0 MVI A,0C0H ; nejvyšší bity střadače vytvoří tón vystupující portem PA6.7 1C7C 2F CMA ; doplněk A vytváří střídu tónu (opačnou půlperiodu) 1C7D D3 F8 OUT PA ; výstup půlperiody tónu do PA (magnetofonu) 1C7F 00 NOP ; uklidnění sběrnice 1C80 0E 50 MVI C,50H ; polovina periody tónu, (výška tónu) 1C82 0D DCR C 1C83 C2 82 1C JNZ x-1 ; cykl vytvářející výšku tónu 1C86 15 DCR D ; zmenšeni délky tónu 1C87 C2 7C 1C JNZ TON+4 ; D≠0, tón trvá 1C8A 21 00 3FPAUZA:LXI H,3F00H; délka, mezery mezi pípnutími 1C8D 2B DCX H 1C8E 7C MOV A,H ; vyšší byte délky mezery do střadače pro srovnání s nižším 1C8F B5 ORA L ; srovnání H s L na nulové obsahy, aby log. součet byl roven 00 1C90 C2 8D 1C JNZ PAUZA+3; skok při nenulovém log. součtu (při současně nenulových H,L) 1C93 05 DCR B ; konec pauzy po vyslaném pípnutí, zmenšení počtu pípnutí 1C94 C2 78 1C JNZ TON ; skok na další pípnutí a pauzu 1C97 21 FA 1F LXI H,1FFAH; adresa běžných vstupních dat do H,L 66 1C9A 73 MOV M,E 1C9B CD F2 00 CALL OUTDA 1C9E C3 60 1C JMP START KONEC POUŽÍVÁ REGISTRY - VŠECHNY ; přesun počtu pípnutí na tuto adresu ; zobrazení počtu pípnutí v datovém poli displeje ; konec práce, čekání na stlačení klávesy 0 pro další kolo Tabulka 23 Program převádí šestnáctkové obsahy buněk paměti na dvojková zobrazení displejem. Po spuštění se zobrazí dvojkový obsah prvé adresy, zadané v HL registru. Po stlačení klávesy (mimo RE a 1) se zobrazí další adresa a její obsah (hexadec). Po uvolněni klávesy se zobrazí obsah ve dvojkovém tvaru. Startovací adresa: EX:1CB0= 1CB0 21 00 00START:LXI H,ZONA ; počáteční adresa zóny, která bude prohlížena programem 1CB3 11 F6 1FSEGM: LXI D,1FF6H; adresa předposledního segmentu pro uložení hodnoty bitu 1CB6 06 09 MOV B,09 ; počet převáděných bitů +1 1CB8 4E MOV C,M ; analyzovaný byte z paměti do pomocného registru 1CB9 79 DALSI:MOV A,C ; analyzovaný byte do střadače 1CBA E6 01 ANI 01H ; ponechání posledního bitu 1CBC 12 STAX D ; a jeho uchování ve vyrovnávací paměti displeje 1CBD 1D DCR E ; adresa další, tj. E-1 segment 1CBE 79 MOV A,C ; analyzovaný byte do střadače 1CBF 0F RRC ; a jeho posunutí vpravo o jeden (zobrazený) bit 1CC0 4F MOV C,A ; a uchování v pomocném registru 1CC1 05 DCR B ; zmenšení čítače bitu/segmentu 1CC2 C2 B9 1C JNZ DALSI ; B≠0, skok na pře- 67 1CC5 23 INX H 1CC6 CD 40 01ZOBR: CALL DISP 1CC9 D2 C6 1C JNC ZOBR 1CCC E5 PUSH H 1CCD 22 F8 1F SHLD 1FF8H 1CD0 7E MOV A,M 1CD1 32 FA 1F 1CD4 3E 0A STA 1FFAH ADRES:MVI A,0AH 1CD6 CD AB 00 CALL CLEAR 1CD9 CD BB 00 1CDC CD F2 00 CALL OUTAD CALL OUTDA 1CDF CD 40 01 CALL DISP 1CG2 DA D4 1C JC ADRES 1CE5 CD AB 00 CALL CLEAR 1CE8 E1 POP H 1CE9 C3 B3 1C JMP SEGM KONEC POUŽÍVÁ REGISTRY - VŠECHNY 68 vod dalšího bitu ; B=O, konec převodu, zvětšeni adresy (další analyzovaný byte) ; zobrazení převedeného bytu ve dvojkovém tvaru ; CY≠0, nebyla stlačena klávesa, pokračuje dvojkové zobrazeni ; uchování HL, neboť jej následující podprogramy přepisují ; uložení adresy ve výstupním registru displeje ; byte z následující adresy načten do střadače ; a uložen ve výstupním registru displeje ; konstanta A pro zobrazení v levé segmentovce displeje ; vynulování displeje před zobrazením, a adresa data ; zobrazení adresy ; zobrazení dat na této adrese ; zobrazeni a test stlačení klávesy ; CY=1, klávesa ještě stlačena, zobrazuje se adresa, její data ; CY=0, klávesa uvolněna, vynulováni displeje ; navrácení adresy ze zásobníku ; skok na dvojkové zobrazení obsahu této adresy Tabulka 24 Program „Světelné noviny“ v délce max. 80H znaků (hex. počet znaků na adresu 1D84) Zpráva v kódu PMI-80 je uložena od adresy 1D00 - startovací adresa: EX:1D80= Při zadání jiné adresy lze vypisovat např. zprávy v monitoru a podobně. 1D00 DATA: DB ; zpráva světelných novin - viz příklad za koncem programu 1D80 21 00 1DSTART:LXI H,DATA ; adresa začátku zprávy do HL 1D83 1E 30 MVI E,30H ; délka zprávy do E (délka 30H je určena pro příklad programu) 1D85 22 FC 1FULOZ: SHLD 1FFCH ; uchováni HL ve výstupním registru displeje 1D88 16 FF MVI D,0FFH ; čítač doby posunutí znaku (FF odpovídá asi 0,3 sec.) 1D8A CD 40 01ZOBR: CALL DISP ; zobrazení zprávy na displeji 1D8D 15 DCR D ; zmenšeni čítače doby posunutí znaku na displeji 1D8E C2 8A 1D JNZ ZOBR ; D≠0, skok na zobrazení 1D91 23 INX H ; D=0, zvětšení adresy, mající za následek posunuti zprávy 1D92 1D DCR E ; zmenšení délky o odvysílanou část zprávy 1D93 C2 85 1E JNZ ULOZ ; B≠O, uchování nového HL ve výstupním registru displeje 1D96 C7 RST 0 ; B=0, ukončení práce programovým provedením RESET (PMI-80) Příklad zprávy tvořené adresami písmen abecedy a znaků v tabulce monitoru (01BE-02BD) 1D00 19 1D08 0D 1D10 16 1D18 19 1D20 05 1D28 19 19 11 01 05 10 17 19 8E 22 0E 0A 05 19 11 0A 19 8E 0E 19 14 0B 13 01 16 19 10 23 12 14 19 19 0E 0C 0E 19 19 19 19 1A 0D 22 19 = = = = = = mezery dovolte mi, abych se pred stavil: jsem 69 Adresy písmen a znaků: A = B = C = D = E = F = 0A, 0B, 0C, 0D, 0E, 0F, G = H = I = J = K = L = 20, 1A, 01, 21, 85, 14, M = N = O = P = Q = R = 16, 1B, 11, 13, 43, 12, S = T = U = V = X = Y = 05, 10, 15, 8E, 9B, 23, Z = = = - = “ = , = ? = 02, 18, 1F, 1E, 22, 1D KONEC ZPRÁVY Program používá registry A, DE, HL, ostatní uchová Tabulka 25 Startovací adresa: EX:1E00= „Mikrovarhany, stupnice“ : CDEF89AB4567012, Tón trvá po dobu stisku klávesy Výstup tónu je realizován přes připojený magnetofon jako zvukový monitor. 1E00 CD 40 01START:CALL DISP 1E03 D2 00 1E 1E06 0F 1E07 E6 0F 1E09 21 28 1E 1E0C 85 1E0D 6F 1E0E 3E C0 1E10 CD 1F 1ETON: 1E13 CD 1F 1E 1E16 CD 40 01 1E19 DA 10 1E 70 ; PP testu klávesnice, CY=1 při stisku klávesy JNC START ; návrat na začátek při nestisknuté klávese RRC ; obnovení správného kódu klávesy ve střadači ANI 0FH ; ponechání pravé tetrády kódu klávesy LXI H,TAB ; adresa tabulky konstant. tónu kláves do HL ADD L ; přičtení upraveného kódu klávesy (000F) k adrese tabulky MOV L,A ; modifikovaná adresa zpět do L MVI A,0C0H ; nastavení nejvyšších bitů střadače pro výstup tónu do PA6.7 CALL VYST ; voláni PP výstupu tónu (kladné půlvlny) CALL VYST ; výstup tónu (záporná půlvlna) CALL DISP ; test klávesnice, je-li ještě stlačena klávesa JC TON ; pokračování tónu při 1E1C C3 00 1E JMP START 1E1F D3 F8 VYST: OUT PA 1E21 4E MOV C,M 1E22 0D DCR C stisknuté klávese ; skok na začátek programu po uvolnění klávesy ; výstup půlperiody kmitu tónu do PA (magnetofonu či sluchátek) ; konstanta délky půlperiody tónu z tabulky do C registru ; zmenšeni čítače v C registru 1E23 C2 22 1E 1E26 2F JNZ VYST+3 ; cykl při nenulovém čítači CMA ; doplněk C0=3F ve střadači vytvoří inverzní půlperiodu tónu 1E27C9 RET 1E28 24 01 13 FF TAB: DB ; A’, H’, C”, C 1E2C 50 33 3C 1C ; D’, E’, F’, G’ 1E30 9E 80 6A 53 ; G, A, H, C’ 1E34 FF E0 C0 B0 ; C, D, E, F KONEC POUŽÍVÁ REGISTRY: A, C, H, L Doplnění vývodů konektoru K2 ⊥ ⊥ ⊥ ⊥ 12 (stávající) 26 +5V 25 28 -5V 27 30 +12V 29 71 72 symbol kód dél CNZ adr C4 3 CP adr F4 3 CPE adr EC 3 CPI D8 FE 2 CPO adr E4 3 CZ adr CC 3 DAA 27 1 DAD B 09 1 DAD D 19 1 DAD H 29 1 DAD SP 39 1 DCR A 3D 1 DCR B 05 1 DCR C 0D 1 DCR D 15 1 DCR E 1D 1 DCR H 25 1 DCR L 2D 1 DCR M 35 1 DCX B 0B 1 DCX D 1B 1 DCX H 2B 1 DCX SP 3B 1 DI F3 1 EI FB 1 HLT 76 1 IN D8 DB 2 INR A 3C 1 INR B 04 1 INR C 0C 1 INR D 14 1 INR E 1C 1 INR H 24 1 INR L 2C 1 INR M 34 1 INX B 03 1 INX D 13 1 INX H 23 1 INX SP 33 1 JC adr DA 3 JM adr FA 3 symbol kód dél JMP adr C3 3 JNC adr D2 3 JNZ adr C2 3 JP adr F2 3 JPE adr EA 3 JPO adr E2 3 JZ adr CA 3 LDA adr 3A 3 LDAX B 0A 1 LDAX D 1A 1 LHLD adr 2A 3 LXI B,D16 01 3 LXI D,D16 11 3 LXI H,D16 21 3 LXI SP,D16 31 3 MOV A,A 7F 1 MOV A,B 78 1 MOV A,C 79 1 MOV A,D 7A 1 MOV A,E 7B 1 MOV A,H 7C 1 MOV A,L 7D 1 MOV A,M 7E 1 MOV B,A 47 1 MOV B,B 40 1 MOV B,C 41 1 MOV B,D 42 1 MOV B,E 43 1 MOV B,H 44 1 MOV B,L 45 1 MOV B,M 46 1 MOV C,A 4F 1 MOV C,B 48 1 MOV C,C 49 1 MOV C,D 4A 1 MOV C,E 4B 1 MOV C,H 4C 1 MOV C,L 4D 1 MOV C,M 4E 1 MOV D,A 57 1 MOV D,B 50 1 Tabulka instrukcí mikroprocesoru MHB8080A symbol kód dél ACI D8 CE 2 ADC A 8F 1 ADC B 88 1 ADC C 89 1 ADC D 8A 1 ADC E 8B 1 ADC H 8C 1 ADC L 8D 1 ADC M 8E 1 ADD A 87 1 ADD B 80 1 ADD C 81 1 ADD D 82 1 ADD E 83 1 ADD H 84 1 ADD L 85 1 ADD M 86 1 ADI D8 C6 2 ANA A A7 1 ANA B A0 1 ANA C A1 1 ANA D A2 1 ANA E A3 1 ANA H A4 1 ANA L A5 1 ANA M A6 1 ANI D8 E6 2 CALL adr CD 3 CC adr DC 3 CM adr FC 3 CMA 2F 1 CMC 3F 1 CMP A BF 1 CMP B B8 1 CMP C B9 1 CMP D BA 1 CMP E BB 1 CMP H BC 1 CMP L BD 1 CMP M BE 1 CNC adr D4 3 symbol kód dél MOV D,C 51 1 MOV D,D 52 1 MOV D,E 53 1 MOV D,H 54 1 MOV D,L 55 1 MOV D,M 56 1 MOV E,A 5F 1 MOV E,B 58 1 MOV E,C 59 1 MOV E,D 5A 1 MOV E,E 5B 1 MOV E,H 5C 1 MOV E,L 5D 1 MOV E,M 5E 1 MOV H,A 67 1 MOV H,B 60 1 MOV H,C 61 1 MOV H,D 62 1 MOV H,E 63 1 MOV H,H 64 1 MOV H,L 65 1 MOV H,M 66 1 MOV L,A 6F 1 MOV L,B 68 1 MOV L,C 69 1 MOV L,D 6A 1 MOV L,E 6B 1 MOV L,H 6C 1 MOV L,L 6D 1 MOV L,M 6E 1 MOV M,A 77 1 MOV M,B 70 1 MOV M,C 71 1 MOV M,D 72 1 MOV M,E 73 1 MOV M,H 74 1 MOV M,L 75 1 MVI A,D8 3E 2 MVI B,D8 06 2 MVI C,D8 0E 2 MVI D,D8 16 2 symbol kód dél MVI E,D8 1E 2 MVI H,D8 26 2 MVI L,D8 2E 2 MVI M,D8 36 2 NOP 00 1 ORA A B7 1 ORA B B0 1 ORA C B1 1 ORA D B2 1 ORA E B3 1 ORA H B4 1 ORA L B5 1 ORA M B6 1 ORI D8 F6 2 OUT D8 D3 2 PCHL E9 1 POP B C1 1 POP D D1 1 POP H E1 1 POP PSW F1 1 PUSH B C5 1 PUSH D D5 1 PUSH H E5 1 PUSH PSW F5 1 RAL 17 1 RAR 1F 1 RC D8 1 RET C9 1 RIM 20 1 RLC 07 1 RM F8 1 RNC D0 1 RNZ C0 1 RP F0 1 RPE E8 1 RPO E0 1 RRC 0F 1 RST 0 C7 1 RST 1 CF 1 RST 2 D7 1 RST 3 DF 1 symbol kód dél RST 4 E7 1 RST 5 EF 1 RST 6 F7 1 RST 7 FF 1 RZ C8 1 SBB A 9F 1 SBB B 98 1 SBB C 99 1 SBB D 9A 1 SBB E 9B 1 SBB H 9C 1 SBB L 9D 1 SBB M 9E 1 SBI D8 DE 2 SHLD adr 22 3 SIM 30 1 SPHL F9 1 STA adr 32 3 STAX B 02 1 STAX D 12 1 STC 37 1 SUB A 97 1 SUB B 90 1 SUB C 91 1 SUB D 92 1 SUB E 93 1 SUB H 94 1 SUB L 95 1 SUB M 96 1 SUI D8 D6 2 XCHG EB 1 XRA A AF 1 XRA B A8 1 XRA C A9 1 XRA D AA 1 XRA E AB 1 XRA H AC 1 XRA L AD 1 XRA M AE 1 XRI D8 EE 2 XTHL E3 1 Příloha A - - - MOV B,B MOV D,B MOV H,B MOV M,B ADD B SUB B ANA B ORA B RNZ RNC RPO RP 2x 3x 4x 5x 6x 7x 8x 9x Ax Bx Cx Dx Ex Fx NOP x0 1x 0x HEX POP PSW POP H POP D POP B ORA C ANA C SUB C ADD C MOV M,C MOV H,C MOV D,C MOV B,C LXI SP,d16 LXI H,d16 LXI D,d16 LXI B,d16 x1 JP a16 JPO a16 JNC a16 JNZ a16 ORA D ANA D SUB D ADD D MOV M,D MOV H,D MOV D,D MOV B,D STA a16 SHLD a16 STAX D STAX B x2 DI XTHL OUT d8 JMP a16 ORA E ANA E SUB E ADD E MOV M,E MOV H,E MOV D,E MOV B,E INX SP INX H INX D INX B x3 CP a16 CPO a16 CNC a16 CNZ a16 ORA H ANA H SUB H ADD H MOV M,H MOV H,H MOV D,H MOV B,H INR M INR H INR D INR B x4 PUSH PSW PUSH H PUSH D PUSH B ORA L ANA L SUB L ADD L MOV M,L MOV H,L MOV D,L MOV B,L DCR M DCR H DCR D DCR B x5 ORI d8 ANI d8 SUI d8 ADI d8 ORA M ANA M SUB M ADD M HLT MOV H,M MOV D,M MOV B,M MVI M,d8 MVI H,d8 MVI D,d8 MVI B,d8 x6 RST 6 RST 4 RST 2 RST 0 ORA A ANA A SUB A ADD A MOV M,A MOV H,A MOV D,A MOV B,A STC DAA RAL RLC x7 RM RPE RC RZ CMP B XRA B SBB B ADC B MOV A,B MOV L,B MOV E,B MOV C,B - - - - x8 SPHL PCHL *RET RET CMP C XRA C SBB C ADC C MOV A,C MOV L,C MOV E,C MOV C,C DAD SP DAD H DAD D DAD B x9 JM a16 JPE a16 JC a16 JZ a16 CMP D XRA D SBB D ADC D MOV A,D MOV L,D MOV E,D MOV C,D LDA a16 LHLD a16 LDAX D LDAX B xA EI XCHG IN d8 X CMP E XRA E SBB E ADC E MOV A,E MOV L,E MOV E,E MOV C,E DCX SP DCX H DCX D DCX B xB CM a16 CPE a16 CC a16 CZ a16 CMP H XRA H SBB H ADC H MOV A,H MOV L,H MOV E,H MOV C,H INR A INR L INR E INR C xC - - - CALL a16 CMP L XRA L SBB L ADC L MOV A,L MOV L,L MOV E,L MOV C,L DCR A DCR L DCR E DCR C xD CPI d8 XRI d8 SBI d8 ACI d8 CMP M XRA M SBB M ADC M MOV A,M MOV L,M MOV E,M MOV C,M MVI A,d8 MVI L,d8 MVI E,d8 MVI C,d8 xE RST 7 RST 5 RST 3 RST 1 CMP A XRA A SBB A ADC A MOV A,A MOV L,A MOV E,A MOV C,A CMC CMA RAR RRC xF Příloha B 73 74 75 76 77 Příloha E Rozmístění signálů na konektorech Kl, K2 a K3 K1: HLDA - 01|02 INT - 03|04 - 05|06 WAIT - 07|08 A0 - 09|10 A1 - 11|12 A2 - 13|14 +12V - 15|16 A3 - 17|18 A4 - 19|20 A5 - 21|22 A6 - 23|24 A7 - 25|26 A8 - 27|28 A9 - 29|30 A15 - 31|32 A12 - 33|34 A13 - 35|36 A14 - 37|38 A11 - 39|40 MR - 41|42 CS4 - 43|44 - 45|46 DB1 - 47|48 - 49|50 RDYIN - 51|52 DB5 - 53|54 DB6 - 55|56 - 57|58 2 TTL - 59|60 DB4 - 61|62 78 - +5V I/OW INTE HOLD GND +12V RESET -5V -5V INTA K2: PB3 PB4 FB5 PB6 PB7 PC1 FC0 PC4 PC5 PC6 PC7 A9 GND CS6 CS5 A10 CS2 CS3 DB0 +5V DB2 CSC DB3 I/OR DB7 STSB MW PA7 PA6 PA5 PA4 PB7 PB5 PB3 PB1 - 01|02 03|04 05|06 07|08 09|10 11|12 13|14 15|16 17|18 19|20 21|22 23|24 25|26 27|28 29|30 31|32 33|34 35|36 37|38 39|40 41|42 43|44 45|46 47|48 - PB2 PB1 FB0 PC3 PC2 GND PA0 PA1 PA2 PA3 PB6 PB4 PB2 PB0 K3: 1 - MGIN 2 - GND 3 - MGOUT Pozn.: Symbol GND (ground) označuje společný vodič („zem“) 79 Seznam obrázků a tabulek Obrázek 1 Blokové schéma mikropočítače PMI-80 2 Blokové schéma mikroprocesoru MHB8080A 3 Průběh signálů při nahrávání (SAVE) 4 Průběh signálů při přehrávání (LOAD) 5 Vývojový diagram operace mezi dvěma čísly 6 Vývojový diagram čítání modulo 256 7 Obsluha žádosti o přerušení (interrupt) 8 Blokové schéma paralelního programovatelného stykového obvodu MHB8255A 9 Tvar řídící instrukce MHB8255A 10 Princip režimu přejímání (handshake) při výstupu dat 11 Princip režimu přejímání při vstupu dat 12 Zapojení obvodu MHB8255A v režimu 1 13 Tvar stavového slova pro režim 1 14 a) Zapojení obvodu MHB8255A v režimu 2 b) Tvar stavového slova v režimu 2 15 Příklad použití obvodu MHB8255A ve funkci řadiče pružného disku 16 Příklad použití obvodu MHB8255A (viz text) 17 Vývojový diagram Monitoru PMI-80 18 Průběh dálnopisného znaku (příklad znak 2 nebo W) 19 Obvod pro obousměrnou komunikaci s dálnopisem 20 Vývojový diagram podprogramu CHROUT 21 Vývojový diagram podprogramu CHRIN 22 Časová závislost signálů tiskárny C2111 23 Obecnější blokové schéma připojení C2111 k mikropočítači 24 Schéma rozhraní pro C2111 25 Schéma připojení ss motorku k PMI-80 26 Vývojový diagram programu pro řízení ss motorku 27 Jednoduchý Č/A převodník s operačním zesilovačem 28 Principiální schéma A/Č převodníku 80 29 Schéma A/Č převodníku 30 Princip A/Č převodu metodou postupné aproximace 31 Vývojový diagram programu pro A/Č převod 32 Časové průběhy signálů paměťového obvodu MHB8708 a) při čtení b) při programování 33 Schéma programátoru pamětí typu EPROM 34 Vývojový diagram programu pro obsluhu programátoru 35 a) Principiální schéma RC obvodu se spínačem b) Průběh napětí na kondenzátoru C 36 Měřící obvod s termistorem 37 Vývojový diagram měření teploty pomocí termistoru 38 Schéma měřícího obvodu s obvodem 74121 39 Schéma doplňku pro zlepšení přehrávání 40 Blokové schéma napájecího zdroje pro PMI-80 41 Schéma napájecího zdroje 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 MIKROPOČÍTAČ PMI-80 - CO S NÍM? Edice elektroniky Svazarmu, řada 5. Autor Ing. Jaroslav Vlach. Lektoroval Ing. Petr Kratochvíl. Odpovědný redaktor PhDr. Jindřich Jirka. Grafická úprava a návrh obálky Josef Svoboda. Technický redaktor I. Prokop. Vydal ÚV Svazarmu v 602. základní organizaci Svazarmu, Dr. Z. Wintra 8, 16041 Praha 6 pro potřeby vlastního aktivu. Náklad 2100 výtisků. Neprodejné. Praha 1986. 105