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
Download

PMI-80: co s ním?