ÚVOD | Novinky | 8 Bitů | Příslušenství | Drobnosti | TTL | Kontakt
SAPI-1 | ONDRA | PMI-80 | PMD-85 | klony PMD-85 | klony SM50/40 | PETR | PLAN-80A | IQ151 | TNS | FK-1 | HVĚZDA | SP 830 | PCS 1-QR6000
Příručka tvoří ucelenou uživatelskou dokumentaci mikropočítačové stavebnice PETR. Obsahuje jednak návod k sestavení a oživení stavebnice, Jednak další podrobné informace, jak již hotovou mikropočítačovou stavebnici PETR využívat.
Protože stavebnice je, jako polytechnická pomůcka, určena k širokému použití, je i tato příručka psána populární formou spíše než jako strohý, odborný text. Pro názornost je doplněna řadou příkladů. Místy je text proložen orientačními otázkami k nimž lze nalézt odpovědi v jedné z příloh. V příručce uvedené podrobné informace o vnitřní struktuře stavebnice umožňují i profesionální využití mikropočítačové stavebnice PETR, včetně modifikací obvodového zapojení a řídicího programu.
© Kolektiv autorů, 1988
Přehled revizí dokumentace
verze | datum | poznámka |
01 | květen 87 | IMA informace 6/87 |
02 | duben 88 | původní text uživatelské příručky |
03 | červen 88 | korektura |
Příručku připravil kolektiv autorů:
Ing. Tomáš Trpišovský,CSc.1),
Ing. Jaroslav Pecina1) a
RNDr. Petr Couf,2).
Na vypracování příkladů a ověřování stavebnice se podíleli Petr Beneš a Pavel Janoušek 3).
Za pečlivou přípravu tiskové předlohy, obrázků a korektury textu děkují autoři svým spolupracovnicím Evě Hanzalové3) a Jitce Živnůstkové1).
-----------------------
1) TESLA ELTOS - Institut Mikroelektronických aplikací, Praha
2) MFF UK, KKI,. Praha
3) studenti, SPŠE Ječná, Praha
Každý návod k použiti, i sebestručnější, zdržuje. Nejinak se povede i Vám, začnete-li číst tuto příručku od začátku do konce. Proto si namísto čteni příručku pouze prolistujte, přitom lze vynechat 4. a 7. kapitolu a všechny přílohy.
Poté si podrobně přečtěte několik slov ŮVODEM... (kap. 1) a můžete rovnou přistoupit k SESTAVENÍ A OŽIVENI STAVEBNICE (kap. 6).
Všechny další kapitoly a přílohy obsahují pouze doplňkové informace, přesto ale věříme, že je příležitostně využijete.
Místa označená v textu [?x] si doplníte sami, přitom seznam odpovědi respektive návodů k řešení je uveden v jedné z příloh.
Příjemnou zábavu i dobré výsledky Vám přeje
kolektiv autorů.
Tato příručka souhrnně popisuje mikropočítačovou stavebnici PETR a je podrobným návodem k jejímu využití. Text je psán s důrazem na názornost a je doplněn řadou praktických příkladů. Vzhledem k možnosti profesionálního využití stavebnice Jako polotovaru universálního zapojení mikropočítače řady 8048 je popsána i implementace mikropočítače PETR a to jak technické řešení, tak řidiči program.
Text příručky Je rozdělen do sedmi částí, které lze stručně charakterizovat takto:
Příručka je dále doplněna řadou příloh, které obsahují kromě schémat zapojení i stručný přehled některých často potřebných informací vybraných z textu. Dále jsou přiloženy přehledové tabulky pro jednočipový mikropočítač 8048 a výpis řídicího programu mikropočítače PETR. Tento listing doplňuje popis řídicího programu, uvedený v kap. 4 a je určen především zájemcům o univerzální využití stavebnice PETR.
Zbývá několik slov k použité terminologii. Přestože mikropočítač PETR je určen jako polytechnická pomůcka, není zřejmě nutné uvádět zvláštní výklad základních pojmů. Někdy je v textu v závorce uveden pro informaci anglický termín, jak se s ním lze běžně setkat v odborné literatuře. Konkrétné o mikropočítačově stavebnici PETR lze vysvětlit, že mikropočítač PETR se označuje jako stavebnice proto, že je ho třeba ze součástek sestavit a nikoliv proto, že by jej bylo možno stavebnicově rozšiřovat (jako lze rozšiřovat např. mikropočítač SAPI-1 připojením dalších stavebnicových prvků). Pokud jste četli pozorně až sem víte, že na jednom místě byl uveden "virtuální mikropočítač". Jako virtuální (zde ve smyslu zdánlivý) mikropočítač lze stavebnici PETR označit, pokud se na něj díváme z hlediska aplikátora jako na "černou skříňku" s určitou architekturou a množinou základních instrukcí (viz kap. 2). Přitom není důležité jeho vnitřní technické a programové řešení.
Na jiných místech je zase zmínka o jednočipovém mikropočítači řady 8048. Jednočipový mikropočítač je jeden poměrně složitý integrovaný obvod (obsahuje zhruba 20 tisíc tranzistorů na křemíkové destičce - čipu o velikosti 22 mm2 ) a tvoří jádro mikropočítače PETR.
První verze stavebnice PETR vznikla v polovině roku 1986 a je příkladem dobré spolupráce autorského kolektivu pracovníků TESLA ELTOS - Institutu mikroelektronických aplikací a MFF UK v Praze. Jistou inspirací byl autorům malý řídicí mikropočítač KOSMOS, vyráběný v NSR [1]. PETR je sice funkčním rozšířením uvedeného mikropočítače, liší se však jak konstrukčně, tak i po stránce technické realizace a řídicího programu. Nicméně jako upomínka na inspirační vzor je záměrně zobrazováno písmeno C jako základní nápovědná zpráva mikropočítače PETR.
Mikropočítač PETR je víceúčelová mikroprocesorová stavebnice malého řídicího počítače. Je určen především pro polytechnickou výchovu. Proto se také dodává ve formě stavebnice, kterou lze po sestavení programovat jako běžný mikropočítač.
Původním záměrem autorů bylo připravit mikropočítač s velmi jednoduchou architekturou, přitom však umožňující přímé řízeni reálných aplikaci - modelů, měřicích a vyhodnocovacích přípravků, signalizačních zapojení, kolejišť ap. Tomuto záměru bylo podřízeno technické a konstrukční řešení stavebnice. Jistým omezením byl požadavek, na co nejnižší cenu, proto je řada funkcí mikropočítače PETR realizována jeho řídicím programem, nikoliv obvodovým zapojením.
Jádro mikropočítačové stavebnice PETR tvoří jednočipový mikropočítač řady 8048. Po prvních funkčních zkouškách stavebnice se obvodové řešeni ukázalo jako perspektivní. Proto byl řídicí program stavebnice přepracován tak, aby umožnil zcela universální využití stavebnice. To spočívá v možnosti doplnit obvodové řešení stavebnice PETR vlastním řídicím programem určeným pro složitější cílovou aplikaci, např. pro automatizaci topení nebo zabezpečovací signalizaci v rodinných domcích aj. Stavebnice tedy může sloužit i jako určitý polotovar pro takovéto aplikace.
V dalších odstavcích této kapitoly je popsán virtuální mikropočítač PETR (viz Úvodem ...) tak, jak se jeví programátorovi, který s ním má pracovat.
Mluvíme-li o architektuře mikropočítače, máme na mysli charakteristiku jeho základních částí - tu tvoři obvykle procesor, paměť a blok styku s vnějším prostředím (periferiemi) a způsob jejich vzájemného propojení.
Procesor
Mikropočítač PETR má jednostřadačový procesor a umí zpracovávat instrukce (1 až 27) a číselné operandy v intervalu 0 až 255. Jednostřadačový procesor má tedy jeden osmibitový střadač ACC (Accumulator), v němž lze uchovávat hodnotu jednoho operandu. Střadač vždy slouží jako místo pro úschovu buď prvního (jsou-li dva) nebo jediného operandu právě zpracovávané instrukce. Obvykle se do střadače uloží i výsledek právě provedené instrukce.
Kromě střadače je součásti procesoru zvláštní jednobitový příznak F (Flag), do něhož se ukládají výsledky typu "ano/ne" některých instrukcí. Například výsledek instrukce pro porovnání obsahu střadače s obsahem určitého místa v paměti. Stav příznaku F je možno testovat a větvit pak program podle předem vypočtené podmínky.
Důležitou částí procesoru je čítač instrukcí PC (Program Counter). Tento čítač ukazuje vždy na tu instrukci programu, která je určena k provedení v dalším kroku. Procesor si po provedení instrukce čítač PC automaticky upravuje Přitom záleží na typu provedené instrukce a na výsledku.
[?1] Bude čítač adres PC po provedení jedné instrukce ukazovat vždy na v pořadí další následující instrukci zapsanou v programu ?
Jinou důležitou částí procesoru je zásobník. Je to vlastně vnitřní paměť procesoru určená pro čtení i zápis (RWM - Read Write Memory). Zásobník mikropočítače PETR má 10 položek a slouží pro ukládání návratových adres při volání podprogramů. Se zásobníkem pracují výhradně instrukce CALL (volání podprogramu) a RET (návrat z podprogramu). Pro potřeby ladění programu lze zobrazovat ukazovátko do zásobníku SP (Stack Pointer). Pro prázdný zásobník je SP=0. Závěrem připomeňme ještě princip využívání zásobníku, který je obdobný u většiny mikropočítačů. Zásobník pracuje systémem poslední (zapsaná návratová adresa) dovnitř - první ven (LIFO Last-In-First-Out). Tento princip umožňuje postupné vnořování jednoho podprogramu do druhého a je znázorněn na obr. 1.
Obr. 1 Vnořeni dvou podprogramů
Poznámka:
Při ladění programu lze na displeji kdykoliv zobrazit, stav ukazovátka do zásobníku SP. Tak je možno zjistit, kolik podprogramů je v té chvíli do sebe vnořených. Nelze však prohlížet obsah zásobníku adres a tedy ani zjišťovat, které podprogramy to jsou. To je však zřejmé z výpisu laděného programu.
[?2] Kolik podprogramů lze do sebe nejvýše vnořit tak, aby nedošlo k přeplnění zásobníku ?
Paměť
Paměť mikropočítače PETR se skládá z buněk. Každá buňka paměti může obsahovat buď jednu instrukci, nebo data z rozsahu 0 až 255. Buňka paměti se skládá ze dvou části: z operačního znaku, má hodnotu 1 až 27 pro instrukce, nebo 0 až 255 pro data, a z adresní/datové části. V té je uloženo číslo z Intervalu 0 až 255, které má význam buď adresové části instrukce, nebo hodnoty uložených dat.
Základní kapacita paměti je 128 buněk, pomocí přídavného modulu ji lze rozšířit na 256 buněk. Každá buňka paměti je označena adresou - celým číslem z intervalu 0 až 255.
Obr. 2 Uspořádání paměťové buňky
Je zřejmé, že podle hodnoty operačního znaku nelze rozlišit, zda na určité adrese je uložena instrukce programu či data. Toto rozlišení záleží na programátorovi resp. obsluze, která program spouští.
Programátor plní paměť nejčastěji příkazem (MEM), kdy přímo vkládá obsah jak operačního znaku, tak adresní/datové části. Je-li buňka paměti využívána pro uložení dat (nikoliv jako instrukce), na operačním znaku nezáleží.
Poznámka:
Počítače s takto uspořádanou pamětí (jedna paměť společná pro program i data) se označují jako počítače "von Neumannova typu" na počest amerického matematika maďarského původu Johna von Neumanna (*1903 +1957), který významně přispěl k rozvoji teorie her a teorie počítačů.
[?3] Kolik kroků může nejvýše obsahovat program pro mikropočítač PETR ?
Periférie
Procesor, tedy i běžící program, může jednak komunikovat s obsluhou, jednak s řízeným objektem.
Ke styku s obsluhou slouží membránová klávesnice a sedmi- segmentový displej. Instrukční soubor umožňuje snímat stav klávesnice a ovládat všechny segmenty displeje. To znamená, že lze vytvářet programy, jejichž činnost může řídit obsluha tlačítky membránové klávesnice. Program přitom může své výsledky nebo zprávy zobrazovat na segmentový displej stavebnice. Tak lze například mikropočítačem PETR, snadno realizovat číslicový voltmetr, který má tlačítky přepínatelné rozsahy a další podobné aplikace.
Pro připojení do vnějšího prostředí - obvykle do řízeného objektu - má mikropočítač PETR vyčleněno 18 vstupních/výstupních linek. Základní instrukce mikropočítače přitom umožňují tyto linky přímo ovládat a vyhodnocovat, což velmi usnadňuje vytváření řídicích programů. 16 linek je sdruženo do dvou osmibitových bran P1,P2 (Ports), z nichž brána P1 je obousměrná a brána P2 pouze výstupní. Instrukce umožňují pracovat buď s celou bránou najednou, nebo s jednotlivými linkami. Zbylé dvě linky T0 (Test Pin) a INT (Interrupt) maji zvláštní význam. Linka T0 je pouze vstupní, její stav je testovatelný instrukcí podmíněného skoku, linka INT je rovněž vstupní, má význam žádosti o přerušeni.
K mikropočítačově stavebnici PETR lze bez úprav přímo připojit běžný kazetový magnetofon, který je možno využívat pro úschovu již hotových programů. Přitom se používá záznam kompatibilní se záznamem počítačů IQ-151 tak, aby byla zajištěna vzájemná přenositelnost nahrávek. Podrobněji je práce s magnetofonem popsána v kap. 3.
Přerušovací systém
Přerušovací systém mikropočítače PETR je řešen obdobně jako u mikroprocesoru 8080. Počítač má jednoúrovňový přerušovací systém, jediným zdrojem přerušeni je nízká úroveň na vstupní lince INT.
Přijme-li procesor požadavek na přerušeni,
- zablokuje přijeti dalších požadavků (zamaskuje přerušeni),
- dokončí rozpracovanou instrukci a
- provede "mimo pořadí" jednu předem definovanou instrukci.
Instrukce prováděná při přerušení může být libovolná přípustná základní instrukce, tedy např. HALT, JMP, CALL ap. Tuto instrukci je nutno umístit do programu na adresu 0. Po provedeni této vnucené instrukce pokračuje program dále z toho místa, ve kterém byl přerušen, pokud ovšem v důsledku vnucené řidiči instrukce není určeno jinak.
Využitím přerušení lze řídit činnost programu vnější událostí nebo stavem řízeného objektu. Tak lze například snadno naprogramovat hlídací časovač WDT (Watch Dog Timer). Tento časovač je programem stále cyklicky inkrementován (zvětšován o 1) a nuluje se jen při přerušení, které má význam odezvy řízeného objektu. Pokud se čítač přeplní, znamená to, že řízený objekt neodpověděl v předepsané době. Program pak může vypsat zprávu o chybě nebo jinak ošetřit tuto výjimečnou situaci.
Po zapnuti mikropočítače PETR je přerušení zakázáno, to znamená, že nenastane, ať je linka INT v jakémkoli stavu. Jednou ze základních instrukcí (INT i) lze přerušeni povolit nebo zakázat - to je dáno hodnotou operandu i.
Pokud je přerušení povoleno, testuje se před provedením každé instrukce, zda v průběhu zpracování minulé instrukce nepřišla žádost o přerušení (linka INT=0). Pokud ano, zpracuje se mimo pořadí instrukce umístěná v paměti na adrese 0, jinak program pokračuje normálně dále.
Po každém zpracovaném přerušení je procesor ve stavu "přerušeni zakázáno" a před dalším očekávaným výskytem je proto nutné jej opět povolit instrukcí INT i .
Přerušeni se vyvolá logickou úrovní 0 na vstupní lince INT. Pak je nutné počítat s tím, že pokud tato úroveň na lince INT trvá, toto přerušení nastane pokaždé, když ho program povolí. Jednu a tutéž žádost o přerušení může tedy počítač obsloužit i několikrát. Tomu lze předejit, pokud žádosti o přerušení na lince INT maji tvar pulsů s minimální přípustnou délkou 7,5 µs. Maximální délka není omezena technickým řešením počítače, ale konstrukci řídicího programu (puls musí skončit dříve, než program znovu povolí přerušení instrukcí INT i ). Návod, jak zajistit generováni vhodných pulsů, je uveden jako příklad v kapitole 7.
Procesor mikropočítače zpracovává celkem 27 instrukcí. Lze je rozdělit do několika skupin:
- instrukce pro přesun dat v počítači,
- aritmetické a logické operace,
- instrukce pro řízení výpočtu (především skoky),
- periferní operace,
- ostatní instrukce (prodleva, přerušení).
Dále je uveden podrobný popis všech instrukcí. U každé instrukce je kromě jejího názvu v jazyce symbolických adres uvedeno mnemotechnické vyjádření její funkce, její vnitřní reprezentace (tedy strojový kód) a úplný popis.
Jako názvy instrukci v jazyce symbolických adres jsou vesměs použity zkratky standardně rozšířených anglických termínů.
V mnemotechnickém popisu funkce značí symbol CONST, MEM a @MEM hodnotu druhého operandu instrukce, a to:
CONST | ... | je přímá konstanta, uvedená jako operand instrukce, |
MEM | ... | je obsah buňky paměti na adrese dané operandem instrukce a |
@MEM | ... | označuje obsah buňky paměti na adrese dané obsahem buňky na adrese dané operandem instrukce. |
Tedy CONST Má význam dat, MEM má význam adresy a @MEM má význam nepřímé adresy.
Kromě běžných matematických značek se v textu rozlišuje značka pro rovnost (=) a značka pro přiřazení (:=). Zápis ACC=0 vyjadřuje, že obsah střadače je 0, zatímco ACC:=0 značí, že střadači se přiřadí hodnota 0 (střadač se touto hodnotou naplní).
Strojová reprezentace instrukce představuje obsah jedné buňky paměti. V popisu je uvedena tak, jak se zobrazuje obsluze počítače při prohlížení paměti - jako pěticiferné číslo, jehož první dvě číslice udávají operační znak a zbylé tři. číslice operand (zpravidla adresu). Pro data i adresy platí, že musí být z intervalu 0 až 255, není-li v popisu instrukce výslovně uvedeno jinak.
V dalším textu jsou souhrnně popsány jednotlivé skupiny instrukcí a dále je uveden jejich abecedně seřazený podrobný popis:
Instrukce pro přenos dat ------------------------------------------- (LDA, LPAI, LDC, STA, STAI) |
Všechny instrukce pro přenos dat kopírují data z paměti do střadače nebo opačně. Přitom se původní data nemění. Žádná z instrukcí pro přenos dat neovlivňuje příznak F. Data musí být umístěna výhradně v adresní/datové části paměťové buňky. Do místa operačního znaku nelze ani zapisovat, ani z něj nelze číst.
Aritmetické a logické instrukce ------------------------------------------------------------------- (ADD, SUB, AEQ, ALT, AGT, AND, OR, CPL) |
Všechny instrukce tohoto typu buď ovlivňují stav příznaku F nebo hodnotu střadače ACC nebo oboji tak, jak je uvedeno v tabulce:
instrukce | ovlivňuje | |
ACC | F | |
ADD, SUB | = | = |
AEQ, ALT, AGT | = | |
AND, OR, CPL | = |
Instrukce pro řízení výpočtu ----------------------------------------------- (JMP, JMPI, JF, JT, CALL, RET) |
Všechny instrukce pro řízení vypočtu ovlivňují obsah čítače adres PC. Lze je proto využít pro programování cyklů, podmíněných větveni programů, volání podprogramů apod. Přitom se obsah střadače ACC ani stav příznaku F nemění.
Instrukce pro periferní operace --------------------------------------------------- (P10UT, P20UT, P1IN, DISP, KEY) |
Do této skupiny patří jednak instrukce pro ovládání vstupních a výstupních linek, jednak instrukce pro čtení klávesnice a zápis na displej stavebnice PETR.
Tyto instrukce nemění příznak F a s výjimkou vstupních instrukcí P1IN a KEY ani obsah střadače.
Ostatní instrukce ---------------------------- (HALT, NOP, INT) |
Tyto instrukce ovlivňují stav procesoru mikropočítače PETR. Umožňují ukončit program (HALT), vkládat prázdné instrukce (NOP) a ovládat přerušovací systém (INT).
Upozornění:
Příklady, uváděné u popisu jednotlivých instrukcí nejsou samostatné programy. Při jejich praktickém ověřování je proto třeba je buď krokovat, nebo vhodně ukončit např. instrukcí HALT.
|
|
kódování: | 07.aaa |
funkce: | ACC := ACC + MEM |
Přičteni dat uložených v paměti na uvedené adrese ke střadači. Je-li výsledek větší než 255, uloží se do střadače výsledek zmenšený o 256 a příznak F se nastaví na hodnotu 1. Jinak je hodnota příznaku F nula. |
Přiklad:
adr kód instrukce komentář ............................................................ 000 64.100 LDC 100 ;naplní ACC:=100 001 07.010 ADD 010 ;ACC:=100+50 , F:=0 002 07.011 ADD 011 ;ACC:=150+200 tedy | ;výsledek je ACC:=94 (tj.350-256) 010 00.050 ; a příznak F:=1 011 00.200
Všimněte si, že příznak F zde má význam přenosu při sčítání a lze jej tedy využit při sčítání větších čísel než 255.
|
|
kódování: | 10.aaa |
funkce: | F := (ACC = MEM) |
Porovná obsah střadače s hodnotou dat uložených na dané adrese. Jsou-li si obsahy rovny, nastaví se příznak F na hodnotu 1, jinak je hodnota příznaku F nula. |
Přiklad:
adr kód instrukce komentář ............................................................ 000 05.010 LDA 010 ;naplní ACC:=111 001 10.011 AEQ 011 ;ACC:<>222, tedy F:=0 002 10.010 AEQ 010 ;ACC:=111, tedy F:=l | 010 00.111 011 00.222
Poznámka:
Symbolický zápis F := (ACC = MEM) značí, že se vyhodnotí podmínka ACC=MEM a výsledek (tj. ano/ne) se zapíše jako hodnota příznaku F.
|
|
kódování: | 12.aaa |
funkce: | F := (ACC > MEM) |
Porovná obsah střadače s hodnotou dat uložených na dané adrese paměti. Je-li obsah střadače větší, nastaví se příznak F na hodnotu 1. Jinak se nastaví na hodnotu 0. Výsledkem instrukce je pouze nastavení příznaku F, obsah střadače ani paměti se při provedení instrukce nezmění. |
Přiklad:
adr kód instrukce komentář ............................................................ 000 04.001 LDC 001 ;naplní ACC:=1 001 06.005 STA 005 ;uloží na adresu 005 MEM:=1 002 12.005 AGT 005 ;ACC=1, tedy F:=0 003 12.006 AGT 006 ;AGC>0, tedy F:=1 | 005 xx.xxx 006 00.000
|
|
kódování: | 13.aaa |
funkce: | F := (ACC < MEM) |
Porovná obsah střadače s hodnotou dat uložených na dané adrese paměti. Je-li. obsah střadače menši, nastaví se příznak F na hodnotu 1. Jinak se nastaví na hodnotu 0. Výsledkem instrukce je pouze nastaveni příznaku F, obsah střadače ani paměti se při provedeni instrukce nezmění. |
Přiklad:
adr kód instrukce komentář ............................................................ 000 19.010 LDAI 010 ;naplní ACC:=33 001 13.010 ALT 010 ;ACC<40, tedy F:=1 002 13.040 ALT 040 ;ACC=33, tedy F:=0 | 010 00.040 | 040 00.033
[?4] Jsou tyto dva úseky programů funkčně stejné ?
| | (1) AEQ 100 (2) ALT 90 JF ANO JF NE NE: ... AQT 90 | JF NE ANO: ... JMP ANO NE: ... | ANO: ...
|
|
kódování: | 15.aaa |
funkce: | ACC := ACC and MEM |
Provede logickou operaci and s obsahem střadače a obsahem buňky paměti na dané adrese. Výsledek se uloží do střadače. (Oba parametry se rozvinou v binární soustavě na osmi bitech a provede se logická operace and na odpovídajících pozicích. Výsledek se interpretuje opět jako zápis čísla v binární soustavě.) Příznak F není ovlivněn. |
Přiklad:
adr kód instrukce komentář ............................................................ 000 04.015 LDC 015 ;naplní ACC:=15 (binárně 00001111) 001 15.010 AND 010 ;log. součin bude ACC = 00001111 | ; MEM = 00010001 | ; výsledek v ACC := 00000001 010 00.017 ;tj. binárně 00010001
Po provedení instrukce AND bude tedy ve střadači výsledek ACC = 001.
Pravdivostní tabulka pro logický součin je:
A | B | A and B |
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
|
|
kódování: | 23.aaa |
Vyvolání podprogramu na dané adrese. Do zásobníku návratových adres se automaticky uloží adresa instrukce následující za instrukcí CALL a ukazatel zásobníku se zvětší o jedničku. Při přeplnění zásobníku dojde k chybě E 005 a výpočet se zastaví. Jako podprogram lze s výhodou psát úsek programu, který by se jinak opakoval na několika místech programu. Podprogram obvykle končí instrukcí RET, která zajistí návrat zpět za instrukci CALL. Podprogramy lze do sebe vnořovat jak je znázorněno na obr. 2. Zásobník mikropočítače PETR umožňuje vnoření až 10 podprogramů. |
Přiklad:
adr kód instrukce komentář ............................................................ 000 23.100 CALL 100 ;testuje stav vstupní linky P14 001 11.000 JF 000 ;cyklus dokud je P14=1 002 01.000 HALT ;jinak STOP | 099 00.001 ;srovnávací konstanta 100 16.004 P1IN 004 ;přečte P14 do ACC 101 10.099 AEQ 99 ;porovná s konstantou 102 24.000 RET ;a vrátí se do hlavního programu
[?5] Kdy se v tomto programu nastavuje příznak F, který testuje instrukce JF ?
|
|
kódování: | 14.000 |
funkce: | ACC := 255 - ACC |
Obsah střadače je (bitově) invertován, do střadače se dosadí hodnota 255 - původní obsah střadače. Instrukce neovlivňuje příznak F. |
Přiklad:
adr kód instrukce komentář ............................................................. 000 04.003 LDC 003 ;naplní ACC:=003 (binárně 00000011) 001 14.000 CPL ; výsledek je ACC:=11111100
Tedy po provedení instrukce CPL bude ve střadači výsledek ACC=252.
|
|
kódování: | 02.rrr |
funkce: | zobrazení |
Instrukce DISP umožňuje zobrazení informací na sedmisegmentovém displeji, který je součástí stavebnice. Výpisy na displej lze tedy vytvářet přímo z programu. |
Podle adresní části instrukce se výpis provádí takto:
Přiklad:
adr kód instrukce komentář ............................................................. 000 04.123 LDC 123 ;ACC := 123 001 02.000 DISP 0 ;zapíše do 3 pravých pozic displeje Byl-li obsah displeje před zápisem [x] [x] [x] [x] [x] [x] bude po zápisu [x] [x] [x] [1] [2] [3]
segment dekadicky binárně ................................ - S0 - S0 = 4 00000100 | | S1 = 16 00010000 S5 S1 S2 = 128 10000000 | | S3 = 32 00100000 - S6 - S4 = 64 01000000 | | S5 = 8 00001000 S4 S2 S6 = 2 00000010 | | S7 = 1 00000001 - S3 - oS7
Obr. 3 Přirazeni segmentů
Tímto způsobem lze zapsat na libovolnou pozici displeje libovolný znak vytvořený kombinací svítících a zhasnutých segmentů.
Příklad: | ||||||||||||||||||||||||
|
Pro rozsvícení písmene S na pravé krajové
Úlohu řeší např. následující posloupnosi LDC 174 DISP 1 |
Obr. 4 Zobrazení dekadických cifer
6 5 4 3 2 1 Přiřazení displejů je [ ] [ ] [ ] [ ] [ ] [ ] pravý krajní
[?6] Tabulku pro zobrazeni písmen a symbolů si laskavé doplňte sami podle výše uvedeného návodu. Přitom tvary písmen lze volit různé, např. c lze zobrazit Jako [ ] nebo [ ] apod. Některá písmena se zobrazuji těžko, např. k Jako [ ] , některá zobrazit nelze - např. x.
písmeno | a | b | c | d | e | f | g | h | i | j | k | l | m |
tvar | |||||||||||||
hodnota |
písmeno | n | o | p | q | r | s | t | u | v | x | y | z | |
tvar | |||||||||||||
hodnota |
symbol | + | - | ? | ! | ° | ||||||||
tvar | |||||||||||||
hodnota |
číslice | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |||
tvar | |||||||||||||
hodnota |
|
|
kódování: | 01.000 |
Zastaví výpočet. V levé krajní pozici displeje se zobrazí písmeno H a adresa instrukce HALT, na níž byl program zastaven. Počítač přejde do režimu komunikace s obsluhou. |
Přiklad:
adr kód instrukce komentář ............................................................ 000 03.000 NOP 000 ;dvě prázdné instrukce 001 03.000 NOP 000 002 01.000 HALT ;zastavení programu Po zastavení tohoto programu se na displeji zobrazí zpráva: [H] [ ] [ ] [0] [0] [2]
Mikropočítač PETR čeká na zásah obsluhy. Instrukce HALT je jedinou instrukcí, kterou může rozpracovaný výpočet sám sebe ukončit. Jinak může být ukončen zásahem obsluhy nebo při chybě.
|
|
kódování: | 27.00i |
Instrukce umožňuje povolit nebo zakázat přerušení. Adresní část instrukce i může nabývat pouze hodnot 0 nebo 1. Přitom hodnota 0 znamená přerušeni zakázat, hodnota 1 přerušení povolit. | |
Přiklad: | Program cyklicky testuje klávesnici a je-li stisknuto nějaké tlačítko, zobrazí jeho kód do pravé části displeje (3 cifry). Při výskytu vnějšího přerušeni se program zastaví. Program začíná na adrese 001. Hned první instrukcí je povoleno přijmout žádost o přerušení. Při vnějším přerušení, které může nastat kdykoliv v průběhu programu, se skočí na adresu 000. Tam je připravena instrukce HALT, na které se program zastaví. |
adr kód instrukce komentář ............................................................ 000 01.000 HALT ;stop při vnějším přerušení 001 27.001 INT 1 ;začátek programu je od adresy 001 002 26.000 KEY ;dále v cyklu testovat 003 10.007 AEQ 007 ;a zobrazovat kódy tlačítek 004 11.002 JF 002 005 02.000 DISP 000 006 09.002 JMP 002 007 00.128 ;data pro testováni klávesnice ;128 je příznak, který vrací klávesnice, ;není-li stisknuto žádné tlačítko
Podrobně je princip přerušovacího systému a způsob jeho využití popsán v odstavci 2.1.
|
|
kódování: | 11.aaa |
Podmíněný skok na danou adresu. Je-li hodnota příznaku F rovna 1, potom se provede skok na adresu uvedenou v instrukci. Jinak se pokračuje v sekvenčním vykonávání instrukcí, tj. provede se další v programu zapsaná instrukce. Hodnota příznaku F ani střadače se při tom nemění. | |
Přiklad: | Vyhledání položky v tabulce podle obsahu střadače. |
adr kód instrukce komentář ............................................................ 000 06.050 STA 50 ;uleží hledanou položku na adr. 50 001 04.100 LDC 100 ;ACC:=100 (směrník do tabulky) 002 06.099 STA 99 ;uloží směrník do tabulky 003 19.099 LDAI 99 ;ACC:=první položka z tabulky 004 10.050 AEQ 50 ;porovnat s hledanou hodnotou 005 11.011 JF 012 ;položka nalezena ? 006 05.099 LDA 99 ;ne 007 07.051 ADD 51 ;posunout směrník na další položku 008 10.098 AEQ 98 ;test na konec paměti 009 11.011 JF 011 ;chyba - konec paměti (128 buněk) 010 09.002 JMP 002 ;jinak zkusit další položku 011 01.000 HALT ;STOP při chybě 012 | ;adresa nalezené položky je ; v paměti na adrese 99 ................................... 050 00.xxx ;hledaný vzor 051 00.001 ;délka položky v tabulce | 098 00.127 ;omezovač prohledávání 099 00.xxx ;směrník do tabulky 100 00.aaa ;1.položka tabulky 101 00.bbb ;2. položka tabulky | | atd.
|
|
kódování: | 09.aaa |
Instrukce způsobí nepodmíněný skok na danou adresu. | |
Přiklad: |
adr kód instrukce komentář ............................................................ 000 04.000 LDC 000 ;naplní ACC:=0 001 07.100 ADD 100 ;upraví obsah ACC:=ACC+001 002 11.004 JF 004 003 09.001 JMP 001 ;cyklus výpočtu 004 01.000 HALT ;stop při přeplnění střadače | 100 00.001
V příkladu je naprogramován cyklus, který neustále zvětšuje obsah střadače o jedničku. Přeplněni střadače lze zjistit podle příznaku F=1. Po přeplněni střadače se program zastaví na instrukci HALT.
[?7] Jaký bude obsah střadače v okamžiku, kdy se program zastaví na instrukci HALT, a proč ?
|
|
kódování: | 21.aaa |
Nepodmíněný nepřímý skok. Cílová adresa skoku je uložena v operační paměti na dané adrese. | |
Přiklad: |
adr kód instrukce komentář ............................................................ 000 06.010 STA 010 ;uloží obsah ACC=xxx na adresu 010 001 21.010 JMPI 010 ;nepřímý skok na adresu xxx | 010 00.xxx | xxx ;cíl skoku
Nepřímý skok lze výhodně použit například pro větveni programu podle vypočtené hodnoty střadače nebo podle stavu vstupních linek mikropočítače a podobně.
[?8] Popište funkci takto zapsané instrukce:
adr kód instrukce komentář ............................................................ 003 21.003 JMPI 003 ; ?
|
|
kódování: | 25.aaa |
Podmíněný skok na danou adresu. Je-li hodnota vstupní linky T0 rovna 1, potom se provede skok. Jinak se pokračuje v sekvenčním vykonávání instrukci, tj. provede se další instrukce zapsaná v programu. Hodnota příznaku F ani obsah střadače se při tom nemění. | |
Přiklad: | Měřeni doby trváni pulzu na vstupní lince T0. |
adr kód instrukce komentář ............................................................ 000 04.000 LDC 000 ;počáteční hodnota střadače ACC=0 001 29.001 JT 001 ;čekat dokud není T0=0 002 03.002 NOP 002 ;prodleva 2*1,28 milisec. 003 07.006 ADD 006 ;zvětšit obsah střadače 004 25.007 JT 007 ;konec pulzu ? 005 09.002 JMP 002 ;ne, měřit dále 006 00.001 007 | ;pulz trval dobu τ = ACC * 2,56 [ms] 1 --------+ τ +-------- T0 | <.......> | 0 +-----------+
Nepřesnost měřeni je dána dobou trváni instrukcí ADD, JT a JMP. Provedení každé z těchto instrukci trvá zhruba 200 až 400 µs.
Jedna a táž instrukce může mít v různých případech proměnnou délku trváni. To je způsobeno vnitřním zapojením mikropočítače PETR. Konkrétně cyklickou obsluhou klávesnice a displeje, která probíhá asynchronně s činnosti procesoru a může Již rozpracovanou instrukci přerušit a pozdržet.
|
|
kódování: | 26.000 |
funkce: | ACC := stav klávesnice |
Instrukce přečte stav klávesnice a uloží ho do střadače. Je-li stisknuto některé tlačítko, uloží se do střadače jeho kód. Jinak se do střadače zapíše hodnota 128. Stisk tlačítka se detekuje právě jednou při každém zmáčknutí, klávesnice tedy nemá funkci "auto repeat" (dlouhodobé stisknutí tlačítka není tedy ekvivalentní řadě opakovaných stisků). Při čtení klávesnice se provádí automaticky filtrace možného chvění při stisku a puštění tlačítka. Výše uvedeným způsobem nelze přečíst klávesu (END), protože ta způsobí zastavení běžícího programu. |
Jednotlivá tlačítka jsou kódována takto:
Obr. 5 Klávesnice stavebnice PETR
Tlačítko (RESET) vyvedeno samostatně a přímo ovládá stejnojmenný signál na desce mikropočítače PETR. Proto není zapojeno do matice spolu s ostatními tlačítky, nelze jej tedy číst programem.
Přiklad: Program pro zobrazováni kódu Jednotlivých tlačítek na displeji může mít např. tento tvar:
adr kód instrukce komentář ............................................................ 000 26.000 KEY ;přečíst stav klávesnice do ACC 001 10.010 AEQ 010 ;Je stisknuté tlačítko? 002 11.000 JF 000 ;číst znovu 003 02.000 DISP 000 ;ano, zobrazit až do 004 09.000 JMP 000 ; stisknuti dalšího tlačítka | 010 00.128 ;konstanta pro test stavu klávesnice
[?9] Upravte program tak, aby se po stisknuti tlačítek (0), (1), (2) nebo (3) zastavil !
|
|
kódování: | 05.aaa |
funkce: | ACC := MEM |
Naplní střadač ACC daty, umístěnými na dané adrese pamětí. Data musí být v paměťové buňce uložena v její adresní/datové části. Je-li adresa z intervalu 128 až 255, čtou se data z přídavné paměti (obvodu 8155). Není-li vnější paměť osazena, hlásí se chyba E 002 |
Přiklad:
adr kód instrukce komentář ............................................................ 000 05.100 LDA 100 ;naplní střadač obsahem adresy 100 ; po provedení bude ACC:= 123 001 05.130 LDA 130 ;není-li osazena vnější paměť 8155, ; ohlásí se při zpracováni této | ; instrukce chyba E 002 - pokus ; o čtení z paměti mimo rozsah ; (0-127), jinak bude ACC:=321 100 00.123 ; data | 130 00.321 ; data
|
|
kódování: | 19.aaa |
funkce: | ACC := @MEM |
Naplní střadač daty, jež jsou uložena v paměťové buňce jejíž adresa se přečte z adresy dané operandem aaa instrukce LDAI. Je-li adresa z intervalu 128 až 255, čtou se data z přídavné paměti (obvodu 8155). Není-li vnější paměť osazena, hlásí se chyba E 002 |
Přiklad:
adr kód instrukce komentář ............................................................ 000 19.100 LDAI 100 ;naplní střadač z adresy 110 ;po provedení bude ACC:=234 | 100 00.110 | 110 00.234
[?10] Jaký výsledek bude mít instrukce LDAI ležící na adrese dané operandem, tedy například:
adr kód instrukce .......................... 001 19.001 LDAI 001 ; ???
|
|
kódování: | 04.ccc |
funkce: | ACC := CONST |
Náplni střadač konstantou, která je uvedena jako operand ccc instrukce. Tato konstanta musí být v rozsahu 0 až 255. |
Přiklad:
adr kód instrukce komentář ............................................................ 000 04.000 LDC 000 ;vynulováni střadače
Přiklad: Výpis zprávy "Stop" doprostřed displeje:
adr kód instrukce komentář ............................................................ 000 04.174 LDC 174 ; "S" .. 4+8+2+128+32=174 001 02.005 DISP 5 002 04.106 LDC 106 ; "t" .. 8+64+2+32=106 003 02.084 DISP 4 004 04.226 LDC 226 ; "o" .. 2+64+128+32=226 005 02.003 DISP 3 006 04.094 LDC 094 ; "p" .. 4+16+8+2+64=94 007 02.002 DISP 2 008 09.008 JMP 008 ;program nemůže končit instrukci ;HALT, protože by se nápis "Stop" ;vzápětí přepsal zprávou ;o zastaveni programu
Pozn.: Původní obsah levého a pravého místa displeje se nemění.
|
|
kódování: | 03.ddd |
funkce: | |
Pozastavení výpočtu na dobu danou parametrem. Prodleva se měří v jednotkách 1,28 milisekundy, hodnota parametru musí být v rozmezí 0 až 255. První "tik" hodin při čekání může mít kratší délku. Proto doba prodlevy t leží v intervalu 1,28 * (p-1) < τ < 1,28 * p [ms] pro hodnotu parametru p=1 až 255. Pro p=0 je prodleva zhruba 0,2 až 0,4 [ms]. | |
Přiklad: | Podprogram pro prodlevu cca 1 sekundy lze vytvořit např.takto: |
adr kód instrukce komentář ............................................................ 100 03.255 T1: NOP 255 101 03.255 NOP 255 102 03.255 NOP 255 103 03.016 NOP 16 ;čekat 781 * 1,28 = 999,68 [ms] 104 24.000 RET ;návrat z podprogramu
Podprogramy bývá zvykem (obdobně jako cílová místa skoků) označovat návěštím. V našem případě je návěští, nebo též jméno podprogramu, T1. Takový podprogram se pak volá instrukci CALL T1 (= CALL 100), jejíž kód by byl 23.100 .
|
|
kódování: | 22.aaa |
funkce: | ACC := ACC or MEM |
Provede logickou operaci or s obsahem střadače a obsahem buňky paměti na dané adrese. Výsledek se uloží do střadače. (Oba operandy se rozvinou v binární soustavě a provede se logická operace or na odpovídajících pozicích. Výsledek se interpretuje opět jako zápis čísla v binární soustavě). Příznak F není ovlivněn. |
Přiklad:
adr kód instrukce komentář .............................................................. 000 04.252 LDC 252 ;naplní ACC:=252, (binárně 11111100) 001 22.100 OR 100 ;log. součet bude ACC = 11111100 | ; MEM = 00000001 100 00.001 ; výsledek v ACC := 11111101
Po provedeni instrukce OR bude tedy ve střadači výsledek ACC=253.
Pravdivostní tabulka pro logický součet je:
A | B | A or B |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
|
|
kódování: | 16.ppp |
funkce: | ACC := P1 |
Linky portu P1 lze s jistým omezením používat současně jak jako vstupní, tak jako výstupní (kvazibidirectional port). Omezeni spočívá v tom, že před čtením libovolné linky je do ni třeba zapsat 1, jinak by 0 ve výstupní paměti linky stahovala vstupní úroveň vždy na 0. Jednou zapsaná 1 do výstupní paměti se čtením linky nemění a platí do nejbližšího dalšího zápisu nezávisle na čteni téže linky. Instrukce P1IN čte stav portu P1 do střadače. Je-li parametr instrukce ppp-8, přečte se stav všech osmi linek a jako binární číslo se přepíše do střadače. Je-li parametr z intervalu 0 až 7, přečte se pouze stav vybrané linky P10 až P17 a přepíše se do střadače. Ten pak obsahuje pouze hodnotu 0 nebo 1. Pro jinou hodnotu parametru ppp se výpočet přeruší na chybě E 004 (operand mimo povolený rozsah). Obdobná instrukce pro čteni portu P2 neexistuje, protože port P2 je pouze výstupní. Stav linek P20 až P27 nelze tedy programem číst. |
Přiklad:
adr kód instrukce komentář ............................................................... 000 04.253 LDC 253 ;ACC := 1111 1101 001 17.008 P1OUT 008 ;zapíše 1111 1101 na linky P17 až P10 002 16.008 P1IN 008 ;ACC := xxxx xx0x ;stav linek P17 .. P12 a P10 ; záleží na vnějším zapojeni ;na lince P11 se čte 0 nezávisle ; na vnějším zapojeni 003 16.001 P1IN 001 ;čteni linky P11 samostatně↓ ; ACC := 0000 0000
|
|
kódování: | 17.ppp |
funkce: | P1 := ACC |
Instrukci se zapisuje obsah střadače na port P1 takto: je-li parametr instrukce ppp-8, zapíše se obsah střadače současně na všech 8 linek portu P1. Přitom na každou linku se zapíše vždy hodnota příslušného bitu binárního rozvoje střadače. Je-li adresní část z intervalu 0 až 7, zapíše se obsah střadače vždy na jedinou vybranou linku P10 až P17. Obsah střadače musí. být v tomto případě roven 0 nebo 1, jinak dojde k chybě E 004 a výpočet se zastaví. |
Přiklad:
adr kód instrukce komentář ............................................................... 000 04.016 LDC 016 ;naplní ACC := 00010000 001 17.008 P1OUT 008 ;zapíše vzorek 00010000 ; na linky P17 až P10 002 04.001 LDC 001 ;ACC := 1 003 17.000 P1OUT 000 ;zápis na linku P10 ; nyní bude P1=00010001
|
|
kódování: | 18.ppp |
funkce: | P2 := ACC |
Instrukce je obdobná jako P1OUT s tím, že se obsah střadače zapisuje na příslušné linky portu P2. | |
Přiklad: | Program pro "putující jedničku na portu P2. Všechny linky jsou nulové s výjimkou jediné, která se v sekundových intervalech cyklicky posunuje počínaje od P20. |
adr kód instrukce komentář ............................................................... 000 04.001 LDC 001 ;ACC := 0000 0001 001 18.008 P20UT 8 ;přepsat vzorek na port P2 002 23.100 CALL 100 ;čekat 1 sec ! ;podprogram T1 viz popis instrukce NOP 003 06.010 STA 010 ;uložit obsah ACC 004 07.010 ADD 010 ;ACC:=2*ACC tím se jednička ;posune o jedno místo doleva 005 11.000 JF 000 ;posun z P27 na P20 006 09.001 JMP 001 ;jinak rovnou výpis | 010 00.xxx ; pomocná datová buňka
[?11] Napište úsek programu pro kopírování obsahu portu P1 na port P2.
|
|
kódování: | 24.ppp |
funkce: | |
Návrat z podprogramu na adresu, která je uložena na vrcholu zásobníku. Po vyzvednutí návratové adresy se hodnota ukazatele zásobníku sníží o 1. Je-li v okamžiku provádění této instrukce zásobník prázdný, dojde k chybě E 006 a výpočet se zastaví. | |
Přiklad: |
adr kód instrukce komentář ............................................................... 000 03.000 NOP 000 ;prázdná instrukce hlavního progr. 001 23.005 CALL 005 ;vyvolání podprogramu na adr. 005 002 24.000 RET ;nyní nastane chyba, zásobník je ; prázdný a program se zastaví | 005 24.000 RET ;tento podprogram neudělá nic ; jiného než návrat zpět ; za instrukci CALL
[?12] Proč se u instrukce RET neudává adresa, ze které má program dále pokračovat ?
|
|
kódování: | 06.aaa |
funkce: | MEM := ACC |
Uloží obsah střadače do paměti na danou adresu. Je-li adresa z intervalu 128 až 255, čtou se data z přídavné paměti (obvodu 8155). Není-li vnější paměť osazena, hlásí se chyba E 002
| |
Přiklad: |
adr kód instrukce komentář ............................................................... 000 05.100 LDA 100 ;zkopíruje obsah paměti z adresy 001 06.050 STA 050 ;100 na adresu 050
Přiklad: | Podprogram pro násobení obsahu střadače deseti, výsledek je opět ve střadači. Pokud byl původní obsah střadače větší než 25, dojde při násobení k přetečení. To je signalizováno příznakem F=1. |
adr kód instrukce komentář ............................................................... 000 06.020 STA 020 ;uložit ACC=X na adresu 20 001 07.020 ADD 020 ;ACC := 2*X 002 11.012 JF 012 ;chyba ? 003 06.021 STA 021 ;ne, uložit ACC 004 07.021 ADD 021 ;ACC := 4*X 005 11.012 JF 012 ;chyba ? 006 07 020 ADD 020 ;ACC := 4*X+X=5*X 007 11.012 JF 012 ;chyba ? 008 06.021 STA 021 ;uložit ACC 009 07.021 ADD 021 ;ACC := 10*X 010 11.012 JF 012 ;chyba ? 011 01.000 HALT ;ne, v pořádku 012 01.000 HALT ;chyba přetečení i | 020 00.xxx ;pomocná datová buňka 021 00.xxx ;pomocná datová buňka
|
|
kódování: | 20.aaa |
funkce: | @MEM := ACC |
Uloží obsah střadače do paměťové buňky, jejíž adresa je uložena v buňce adresované instrukcí STAI. Je-li adresa z intervalu 128 až 255, čtou se data z přídavné paměti (obvodu 8155). Není-li vnější paměť osazena, hlásí se chyba E 002
| |
Přiklad: |
adr kód instrukce komentář ............................................................... 000 05.033 LDA 033 ;naplní ACC:=111 001 20.033 STAI 033 ;na adr. 111 uloží obsah střadače | 033 00.111 | 111 00.111 ;tedy @033:=111
Poznámka: Instrukce STAI a LDAI umožňují nepřímé adresováni paměti a hodí se proto zvláště pro práci s tabulkami.
|
|
kódování: | 08.aaa |
funkce: | ACC := ACC - MEM |
Odečteni dat uložených v paměti na uvedené adrese od střadače. Je-li výsledek záporný, uloží se do střadače zvětšený o 256 a nastaví se příznak F=l. Jinak je F=0. | |
Přiklad: |
adr kód instrukce komentář ............................................................... 000 04.011 LDC 011 ;ACC=11 001 08.010 SUB 010 ;ACC:=11-6 , F:=0 002 08.010 SUB 010 ;ACC:=5-6 ;výsledek bude ACC:=255 (tj.-1+256) 010 00.006 ;a příznak F:=1
Všimněte si, že příznak F zde má význam výpůjčky při odčítání a lze jej tedy využít při odčítáni takových čísel, jejichž rozdíl by byl záporný.
Po zapnutí sestavené a oživené stavebnice (podle návodu v kap. 6) je mikropočítač PETR připraven k činnosti. Obsluha zadává jednotlivé příkazy stisknutím příslušných tlačítek na fóliové klávesnici. Nápovědné zprávy o stavu mikropočítače nebo o případných chybách se pak zobrazují na segmentovém displeji.
Stav, ve kterém lze zadat příkaz, je indikován nápovědným písmenem C v levém krajním místě displeje [C] [ ] [ ] [ ] [ ] [ ] [ ]
Obsluha může nyní prostřednictvím příkazů: | ||||
(MEM) | prohlížet a měnit obsah paměti mikropočítače, | |||
(ACC) | \ | prohlížet a měnit stav procesoru: střadač ACC, čítač | ||
} | adres PC, příznak F a ukazovátko do zásobníku SP; | |||
(PC ) | / | nelze měnit obsah zásobníku, | ||
(RUN) | spustit program od libovolné adresy, | |||
(STEP) | krokovat program od libovolné adresy. tj. nechat provést jen jednu zvolenou instrukci a | |||
(LQAD) | \ | použít kazetový magnetofon pro zapsání programu na | ||
(SAVE) | / | kazetu nebo naopak pro načteni programu do paměti. |
Při prováděni zvoleného příkazu je na displeji zobrazena odpovídající nápovědná zpráva. Výjimkou jsou pouze oba příkazy pro práci s kazetovým magnetofonem, při kterých je displej zhasnutý.
Modifikační příkazy (pro prohlíženi a zněnu obsahu paměti, ACC, PC, F a SP) zobrazí na displeji současný stav a očekávají, že obsluha zadá novou hodnotu. Nová hodnota se zadává jako posloupnost číslic, zadáváni se ukončí jedním z omezovačů (NEXT). (PREV) nebo (END). Nechcete-li současnou hodnotu měnit, zadejte pouze omezovač. Během vkládání nové hodnoty ukazuje desetinná tečka, kolik číslic se očekává. Zadáváte-li více cifer, předchozí zadané číslice se posunují doleva a nejstarší cifry se ztrácejí. Zadáte-li méně číslic než se očekává, doplní se číslo zleva nulami. Činnost všech modifikačních příkazů lze v libovolném okamžiku ukončit tlačítkem (END).
Volba ostatních příkazů se provádí pouze stisknutím odpovídajících tlačítek. Dále je uveden abecedně seřazený podrobný popis jednotlivých příkazů. U každého příkazu je kromě popisu uvedeno i přehledné grafické vyjádření jeho funkce.
Důležité
Všechna čísla zadávaná i vypisovaná jsou čísla v dekadické soustavě !. Uvnitř počítače PETR se skládají vždy do jednoho osmibitového bytu jako celé číslo bez znaménka. Proto musí být čísla vždy v rozsahu (0 až 2S5). Mají-li vkládané hodnoty význam instrukcí, pamatujte, že některé instrukce požadují parametry v rozsahu (0 až 1) nebo (0 až 8).
Počáteční nastavení mikropočítače
Po připojení napájení se mikropočítač PETR uvede do počátečního stavu. Na displeji sviti [ ] [ ] [ ] [ ] [ ] [ ] [ ] a počítač očekává zásah obsluhy.
Do počátečního stavu lze mikropočítač PETR uvést také kdykoli během činnosti stisknutého tlačítka (RESET) .Přitom se ale vždy vymaže program uložený v mikropočítači PETR !
|
|
Obsluze jsou dostupné čtyři části procesoru: střadač ACC. čítač instrukcí PC, příznak F a ukazatel zásobníku SP. Tyto čtyři části jsou z hlediska ovládáni uspořádány do kruhu. po němž se obsluha posunuje tlačítky (NEXT) a (PREV) . V každém okamžiku se pracuje s části procesoru, znak v levém krajním místě displeje pak napovídá, se kterou. Příkaz lze v libovolném okamžiku ukončit klávesou (END).
Protože se nejčastěji prohlíží obsah střadače a čítače instrukcí, jsou do "modifikačního kruhu" dva vchody: příkaz (ACC) začne zobrazením a modifikaci střadače, přikaž (PC) začíná čítačem instrukci. Příznak F a ukazatel zásobníku jsou dostupné oběma příkazy a opakovaným stisknutím (NEXT) nebo (PREV) podle uvedeného diagramu.
|
|
Příkaz (LOAD) je určen pro čtení programu z kazetového magnetofonu. Přečte jednu magnetofonovou nahrávku a její obsah uloží do paměti počítače. Čtecí program se sám synchronizuje na počátku nahrávky a automaticky se přizpůsobí i polaritě magnetofonu. Nesouhlasí-li kontrolní součet, jímž je každá nahrávka zajištěna, ohlásí se chyba E 007 . Čtení nahrávky trvá několik sekund a během čtení dat z magnetofonu je displej zhasnutý.
Záznam na magnetofonovém pásku musí být pořízen bud ukládáním příkazem (SAVE) mikropočítače PETR, nebo speciálním záznamovým programem mikropočítače IQ 151 (viz kap. 3). Program je na magnetofonovém pásku uložen v jednom bloku, který má úvodní synchronizační úsek, datovou část a kontrolní součet. Bloky nemají hlavičky ani jiné identifikační značky a nemohou být tedy automaticky vyhledávány. Před čtením příkazu (LOAD) Je třeba připojit magnetofon a přetočit kazetu kamkoli před čtený blok. Při ukládání více programů je užitečné namluvit před jednotlivé bloky jejich označení a tím usnadnit zpětné vyhledávání. Jeden blok obsahuje vždy obsah celé paměti mikropočítače PETR.
|
|
Po vyvolání příkazu se nejprve musí zadat adresa místa v paměti, které chceme prohlížet nebo měnit. Zobrazí se implicitní adresa - poslední použitá adresa v předchozím příkazu MEM . Tuto adresu můžeme ponechat, nebo zadat jinou. Po stisku omezovače (NEXT) se zobrazí obsah buňky paměti na zvolené adrese. Ten můžeme ponechat anebo změnit.
Tlačítky (NEXT) a (PREV) pak lze v paměti krokovat směrem k vyšším nebo nižším adresám, omezovačem (END) se příkaz ukončí.
|
|
Příkazem (RUN) se spustí program uložený v paměti počítače, počínaje adresou uloženou v čítači instrukcí PC . Běžící program je možno kdykoli zastavit tlačítkem (END) . Tím program přejde do režimu krokování ( viz příkaz (STEP) ). Bezprostředně po spuštění programu příkazem (RUN) se v levém krajním místě displeje rozsvítí čtvereček jako příznak, že program běží. Tato nápovědná zpráva je na displeji zobrazena dokud Ji program sám nepřepíše, nebo dokud ji nepřepíše zpráva o zastavení programu.
[?13] Jak lze spustit program z konkrétní adresy, řekněme 123 ? Lze program spustit od adresy 300 ?
|
|
Příkazem (SAVE) se obsah celé paměti počítače (a tedy i program) zapíše na kazetový magnetofon. Záznam lze přečíst zpět do počítače příkazem (LOAD) Během nahrávání na magnetofon je displej zhasnutý. Délka nahrávky jsou necelé 3 sekundy.
Způsob záznamu dat na magnetofonovou kazetu je u stavebnice PETR stejný jako u školního mikropočítače IQ-151. Na magnetofonové kazetě je tedy možno přenášet data mezi oběma počítači.
Program je na magnetofonovém pásku uložen v jednom bloku, který má úvodní synchronizační úsek, datovou část a kontrolní součet. Bloky nemají hlavičky ani jiné identifikační značky a nemohou být tedy automaticky vyhledávány. Před zadáním příkazu je třeba připojit magnetofon a přetočit kazetu před volné místo k uložení záznamového bloku. Při ukládání více programů je užitečné namluvit před jednotlivé bloky jejich označení a tím usnadnit jejich zpětné vyhledávání. Jeden blok obsahuje vždy obsah celé paměti mikropočítače PETR.
|
|
Tlačítkem (STEP) programátor krokuje svůj program. Po každém kroku se na displeji zobrazí hodnota čítače instrukcí (tj. adresa následující instrukce). Dalším stiskem (STEP) se pokračuje v krokování, stisk jiného tlačítka krokování ukončí a způsobí přechod do základní příkazové smyčky, v níž si můžete podrobněji prohlédnout stav výpočtu.
Obdobně jako u příkazu (RUN) je i u příkazu (STEP) adresa prvního kroku dána čítačem adres PC. Ten je možno předem nastavit stejnojmenným příkazem ( PC ) na adresu, odkud zamýšlíme program krokovat.
Při práci s mikropočítačem PETR mohou nastal, chyby dvojího druhu. Jednak jsou to chyby způsobené nesprávnou obsluhou, jednak chyby vzniklé v průběhu zpracováni programu. (Druhý typ chyb se běžně označuje jako "Run-Time Errors" - tedy chyby vzniklé v době běhu programu).
Pokud je to možné, detekuje řídící program mikropočítače chyby v okamžiku jejich vzniku a nikoliv až v době, kdy by se projevily. Protože však bylo nutno řídicí program zkrátit, vyhodnocují se pouze nejdůležitější chyby. V přiloženém výpisu řídicího programu může pozorný čtenář dohledat některé potlačené testy chybových stavů.
V okamžiku, kdy je zjištěna chyba, systém ukončí dosavadní činnost (například přeruší provádění programu) a na displeji zobrazí zprávu [E][ ][ ][0][0][x] kde x je číslo chyby. Číslo chyby charakterizuje prohřešek, kterého se obsluha resp. programátor dopustil.
Číselník chyb:
Stiskem tlačítka (END) odstraníte chybové Hlášení a mikropočítač PETR přejde do základní příkazové smyčky. Došlo-li k chybě v běžícím programu, čítač instrukci PC obsahuje adresu instrukce, která chybu způsobila.
Příklad: Odstranění zprávy o chybě a příčiny chyby [E][ ][ ][0][0][6]
[?14] Může dojít k chybě E 006 (prázdný zásobník) při zpracování tohoto programu ?
adr kód instrukce komentář ............................................................... 000 23.010 CALL 010 ;volání podprogramu 001 09.000 JMP 000 ; stále dokola | | 010 04.001 LDC 001 ;podprogram pro výpis vzorku 011 17.008 P1OUT 8 ; 0000 0001 -> port P1 012 24.000 RET ;konec podprogramu
Tato kapitola je určena těm zkušenějším zájemcům, kteří chtějí využit stavebnici jako universální systém s jednočipovým mikropočítačem řady 8048. Takové využití, včetně úprav obvodového zapojení a modifikace řídicího programu, předpokládá hlubší znalosti. Proto i text této kapitoly je stručnější a možná i méně názornější. Je však v příloze doplněn seznamem odkazů na další odbornou literaturu. Vybrány jsou výhradně v češtině resp. slovenštině psané, texty.
Popis technického řešení stavebnice PETR lze rozdělit na popis mechanického uspořádání a popis obvodového zapojení.
Mechanické uspořádáni stavebnice PETR
Stavebnice PETR je navržena pro umístění do skříňky od stolní kalkulačky (výrobek Tesla Bratislava). Skříňka se skládá ze dvou dílů, přičemž na horní díl je připevněna fóliová klávesnice se samolepicí vrstvou, konektor DIN pro připojení magnetofonu a přepínač.
Spodní díl má upravenou zadní stěnu výřezem, kterým vystupuje základní deska kontaktním uživatelským polem. Toto uspořádání umožňuje snadné připojení mikropočítače PETR do vnějšího prostředí.
Oba dva díly jsou spojeny šrouby přes úhelníky, vložené do výřezů horního dílu skříňky.
Obvodové zapojeni mikropočítače PETR
Obvodové zapojeni mikropočítače (viz schémata zapojení v příloze) lze rozdělit na napájecí část, vlastní zapojení mikropočítače, obvod klávesnice a displeje a obvod styku s magnetofonem.
Hapájeci část
Napájecí obvod je tvořen můstkovým usměrňovačem s diodami D9 až D12, filtračními kondenzátory C1 až C4 a integrovaným stabilizátorem IO4 typu MA 7805 (blokovaný proti rozkmitání kondenzátory Cl5 a C16).
Pro správnou činnost mikropočítače je třeba na vstup zdroje připojit napětí 9 až 12V (stejnosměrné nebo střídavé) s min. výstupním proudem 350 mA.
Technické parametry zdroje:
vstupní napětí | 9 až 12V =~ / 350 mA |
výstupní napětí | 5V = |
Vlastní zapojeni mikropočítače
Obvod mikropočítače tvoří dva integrované obvody IO1 a IO2. Obvod IO2 je jednočipový mikropočítač rady 48 řízený krystalem 6 MHz s pamětí programu ROM/EPROM 1 KB na čipu. V paměti programu na čipu mikropočítače je uložen ovládací monitor a interpret příkazů stavebnice PETR.
Brána P1 mikropočítače je vyvedena na kontaktní uživatelské pole jako obousměrná bitové ovládaná sběrnice (označovaná jako port P1). Na kontaktní uživatelské pole jsou také vyvedeny vstupní signály T0 a INT. Vstupní signál T0 je v klidovém stavu na úrovni H (logická 1) a lze jej testovat z programu mikropočítače PETR. Vstupní linka INT je testovatelný vstup vnějšího přerušení. V klidu je na úrovni H. Instrukcí INT lze povolit vnější přerušení., které nastane při přechodu signálu INT na úroveň L (logická 0). S využitím přerušení může program efektivně obsluhovat vnější události.
Propojkou na vstupní lince T1 je možno modifikovat řídicí program stavebnice PETR - viz odst. 4.2. Drátěnou propojkou je vybavena také vstupní linka EA, kterou lze programové vybavení stavebnice úplně vyřadit. Pak je ale nezbytné doplnit vlastní řídicí program a umístit jej do vnější paměti EPROM v přídavné destičce. Vstupní signál Reset (RST) je aktivován automaticky při zapnutí napájecího napětí (vliv C7) nebo pomocí spínacího tranzistoru TIS samostatně vyvedeným tlačítkem foliové klávesnice (RST). Trojice signálů obvodu 102 RST, SS, a ALE je vyvedena na pájecí body základní desky. Tyto signály slouží pro připojení krokovacího přípravku (ten není součástí stavebnice).
Zapojeni klávesnice a displeje
Datovou sběrnicí a signály RD, WR, ALE, P2.2 a P2.3 je k mikropočítači IO2 připojen programovatelný obvod IO1 MHB8155.
Obvod IO1 obsahuje paměť 128 buněk mikropočítače PETR, výstupní 8 bitovou bránu A (označenou pro port P2) vyvedenou na uživatelské kontaktní pole. Dále obsahuje bránu B a C určenou pro obsluhu klávesnice a displeje a čítač, který není pro stavebnici PETR využit (vstup a výstup čítače je pouze vyveden na pájecí body TIN, TOUT).
Brána B ovládá přes spínací tranzistory T1 až T8 svítící segmenty číslicovek LED, brána C pres spínací tranzistory T9 až T14 připojuje napájecí napětí na jednotlivé číslicovky a současně přivádí úroveň L na jeden ze šesti sloupců maticově zapojené klávesnice.
Zbývající dvě tlačítka foliové klávesnice (STEP) a (END) jsou aktivována úrovní na lince P2.4 obvodu IO2. Tři řady klávesnice jsou potom programově testovány na linkách P2.5, P2.6 a P2.7 obvodu IO2.
Připojení kazetového magnetofonu
Základní deska mikropočítače obsahuje obvody pro připojení kazetového magnetofonu. Výstupní signál na lince P1.1 obvodu IO2 je tvarován obvodem R38, C10, R39, R40 a vyveden na dutinku č.1 konektoru DIN. Čtený signál z magnetofonu (dutinka č.3 konektoru DIN) je zesílen operačním zesilovačem IO3, tvarován tranzistorem T16 a snímán na lince P1.0 obvodu IO2. Oba signály slouží alternativně jako programovatelné porty uživatelského pole a pro funkci magnetofonu jsou proto přepínány přepínačem P.
Rozšířeni obvodového zapojení stavebnice
Na základní desce mikropočítače je možno osadit konektor K2, na který je vyvedena sběrnice všech signálů vhodných pro připojení libovolného programovatelného obvodu (8155, 8243 ...) a vnější paměti EPROM 2 KB nebo 4 KB.
Stavebnici PETR lze tak modifikovat na specializovaný řidiči mikropočítač se zcela odlišným programem a použitím.
Technické parametry mikropočítače PETR
Dále uvedený popis řídicího programu vysvětluje především vazbu programu na obvodové zapojení stavebnice popsané v odst. 4.1. Je popsána celková koncepce řídicího programu tak. aby se čtenář mohl orientovat v přiloženém výpisu řídicího programu. Listing je podrobně komentován tak, aby bylo možno sdílet jeho již hotové podprogramy i z dodatečně doplněných aplikačních programů. Listing záměrně neobsahuje definice těl využívaných makroinstrukcí jejichž, znalost není nutná a dále výpis ovladače kazetového magnetofonu na fyzické úrovni, který není určen ke zveřejnění.
Úloha řídicího programu
Obvodové zapojení mikropočítače PETR, tak jak je popsané v odst. 4.1, tvoři základ počítače, který uživatel bude programovat. Bývá zvykem, že uživatel nepracuje "na holém hardware", ale že pracuje v nějakém již vytvořeném programovém prostředí, které mu poskytuje základní služby a pomoc při provozování a někdy i při tvorbě programů.
Základní programové vybaveni počítače by mělo uživateli umožnit alespoň:
Kromě toho by základní programové vybavení mělo poskytovat podprogramy pro ovládáni periferií počítače.
Úlohu základního programového vybavení stavebnice PETR musí plnit řídicí program vložený do jednočipového mikropočítače 8048. Je však otázkou, jak by měl uvedené funkce realizovat. K tomu lze přistoupit různými způsoby, z nichž . každý má své výhody i nevýhody.
Nejjednodušší možností je nechat uživatele programovat přímo mikropočítač 8048. Uživatel by svůj program umístil do pevné paměti EPROM a tu by zasunul do patice ve stavebnici. Po zapnuti systému by mikropočítač začal jeho program vykonávat. V lepším případě je možno uživateli připravit několik základních podprogramů pro obsluhu periferních zařízení (klávesnice, displeje, magnetofonu), případně ještě některé další užitečné rutiny (kolik se jich vejde do vnitřní paměti mikropočítače). Uživatelův program ve vnější paměti by pak mohl tyto připravené podprogramy vyvolávat.
Obě uvedená řešení však umožňují pouze provozovat programy pro mikropočítač, nikoli je vyvíjet. Protože vývoj programů pro mikropočítač není možný bez použití speciálních vývojových pomůcek, které amatérům nejsou běžně dostupné, byla by takto řešená stavebnice vhodná spíše pro profesionální využití než jako polytechnická pomůcka. Základní programové vybavení tedy musí programátorovi poskytovat bohatší prostředky, a to zejména pro vývoj a ladění jeho vlastních programů.
Koncepce řídicího programu
Proto byla zvolena tato koncepce programového vybavení mikropočítače PETR: uživatel nebude programovat přímo mikropočítač 8048, ale jistý virtuální jednostřadačový počítač, který bude řídicím programem simulován. Tento počítač (je nazván podle jména stavebnice "PETR") bude mít svůj (virtuální) procesor, paměť i instrukční soubor. Uživatel bude vytvářet programy pro tento virtuální počítač, řídicí program v mikropočítači pak bude uživatelovy programy vykonávat (tj. interpretovat). Vykonávání programu bude možno na pokyn obsluhy pozastavit. Uživatel si bude moci prohlédnout a případně změnit stav výpočtu (obsah střadače, paměti, stav procesoru) a potom třeba ve vykonávání programu pokračovat.
Řídicí program musí kromě interpretace programu zajišťovat i styk s obsluhou, musí přijímat a vykonávat její příkazy: prohlížení a modifikaci obsahu paměti a stavu procesoru počítače "PETR", spuštění nebo krokováni programu s možností sledovat a měnit průběh výpočtu a uchovávání uživatelových programů na vnější paměti - kazetovém magnetofonu.
Z toho vyplývá, že řídicí program v mikropočítači musí zajišťovat tyto funkce:
Celý řídicí program se přitom musí vejít do paměti ROM v mikropočítači, tedy musí mít délku nejvýše 1024 bytů.
Jako paměť počítače "PETR" se používá vnější datová paměť (RWM v obvodu 8155). Její kapacitou je omezen rozsah paměti počítače "PETR". Ti, kterým základní rozsah paměti nedostačuje, si mohou dalším obvodem 8155 paměť zvětšit na dvojnásobek, řídicí program (interpret počítače "PETR") při inicializaci testuje, zda je paměť rozšířena, a pokud ano, automaticky ji používá jako druhou polovinu paměti počítače "PETR".
Rozšiřující obvod 8155 se připojuje paralelně s obvodem 8155 na desce mikropočítače PETR s výjimkou vývodu CE, který je nutno zapojit na vývod P21 mikropočítače 8048. Pro připojení lze využit konektor K2. Podrobněji viz schéma zapojení mikropočítače PETR a výpis řídicího programu.
Zvolená koncepce řídicího programu přitom nevylučuje programovat ve stavebnici přímo mikropočítač 8048. Stačí umístit paměť (EPROM 2716) s vlastním řídicím programem do patice rozšiřujícího modulu stavebnice. Přitom je nutno propojkou na lince T1 (T1=0) zvolit režim využití externí programové paměti. Tento režim je implementován řídicím programem stavebnice PETR. Po spuštěni mikropočítače se inicializuje obvod 8155, část vnitřní datové paměti mikropočítače 8048 a jeho vnitřní čítač/časovač (přesné viz část výpisu řídicího programu uvedenou návěštím RESET: ). Poté se provede skok na adresu . 400h - tedy na začátek vnější paměti pro program (EPROM 2716). V této paměti musí pak být umístěn řídicí program, který bude dále stavebnici PETR ovládat jako univerzální systém s mikropočítačem řady 8048. Pro úplnost jsou obdobně jako RESET vyvedeny v tomto režimu do vnější paměti EPROM i vektory pro vnější přerušení (na adresu 403H) a pro vnitřní čítač-časovač (na adresu 407H).
Tento způsob doplnění řídicího programu nelze zaměňovat s přemapováním adres paměti pro program propojkou na vývodu EA (External Access) mikropočítače. Ta způsobí odpojení interního řídicího programu umístěného na čipu mikropočítače 8048 a adresování vnější paměti EPROM 2716 od adresy 0.
Souhrnně je adresování paměťového prostoru znázorněno v následující tabulce:
PROPOJKY | ADRESOVÁNI PAMĚTI PRO PROGRAM | |||
EA | T1 | 1. KB | 2. - 3. KB | 4. KB |
1 | 1 | 0 - 3FFH PETR | - | - |
1 | 0 | 0 - 3FFH PETR | 400H - 0BFFH řídicí program ve vnější paměti EPROM 2716 pozn.: 400H ... RESET 403H ... EXTERNAL INT 407H ... TIMER INT | 0C00H-0FFFH lze event, doplnit |
0 | x | 0 - 0FFFH vnější řídicí program pozn.: 0 ... RESET 3 ... EXTERNAL INT 7 ... TIMER INT |
Poznámka:
V prvním případě lze využít pouze řídicí program PETR na čipu mikropočítače. Ve druhém případě je stavebnice
řízena vnějším řídicím programem, který může využívat podprogramy řídicího programu PETR. Naproti tomu ve
třetím případě je program PETR na čipu trvale odpojen a stavebnice je řízena výhradně vnějším řídicím programem.
Logická sonda je tvořena vstupním obvodem, obvody vyhodnocující úrovně L a H a obvody indikace. Vstupní obvod je totožný se zapojením logické sondy zveřejněné v [17], která byla konstrukční částí soutěže INTEGRA 1980.
Vstupní obvod je tvořen emitorovým sledovačem s ochranou proti zápornému vstupnímu napětí (dioda D4). Emitorový odpor tvořený trimry P1 a P2 umožňuje nastavit napěťové úrovně pro vyhodnocovací invertory. Tyto invertory spouští monostabílní klopné obvody, sloužící pro prodlouženi měřených impulzů na viditelné bliknutí diod LED. Monostabilní obvody tvořené invertorem a klopným obvodem typu D je možno změnit, na bistabilní obvody uzemněním vstupu invertoru (uzemnění pájecích bodů). Sonda potom dokáže zachytit ojedinělý pulz úrovně L nebo H.
Technické parametry sondy
Schéma zapojení logické sondy je v příloze.
Na výstup systémové sběrnice K2 lze připojit rozšiřující desku (označenou ***). Ta obsahuje adresní registr IO8, vnější paměť programu (obvod IO7) a expander IO9. Výstupy expanderu jsou včetně napájecího napětí vyvedeny na konektor K3.
Drátěnou propojkou lze volit paměť programu EPROM 2KB nebo 4KB.
Tato deska je určena pro rozšířeni stavebnice PETR při částečném využití jeho základního programového vybaveni, nebo pro zcela specifické aplikace při nahrazení řídicího programu stavebnice PETR vlastním aplikačním programem (viz. kap. 4). Použití rozšiřující destičky a doplnění řídicího programu včetně ovládaní expanderu vyžaduje dobrou znalost jednočipových mikropočítačů řady 48 a přístup k vývojovým prostředkům.
Podrobnější popis přesahuje rámec této příručky, lze však využít doporučenou literaturu [3], [4], [11], [12] nebo [15] a [16].
Nutnou (bohužel často zanedbávanou a opomíjenou) podmínkou použitelnosti každého programovatelného systému je dostupnost prostředků pro vytváření programů. Patří sem především editory, překladače, zavaděče a nejrůznější ladicí pomůcky (symbolické ladicí programy, simulátory, emulátory). Jednou ze základních charakteristik systému je, zda umožňuje vyvíjet programy přímo na něm samém, nebo zda je nutno programy pro tento systém připravit někde jinde (na jiném, hostitelském počítači) a do cílového systému je potom přenést.
Stavebnice PETR i přes svůj minimální rozsah umožňuje bez dalších prostředků vytvářet a ladit programy, které bude vykonávat. Nemůže však pochopitelně poskytnout komfort, na jaký jsme zvyklí u počítačů vyšších tříd.
Program se do počítače zavádí z klávesnice přímo ve strojovém kódu virtuálního procesoru. Jednou zavedené programy si však programátor může uchovávat na vnější paměti - kazetovém magnetofonu.
Ladicí možnosti jsou srovnatelné s běžnými prostředky jiných systémů - programátor může svůj program krokovat a přitom prohlížet a případně měnit stav výpočtu. Je škoda, že se při krokování nezobrazují všechny užitečné informace najednou (např. obsah střadače, příznaky), ale velikost. zobrazovače (šestimístný displej) to prostě neumožňuje,
Nejslabším článkem ve vývoji programů je jejich zavádění do paměti ve strojovém kódu (i když nejde o žádné dlouhé programy, jejich velikost je totiž omezena kapacitou paměti počítače 128 buněk). Jednoduchost celé stavebnice neumožňuje jiný způsob programování, řešením však může být použití křížových vývojových prostředků.
Křížové vývojové prostředky
Křížové vývojové prostředky pro stavebnici PETR poskytuji možnost programovat místo ve strojovém kódu v jazyku symbolických adres (kdo někdy zkusil obojí, ví, jaký kvalitativní skok to představuje). Vzhledem k omezené velikosti paměti a určení stavebnice není potřebné ani smysluplné vytvářet další vývojové pomůcky (např. překladače z jiných jazyků).
Úlohu hostitelského počítače zde plni běžné dostupný školní mikropočítač IQ-151. Programy se mezi oběma systémy přenášejí na magnetofonových kazetách díky kompatibilitě nahrávání.
Vývojové prostředky na počítači IQ-151 budou pracovat pod jeho operačním systémem AMOS - podrobněji viz [18]. Sestávají ze čtyř programů:
K editaci zdrojového textu programu se používá editor, jenž je integrální součástí OS AMOS.
Jazyk symbolických adres
Jazyk symbolických adres obsahuje nejnutnější konstrukce pro pohodlné psaní programů ve strojově orientovaném jazyce - možnost symbolických jmen, symbolických názvů instrukcí, návěští a konstant. Jazyk zahrnuje všechny instrukce procesoru PETR a pět pseudoinstrukcí obvyklých snad ve všech asemblerech:
ORG x nastaví hodnotu čítače adres na hodnotu x DS x vynechá x buněk operační paměti DATA x umístí konstantu x do paměťové buňky jm EQU x symbolickému jménu jm přiřadí hodnotu x END ukončuje zdrojový text programu x ... zde označuje výraz, jm ... symbolické jméno
V roli operandů ve výrazech mohou stát číselné konstanty (v desítkové, dvojkové i šestnáctkové soustavě), symbolická jména a znakové konstanty (odpovídají znakům zobrazovaným na segmentovém displeji). Jako operátory ve výrazech je možno používat pouze + a - (binární i unární).
Implementace křížových vývojových prostředků
Všechny čtyři programy (asembler, disasembler a oba konverzní programy) jsou napsány v asembleru mikroprocesoru 8080 a implementovány pod operačním systémem AMOS.
Překladač jazyka symbolických adres je realizován jako klasický dvouprůchodový asembler (viz např. [18]). Kromě základní funkce - generováni strojového kódu - umí na požádání vypsat do závěru listingu tabulku symbolů (tj. tabulku všech použitých symbolických jmen a jejich hodnot). Z hlediska operačního systému jde o program, který pracuje se třemi soubory: z prvního čte zdrojový text, do druhého zapisuje generovaný kód a do třetího píše listing programu.
Zpětný překladač je velmi jednoduchý. Je jednoprůchodový, před instrukce neumisťuje návěští a negeneruje žádná symbolická jména. Kladem disasembleru je skutečnost, že jeho výstup (text programu v mnemotechnických názvech instrukcí) je bez dalších uprav přeložitelný asemblerem.
Oba konverzní programy jsou velmi krátké programy, které pouze převádějí (kopírují) data ze souboru pod operačním systémem do tvaru přijímaného řídícím programem stavebnice a naopak.
Stavebnice PETR představuje poměrně jednoduchý mikropočítačový systém osazený na jednostranném plošném spoji. Přesto by se do stavby mikropočítače PETR neměl pouštět úplný začátečník bez znalostí základních pojmů a základních znalosti o součástkách a jejich značení a když. tak jen v odborných kroužcích pod vedením odborných vedoucích.
Budete-li stavět mikropočítač sami, postupujte dle následujícího návodu a pracujte pomalu a pečlivě.
Stavebnice se skládá ze 4 desek plošných spojů. Odděleny jsou "čárkovaným plošným spojem" a mezera mezi jednotlivými deskami je umožňuje oddělit pilkou na železo.
Základní deska je označena názvem, ostatní menši destičky jsou označeny jednou, dvěma nebo třemi hvězdičkami.
K osazení desek potřebujeme běžné nářadí: mikropájku (u pistolového pájedla si udělejte tenký hrot ze slabšího drátu), pinzetu, štípačky, cínovou pájku, kalafunu, popř. odsávačku a vrtačku. Pájet musíte rychle, čistě a s minimálně nutným množstvím cínové pájky. Plošné spoje jsou poměrně husté a je třeba dávat pozor na zkraty cínovými můstky.
Svoji šikovnost při pájení si nejprve ověřte při stavbě logické sondy.
Sonda nám poslouží pro oživení mikropočítače, při ladění programů (kontrola vstupních a výstupních signálů) i pro další práci s logickými obvody.
Osazování začínáme drobnějšími součástkami (odpory, diodami); vývody součástek ohýbáme pinzetou nebo kleštěmi podle rozteči v plošném spoji. Vývody neohýbáme těsné u čel součástek a součástky nedorážíme těsně k desce. ale osadíme s mezerou asi 2 mm (odpory a diody potom nejsou při pájeni tolik tepelně namáhány).
Před vlastním osazením součástkami prohlédněte destičku plošných spojů, zda nejsou některé spoje přerušeny, popř. navzájem zkratovány neproleptanými můstky. Případné chyby odstraníme propojením tenkým drátem nebo proškrábnutím.
Pracujte pečlivě, výměna součástek a několikanásobné pájení obvykle vede k poškození plošného spoje. Pozor proto na polaritu diod, elektrolytických kondenzátorů a orientaci integrovaných obvodů. Při osazování se neřiďte pouze obrázkem rozloženi součástek, ale také schématem zapojení. Nezapomeňte osadit jednu drátěnou propojku.
Pro nastavení sondy potřebujeme pevný zdroj 5V a proměnný zdroj 0 až 5V. Propojíme referenční (-) svorky obou zdrojů. K sondě připojíme napájecí napětí (odběr ze zdroje 20-30 mA) a na hrot sondy připojíme kladné proměnné napětí. V rozsahu proměnného napětí 0+0,8V má svítit dioda D7=úroveň L (nastavíme trimrem P2), v rozsahu 2,4+3,5V svítí dioda D8=úroveň H (nastavíme trimrem P1). Nastaveni několikrát zopakujeme, nepřesnost jednoho nebo dvou desetin voltu není pro naše použiti nijak kritická.
Nyní ještě zkontrolujeme paměť sondy. U vývodů elektrolytických kondenzátorů C12 a C13 jsou pájecí body, které při spojeni se zemi umožní zapamatování jedničkového nebo nulového pulzu.
Spojíme-li se zemi paměť "1" (viz obr. 6) a hrotem se dotkneme napětí např. 5V, rozsvítí se dioda "H" a svítí trvale, i když hrot odpojíme, nebo připojíme na úroveň L. Zcela analogicky vyzkoušíme paměť "0".
Sondu umístíme do vhodné krabičky (např. do pouzdra od kuličkového pera), nebo si krabičku vyrobíme z odřezků cuprextitu a popíšeme. Na napájecí vodiče připojíme nástrčné konektory a vodiče označíme polaritou proti přepólováni.
U desky mikropočítače pečlivě prohlédneme plošný spoj včetně výstupního pole kontaktů (mezi krajními kontakty - a + by mohl být zkrat, možný zbytek rohové značky plošného spoje). Do pájecích bodů Z1 až Z8 a DIN1 až DIN3 zaťukneme kontakty a dobře zapájíme (obr. 13, str.79). Ostatní kontakty napájíme na pájecí plochy výstupních signálů (viz obr. 8, osazení zdroje).
Dále osadíme 11 drátěných propojek a díly zdroje (D9+D12, C1+C4 a IO4). Ze strany pájení připájíme na IO4 kondenzátory C15, C16 dle obrázku 7.
Na svorky Z7 a Z8 připojíme pomocí nástrčných kontaktů napájecí vodiče, které připojíme na napětí 8V. Jako zdroj použijeme napáječ pro vláčky (můžeme použít zdroj střídavý nebo stejnosměrný, neboť zde nezáleží na polaritě).
Na výstupních svorkách mikropočítače (2 krajní levé a 2 krajní pravé) potom zkontrolujeme napětí 5V. Tyto svorky slouží pro napájení vnější elektroniky a logické sondy.
Obr. 8 Osazeni zdroje a kontaktů
Displej tvořený diodami D13 až D15 je umístěn na destičce označené * .
Na destičce opět zkontrolujeme plošný spoj a osadíme 3 drátěné propojky. Poté osadíme displej D13 až D15 (orientace displeje je označena klíčem - levý dolní roh), viz obr. 9.
Na desku mikropočítače osadíme součástky dle obr. 10, tzn. objímku IO1, odpory R1 až R29 a tranzistory T1 až T14 Objímka IO má orientaci, kterou dodržte.
Pozn.: Pájecí body RT, TIN,TOUT se v základní verzi stavebnice PETR nevyužívají.
Nyní k připevnění destičky displeje na základní desku. Displej je se základní deskou spojen 14 vodiči. Vodiče S1+S6 slouží pro sepnutí jedné ze šesti číslicových znakovek, vodiče označené DT, G, A, F, B, D, E, C spínají jednotlivé segmenty (viz schéma zapojení v příloze).
Na destičku připájíme propojovací, asi 7 cm dlouhé vodiče těchto signálů a druhé konce vodičů si odizolujeme pro připojení do základní desky. Na velké pájecí plošky na destičce displeje připájíme 4 silnější měděné dráty dlouhé asi 4 a 5 cm, které poslouží jako nosné sloupky displeje. Před zapojením nosných drátů do základní desky si nejprve vyzkoušíme výšku a sklon destičky displeje nad základní deskou tak, aby při umístění mikropočítače do skříňky byl displej přesně uprostřed okénka (nosné dráty volte raději delší, pro dotvarování polohy displeje).
Nyní připojíme i signálové vodiče displeje. Pájecí otvory destičky displeje i desky mikropočítače si přesně odpovídají. Po připojení displeje si ověříme jeho správnou funkci. K mikropočítači připojíme napájecí napětí a připravíme si dva vodiče připojené na minus pól mikropočítače (oba krajní body kontaktního pole). Nyní první vodič připojíme do kontaktu č.39 objímky IO1 a druhým vodičem se postupně krátce dotkneme vývodů č.29, 30, 31, 32, 33, 34, 35, 36. Postupně se tak rozsvítí segmenty levé krajní znakovky. První vodič nyní připojíme do kontaktu č. 38 (a postupně do 37,5,2,1) a manipulaci druhým vodičem opakujeme.
Otestujeme tak všechny segmenty displeje i obvody spínacích tranzistorů.
Obr. 9 Osazeni destičky displeje
Obr. 10 Osazení spínacích obvodů displeje
Při zjištění jakékoliv chyby se ji pochopitelně pokusíme najít podle schématu obvodového zapojení a odstranit. Jinak dále osazovat desku nemá význam.
Na základní desku osadíme objímku IO2, krystal X1, odpory R35 až R37, kondenzátor C6 a elektrolyt C7 podle obr. 11.
Pájecí body vstupního signálu T1 umožňují tento signál připojit na zem nebo + pól zdroje. Stav tohoto signálu umožňuje modifikaci řídicího programu. U základní verze stavebnice PETR je tento signál připojen na úroveň H podle obr. 11. Obdobný přepínač má i vstupní signál EA. Signál umožňuje zakázat vnitřní program mikropočítače. Pak je nutné., připojit destičku s vnější pamětí a vlastním řídicim programem. V základní verzi stavebnice PETR je signál EA připojen na úroveň L (viz obr. 11). Podrobnější popis mapování paměti je uveden v odst. 4.2.
Obr. 11 Osazení obvodů mikropočítače
Pozn.: Pájecí body R, SS, ALE nejsou v základní verzi stavebnice využity, v jiných aplikacích stavebnice nohou sloužit pro připojení krokovacího přípravku.
Nyní Již můžeme vyzkoušet Mikropočítač v jeho základní funkci. Do objímek opatrné zasuneme oba integrovaná obvody (pozor na orientaci) a připojíme napájecí napětí. Na levém krajním displeji se objeví nápovědný znak "C". Je-li tomu tak, zbývá osadit obvody klávesnice (konektor K1, R30 až R34, T15), viz. obr. 12 a potom obvody pro styk s magnetofonem.
Pro nahráváni a přehráváni se využívají 2 linky z kontaktního pole označená 10 a 11. Tyto linky Jsou součásti portu P1 a lze je běžná využívat instrukcemi P1IN a P1OUT. Jsou však vedeny přes přepínač P, kterým vždy před použitím Magnetofonu tyto linky připojíme k obvodům nahráváni/přehrávání a poté je opět přepojíme zpět k výstupnímu poli kontaktů.
Přepínač je připojen podle schématu vodiči s nástrčnými konektory do kontaktů označených Z1 až Z6 .
Konektor DIN pro připojení nahrávací šňůry Magnetofonu s třemi dutinkami Je připojen do kontaktů DIN1, DIN2, DIN3 (čísla dutinek konektoru a kontaktů na základní desce si odpovídají).
Obr. 13 Osazení obvodů magnetofonu
Součástky osadíme dle obr. 13, pozor na orientaci IO3 (klíč označuje vývod č. 8). Správnost funkce obvodů magnetofonu by bylo sice možné ověřit i samostatně (pomocí osciloskopu a nf generátoru), ale my správnost funkce ověříme až při zkompletování stavebnice přímo s magnetofonem pomocí příkazů SAVE a LOAD.
Mikropočítač je prakticky osazen a zbývá jej umístit do skříňky. Základní desku vložíme do spodního dílu skříňky a připojíme napájecí vodiče do kontaktů Z7 a Z8. Na vrchní díl skříňky připevníme klávesnici (má samolepicí spodek), jejíž plochý kabel provlékneme otvorem vrchního dílu.
Nyní kablíky od přepínače a konektoru DIN umístěné na vrchním dílu připojíme nástrčnými konektory do odpovídajících kontaktů (je výhodné si vodiče u nástrčných konektorů předem popsat čísly kontaktů) a při téměř uzavřené skříňce zasuneme kabel klávesnice do konektoru K1 (kabel je poměrně krátký a jeho připojení chce trochu trpělivosti).
Skříňku uzavřeme a po připojeni napájení nyní můžeme vyzkoušet celou klávesnici s funkcemi jednotlivých příkazů.
Zbyla nám destička (označ. ***) umožňující modifikaci stavebnice. Rozšířeni stavebnice o vnější paměť programu a linky expanderu si zároveň vynucuje úpravu (nebo celé přepracováni) řídicího programu a jeho umístění do EPROM v pozici IO7 (obr.14). To ovšem předpokládá dobrou znalost jednočipového mikropočítače MHB 8048 (včetně programování v asembleru, možnosti práce na vývojovém systému a emulátoru) a zcela se vymyká z rámce popisu této příručky. Pro informaci lze uvést osazeni destičky vnější paměti a expanderu (obr. 14).
Základní desku mikropočítače PETR je pro připojení této destičky nutno osadit konektorem K2. Konektor K2 obsahuje všechny systémové vodiče pro připojení i jiných rozšiřujících obvodů. Programové vybaveni základní verze mikropočítače PETR již např. předpokládá možnost připojení druhého obvodu MHB 8155 a tim zdvojnásobeni velikosti paměti stavebnice PETR.
Naznačené úpravy řídicího programu a obvodového zapojení Jsou určeny jen pro zkušené uživatele. Na druhé straně jim však stavebnice poskytuje základ universálního mikroprocesorového systému s mikropočítačem 8048
Pozn.: Vnější zapojení, která budete mikropočítačem ovládat, stavte pečlivě a nejprve na univerzální desku, kde si ověříte správnost zapojení.
Výstupní pole kontaktů umožňuje připojit jednu zátěž TTL. Při připojení vnější aplikace mějte na paměti, že po zapnutí mikropočítače nebo po stisknuti tlačítka (RST) se signály P10 až P17 chovají jako vstupní s vysokou impedanci. Linky portu P1 lze programovat jako vstupní nebo jako výstupní s jistým omezením - viz popis instrukcí P1IN a P1OUT.
Signály P20 až P27 jsou směrovány vždy jako výstupní a tlačítko (RST) neovlivní jejich stav, pouze vypnuti a zapnutí mikropočítače je nastaví na počáteční úroveň L (obvod IO2 je nulován pouze náběhem zdroje).
Tyto vlastnosti výstupních a vstupních linek Je nutno při návrhu řízeného obvodu respektovat. Pozor na zkraty na těchto linkách ! Zničení integrovaných obvodů je snadné a jejich cena není malá.
Uvažujte i spotřebu přídavné vnější aplikace. Zdroj pro vláčky při napájení Mikropočítače a současné třeba logické sondy a složitějšího vnějšího obvodu již nemusí být dostatečně tvrdý a je vhodné si změřit napájecí napětí na svorkách kontaktního pole. Je-li Menší než 4,73V nemáme jistotu bezchybného chodu.
Potom je vhodné napájet aplikační zapojeni samostatným zdrojem a spojit pouze země Mikropočítače a této aplikace.
Stabilizátor napětí stavebnice (I04) je v optimálním případě schopen dodat proud max. 1A což pro Mikropočítač, logickou sondu i aplikaci ve většině případů stačí, ale musíme poulit výkonnější zdroj než je napáječ pro vláčky.
Námět:
Navrhněte a naprogramujte jednoduchý digitální teploměr na principu teplotně závislého monostabilního klopného obrodu.
Řešení:
Monostabilní klopný obvod (MKO) zapojíme z integrovaného obvodu UCY 74121 a termistoru 13NR15 (28 kΩ) podle následujícího schématu:
Náběžná hrana jednotkového Impulsu, vstupujícího do MKO způsobí po určité době stejnou zněnu i na výstupu Q (na výstupu Q je negace tohoto impulzu).
Doba, za kterou se znění stav na výstupu, je určena hodnotami kapacity a odporu připojených součástek (kondenzátory musí být časově stálé, nejlépe tantalové).
Bude-li se měnit teplota termistoru, bude se měnit i jeho odpor, a tím i doba zpožděni výstupního inpulzu za vstupnim.
Změřením tohoto zpoždění a vhodnou úpravou (přepočtem) lze tedy určit teplotu termistoru.
Dále je uvedena jedna z možných verzí programu. Pro výstup jednotkového pulzu z počítače do MKO se využívá linka P14, časové zpoždění se měří na lince P15. Aby bylo možné číst informaci z linky P15, musí se aktivovat logickou jedničkou (viz popis instrukce P1IN).
adr kód instrukce komentář ............................................................... 000 04.000 LDC 000 ;nulování střadače 001 17.004 P1OUT 4 ;nulování 4.bitu P1 002 03.000 NOP 000 ;zpomalení reakce MKO na změnu teploty 003 04.001 LDC 001 ;1 do střadače 004 17.004 P1OUT 4 ;změna z 0 na 1 - čelo impulzu 005 17.005 P1OUT 5 ;aktivování 5.bitu P1 006 04.000 LDC 000 ;nulování střadače 007 17.004 P1OUT 4 ;ukončení impulzu na 4.bitu - týl
Měření doby zpoždění výstupního signálu za vstupním:
Ke střadači budeme přičítat jedničku tak dlouho, dokud se na lince P15 neobjeví úroveň H (nikoliv L, protože je
použit z MKO výstup /Q).
adr kód instrukce komentář ............................................................... 008 07.100 ADD 100 ;přičtení 1 ke střadači 009 06.101 STA 101 ;uschování střadače na 101 010 16.005 P1IN 5 ;načteni hodnoty z 5.bitu-P1 011 10.100 AEQ 100 ;je to 0 ? 012 05.101 LDA 101 ;vráceni načítané hodnoty do střadače 013 11.015 JF 015 ;ano - ukončeni čítání 014 09.008 JNP 008 ;ne - zpět na nové čtení portu
Zobrazení znaku "°C" na levém okraji displeje:
adr kód instrukce komentář ............................................................... 015 04.030 LDC 030 ;kód znaku "°" do střadače 016 02.006 DISP 006 ;a zobrazení 017 04.108 LDC 108 ;kód znaku "C" do střadače 018 02.005 DISP 005 ;a zobrazeni
Teploměr je cejchován pro měření teploty v rozsahu od 15 do 40°C, a proto je nutné před přepočtem provést kontrolu načítané hodnoty (zda leží v intervalu, který odpovídá teplotám od 15 do 40°C). Pro kontrolu slouží omezovači konstanty uložené v buňkách na adrese 117 (MIN) a 118 (MAX). Tyto hodnoty, právě tak jako obsah přepočtové tabulky, jsou závislé na způsobu zapojení MKO a na použitém typu termistoru.
adr kód instrukce komentář ............................................................... 019 05.101 LDA 101 ;ACC:=načítaná hodnota 020 13.117 ALT 117 ;je menší než 35 ? 021 11.112 JF 112 ;ano => výpis chybového hlášeni 022 12.118 AGT 118 ;je větši než 90 ? 023 11.112 JF 112 ;ano => výpis chybového hlášení
Podle načítané hodnoty měříme teplotu:
Obsah adresy 101, což je načítaná hodnota, použijeme jako adresu, na které bude uložena příslušná hodnota
teploty již ve °C. K tomu je vhodná instrukce LDAI.
adr kód instrukce komentář ............................................................... 024 19.101 LDAI 101 ;přiřazené načítání hodnoty k teplotě 025 02.000 DISP 000 ;tisk teploty 026 09.000 JMP 000 ;zpět na nové měření
Na displeji se zobrazí: [°][C][ ][0][x][x] , kde xx je změřená teplota a program cyklicky pokračuje znovu od začátku.
Úsek pro zpracování chyby:
adr kód instrukce komentář ............................................................... 112 04.002 LDC 002 ;kód znaku ”-” 113 02.001 DISP 001 114 02.002 DISP 002 115 02.003 DISP 003 ;tisk znaku ”-” do datového pole 116 09.000 JMP 000 ;zpět na nové měření
Neleží-li teplota v přípustném rozsahu, zobrazí se zpráva o chybě a měří se znovu od začátku.
[°][C][ ][-][-][-]
Zbývá ještě vyhradit místa pro uloženi dat:
100 00.001 ;přičítaná hodnota 101 xx.xxx ;zde se ukládá načítaná hodnota 102 00.000 | 117 00.035 ;minimální přípustná načítaná hodnota 118 00.090 ;maximální přípustná načítaná hodnota
A tabulka pro přepočet načítaných hodnot na teplotu ve °C :
+-------------------+-------------------+--------------------+ | adr. teplota-data | adr. teplota-data | adr. teplot.a-data | +-------------------+-------------------+--------------------+ | 035 00.040 | 054 00.028 | 073 00.020 | | 036 00.039 | 055 00.028 | 074 00.020 | | 037 00.038 | 056 00.027 | 075 00.020 | | 038 00.037 | 057 00.027 | 076 00.020 | | 039 00.036 | 058 00.026 | 077 00.019 | | 040 00.035 | 059 00.026 | 078 00.019 | | 041 00.035 | 060 00.025 | 079 00.019 | | 042 00.034 | 061 00.025 | 080 00.018 | | 043 00.034 | 062 00.024 | 081 00.018 | | 044 00.033 | 063 00.024 | 082 00.018 | | 045 00.033 | 064 00.023 | 083 00.017 | | 046 00.032 | 065 00.023 | 084 00.017 | | 047 00.032 | 066 00.022 | 085 00.017 | | 048 00.031 | 067 00.022 | 086 00.016 | | 049 00.031 | 068 00.022 | 087 00.016 | | 050 00.030 | 069 00.021 | 088 00.016 | | 051 00.030 | 070 00.021 | 089 00.015 | | 052 00.029 | 071 00.021 | 090 00.015 | | 053 00.029 | 072 00.021 | | +-------------------+-------------------+--------------------+
Postup při odvození tabulky:
Do počítače napíšeme program od adresy 000 do 014. Dále doplníme:
adr kód instrukce komentář ............................................................... 015 02.000 DISP 000 016 09.000 JMP 000 100 00.001 ;přičítací konstanta
Po zapnutí programu se na displeji objeví načítaná hodnota. Na teploměru, který je ve stejném prostředí jako termistor, odečteme příslušnou teplotu. Teplotu postupně měníme a odečítáme další hodnoty pro přepočtovou tabulku.
Tento program ukazuje na jednu z variant použití tohoto zapojení s UCY 74121.
Další možností použití je zaměnění termistoru fotorezistorem, čímž získáme měřič osvětlení.
Námět:
Utvořte program, který umožní na každé pozici displeje zobrazit libovolnou kombinaci segmentů a sestavovat tak různé grafické znaky.
Návod k řešení:
Pro zobrazování na displej využijeme instrukci DISP, jejímž parametrem lze určit pozici zobrazovaného znaku. Pozici znaku budeme zadávat z klávesnice. Po zadání pozice, kam se má znak zobrazit, budeme postupně vkládat čísla segmentů, která mají svítit. Po vložení všech čísel segmentů, které chceme rozsvítit, ukončíme vytváření zobrazovaného znaku omezovačem (NEXT) .Při zadání jiného čísla segmentu než 0 až 7 se znak na vybrané pozici smaže a program pokračuje znovu od začátku.
Řazení pozic displeje a čísel segmentů je:
displej segmenty 0 6 5 4 3 2 1 ------- [ ][ ][ ][ ][ ][ ] | | 5 | | 1 | 6 | ------- | | 4 | | 2 | | ------- o 7 3
Algoritmus programu je jednoduchý - například:
Varianta programu:
Program je uložen od adresy 000 do adresy 019. Na adrese 050 je konstanta 128, která má význam pro testování stisknutého tlačítka instrukci KEY.
Na adrese 053 je kódová adresa přepočtové tabulky, nutná pro zjištěni kódu daného segmentu.
adr kód instrukce komentář ............................................................... 000 26.000 KEY ;čteni pozice displeje 001 10.050 AEQ 050 ;stisknuta klávesa ? 002 11.000 JF 000 ;ne. čekat 003 06.020 STA 020 ;ano, uložit jako parametr ; instrukce DISP 004 26.000 KEY ;čteni čísla segmentu 005 10.050 AEQ 050 006 11.004 OR 004 ;čekat na stisk tlačítka 007 13.051 ALT 051 ;číslo v rozsahu 0 až 7 ? 008 11 013 JF 013 ; ano 009 10.052 AEQ 052 ; NEXT ? 010 11.019 JF 019 ;ano. zobrazit znak 011 04.000 LDC 000 ; ne, smazat displej 012 09.020 JMP 020 ;a znovu od začátku 013 07.053 ADD 053 ;zjištěni 019 06.015 STA 015 ; váhy 015 05.xxx LDA xxx ; segmentu podle tabulky 016 07.054 ADD 054 ;přičtení dalšího segmentu 017 06.054 STA 054 ; ke kódu znaku 018 09.004 JMP 004 ;a číst číslo dalšího segmentu 019 05.054 LDA 054 020 02.xxx DISP xxx ;zobrazení znaku 021 04.000 LDC 000 ;počáteční nulování 022 06.054 STA 054 ; dalšího znaku 023 09.000 JMP 000 ;a znovu od začátku ............................................................... 050 00.128 ; kód volné klávesnice 051 00.007 ; horní přípustná mez čísel segmentů 052 00.012 ; kód tlačítka NEXT 053 00.100 ; ukládací adresa přepočtové tabulky 054 00.000 ; kód znaku k zobrazení ............................................................... ; tabulka vah segmentů 100 00.004 ; segment 0 101 00.016 ; segment 1 102 00.128 ; segment 2 103 00.032 ; segment 3 104 00.064 ; segment 4 105 00.008 ; segment 5 106 00.002 ; segment 6 107 00.001 ; segment 7
Námět:
Vytvořte program, který sečte dvě čísla a výsledek zobrazí na displeji. Čísla mohou ležet v intervalu <0,999> a budou zadávána z klávesnice. Zadávané sčítance se ukončí stiskem klávesy (NEXT) .
Je vhodné, aby program nereagoval na jiné klávesy než (0) až (9) a (NEXT) .
Řešení:
Sčítanec vytvoříme sestavením z jednotlivých číslic (kódů tlačítek 0 až 9). Při stisku klávesy se její kód zobrazí v pravé části displeje (jednotkový řád sčítance). Při zadání další číslice se zobrazené cifry posouvají vlevo po displeji a poslední (stovkový řád) "vypadává". Je-li stisknuta klávesa (NEXT). zadávání sčítance se ukončí. Pro zobrazení cifry na vybraném místě displeje musíme vytvořit tabulku kódu číslic 0 až 9 - v programu na adr. 000 až 009.
Princip sčítání: sečteme jednotlivé řády, je-li výsledek větší než 9 odečteme 10 a k vyššímu řádu přičteme 1 (přenos). Výsledek zobrazíme.
Příklad zadávání čísla:
displej 3 2 1 ........................................... nestisknuta klávesa [0] [0] [0] stisknuta "1" [0] [0] [1] stisknuta "2" [0] [1] [2] stisknuta "3" [1] [2] [3] stisknuta "4" [2] [3] [4]
Začátek programu je na adrese 10. Proto je před spuštěním třeba nastavit čítač instrukcí PC na 10.
adr kód instrukce komentář ............................................................... 000 00.252 ; kód: "0" 001 00.144 ; "1" 002 00.118 ; "2" 003 00.182 ; "3" 004 00.154 ; "4" 005 00.174 ; "5" 006 00.238 ; "6" 007 00.148 ; "7" 008 00.254 ; "8" 009 00.190 ; "9" 010 23.050 CALL 050 ; 1. sčítanec 011 05.112 LDA 112 ;přeneseni cifer sčítance do 012 06.115 STA 115 ;jiného místa paměti (na adr.115) 013 05.113 LDA 113 014 06.116 STA 116 015 05.114 LDA 114 016 06.117 STA 117 017 23.050 CALL 050 ; 2. sčítanec 018 05.115 LDA 115 019 07.112 ADD 118 ;součet jednotkových řádů 020 23.042 CALL 042 ;je menši než 10 ? 021 11.023 JF 023 ;ano - skok 022 23.100 CALL 100 ;odečtení 10 a uložení pro 023 19.119 LDAI 119 ; přičtení k vyššímu řádu 024 02.001 DISP 001 ;zobrazení jednotkového řádu 025 05.116 LDA 116 ; výsledku 026 07.113 ADD 113 ;součet desítkových řádů 027 23.042 CALL 042 028 11.030 JF 030 029 23.100 CALL 100 030 19.119 LDAI 119 031 02.002 DISP 002 ;zobrazení desítkového řádu 032 05.117 LDA 117 ; výsledku 033 07.114 ADD 114 ;součet stovkových řádů 034 23.042 CALL 042 035 11.037 JF 037 036 23.100 CALL 100 037 19.119 LDAI 119 038 02.003 DISP 003 ;zobrazení stovkového řádu 039 19.122 LDAI 122 ; výsledku 040 02.004 DISP 004 ;je-li výsledek větší než 999, ;zobrazení 1 na 4.místě displeje ;(tisíce) 041 09.041 JMP 041 ;stop 042 07.122 ADD 122 ;korekce (přičtení 1-nižší řád>9 ; nebo 0) 043 13.118 ALT 118 ;je menší než 10? 044 06.119 STA 119 ;(nastaví FLAG) 045 04.000 LDC 000 ;bez přenosu do vyššího řádu 046 06.122 STA 122 047 24.000 RET 050 04.252 LDC 252 ;podprogram pro čtení čísla 051 02.004 DISP 004 ;zobrazení 0 na 4.místě displeje 052 04.008 LDC 000 053 02.000 DISP 000 ;nulování datového pole displeje 054 06.112 STA 112 ;nulováni adres, na kterých je 055 06.113 STA 113 ; sčítanec 056 06.114 STA 114 057 06.122 STA 122 058 23.090 CALL 090 ;čtení cifry 059 10.110 AEQ 110 ;stisknuto tlačítko NEXT ? 060 11.083 JF 083 ;ano - konec 061 12.120 AGT 120 ;stisknuta jiná klávesa než 0…9? 062 11.058 JF 058 ;ano - zpět 063 06.112 STA 112 064 19.112 LDAI 112 065 02.001 DISP 001 ;tisk jednotkového řádu sčítance 066 19.Í13 LDAI 113 067 02.002 DISP 002 ;tisk desítkového řádu sčítance 068 19.114 LDAI 114 069 02.003 DISP 003 ;tisk stovkového řádu sčítance 070 23.090 CALL 090 071 10.110 AEQ 110 072 11.083 JF 083 073 12.120 AGT 120 074 11.070 JF 070 075 06.111 STA 111 076 05.113 LDA 113 ;rotace řádů sčítance v paměti 077 06.114 STA 114 078 05.112 LDA 112 079 06.113 STA 113 080 05.111 LDA 111 081 06.112 STA 112 082 09.064 JMP 064 083 24.000 RET 090 26.000 KEY ;podprogram pro čtení znaku 091 10.121 AEQ 121 092 11.090 JF 090 093 24.000 RET 100 04.001 LDC 001 ;korekce při přenosu 101 06.122 STA 122 ;do vyššího řádu 102 05.119 LDA 119 103 08.118 SUB 118 ;odečtení 10 104 06.119 STA 119 105 24 000 RET ; pomocná data 110 00.012 ; konstanta pro testování klávesy NEXT 111 xx.xxx ; pomocná buňka 112 xx.xxx ; 2.sčítanec 113 xx.xxx ; — " — 114 xx.xxx ; — " — 115 xx.xxx ; 1.sčítanec 116 xx.xxx ; — " — 117 xx.xxx ; — " — 118 00.010 ; konstanta 10 119 xx.xxx ; pomocná buňka 120 00.009 ; konstanta pro porovnání velikosti cifry 121 00.128 ; konstanta pro test klávesnice 122 xx.xxx ; místo pro uložení přenosu při sčítání
Námět:
Vytvořte program, který rozsvítí na 6. displeji 6. segment a bude ho cyklicky posouvat vpravo.
Řešení:
Program je velice jednoduchý. Jediné, na co nesmíte zapomenout, je mazání displeje po posuvu na další pozici.
Pokuste se tento program vytvořit co nejkratší. Jedna z možných variant je tato:
adr kód instrukce komentář ............................................................... 000 05.100 LDA 100 001 06.009 STA 009 ;nastavení čísla displeje 002 06.012 STA 012 003 08.102 SUB 102 ;odečte 1 004 12.101 AGT 101 ;rozsvícen segment na 1.displeji ? 005 11.007 JF 007 ;ne - skok 006 04.006 LDC 006 ;jinak znovu od 6.pozice 007 06.100 STA 100 008 04.002 LDC 002 ;vzorek k rozsvícení 009 02.xxx DISP xxx ;operand se získá průběžně 010 03 030 NOP 050 ;prodleva 011 04.000 LDC 000 012 02.xxx DISP xxx ;smazání displeje 013 03.050 NOP 050 ;opět s prodlevou 014 09.000 JMP 000 ;a pořád dokola 100 00.006 ;pozice displeje 101 00.000 ;omezovač cyklického posunu pozice 102 00.001 ;konstanta pro posun pozice displeje
Námět:
Zajistěte generováni přerušovacího pulzu vhodné délky - cca 10 ms Podrobnějí viz odstavec 2.1 a popis instrukce INT i.
Řešení.:
Pulz bude generován monostabilnim klopným obvodem UCY74123 zapojeným podle níže uvedeného obrázku.
Vývod INT lze přímo připojit na stejnojmennou svorku mikropočítače PETR. Stisknutím tlačítka se na výstupu INT monostabilního klopného obvodu vyrobí pulz úrovně 0. Jeho délka je přibližně 10 micros a lze ji ovlivnit změnou hodnot kondenzátoru C1 a odporu R1.
Při stejném zapojení lze vyrobit přerušovací pulz i programem nebo na žádost HW z vnější aplikace. K tomu slouží vstup START, který sestupnou hranou spustí monostabilní klopný obvod.
Programem lze i zkrátit přednastavenou délku přerušovacího pulzu opět sestupnou hranou na vstupu CLEAR. Dále je uveden příklad na obsluhu přerušení s využitím vývodů START a CLEAR . Při každém přerušení se inkrementuje (zvyšuje o 1) čítač, jehož hodnota je každou sekundu vypisována hlavním programem na displej. Přitom START je připojen na linku P10 a CLEAR na linku P11.
Program spusťte od adresy 001 !
adr kód instrukce komentář ............................................................... 000 23.020 CALL INTR ;volání programu pro obsluhu ; přerušení
Hlavní program pro výpis čítače:
adr kód instrukce komentář ............................................................... 001 02.255 DISP 255 ;zhasnout celý displej 002 04.000 LDC 0 ;hodnota čítače bude ve střadači, ; na začátku je ACC:=0 003 27.001 INT 1 ;povolit vnější přerušení 004 02.000 DISP 0 ;vypsat obsah čítače na displej 003 03.255 NOP 255 ;čekat cca 1 sekundu 006 03.255 NOP 255 007 03.255 NOP 255 008 03.016 NOP 16 009 06.016 STA 016 ;uschovat čítač 010 05.017 LDA 017 011 17.000 P1OUT 0 ;START (tj. P10) := 0 ;spustí pulz na vstupu INT 012 05.018 LDA 018 013 17.000 P1OUT 0 ;START := 1 014 05.016 LDA 016 ;a ještě obnovit hodnotu čítače ! 015 09.004 JMP 004 016 00.xxx ; místo pro úschovu čítače 017 00.000 ; konstanta 0 018 00.001 ; konstanta 1
Obsluha přerušení může být například:
adr kód instrukce komentář ............................................................... 020 06.016 INTR: STA 016 ; * uschovat čítač 021 05.017 LDA 17 ; * 022 17.001 P1OUT 1 ; * CLEAR (tj. P11) := 0 023 05.018 LDA 18 ; * 024 17.001 P1OUT 1 ; * CLEAR := 1 025 05.016 LDA 016 ; * obnovit čítač 026 07.018 ADD 018 ; zvýšit jej o 1 027 27.001 INT 1 ;znovu povolit další přerušení ; (důležité !) 028 24.000 RET ;a návrat do hlavního programu
Poznámka:
Námět:
Vytvořte program, který převede číslo z desítkové do šestnáctkové soustavy.
Řešení:
Zadané číslo (v rozmezí 0 + 255) program přečte ze zvolené adresy (např. 100). Dělí ho 16, celočíselný výsledek dělení je vyšším řádem převedeného čísla, zbytek je řádem nižším.
Princip dělení: Od daného čísla odečítáme 16 tak dlouho, dokud výsledek není menší než dělitel, tj. 16. Počet odečtení zaznamenáváme do paměti na adresu 104. Výsledek zobrazíme pomocí instrukce LDAI aaa a tabulky kódů znaků.
adr kód instrukce komentář ............................................................... ; tabulka znaků 000 00.252 ; "0" 001 00.144 ; "1" 002 00.118 ; "2" 003 00.182 ; "3" 004 00.154 ; "4" 005 00.174 ; "5" 006 00.238 ; "6" 007 00.148 ; "7" 008 00.254 ; "8" 009 00.190 ; "9" 010 00.222 ; "A" 011 00.234 ; "B" 012 00.108 ; "C" 013 00.242 ; "D" 014 00.110 ; "E" 015 00.078 ; "F"
Vlastni program:
adr kód instrukce komentář ............................................................... 020 04.000 LDC 000 021 06.104 STA 104 ;nulováni paměti, ve které je ; vyšší řád výsledku 022 05.100 LDA 100 ;vyzvednutí převáděného čísla 023 13.102 ALT 102 ;je menší než 16 ? 024 11.032 JF 032 ;ano - skok na zobrazeni 025 08.102 SUB 102 ;odečteni 16 (tj. základu hexa ; soustavy) 026 06.103 STA 103 ;uložení mezivýsledku 027 05.104 LDA 104 028 07.105 ADD 105 ;přičteni 1 029 06,104 STA 104 ;k vyššímu řádu výsledku 030 05.103 LDA 103 ;vrácení mezivýsledku do střadače 031 09.023 JMP 023 ;a znovu dokola 032 06.101 STA 101 033 19.101 LDAI 101 034 02.001 DISP 001 ;zobrazeni nižšího řádu výsledku 035 19.104 LDAI 104 036 02.002 DISP 002 ;zobrazení vyššího řádu výsledku 037 09.037 JMP 037 | | 100 xx.xxx ;číslo, určené na převod 101 xx.xxx ;nižší řád výsledku 102 00.016 ;základ šestnáctkové soustavy 103 xx.xxx ;mezivýsledek 104 xx.xxx ;vyšší řád výsledku 105 00.001
Před spuštěním programu je nutné nastavit čítač instrukce PC na adresu 020 (počáteční adresa našeho programu).
Tabulku znaků je možné posunout do jiného místa paměti (např. od adresy 090). V tomto případě k výsledku dělení či zbytku přičteme 90. Ukázka je v programu "HODINY" - odst. 7.7).
Námět:
Vytvořte program, který bude přibližně měřit čas v sekundách, minutách a hodinách.
Řešeni:
V programu vytvoříme smyčku, jejíž délka je přibližně 1 sekunda. V této smyčce přičítáme 1 k čítači sekund na adrese 100 tak dlouho, dokud výsledek nebude 60. Je-li již výsledek 60 vynulujeme obsah této adresy a zvýšíme o 1 čítač minut na adrese 101. Obdobně postupujeme i při dočítání 60ti minut a 24 hodin.
Zobrazení času: Protože tato část programu je poněkud složitější, vysvětlíme ji podrobněji.
Naměřené sekundy, minuty či hodiny není možné zobrazit najednou, ale postupně po jednotlivých cifrách.
Dále je uveden postup při zobrazení sekund (zobrazení minut a hodin je obdobné): Naměřené sekundy (dvojciferné číslo) potřebujeme rozdělit na 2 cifry - desítky a jednotky. Proto tuto hodnotu dělíme 10 (postup dělení je popsán v programu "Převody soustav" - odst. 7.6), celočíselný výsledek dělení udává desítky sekund a zobrazí se na displej 2. Zbytek po dělení udává jednotky sekund a zobrazí se na 1.displeji. Dělení a zobrazení naměřeného času je v podprogramu od adresy 040. Aby mohl být tento podprogram využit i pro zobrazení minut a hodin na 3. až 6. displeji je třeba přepsat čísla displejů (tj. operandy v instrukcích DISP na adresách 053 a 058) vždy před skokem do tohoto podprogramu. (Provádí se instrukcemi STA na adresách 071, 073, 077, 079, 083, 085 ...),
Tabulka znaků je posunuta od adresy 090 přičtením konstanty 90 k zobrazované cifře.
adr kód instrukce komentář ............................................................... 000 04.000 LDC 000 ;nulování hodin 001 06.100 STA 100 002 06.101 STA 101 003 06.102 STA 102 004 06.121 STA 121 005 23.070 CALL 070 006 03.255 NOP 255 ;nastavení přesnosti chodu 007 03.255 NOP 255 008 03.255 NOP 255 009 03.000 NOP 000 010 05.100 LDA 100 ;počet sekund do ACC 011 07.110 ADD 110 ;zvýšení o 1 sekundu 012 06.100 STA 100 ;uloženi 013 13.111 ALT 111 ;již 60 sekund ? 014 11.005 JF 005 ;ne - zpět 015 04.000 LDC 000 ;nulování sekund 016 06.100 STA 100 017 05.101 LDA 101 ;počet minut do ACC 018 07.110 ADD 110 ;zvýšení o 1 minutu 019 06.101 STA 101 ;uložení 020 13.111 ALT 111 ;již 60 minut ? 021 11.005 JF 005 ;ne - zpět 022 04.000 LDC 000 ;nulování minut 023 06.101 STA 101 024 05.102 LDA 102 ;počet hodin do ACC 025 07.110 ADD 110 ;zvýšení o 1 hodinu 026 06.102 STA 102 ;uložení 027 13.112 ALT 112 ;již 24 hodin ? 028 11.005 JF 005 ;ne - zpět 029 09.000 JMP 000 ;nulování času, nové měřeni ............................................................... ;Podprogram pro zobrazení dvou cifer: 040 06.120 STA 120 ;uschování 041 13.113 ALT 113 ;menší než 10 ? 042 11.050 JF 050 ;ano - skok 043 08.113 SUB 113 ;odečtení 10 044 06.120 STA 120 ;uschování 045 05.121 LDA 121 ;přičtení 1 k obsahu paměti 121 046 07.110 ADD 110 047 06.121 STA 121 048 05.120 LDA 120 049 09.041 JMP 041 ;zpět 050 07.114 ADD 114 ;přesun na tabulku znaků 051 06.120 STA 120 ; (začíná na adrese 90) 052 19.120 LDAI 120 053 02.xxx DISP xxx ;operand (číslo displeje) se 054 05.121 LDA 121 ; doplní průběžně 055 07.114 ADD 114 056 06.121 STA 121 057 19.121 LDAI 121 058 02.xxx DISP xxx 059 04.000 LDC 000 ;nulování pomocných adres 060 06.120 STA 120 061 06.121 STA 121 062 24.000 RET ............................................................... ;Podprogram pro zobrazeni času: 070 04.001 LDC 001 ;číslo displeje 071 06.053 STA 053 ;doplněni operandu v instr. DISP 072 04 008 LDC 002 073 06.058 STA 058 074 05.100 LDA 100 ;počet sekund do ACC 075 23.040 CALL 040 ;podprogram pro zobrazení 076 04.003 LDC 003 077 06.053 STA 053 078 04.004 LDC 004 079 06.058 STA 058 080 05.101 LDA 101 ;počet minut do ACC 081 23.040 CALL 040 082 04.005 LDC 005 083 06.053 STA 053 084 04.006 LDC 006 085 06.058 STA 058 086 05.102 LDA 102 ;počet hodin do ACC 088 24.000 RET ............................................................... ;tabulka znaků 090 00.252 ; "0" 091 00.144 ; "1" 092 00.118 ; "2" 093 00.182 ; "3" 094 00.154 ; "4" 095 00.174 ; "5" 096 00.238 ; "6" 097 00.148 ; "7" 098 00.254 ; "8" 099 00.190 ; "9" 100 xx.xxx ;sekundy 101 xx.xxx ;minuty 102 xx.xxx ;hodiny | | 110 00.001 111 00.060 112 00.024 113 00.010 114 00.090 ;konstanta pro posun na tabulku znaků | | ; (t j adresa tabulky) 120 xx.xxx ;pomocné výsledky 121 xx.xxx
Při spuštěni programu z adresy 000 dojde k vynulování času. Chceme-li hodiny spustit od času, který nastavíme v adresách 100 + 102 , musíme na adresu 121 vložit 000 a spustit program od adresy 005.
/1/ | KOSMOS-Computei-Praxis, Das universelle Nikroprozessui- System, Franckh'sehe Verlagshandlung Stuttgart. |
/2/ | Barták, Kurt: Mikrořadiče MCS-48. Tesla ELTOS ČSVTS, Pardubice 1983. |
/3/ | Nohel, Jiří - Machačka, Ivo: Základní instrukce mikroprocesoru 8048. Tesla ELTOS o.p., Praha 1983. |
/4/ | Nohel, Jiří a kol.: Asembler 8048. Tesla ELTOS-IMA, Praha 1984. |
/5/ | Kruml, Jaroslav: Podklady pro technické podmínky integrovaného obvodu N-MOS MHB 8048/8035 mikropočítač [výzkumná zpráva]. Tesla VÚST, Praha 1984. |
/6/ | černoch, Michal - Stehno, Zdeněk - Vybulková, Vlasta: Mikropočítač 8048. Sdělovací technika, srpen 1983, č. 8, s. 283-300. |
/7/ | Švéda, Miroslav: Programování pro jednočipové mikropočítače jako zvláštní disciplina. Tesla ELTOS-IMA. Mikrosystém 1/1985, s. 11-13. |
/8/ | Trpíšovský, Tomáš - Zeman, Vojtěch - a kol.: Emulátor TEMS 49 Uživatelská příručka. Tesla ELTOS-IMA, Praha 1985. |
/9/ | Trpíšovský, Tomáš — Couf, Petr: FL48 - knihovna podprogramů pro 3-bytovou binární aritmetiku v pohyblivé řádové čárce pro jednočipový mikropočítač 8048. Tesla ELTOS-IMA, Praha 1986. |
/10/ | Trpíšovský, T. - Zeman, V.: Emulátor TEHS 49 popis rozšířené verze V-02. Tesla ELTOS-IMA, Praha 1986. |
/11/ | Mužík, V. - a kol.: Uživatelská příručka mikropočítačů řady 48. Knižnice ČSVTS Mikroprocesorová technika. Praha 1985. |
/12/ | Mužik, v. - a kol.: Příručka programování mikropočítačů řady 48. Knižnice ČSVTS Mikroprocesorová technika. Praha 1986. |
/13/ | Horák, V.: Jednočipové mikropočítače řady 8048. Amatérské rádio A/č.7/86 (s. 237-259), A/č.8/86 (s. 301-303). A/č.9/86 (s. 339-341). |
/14/ | Operační systém AMOS verze 4.0. příručka uživatele, KKI MFF UK, 1987. |
/15/ | Vlček, J. - Bajbar, J. - Korbel', P.- Smolka, J.: Technické prostriedky a aplikácie jednočipových mikropočítačov série 8048. ČSVTS Tesla VRUSE, Bratislava 1985. |
/16/ | Korbel', P. - Smolka, J. - Bajbar, J. - Vlček, J. : Programovanie jednočipových mikropočítačov série 8048. ČSVTS Tesla VRUSE, Bratislava 1985. |
/17/ | Amatérské rádio č. 8/80 (s. 292-293). |
/18/ | Donovan, J.: Systémové programovanie, slovenský překlad Alfa, 1983. |
/19/ | Horák, V. - Trpíšovský, T. - Couf.P.: Jednočipové mikropočítače a jejich využití. In: Sborník semináře MOP'87. MFF UK Praha, Vinné 1987. |
Listing odpovídá originálu až na nezbytně nutné změny vynucené použitím jiného překladače, TASM z důvodů
kontroly chyb. Původně napsáno v
DEBUG ASM48 PV02.SRC PAGEWIPTH(95) NOOBJECT XREF
ISIS-II MCS-48/UPI-41 MACRO ASSEMBLER, V3.0
0001 0000 ; 0002 0000 ;******************************************************* 0003 0000 ;* * 0004 0000 ;* RIDICI PROGRAM PRO STAVEBNICI P E T R * 0005 0000 ;* * 0006 0000 ;* P.C. 16. 6.1986 * 0007 0000 ;* T.T. 2. 7.1986 REV. * 0008 0000 ;* P.C. 13.10.1986 OVLADAC MGF V.1 * 0009 0000 ;* P.C. 6. 2.1987 REV., SNIZENI ROZSAHU * 0010 0000 ;* P.C. 12. 3.1987 OVLADAC MGF V.2 * 0011 0000 ;* P.C. 20. 8.1987 UPRAVA PRO NOVY HARDVARE * 0012 0000 ;* T.T./P.C. XII/87 REV. OVERONACI VERZE 1 KB * 0013 0000 ;* T.T. II/88 REV. -> PVO2.SRC * 0014 0000 ;* * 0015 0000 ;******************************************************* 0016 0000 ; 0017 0000 ; XTAL 6 MHZ 0018 0000 ; 0019 0000 ; H A R D W A R E 0020 0000 ; 0021 0000 ; T1=1 REZIM "PETR" 0022 0000 ; T1=0 REZIM "EXTERNI ROM" 0023 0000 ; ADRESY V EXTERNI ROM: 0024 0000 EXTRES .EQU 400H ;RESET 0025 0000 EXTINT .EQU 403H ;INTERNAL INTERRUPT 0026 0000 EXTTIN .EQU 407H ;TIMER/COUNTER INTERRUPT 0027 0000 ; 0028 0000 ; OBSAZENI PORTU 8048 0029 0000 ; P10-P17 .. EXTERNAL ("PETR" - PORT 1) 0030 0000 ; 0031 0000 ; P20-P23 .. PRO ROZSIROVANI SYSTEMU 0032 0000 ; NAVIC P23 .. IO/M (OBOU) 8155 0033 0000 ; P22 .. CE VNITRNI 8155 0034 0000 ; P21 .. CE PRIDAVNE 8155 0035 0000 ; P24 .. VYSTUP MUX7 (POUZE PRO KLAVESNICI) 0036 0000 ; P25-P27 .. VSTUPNI LINKY MATICE KLAVESNICE 0037 0000 P55IOM .EQU 00001000B ;ZAPOJENI 0038 0000 P55CE0 .EQU 00000100B ;JEDNOTLIVYCH 0039 0000 P55CE1 .EQU 00000010B ;VODICU 0040 0000 MUX7 .EQU 00010000B ;BRANY P2 0041 0000 ; 0042 0000 ; T0 .. EXTERNAL ("PETR" - LINKA T) 0043 0000 ; INT .. EXTERNAL ("PETR" - LINKA INT) 0044 0000 ; 0045 0000 ; OBSAZENI PORTU 8155 0046 0000 ; PA0-PA7 .. EXTERNAL ("PETR" - PORT 2) 0047 0000 ; PB0-PB7 .. SEGMENTY DISPLEJE 0048 0000 ; PC0-PC5 .. VYSTUP MUX1-MUX6 (DISPLEJ A KLAVESNICE) 0049 0000 ; 0050 0000 ; PRIPOJENI MAGNETOFONU 0051 0000 ; MGF OUTPUT = P11 0052 0000 ; MGF INPUT = P10 0053 0000 MGBITW .EQU 00000010B ;PRO ZAPIS 0054 0000 MGBITR .EQU 00000001B ;PRO CTENI 0055 0000 ; 0056 0000 ; 0057 0000 ; S O F T W A R E 0058 0000 ; 0059 0000 ; OBSAZENI REGISTRU 0060 0000 ; 0061 0000 ; RB0 - PRACOVNI REGISTY 0062 0000 ; R4 "PETR" PRIZNAK F 0063 0000 ; R6 AKTUALNI ADRESA MEM 0064 0000 ; R7 "PETR" HODNOTA PC 0065 0000 ; 0066 0000 ; RB1 - PRERUSENI OD CASOVACE 0067 0000 ; R0 USCHOVA STAVU LINEK P20-P23 0068 0000 ; R1 PRACOVNI SMERNIK 0069 0000 ; R2 CITAC MUX 0070 0000 ; R3 DETEKCE KLAVESY "STOP" 0071 0000 STOPO .EQU 1BH ;SMERNIK NA R3 0072 0000 ; R4 CITAC CHVENI PRI DETEKCI TLACITKA 0073 0000 ; R5 POSLEDNI STISKNUTE TLACITKO 0074 0000 ; R6 DETEKOVANE TLACITKO 0075 0000 KEY .EQU 1EH ;SMERNIK NA R6 0076 0000 ; R7 USCHOVA ACC 0077 0000 ; 0078 0000 ; OBSAZENI INTERNI RAM 0079 0000 ; 0080 0000 VID0 .EQU 20H ;VIDEOREGISTRY. PRAVY 0081 0000 VID1 .EQU VID0+1 ; . 0082 0000 VID2 .EQU VID0+2 ; . 0083 0000 VID3 .EQU VID0+3 ; . 0084 0000 VID4 .EQU VID0+4 ; . 0085 0000 VID5 .EQU VID0+5 ; LEVY 0086 0000 SP .EQU 26H ;"PETR" STACK POINTER 0087 0000 ACC .EQU 27H ;"PETR" ACC 0088 0000 TIM128 .EQU 28H ;CASOVAC 1.28 MS 0089 0000 P1D .EQU 29H ;KOPIE DAT NA P1 (8048) 0090 0000 P2D .EQU 2AH ;KOPIE DAT NA P2 (PA 8155) 0091 0000 BUFF .EQU 2BH ;BUFFER CISLIC 2BH - 30H 0092 0000 STKMIN .EQU 31H ;OBLAST PRO ZASOBNIK 0093 0000 STKMAX .EQU 3AH ; 10 POLOZEK 0094 0000 ; 3BH-3FH ... VOLNE 0095 0000 ; 0096 0000 ; PRIZNAKY 0097 0000 ; F0 .. PRITOMNOST ROZSIRUJICI 8155 0098 0000 ; F1 .. ZADOST O PRERUSENI PROCESORU PETR 0099 0000 ; 0100 0000 ; KONSTANTY 0101 0000 ; 0102 0000 KTIM .EQU 0F0H ;KONSTANTA PRO CASOVAC 0103 0000 ; (1.28 MS, CCA 800HZ) 0104 0000 CHVENI .EQU 3 ;POCET CTENI NUTNYCH PRO 0105 0000 ; DETEKCI TLACITKA 0106 0000 ; 0107 0000 P55R .EQU 0 ;RIZENI 8155 0108 0000 P55A .EQU 1 ;PORT A 0109 0000 P55B .EQU 2 ;PORT B 0110 0000 P55C .EQU 3 ;PORT C 0111 0000 ; 0112 0000 ; CISLA CHYB 0113 0000 ; 0114 0000 ERR1 .EQU 1 ;PRETECENI PRI DEC-->BIN 0115 0000 ERR2 .EQU 2 ;ADRESA MIMO PAMET 0116 0000 ERR3 .EQU 3 ;NEZNAMA INSTRUKCE 0117 0000 ERR4 .EQU 4 ;OPERAND MIMO ROZSAH 0118 0000 ERR5 .EQU 5 ;PREPLNENI ZASOBNIKU (CALL) 0119 0000 ERR6 .EQU 6 ;PRAZDNY ZASOBNIK (RET) 0120 0000 ERR7 .EQU 7 ;CHYBA CTENI Z MGF 0121 0000 ; 0122 0000 ; KONSTANTY PRO ZOBRAZOVANI 0123 0000 ; 0124 0000 ;DEFINICE ZAPOJENI SEGMENTU NA JEDNOTLIVE LINKY PORTU B 0125 0000 ; 0126 0000 S0 .EQU 00000100B ; ---- S0 ---- 0127 0000 S1 .EQU 00010000B ; ! ! 0128 0000 S2 .EQU 10000000B ; S5 S1 0129 0000 S3 .EQU 00100000B ; ! ! 0130 0000 S4 .EQU 01000000B ; ---- S6 ---- 0131 0000 S5 .EQU 00001000B ; ! ! 0132 0000 S6 .EQU 00000010B ; S4 S2 0133 0000 S7 .EQU 00000001B ; ! ! 0134 0000 ZTECKA .EQU S7 ; ---- S3 ---- S7 0135 0000 ; 0136 0000 ZZ0 .EQU S0+S1+S2+S3+S4+S5 0137 0000 ZZ1 .EQU S1+S2 0138 0000 ZZ2 .EQU S0+S1+S3+S4+S6 0139 0000 ZZ3 .EQU S0+S1+S2+S3+S6 0140 0000 ZZ4 .EQU S1+S2+S5+S6 0141 0000 ZZ5 .EQU S0+S2+S3+S5+S6 0142 0000 ZZ6 .EQU S0+S2+S3+S4+S5+S6 0143 0000 ZZ7 .EQU S0+S1+S2 0144 0000 ZZ8 .EQU S0+S1+S2+S3+S4+S5+S6 0145 0000 ZZ9 .EQU S0+S1+S2+S3+S5+S6 0146 0000 ZZA .EQU S0+S1+S2+S4+S5+S6 0147 0000 ZZP .EQU S0+S1+S4+S5+S6 0148 0000 ZZE .EQU S0+S3+S4+S5+S6 0149 0000 ZZF .EQU S0+S4+S5+S6 0150 0000 ZZS .EQU ZZ5 0151 0000 ZZM .EQU S2+S4+S6 0152 0000 ZZH .EQU S1+S2+S4+S5+S6 0153 0000 ZZC .EQU S0+S3+S4+S5 0154 0000 ZRUN .EQU S2+S3+S4+S6 0155 0000 ; 0156 0000 ; KODY TLACITEK 0157 0000 ; 0158 0000 TL0 .EQU 0 ;SKUPINA CISEL 0159 0000 TL1 .EQU TL0+1 ;MUSY BYT ZA SEBOU 0160 0000 TL2 .EQU TL0+2 0161 0000 TL3 .EQU TL0+3 0162 0000 TL4 .EQU TL0+4 0163 0000 TL5 .EQU TL0+5 0164 0000 TL6 .EQU TL0+6 0165 0000 TL7 .EQU TL0+7 0166 0000 TL8 .EQU TL0+8 0167 0000 TL9 .EQU TL0+9 0168 0000 ; 0169 0000 TLPREV .EQU 10 ;TYTO TRI KODY 0170 0000 TLEND .EQU 11 ;MUSI NASLEDIVAT 0171 0000 TLNEXT .EQU 12 ;ZA SEBOU ! 0172 0000 ; 0173 0000 TLMEM .EQU 13 ;PRIKAZOVE KLAVESY 0174 0000 TLACC .EQU 14 ;MUSI BYT ZA SEBOU 0175 0000 TLPC .EQU 15 0176 0000 TLRUN .EQU 16 0177 0000 TLSTEP .EQU 17 0178 0000 TLSAVE .EQU 18 0179 0000 TLLOAD .EQU 19 0180 0000 ; 0181 0000 TLSTOP .EQU TLEND ;TLACITKO VE FUNKCI STOP 0182 0000 NOKEY .EQU 80H 0183 0000 ; 0184 0000 .ORG 0 0185 0000 ; 0186 0000 ;******************************************************** 0187 0000 ;* * 0188 0000 ;* VEKTOR RESTARTU A PRERUSENI * 0189 0000 ;* * 0190 0000 ;******************************************************** 0191 0000 ; 0192 0000 ; ADRESA 0 - RESET 0193 0000 04 85 JMP RESET 0194 0002 00 NOP 0195 0003 ; ADRESA 3 - EXT INT 0196 0003 56 81 JT1 INTINT ;PRERUSENI PETR 0197 0005 84 03 JMP EXTINT 0198 0007 ; ADRESA 7 - TIMER/COUNTER INT 0199 0007 56 0B JT1 TIMER 0200 0009 84 07 JMP EXTTIN 0201 000B ; 0202 000B ; 0203 000B ;******************************************************** 0204 000B ;* * 0205 000B ;* PRERUSENI OD CASOVACE * 0206 000B ;* * 0207 000B ;******************************************************** 0208 000B ; 0209 000B D5 TIMER SEL RB1 0210 000C AF MOV R7,A ;USCHOVA ACC 0211 000D 23 F0 MOV A,#KTIM 0212 000F 62 MOV T,A ;CASOVAC 0213 0010 ; USCHOVA STAVU LINEK P20 - P23 (NA KONCI HO OBNONI) 0214 0010 0A IN A,P2 0215 0011 A8 MOV R0,A 0216 0012 ; OBSLUHA DISPLEJE 0217 0012 ; 1. ZHASNOUT SVITICI ZNAK, MAPOVAT VNITRNI 8155, IO 0218 0012 74 F1 CALL ZHAS0 0219 0014 ; 2. POSUN MULTIPLEXU. NYNI JE LINKA MUX7=1 0220 0014 EA 1A DJNZ R2,TIM2 ;CITAC MULTIPLEXU 0221 0016 ; PRO MUX=7: NASTAVIT LINKU P24 (VYSTUP MUX7) := 0 0222 0016 9A EF ANL P2,#~MUX7 0223 0018 BA 07 MOV R2,#7 ;REINCIALIZACE CITACE 0224 001A TIM2 ;NASTAVENI LINEK MUX1-MUX6 (BRANA C 8155) 0225 001A FA MOV A,R2 ;CITAC MULTIPLEXU 0226 001B 03 79 ADD A,#TABMUX-1 0227 001D A3 MOVP A,@A ;A=DATA K ZAPISU 0228 001E B9 03 MOV R1,#P55C ; NA BRANU C 8155 0229 0020 91 MOVX @R1,A ;ZAPIS MUX1-MUX6 0230 0021 ; 3. ROZSVICENI ZNAKU NA NOVE POZICI 0231 0021 ; (V PRIPADE MUX=7 JE DISPLEJ NEAKTIVNI, 0232 0021 ; NA HODNOTE DAT ZAPSANYCH NA BRANU B NEZALEZI) 0233 0021 FA MOV A,R2 ;CITAC MUX 0234 0022 03 1F ADD A,#VID0-1 0235 0024 A9 MOV R1,A 0236 0025 F1 MOV A,@R1 ;DATA NA DISPLEJ 0237 0026 37 CPL A 0238 0027 B9 02 MOV R1,#P55B 0239 0029 91 MOVX @R1,A ;ROZSVITI DISPLEJ 0240 002A ; 0241 002A ; CTENI STAVU TLACITEK 0242 002A ; 0243 002A 0A TIM3 IN A,P2 0244 002B 37 CPL A 0245 002C 53 E0 ANL A,#11100000B ;MASKA LINEK P25-P27 0246 002E 97 CLR C 0247 002F B9 03 MOV R1,#3 0248 0031 F7 TIM4 RLC A 0249 0032 F6 40 JC TIM6 ;JE TLACITKO 0250 0034 E9 31 DJNZ R1,TIM4 0251 0036 ;NENI TLACITKO 0252 0036 FD MOV A,R5 ;POSLEDNI TLACITKO 0253 0037 53 07 ANL A,#7 0254 0039 DA XRL A,R2 ;NA STEJNE LINCE MUX ? 0255 003A 96 5A JNZ TIM8 ;NE NIC 0256 003C ; TLACITKO BYLO PUSTENO 0257 003C BD 80 TIM5 MOV R5,#NOKEY ;LASTKEY := NEPLATNE 0258 003E 04 5A JMP TIM8 0259 0040 ; NASEL STISKNUTE TLACITKO 0260 0040 96 3C TIM6 JNZ TIM5 ;JSOU STISKNUTA DVE 0261 0042 F9 MOV A,R1 ;PORADI TLACITKA (1..3) 0262 0043 E7 RL A 0263 0044 E7 RL A ;*8 0264 0045 E7 RL A 0265 0046 4A ORL A,R2 ;JESTE CITAC MUX 0266 0047 ;V A JE KOD TLACITKA 9 .. 30 0267 0047 2D XCH A,R5 ;AKTUALIZUJE LASTKEY 0268 0048 DD XRL A,R5 ;STEJNE JAKO PREDTIM ? 0269 0049 C6 4D JZ TIM7 0270 004B BC 03 MOV R4,#CHVENI ;NOVE, ZNOVU CITAT CHVENI 0271 004D FC TIM7 MOV A,R4 0272 004E C6 5A JZ TIM8 ;JIZ DETEKOVANO 0273 0050 EC 5A DJNZ R4,TIM8 ;CITAC CHVENI 0274 0052 ;DETEKCE TLACITKA 0275 0052 FD MOV A,R5 ;LASTKEY 0276 0053 03 5A ADD A,#TABTL-9 ;PTR DO TABULKY 0277 0055 A3 MOVP A,@A ;PREKODOVANI TLACITKA 0278 0056 AE MOV R6,A ;KOD TLACITKA 0279 0057 ;V R6 (KEY) OCEKAVA KOD TLACITKA HLAVNI PGM 0280 0057 ;TEST STISKU "STOP": 0281 0057 D3 0B XRL A,#TLSTOP ;TL. VE VYZNAMU STOP 0282 0059 AB MOV R3,A ;R3:=0 .. DETEKOVANO 0283 005A TIM72 0284 005A ; 0285 005A ; VYSTUP Z CASOVACE. OBNOVA LINEK P10 A P24 0286 005A ; 0287 005A B9 28 TIM8 MOV R1,#TIM128 ;CITA V CASOVACI 1.28 MS 0288 005C 11 INC @R1 0289 005D ; 0290 005D F8 MOV A,R0 ;STAV P2 PRI PRERUSENI 0291 005E 43 F0 ORL A,#11110000B ;P24..P27 := 1 0292 0060 3A OUTL P2,A ;OBNOVA P20..P23 0293 0061 FF MOV A,R7 ;OBNOVA ACC 0294 0062 93 RETR 0295 0063 ; 0296 0063 ; TABULKA PRO PREKODOVANI TLACITEK 0297 0063 ; 0298 0063 TABTL 0299 0063 ;KLAVESNICE: CITAC MUX = 0300 0063 ; 6 5 4 3 2 1 7 0301 0063 ; ------------------------------------------------- 0302 0063 ;P25 <- ! 7 ! 8 ! 9 ! 0 ! SAVE ! LOAD !HW.RES! 0303 0063 ;P26 <- ! 4 ! 5 ! 6 ! ACC ! PC ! RUN ! STEP ! 0304 0063 ;P27 <- ! 1 ! 2 ! 3 ! MEM ! PREV ! NEXT ! END ! 0305 0063 ; ------------------------------------------------- 0306 0063 ;ORGANIZACE TABULKY: 0307 0063 ; MUX=NEDEF 1 2 3 4 5 6 7 0308 0063 ;P25 . . . . . . X 0309 0063 ;P26 X . . . . . . . 0310 0063 ;P27 X . . . . . . . 0311 0063 ; 0312 0063 131200090807 .DB TLLOAD,TLSAVE,TL0 ,TL9 ,TL8 ,TL7 ,NOKEY 0312 0069 80 0313 006A 80100F0E0605 .DB NOKEY,TLRUN ,TLPC ,TLACC ,TL6 ,TL5 ,TL4 ,TLSTEP 0313 0070 0411 0314 0072 800C0A0D0302 .DB NOKEY,TLNEXT,TLPREV,TLMEM ,TL3 ,TL2 ,TL1 ,TLEND 0314 0078 010B 0315 007A ; 0316 007A ;TABULKA PRO KODOVANI VYSTUPU MULTIPLEXU NA BRANE C 8155 0317 007A F7 TABMUX .DB 11110111B ;MUX=1 (SVITI VPRAVO) 0318 007B EF .DB 11101111B ; 2 . 0319 007C DF .DB 11011111B ; 3 . 0320 007D FE .DB 11111110B ; 4 . 0321 007E FD .DB 11111101B ; 5 . 0322 007F FB .DB 11111011B ; 6 (SVITI VLEVO) 0323 0080 FF .DB 11111111B ; 7 (DISPLEJ ZHASTNUTY) 0324 0081 ; 0325 0081 ;********************************************************* 0326 0081 ;* * 0327 0081 ;* OBSTUHA VNEJSIHO PRERUSENI * 0328 0081 ;* * 0329 0081 ;********************************************************* 0330 0081 ; 0331 0081 A5 INTINT CLR F1 0332 0082 B5 CPL F1 ;F1 := 1 0333 0083 15 DIS I 0334 0084 93 RETR 0335 0085 ; 0336 0085 ;******************************************************** 0337 0085 ;* * 0338 0085 ;* RESET SYSTEMU * 0339 0085 ;* * 0340 0085 ;******************************************************** 0341 0085 ; 0342 0085 RESET ;INICIALIZACE VNITRNI 8155 (DISPLEJ) 0343 0085 B9 00 MOV R1,#P55R ;RIDICI PORT 8155 0344 0087 23 0F MOV A,#0FH ;POVEL: A=B=C=OUT 0345 0089 74 F5 CALL WR55IO ;VYSTUP, MAPUJE 8155 IO 0346 008B 19 INC R1 0347 008C 23 FF MOV A,#0FFH 0348 008E ;MOVX @R1,A ;PA<--FF NIC ! 0349 008E 19 INC R1 0350 008F 91 MOVX @R1,A ;PB<--FF (ZHASNE DISP.) 0351 0090 19 INC R1 0352 0091 91 MOVX @R1,A ;MULTIPLEX NEAKTIVNI 0353 0092 ; 0354 0092 ;INICIALIZACE HODNOT V INTERNI RAM 0355 0092 B8 20 MOV R0,#VID0 ;NULUJE: 0356 0094 BB 08 MOV R3,#8 ; VIDEOREGISTRY, 0357 0096 74 EA CALL CLEAR ; ACC, SP 0358 0098 AC MOV R4,A ; PRIZNAK F 0359 0099 AE MOV R6,A ; ADRESU MEM 0360 009A AF MOV R7,A ; PC 0361 009B 37 CPL A ;A:=0FFH 0362 009C A0 MOV @R0,A ;P1D 0363 009D 18 INC R0 0364 009E A0 MOV @R0,A ;P2D 0365 009F ;INICIALIZACE CASOVACE, A=0FFH 0366 009F 62 MOV T,A ;1. TIK = 80 MIKROSEC 0367 00A0 D5 SEL RB1 0368 00A1 BA 01 MOV R2,#1 ;CITAC MUX 0369 00A3 AB MOV R3,A ;DETEKCE "STOP" 0370 00A4 ;; MOV R5,A ;LAST KEY := 0FFH 0371 00A4 ;(NENI NUTNE) 0372 00A4 AE MOV R6,A ;KEY := 0FFH 0373 00A5 C5 SEL RB0 0374 00A6 ; ODSKOK DO EXTERNI ROM, JE-LI PRIPOJENA 0375 00A6 56 AA JT1 INTRES ;POKRACUJE ZDE 0376 00A8 84 00 JMP EXTRES ;EXTERNAL RESET 0377 00AA ; 0378 00AA 23 F5 INTRES MOV A,#~(P55IOM+P55CE1) 0379 00AC 3A OUTL P2,A ;MAPUJE POUZE DRUHOU 8155 0380 00AD F8 MOV A,R0 0381 00AE 91 MOVX @R1,A ;ZAPISE NEJAKOU HODNOTU 0382 00AF 81 MOVX A,@R1 ;A PRECTE JI ZPET 0383 00B0 D8 XRL A,R0 ;PRECETL TOTEZ ? 0384 00B1 96 B4 JNZ RES3 ;NE -> NENI DRUHA 8155 0385 00B3 95 CPL F0 ;MAME OBE 8155 ! 0386 00B4 RES3 ;NULUJE RAM 8155 0387 00B4 9A F1 ANL P2,#~(P55IOM+P55CE0+P55CE1) 0388 00B6 27 CLR A ;MAPUJE OBE 8155, PAMET 0389 00B7 A9 MOV R1,A 0390 00B8 91 RES1 MOVX @R1,A 0391 00B9 E9 B8 DJNZ R1,RES1 0392 00BB ;RESET PROVEDEN 0393 00BB 55 STRT T 0394 00BC 24 15 JMP PRIKAZ ;SKOK DO RIDICI SMICKY 0395 00BE ; 0396 00BE ;******************************************************** 0397 00BE ;* * 0398 00BE ;* PODPROGRAMY PRO INTERPRETACI INSTRUKCI * 0399 00BE ;* * 0400 00BE ;******************************************************** 0401 00BE ; 0402 00BE ; 0403 00BE ;******************************************************** 0404 00BE ;* * 0405 00BE ;* TRANSFORMACE LOG. ADRESA--> FYZ. ADRESA * 0406 00BE ;* * 0407 00BE ;******************************************************** 0408 00BE ; 0409 00BE ;VSTUP: A=LOGICKA ADRESA BUNKY PAMETI 0410 00BE ;VYSTUP: PRIMAPUJE PAMET ODPOVIDAJICIHO OBVODU 8155, 0411 00BE ; V R1 VRATI ADRESU UVNITR PRIMAPOVANE STRANKY 0412 00BE ; NICI REGISTRY A,R2 0413 00BE ; 0414 00BE ;TRANSFORMACNI FUNKCE: 0415 00BE ;VNITRNI 8155: FYZ. ADR. = 2*LOG.ADRESA 0416 00BE ;VNEJSI 8155: FYZ. ADR. = 2*LOG.ADRESA+1 0417 00BE ; 0418 00BE 81 LDADR: MOVX A,@R1 0419 00BF 34 00 CVADR: CALL TSADR ;TEST PRIPUSTNOSTI 0420 00C1 B9 F5 MOV R1,#~(P55IOM+P55CE1) ;PRO ADR >=128 0421 00C3 F2 C7 JB7 CVAD0 0422 00C5 B9 F3 MOV R1,#~(P55IOM+P55CE0) ;PRO ADR <128 0423 00C7 E7 CVAD0: RL A 0424 00C8 29 XCH A,R1 0425 00C9 3A OUTL P2,A ;MAPUJE SPRAVNOU 8155 0426 00CA 83 RET 0427 00CB ; 0428 00CB ;******************************************************** 0429 00CB ;* * 0430 00CB ;* CTENI OPERANDU INSTRUKCI * 0431 00CB ;* * 0432 00CB ;******************************************************** 0433 00CB ; 0434 00CB ;VYSTUP: A=HODNOTA OPERANDU MEM 0435 00CB ;PRO LDOPF0 NAVIC: FLAG := 0, V R2 VRATI ACC 0436 00CB ; 0437 00CB BC 00 LDOPF0 MOV R4,#0 ;NULUJE UZIV. FLAG 0438 00CD F0 MOV A,@R0 0439 00CE AA MOV R2,A ;ACC 0440 00CF ; 0441 00CF 14 BE LDOPM CALL LDADR ;ADRESA OPERANDU DO R1 0442 00D1 ;; INC R1 ;CISLO PRIPADNE CHYBY 0443 00D1 ;; MOVX A,@R1 ;OPER.ZNAK 0444 00D1 ;; JNZ AERROR ;NENULOVY => CHYBA 0445 00D1 ;; DEC R1 0446 00D1 81 MOVX A,@R1 0447 00D2 83 RET 0448 00D3 ; 0449 00D3 ;******************************************************** 0450 00D3 ;* * 0451 00D3 ;* VYBER OPERANDU A TEST 0..8 * 0452 00D3 ;* * 0453 00D3 ;******************************************************** 0454 00D3 ; 0455 00D3 ; VRATI CARRY IFF OPERAND JE 8 0456 00D3 ; OPERAND VRATI V R2 8,...,1,0FFH 0457 00D3 ; A:=STARE R2 0458 00D3 81 LT08 MOVX A,@R1 0459 00D4 03 F7 ADD A,#-9 0460 00D6 F6 E2 JC LERROR 0461 00D8 ;TED JE A = -9..-1 0462 00D8 03 01 ADD A,#1 ;CARRY PRO OP.=8 0463 00DA 37 CPL A 0464 00DB 17 INC A 0465 00DC 2A XCH A,R2 0466 00DD 83 T01RET RET 0467 00DE ; 0468 00DE ;******************************************************** 0469 00DE ;* * 0470 00DE ;* TEST, ZDA A = 0 NEBO 1 * 0471 00DE ;* * 0472 00DE ;******************************************************** 0473 00DE ; 0474 00DE ;NENI-LI, OHLASI CHYBU 4 0475 00DE ;PRI NANRATU: CARRY := BIT A.0, A VYNULUJE 0476 00DE 97 T01 CLR C 0477 00DF 67 RRC A ;BIT A.0 V CARRY 0478 00E0 C6 DD JZ T01RET ;OSTATNI BITY A NULOVE 0479 00E2 ; 0480 00E2 ;SPOLECNA CHYBA - OPERAND MIMO POVOLENY ROZSAH 0481 00E2 BA 04 LERROR MOV R2,#ERR4 ;CISLO CHYBY 0482 00E4 24 09 AERROR JMP ERROR 0483 00E6 ; 0484 00E6 ;******************************************************** 0485 00E6 ;* * 0486 00E6 ;* PODPROGRAM PRO PROVEDENI OPERACE OUT * 0487 00E6 ;* * 0488 00E6 ;******************************************************** 0489 00E6 ; 0490 00E6 ; VSTUP: R0=ACC, R2 SMERNIK NA OBRAZ DAT NA PORTU 0491 00E6 ; R1 = SMERNIK MA OPERAND INSTRUKCE (V EXT. RAM) 0492 00E6 ; VYSTUP: V A DATA K VYSLANI NA PORT 0493 00E6 ; 0494 00E6 14 D3 POUT CALL LT08 ;CTE OPERAND, TEST 0..8 0495 00E8 A9 MOV R1,A ;ADRESA OBRAZU DAT NA PORTU 0496 00E9 F0 MOV A,@R0 ;LOAD ACC 0497 00EA F6 F9 JC POUT8 ;CELY PORT 0498 00EC 14 DE CALL T01 ;TEST 0..1, CY:=BIT 0499 00EE 23 01 MOV A,#1 0500 00F0 77 POUT1 RR A 0501 00F1 EA F0 DJNZ R2,POUT1 0502 00F3 ;V A JE BIT 1 V ODPOVIDAJICI POLOZE 0503 00F3 E6 F7 JNC POUT2 ;NULOVAT BIT 0504 00F5 41 ORL A,@R1 ;JEDNICKYJE BIT 0505 00F6 83 RET 0506 00F7 37 POUT2 CPL A 0507 00F8 51 ANL A,@R1 ;NULUJE BIT 0508 00F9 83 POUT8 RET 0509 00FA ; 0510 00FA ;******************************************************** 0511 00FA ;* * 0512 00FA ;* K L A V E S N I C E * 0513 00FA ;* * 0514 00FA ;******************************************************** 0515 00FA ; 0516 00FA ; CTENI STAVU KLAVESNICE, JE-LI ZNAK, JEHO PREVZETI 0517 00FA ; 0518 00FA B8 1E CTIKL MOV R0,#KEY 0519 00FC 23 80 CTIKL3 MOV A,#NOKEY 0520 00FE 20 XCH A,@R0 0521 00FF 83 RET 0522 0100 ; 0523 0100 ;TEST PRIPUSTNOSTI ADRESY V A, NICI R2 0524 0100 B6 04 TSADR JF0 TSOK 0525 0102 F2 05 JB7 TSERR 0526 0104 83 TSOK RET 0527 0105 BA 02 TSERR MOV R2,#ERR2 0528 0107 ; 0529 0107 ;******************************************************** 0530 0107 ;* * 0531 0107 ;* OBSLUHA CHYBY * 0532 0107 ;* * 0533 0107 ;******************************************************** 0534 0107 ; 0535 0107 ; CISLO CHYBY V R2 0536 0107 BE 00 ERROR0 MOV R6,#0 0537 0109 25 ERROR EN TCNTI 0538 010A 74 E6 CALL CLRD5 ;MAZE DISPLEJ 0539 010C B0 6E MOV @R0,#ZZE ;'E' VLEVO 0540 010E FA MOV A,R2 0541 010F 74 D2 CALL ZOBR3 ;ZOBRAZI CISLO CHYBY 0542 0111 ;CEKA NASTISK END 0543 0111 74 C2 CEKEND CALL CTICIS 0544 0113 96 11 JNZ CEKEND 0545 0115 ; 0546 0115 ;******************************************************** 0547 0115 ;* * 0548 0115 ;* RIDICI SMICKA PRIKAZU * 0549 0115 ;* * 0550 0115 ;******************************************************** 0551 0115 ; 0552 0115 25 PRIKAZ EN TCNTI 0553 0116 74 E6 CALL CLRD5 ;MAZE DISPLEJ 0554 0118 B0 6C MOV @R0,#ZZC ;'C' VLEVO 0555 011A 74 BD PRIK1: CALL CTIKL1 ;CEKA NA KLAVESU 0556 011C 03 F3 ADD A,#-TLMEM ;CY IFF PRIKAZ 0557 011E E6 1A JNC PRIK1 0558 0120 03 25 ADD A,#TAB1 0559 0122 B8 25 MOV R0,#VID5 ;VEVY VIDEOREGISTR 0560 0124 B3 JMPP @A ;ROZKOK PODLE PRIKAZU 0561 0125 ; 0562 0125 ; TABULKA PRIKAZU 0563 0125 ; 0564 0125 ;PORADI MUSI SOUHLASIT S PORADIM KODU KLAVES 0565 0125 3F 60 6F TAB1 .DB XMEM,XACC,XPC 0566 0128 2C 37 .DB XRUN,XSTEP 0567 012A 9A D1 .DB MGSAVE,MGLOAD 0568 012C ; 0569 012C ;******************************************************** 0570 012C ;* * 0571 012C ;* PRIKAZ RUN, STEP * 0572 012C ;* * 0573 012C ;******************************************************** 0574 012C ; 0575 012C B0 E2 XRUN MOV @R0,#ZRUN ;ZPRAVA NA DISPLEJ 0576 012E A5 CLR F1 ;RUSI PRIJATE PRERUSENI 0577 012F 54 1B XR2 CALL INSTR 0578 0131 B8 1B MOV R0,#STOPO 0579 0133 14 FC CALL CTIKL3 ;TEST DETEKCE TL. STOP 0580 0135 96 2F JNZ XR2 0581 0137 ;BREAK ;DO REZIMU "STEP" 0582 0137 ; 0583 0137 54 1B XSTEP CALL INSTR ;PROVEDE JEDNU INSTRUKCI 0584 0139 74 CD CALL ZOBRPC ;ZOBRAZI PC 0585 013B 24 1A JMP PRIK1 ;CEKA NA PRIKAZ, 0586 013D ; ANIZ BY MAZAL DISPLEJ 0587 013D ; 0588 013D ;******************************************************** 0589 013D ;* * 0590 013D ;* PRIKAZ MEM * 0591 013D ;* * 0592 013D ;******************************************************** 0593 013D ; 0594 013D ;DISPLEJ JE SMAZANY, R0=VID5 0595 013D 74 E6 XMEM3 CALL CLRD5 0596 013F B0 C2 XMEM MOV @R0,#ZZM ;ZOBRAZIT 'M' 0597 0141 B9 06 MOV R1,#6 ;ADRESA MEMORY - R6 0598 0143 34 F5 CALL ZC3A ;ZOBRAZENI + VSTUP ADRESY 0599 0145 ;A = OMEZOVAC 0600 0145 ;END JE OSETRENO, JINAK ZOBRAZI OBSAH PAMET.BUNKY 0601 0145 FE MOV A,R6 0602 0146 14 BF CALL CVADR ;KONVERZE NA 8155 ADRESU 0603 0148 ;ZOBRAZENI SOUCASNE HODNOTY 0604 0148 81 MOVX A,@R1 0605 0149 74 D2 CALL ZOBR3 0606 014B 19 INC R1 0607 014C 81 MOVX A,@R1 0608 014D 74 D6 CALL ZOBR2 0609 014F ;VSTUP NOVE HODNOTY 0610 014F BD 05 MOV R5,#5 ;MAX. 5 CISLIC 0611 0151 74 17 CALL CISLO ;VSTUP CISLA 0612 0153 F6 5A JC XMEM4 ;BEZE ZMENY 0613 0155 C9 DEC R1 0614 0156 91 MOVX @R1,A ;ZAPIS HODNOTY 0615 0157 19 INC R1 0616 0158 FB MOV A,R3 0617 0159 91 MOVX @R1,A 0618 015A 34 FC XMEM4 CALL TSTEND ;OMEZOVAC DO A, TEST END 0619 015C ;PRO PREV A NEXT: POSUN ADRESY A POKRACOVANI 0620 015C ;A=-1 PRO PREV, +1 PRO NEXT 0621 015C 6E ADD A,R6 ;POSUN ADRESY 0622 015D AE MOV R6,A 0623 015E 24 3D JMP XMEM3 0624 0160 ; 0625 0160 ;******************************************************** 0626 0160 ;* * 0627 0160 ;* PRIKAZY ZMENY STAVU PROCESORU * 0628 0160 ;* * 0629 0160 ;******************************************************** 0630 0160 ; 0631 0160 ; PRIKAZ ACC 0632 0160 ; 0633 0160 74 E6 XACC CALL CLRD5 0634 0162 B0 DE MOV @R0,#ZZA 0635 0164 B9 27 MOV R1,#ACC 0636 0166 ; R1=ACC 0637 0166 74 0A CALL ZC3 ;VSTUP NOVE HODNOTY 0638 0168 F6 6B JC XACC1 ;JEN OMEZOVAC 0639 016A A1 MOV @R1,A ;ZAPIS NOVE HODNOTY ACC 0640 016B 34 FC XACC1 CALL TSTEND ;OMEZOVAC DO A,TEST END 0641 016D F2 88 JB7 XSP ;PREV 0642 016F ; 0643 016F ; PRIKAZ PC 0644 016F ; 0645 016F 74 CD XPC CALL ZOBRPC 0646 0171 B9 07 MOV R1,#7 ;ADRESA PC (R7) 0647 0173 34 F5 CALL ZC3A ;ZOBRAZENI A ZMENA 0648 0175 ;A = OMEZOVAC 0649 0175 F2 60 JB7 XACC ;PREV 0650 0177 ; 0651 0177 ; ZMENA HODNOTY FLAGU 0652 0177 ; 0653 0177 74 E6 XF CALL CLRD5 0654 0179 B0 4E MOV @R0,#ZZF 0655 017B FC MOV A,R4 ;SOUCASNA HODNOTA 0656 017C 74 11 XF1 CALL ZC1 ;ZOBRAZENI + VSTUP 0657 017E F6 84 JC XF3 ;JEN OMEZOVAC 0658 0180 14 DE CALL T01 ;TEST A=0..1, BIT DO CARRY 0659 0182 F7 RLC A 0660 0183 AC MOV R4,A ;NOVA HODNOTA 0661 0184 XF2 0662 0184 34 FC XF3 CALL TSTEND 0663 0186 F2 6F JB7 XPC ;PREV 0664 0188 ; 0665 0188 ; ZMENA STACK POINTERU 0666 0188 ; 0667 0188 74 E6 XSP CALL CLRD5 0668 018A B0 AE MOV @R0,#ZZS 0669 018C B9 26 MOV R1,#SP 0670 018E F1 MOV A,@R1 0671 018F 74 11 CALL ZC1 ;ZOBRAZENI + VSTUP 0672 0191 F6 94 JC XSP1 ;BEZE ZMENY 0673 0193 A1 MOV @R1,A ;ZMENA HODNOTY 0674 0194 34 FC XSP1 CALL TSTEND ;OMEZOVAC DO A,TEST END 0675 0196 F2 77 JB7 XF ;PREV 0676 0198 24 60 JMP XACC ;NEXT 0677 019A ; 0678 019A ;******************************************************** 0679 019A ;* * 0680 019A ;* PRIKAZY SAVE A LOAD * 0681 019A ;* * 0682 019A ;******************************************************** 0683 019A ; 0684 019A ;STRUKTURA ZAZNAMU 0685 019A ; - ZAVADECI TON (BITY 0) 0686 019A ; - SYNCHRONIZACNI BITY 1,0,0 0687 019A ; - SYNCHRONIZACNI BYTE 'Y' (01011001B) 0688 019A ; - DELKA ZAZNAMU (POCET BYTU V DATOVE CASTI), 2 BYTY 0689 019A ; (NEJPRVE H-BYTE, POTOM L-BYTE) 0690 019A ; ... VLASTNI DATA ... 0691 019A ; - KONTROLNI SOUCET 0692 019A ; 0693 019A ;POUZITI REGISTRU - PLATI PRO SAVE I LOAD 0694 019A ; R0 .. CITAC PRES OBVODY 8155 0695 019A ; R1 .. ADRESA V RAMCI OBVODU 8155 0696 019A ; R2 .. KONTROLNI SOUCET 0697 019A ; R3 .. VYSILANY BYTE (PPRG. WBYTE) 0698 019A ; R4 .. CITAC BITU V BYTU (PPRG. WBYTE) 0699 019A ; POLARITA VSTUPNIHO SIGNALU (PPRG. SYNCHRO RBIT) 0700 019A ; R5 .. CITAC PRODLEVY (PPRG. WBIT,RBIT) 0701 019A ; R6, R7 NEMENI 0702 019A ;PRI NAVRATU DOSADI DO R4 (FLAG F PROCESORU "PETR") 0 0703 019A ; 0704 019A ; ZAPIS NA MAGNETOFON ( SAVE ) 0705 019A ; 0706 019A 74 F0 MGSAVE CALL ZHASNI ;ZHASNE DISPLEJ 0707 019C ;UVODNI TON = 256 BITU 0 0708 019C BC 00 MOV R4,#0 0709 019E 74 82 MGSV1: CALL WBIT0 ;ZAZNAM BITU 0 0710 01A0 EC 9E DJNZ R4,MGSV1 0711 01A2 ;SINCHRONIZACNI BITY: 1,0,0 0712 01A2 23 04 MOV A,#100B 0713 01A4 74 92 CALL WBYTE 0714 01A6 ;INICIALIZACE NAHRAVACI ADRESY A KONTROLNIHO SOUCTU 0715 01A6 27 CLR A 0716 01A7 A9 MOV R1,A ;NAHRAVACI ADRESA 0717 01A8 AA MOV R2,A ;KONTROLNI SOUCET 0718 01A9 ;SINCHRONIZACNI ZNAK & DRUH NAHRAVKY 0719 01A9 23 59 MOV A,#'Y' 0720 01AB 74 92 CALL WBYTE 0721 01AD ;ZJISTI ROZSAH OPERACNI PAMETI POCITCE PETR 0722 01AD ;VYSLE DELKU ZAZNAMU V BYTECH 0723 01AD 23 01 MOV A,#1 0724 01AF B6 B2 JF0 MGSV2 0725 01B1 07 DEC A 0726 01B2 MGSV2 ;A=0 PRO JEDNU 8155, =1 PRO DVE 8155 0727 01B2 A8 MOV R0,A 0728 01B3 74 92 CALL WBYTE ;H-BYTE DELKY 0729 01B5 F8 MOV A,R0 0730 01B6 67 RRC A 0731 01B7 A7 CPL C 0732 01B8 67 RRC A 0733 01B9 74 92 CALL WBYTE ;L-BYTE DELKY 0734 01BB 18 INC R0 0735 01BC ;R0 = POCET OBVODU 8155 (1 NEBO 2) 0736 01BC 23 F3 MOV A,#~(P55IOM+P55CE0) 0737 01BE 3A MGSV3 OUTL P2,A ;MAPUJE 8155 0738 01BF 81 MGSV4 MOVX A,@R1 0739 01C0 74 92 CALL WBYTE 0740 01C2 E9 BF DJNZ R1,MGSV4 0741 01C4 ;CIKLUS PRES OBVODY 8155 0742 01C4 23 F5 MOV A,#~(P55IOM+P55CE1) 0743 01C6 E8 BE DJNZ R0,MGSV3 0744 01C8 ;ZAPIS KONTROLNIHO SOUCTU 0745 01C8 FA MOV A,R2 0746 01C9 37 CPL A 0747 01CA 17 INC A 0748 01CB 74 92 CALL WBYTE ;ZAPIS CHKSUM 0749 01CD ;PRO JISTOTU ZAVERECNY TON - BYTE 00H 0750 01CD 74 91 CALL WBYTE0 0751 01CF 24 EC JMP MGEND ;R2=0, DULEZITE ! 0752 01D1 ; 0753 01D1 ; CTENI Z MAGNETOFONU ( LOAD ) 0754 01D1 ; 0755 01D1 74 F0 MGLOAD CALL ZHASNI 0756 01D3 B8 59 MOV R0,#'Y' 0757 01D5 74 65 CALL SYNCHRO ;SYNCHRONIZACE 0758 01D7 A9 MOV R1,A ;A:=0 0759 01D8 ; 0760 01D8 74 AF CALL RBYTE ;H-BYTE DELKY, 0 NEBO 1 0761 01DA 17 INC A 0762 01DB A8 MOV R0,A ;POCET OBVODU 8155 0763 01DC 74 AF CALL RBYTE ;L-BYTE DELKY, 0764 01DE ; (ZDE BEZVYZNAMNY 0765 01DE 23 F3 MOV A,#~(P55IOM+P55CE0) 0766 01E0 ;NACTENI OBSAHU PAMETI SYSTEMU 0767 01E0 3A MGLD1 OUTL P2,A ;MAPUJE 8155 0768 01E1 74 AF MGLD2 CALL RBYTE ;CTE 1 BYTE 0769 01E3 91 MOVX @R1,A 0770 01E4 E9 E1 DJNZ R1,MGLD2 0771 01E6 ; 0772 01E6 23 F5 MOV A,#~(P55IOM+P55CE1) 0773 01E8 E8 E0 DJNZ R0,MGLD1 ;CIKLUS PRES OBVODY 8155 0774 01EA ;ZKONTROLUJE CHKSUM 0775 01EA 74 AF CALL RBYTE 0776 01EC FA MGEND MOV A,R2 0777 01ED BC 00 MOV R4,#0 ;PRIZNAK F := 0 0778 01EF C6 15 JZ PRIKAZ ;OK 0779 01F1 BA 07 MOV R2,#ERR7 0780 01F3 24 09 JMP ERROR 0781 01F5 ; 0782 01F5 ;ZOBRAZENI A ZMENA HODNOTY BYTU NA ADRESE R1, 0783 01F5 ;TEST, ZDA NOVA HODNOTA MUZE BYT ADRESOU (NE=>CHYBA) 0784 01F5 ;V A VRATI OMEZOVAC (CISLO HO NECHA V R2) 0785 01F5 74 0A ZC3A CALL ZC3 0786 01F7 F6 FC JC TSTEND ;POUZE OMEZOVAC 0787 01F9 34 00 CALL TSADR ;MJ. TEST ROZSAHU 0788 01FB A1 MOV @R1,A ;NOVA HODNOTA 0789 01FC FA TSTEND MOV A,R2 ;OMEZOVAC 0790 01FD C6 15 JZ PRIKAZ ;END - UKONCENI PRIKAZU 0791 01FF 83 RET 0792 0200 ; 0793 0200 ; TABULKA INSTRUKCI - MUSI BYT NA ZACATKU STRANKY ! 0794 0200 ; 0795 0200 59 TAB2 .DB IHLT ; 1 .. HALT 0796 0201 D5 .DB IDISP ; 2 .. DISPLAY 0797 0202 4E .DB INOP ; 3 .. NOP, PRODLEVA 0798 0203 4B .DB ILDC ; 4 .. ACC:=KONST 0799 0204 40 .DB ILDA ; 5 .. ACC:=MEM 0800 0205 46 .DB ISTA ; 6 .. MEM:=ACC 0801 0206 6D .DB IADD ; 7 .. ACC:=ACC+MEM 0802 0207 72 .DB ISUB ; 8 .. ACC:=ACC-MEM 0803 0208 6A .DB IJMP ; 9 .. JMP 0804 0209 89 .DB CMP0 ;10 .. CMP ACC=MEM 0805 020A 61 .DB IJF ;11 .. JUMP ON FLAG 0806 020B 95 .DB ICMP1 ;12 .. CMP ACC>MEM 0807 020C 90 .DB ICMP2 ;13 .. CMP ACCSET FLAG 0931 027B ; 0932 027B ; LOGICKE OPERACE 0933 027B ; 0934 027B F0 INOT MOV A,@R0 0935 027C 37 CPL A 0936 027D A0 MOV @R0,A 0937 027E 83 RET 0938 027F ; 0939 027F 14 CF IAND CALL LDOPM 0940 0281 50 ANL A,@R0 0941 0282 A0 MOV @R0,A 0942 0283 83 RET 0943 0284 ; 0944 0284 14 CF IOR CALL LDOPM 0945 0286 40 ORL A,@R0 0946 0287 A0 MOV @R0,A 0947 0288 83 RET 0948 0289 ; 0949 0289 ; POROVNANI 0950 0289 ; 0951 0289 14 CB CMP0 CALL LDOPF0 ;POROVNANI ACC=MEM 0952 028B D0 XRL A,@R0 0953 028C 96 8F JNZ CMP4 ;R4:=1 .. SET FLAG 0954 028E 1C CMP6 INC R4 0955 028F 83 CMP4 RET 0956 0290 ; 0957 0290 14 CB ICMP2 CALL LDOPF0 ;POROVNANI ACC MEM 0960 0295 ; 0961 0295 14 CB ICMP1 CALL LDOPF0 ;POROVNANI ACC>MEM 0962 0297 37 CMP5 CPL A 0963 0298 6A ADD A,R2 ;CARRY IFF A(MEM) BIN 1135 033B B8 30 MOV R0,#BUFF+5 ;PTR NA CISLICE 1136 033D BD 02 MOV R5,#2 ;POCET CISLIC HI 1137 033F 74 44 CALL CISL6 ;PREVOD DEC-->BIN 1138 0341 AB MOV R3,A ;HLOZ HI 1139 0342 BD 03 MOV R5,#3 ;POCET CISLIC LOW 1140 0344 ; PREVOD DEC-->BIN. R0 UKAZATEL NA HORNI CISLICI, 1141 0344 ; R5 - POCET CISLIC. 1142 0344 ; ZNICI @R0,R5. VYSLEDEK DA DO REG. A 1143 0344 27 CISL6 CLR A 1144 0345 F2 59 CISL5 JB7 CISL7 ;CHYBA - PRETECENI 1145 0347 E7 RL A ;*2 1146 0348 A0 MOV @R0,A 1147 0349 F2 59 JB7 CISL7 ;PRETECENI 1148 034B E7 RL A ;*4 1149 034C F2 59 JB7 CISL7 ;PRETECENI 1150 034E E7 RL A ;*8 1151 034F 60 ADD A,@R0 ;*10 1152 0350 F6 59 JC CISL7 ;PRETECENI 1153 0352 C8 DEC R0 1154 0353 60 ADD A,@R0 ;+NOVA CISLICE 1155 0354 F6 59 JC CISL7 ;PRETECENI 1156 0356 ED 45 DJNZ R5,CISL5 ;CIKLUS PRES CISLICE 1157 0358 83 CISL4 RET 1158 0359 ; 1159 0359 ; PRETECENI PRI PREVODU DEC-->BIN 1160 0359 BA 01 CISL7 MOV R2,#ERR1 1161 035B 24 09 JMP ERROR 1162 035D ; 1163 035D ; PODPROGRAM PRO CTENI CISLA 1164 035D ; 1165 035D ;POSUNE R5 BYTU POCINAJE @R0 O 1 MISTO SMEREM 1166 035D ;K VYSSIM ADRESAM. DO 1.BYTU ZAPISE A. 1167 035D ;ZNICI R2, POSUNE R0, OSTATNI REGISTRY ZACHOVA 1168 035D 2D POSUN XCH A,R5 1169 035E AB MOV R3,A ;KOPIE DELKY 1170 035F 2D XCH A,R5 1171 0360 20 POS1 XCH A,@R0 1172 0361 18 INC R0 1173 0362 EB 60 DJNZ R3,POS1 1174 0364 83 RET 1175 0365 ; 1176 0365 ;******************************************************** 1177 0365 ;* * 1178 0365 ;* PODPROGRAMY PRO KOMIKACI S PERIFERIEMI * 1179 0365 ;* * 1180 0365 ;******************************************************** 1181 0365 ; 1182 0365 ; 1183 0365 ;******************************************************** 1184 0365 ;* * 1185 0365 ;* M A G N E T O F O N * 1186 0365 ;* * 1187 0365 ;******************************************************** 1188 0365 ; 1189 0365 ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1190 0365 ;% % 1191 0365 ;% vypis obsluhy magnetofonu nebyl zverejnen, % 1192 0365 ;% vypis ziskan zpetnym prekladem a doplnenim navesti % 1193 0365 ;% az na jedno ktere se nepovedlo dohledat (x03a2) % 1194 0365 ;% % 1195 0365 ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1196 0365 ; 1197 0365 89 01 SYNCHRO ORL P1,#1 1198 0367 BA 50 RSYN0 MOV R2,#50H 1199 0369 74 9E RSYN1 CALL RBIT0 1200 036B 12 67 JB0 RSYN0 1201 036D EA 69 DJNZ R2,RSYN1 1202 036F 74 9E RSYN2 CALL RBIT0 1203 0371 37 CPL A 1204 0372 12 6F JB0 RSYN2 1205 0374 74 9E CALL RBIT0 1206 0376 37 CPL A 1207 0377 12 7B JB0 RSYN3 1208 0379 74 9E CALL RBIT0 1209 037B 74 AF RSYN3 CALL RBYTE 1210 037D AA MOV R2,A 1211 037E D8 XRL A,R0 1212 037F 96 67 JNZ RSYN0 1213 0381 83 RET 1214 0382 ; 1215 0382 97 WBIT0 CLR C 1216 0383 23 FF WBIT MOV A,#0FFH 1217 0385 F7 RLC A 1218 0386 F7 RLC A 1219 0387 74 8B CALL OUT500 1220 0389 D3 02 XRL A,#2 1221 038B 39 OUT500 OUTL P1,A 1222 038C BD 62 MOV R5,#62H 1223 038E ED 8E CEKEJ DJNZ R5,CEKEJ 1224 0390 83 RET 1225 0391 ; 1226 0391 27 WBYTE0 CLR A 1227 0392 74 B9 WBYTE CALL CHR2 1228 0394 BC 08 MOV R4,#8 1229 0396 F7 WBIT2 RLC A 1230 0397 AB MOV R3,A 1231 0398 74 83 CALL WBIT 1232 039A FB MOV A,R3 1233 039B EC 96 DJNZ R4,WBIT2 1234 039D 83 RET 1235 039E ; 1236 039E FD RBIT0 MOV A,R5 1237 039F AC MOV R4,A 1238 03A0 BD 94 RBIT MOV R5,#94H 1239 03A2 ED A2 X03A2 DJNZ R5,X03A2 1240 03A4 09 IN A,P1 1241 03A5 AD MOV R5,A 1242 03A6 09 RBIT1 IN A,P1 1243 03A7 2D XCH A,R5 1244 03A8 DD XRL A,R5 1245 03A9 37 CPL A 1246 03AA 12 A6 JB0 RBIT1 1247 03AC FD MOV A,R5 1248 03AD DC XRL A,R4 1249 03AE 83 RET 1250 03AF ; 1251 03AF BB 01 RBYTE MOV R3,#1 1252 03B1 74 A0 RBYT1 CALL RBIT 1253 03B3 67 RRC A 1254 03B4 FB MOV A,R3 1255 03B5 F7 RLC A 1256 03B6 AB MOV R3,A 1257 03B7 E6 B1 JNC RBYT1 1258 03B9 2A CHR2 XCH A,R2 1259 03BA 6A ADD A,R2 1260 03BB 2A XCH A,R2 1261 03BC 83 RET 1262 03BD ; 1263 03BD ; CTENI ZNAKU Z KLAVESNICE S CEKANIM 1264 03BD ; KOD PRECTENEHO TLACITKA VRATI V A. 1265 03BD ; 1266 03BD 14 FA CTIKL1 CALL CTIKL 1267 03BF F2 BD JB7 CTIKL1 ;CEKACI SMICKA 1268 03C1 83 RET 1269 03C2 ; 1270 03C2 ; CTENI ZNAKU Z KLAVESNICE PRO POTREBY CTENI CISLA 1271 03C2 ; 1272 03C2 74 BD CTICIS CALL CTIKL1 ;CEKA NA ZNAK 1273 03C4 03 F3 ADD A,#-TLMEM ;TEST PRIKAZOVEHO TLACITKA 1274 03C6 F6 C2 JC CTICIS ;PRIKAZY IGNORUJE 1275 03C8 03 03 ADD A,#3 ;CY IFF OMEZOVAC 1276 03CA 07 DEC A 1277 03CB AA MOV R2,A 1278 03CC ;VYSTUP: A=R2=PRECTENY ZNAK 1279 03CC ; JE-LI TO OMEZOVAC, JE CARRY, 1280 03CC ; ZNAK = -1..PREV, 0..END, +1..NEXT. 1281 03CC ; JE-LI TO CISLICE, ZNAK = HODNOTA CISLICE + (TL0-TLEND) 1282 03CC 83 RET 1283 03CD ; 1284 03CD ;******************************************************** 1285 03CD ;* * 1286 03CD ;* Z O B R A Z O V A N I * 1287 03CD ;* * 1288 03CD ;******************************************************** 1289 03CD ; 1290 03CD ; 1291 03CD ;******************************************************** 1292 03CD ;* * 1293 03CD ;* VYSTUP CISEL V DESITKOVE SOUSTAVE * 1294 03CD ;* * 1295 03CD ;******************************************************** 1296 03CD ; 1297 03CD ; ZOBRAZENI PC 1298 03CD ; 1299 03CD 74 E6 ZOBRPC CALL CLRD5 1300 03CF B0 5E MOV @R0,#ZZP ;'P' DO LEVEHO DISPLEJE 1301 03D1 FF ZPC1 MOV A,R7 ;PC 1302 03D2 ; 1303 03D2 ; ZOBR3: ZOBRAZENI TROJICE VPRAVO NA DISPLEJI 1304 03D2 ; ZOBR2: ZOBRAZENI DVOJICE, NUTNO NASTAVIT R0 ! 1305 03D2 ; ZOBR1: ZOBRAZENI 1 CISLICE, NUTNO NASTAVIT RO ! 1306 03D2 ; 1307 03D2 B8 20 ZOBR3 MOV R0,#VID0 ;PTR DO VIDEOREGISTRU 1308 03D4 74 D8 CALL ZOBR1 1309 03D6 74 D8 ZOBR2: CALL ZOBR1 1310 03D8 ; 1311 03D8 ; ZOBRAZI CISLICI A MOD10; A:=A DIV 10. NICI R2 1312 03D8 ; 1313 03D8 BA FF ZOBR1 MOV R2,#0FFH 1314 03DA 03 F6 ZOBR11 ADD A,#-10 1315 03DC 1A INC R2 1316 03DD F6 DA JC ZOBR11 1317 03DF 03 0A ADD A,#10 1318 03E1 ;R2=A DIV 10, A=A MOD 10 1319 03E1 E3 MOVP3 A,@A 1320 03E2 A0 MOV @R0,A ;ZOBRAZI A MOD 10 1321 03E3 18 INC R0 1322 03E4 FA MOV A,R2 ;A:=A DIV 10 1323 03E5 83 RET 1324 03E6 ; 1325 03E6 ;******************************************************** 1326 03E6 ;* * 1327 03E6 ;* MAZANI DISPLEJE * 1328 03E6 ;* * 1329 03E6 ;******************************************************** 1330 03E6 ; 1331 03E6 B8 20 CLRD5 MOV R0,#VID0 1332 03E8 ;NULOVANI 5 BYTU POCINAJE R0 1333 03E8 BB 05 CLR5 MOV R3,#5 1334 03EA 27 CLEAR CLR A 1335 03EB A0 CLR0 MOV @R0,A 1336 03EC 18 INC R0 1337 03ED EB EB DJNZ R3,CLR0 1338 03EF 83 RET 1339 03F0 ; 1340 03F0 ;******************************************************** 1341 03F0 ;* * 1342 03F0 ;* ZHASNUTI DISPLEJE A ZABLOKOVANI JEHO OBSLUHY * 1343 03F0 ;* * 1344 03F0 ;******************************************************** 1345 03F0 ; 1346 03F0 35 ZHASNI DIS TCNTI 1347 03F1 B9 02 ZHAS0 MOV R1,#P55B ;ADRESA PORTU A (SEGMENTY) 1348 03F3 23 FF MOV A,#0FFH ;VSECHNY ZHASNOUT 1349 03F5 8A 0A WR55IO ORL P2,#P55IOM+P55CE1 1350 03F7 9A FB ANL P2,#~P55CE0 ;MAPUJE VNITRNI 8155, IO 1351 03F9 91 MOVX @R1,A ;ZAPIS NA PORT 1352 03FA 83 RET 1353 03FB ; 1354 03FB .END Label Value Label Value Label Value ------------------ ------------------ ------------------ ACC 0027 AERROR 00E4 BUFF 002B CHVENI 0003 CVADR 00BF CVAD0 00C7 CTIKL 00FA CTIKL3 00FC CEKEND 0111 CMP0 0289 CMP6 028E CMP4 028F CMP5 0297 CLDISP 02EA CISLO 0317 CISL2 032A CISL6 0344 CISL5 0345 CISL4 0358 CISL7 0359 CEKEJ 038E CHR2 03B9 CTIKL1 03BD CTICIS 03C2 CLRD5 03E6 CLR5 03E8 CLEAR 03EA CLR0 03EB EXTRES 0400 EXTINT 0403 EXTTIN 0407 ERR1 0001 ERR2 0002 ERR3 0003 ERR4 0004 ERR5 0005 ERR6 0006 ERR7 0007 ERROR0 0107 ERROR 0109 INTINT 0081 INTRES 00AA INSTR 021B INST1 0224 INST2 0225 INST0 023B IERROR 023C ILDAI 023E ILDA 0240 ISTAI 0244 ISTA 0246 ILDC 024B INOP 024E IHLT 0259 IJF 0261 IJT 0265 IJMPI 0268 IJMP 026A IADD 026D ISUB 0272 IADD2 0278 INOT 027B IAND 027F IOR 0284 ICMP2 0290 ICMP1 0295 IADD3 0299 ICALL 029C IRET 02AA ISTK2 02B2 IP1IN 02B9 IP1B2 02BE IP1OUT 02C5 IP2OUT 02CC IDISP 02D5 IZOBR1 02E7 IZOBR0 02EA IKEY 02EE IINT 02F4 IINT0 02FB KEY 001E KTIM 00F0 LDADR 00BE LDOPF0 00CB LDOPM 00CF LT08 00D3 LERROR 00E2 MUX7 0010 MGBITW 0002 MGBITR 0001 MGSAVE 019A MGSV1 019E MGSV2 01B2 MGSV3 01BE MGSV4 01BF MGLOAD 01D1 MGLD1 01E0 MGLD2 01E1 MGEND 01EC MAXINSTR 001B NOKEY 0080 NEWPC 0236 NOP1 0254 NOP0 0258 OUT500 038B P55IOM 0008 P55CE0 0004 P55CE1 0002 P1D 0029 P2D 002A P55R 0000 P55A 0001 P55B 0002 P55C 0003 POUT 00E6 POUT1 00F0 POUT2 00F7 POUT8 00F9 PRIKAZ 0115 PRIK1 011A POSUN 035D POS1 0360 RESET 0085 RES3 00B4 RES1 00B8 RSYN0 0367 RSYN1 0369 RSYN2 036F RSYN3 037B RBIT0 039E RBIT 03A0 RBIT1 03A6 RBYTE 03AF RBYT1 03B1 STOPO 001B SP 0026 STKMIN 0031 STKMAX 003A S0 0004 S1 0010 S2 0080 S3 0020 S4 0040 S5 0008 S6 0002 S7 0001 STORA 02C3 SYNCHRO 0365 TIM128 0028 TL0 0000 TL1 0001 TL2 0002 TL3 0003 TL4 0004 TL5 0005 TL6 0006 TL7 0007 TL8 0008 TL9 0009 TLPREV 000A TLEND 000B TLNEXT 000C TLMEM 000D TLACC 000E TLPC 000F TLRUN 0010 TLSTEP 0011 TLSAVE 0012 TLLOAD 0013 TLSTOP 000B TIMER 000B TIM2 001A TIM3 002A TIM4 0031 TIM5 003C TIM6 0040 TIM7 004D TIM72 005A TIM8 005A TABTL 0063 TABMUX 007A T01RET 00DD T01 00DE TSADR 0100 TSOK 0104 TSERR 0105 TAB1 0125 TSTEND 01FC TAB2 0200 TABCIS 0300 VID0 0020 VID1 0021 VID2 0022 VID3 0023 VID4 0024 VID5 0025 WBIT0 0382 WBIT 0383 WBYTE0 0391 WBYTE 0392 WBIT2 0396 WR55IO 03F5 XRUN 012C XR2 012F XSTEP 0137 XMEM3 013D XMEM 013F XMEM4 015A XACC 0160 XACC1 016B XPC 016F XF 0177 XF1 017C XF2 0184 XF3 0184 XSP 0188 XSP1 0194 X03A2 03A2 ZTECKA 0001 ZZ0 00FC ZZ1 0090 ZZ2 0076 ZZ3 00B6 ZZ4 009A ZZ5 00AE ZZ6 00EE ZZ7 0094 ZZ8 00FE ZZ9 00BE ZZA 00DE ZZP 005E ZZE 006E ZZF 004E ZZS 00AE ZZM 00C2 ZZH 00DA ZZC 006C ZRUN 00E2 ZC3A 01F5 ZC3 030A ZC1 0311 ZOBRPC 03CD ZPC1 03D1 ZOBR3 03D2 ZOBR2 03D6 ZOBR1 03D8 ZOBR11 03DA ZHASNI 03F0 ZHAS0 03F1 tasm: Number of errors = 0
Schéma zapojení mikropočítače PETR
Schéma zapojení mikropočítače PETR a černobílá verze ZDE.
Schéma obvodu klávesnice a displeje
Schéma zapojení displeje a černobílá verze ZDE.
Schéma obvodu připojení magnetofonu
Schéma zapojení vnější paměti s expanderem
Schéma zapojení vnější paměti s expanderem a černobílá verze ZDE.
Rozložení součástek na základní desce
Rozložení součástek na základní desce
Rozložení součástek na desce expandéru
Rozložení součástek na desce displeje
blokové schéma mikropočítače PETR
Seznam součástek stavebnice PETR
Integrované obvody: | |||
1 ks | IO1 | MHB 8155 | |
1 ks | IO2 | MHB 8048 (paměť programu maskou) | |
1 ks | IO3 | MAA 741 | |
1 ks | IO4 | MA 7805 | |
Ostatní polovodiče: | |||
8 ks | T1-T8 | tranzistor BC 178 | |
2 ks | T15,16 | tranzistor KC 508 | |
6 ks | T9-T14 | tranzistor K.F 517 | |
4 ks | D9-D12 | dioda KY 132/80 | |
3 ks | D13-D15 | dvoumístná jednotka VQE 24E | |
Odpory TR 191: | |||
9 ks | R1-R8,R31 | 56R | |
20 ks | R9-R28 | 1k | |
1 ks | R29 | 330R | |
3 ks | R30,R39,R45 | 4k7 | |
3 ks | R32-R34 | 3k3 | |
4 ks | R35-R37,R47 | 2k2 | |
1 ks | R38 | 47k | |
1 ks | R40 | 100 | |
2 ks | R41,R42 | 10k | |
1 ks | R43 | 6k8 | |
1 ks | R44 | 1M | |
1 ks | R46 | 22k | |
Kondenzátory: | |||
2 ks | C1,C2 | TF008 1000M/16V | |
5 ks | C3,C4,C9,C15,C16 | TK 783 100n | |
1 ks | C6 | TK 754 22p | |
2 ks | C7,C8 | TE 135 1M/40V | |
1 ks | C10 | TK 783 4n7 | |
Ostatní součástky: | |||
1 ks | X1 krystal 6MHz (malé provedení) | ||
2 ks | objímka IO 40 pin | ||
1 ks | konektor klávesnice (1/2 objímky IO 24 pin) | ||
1 ks | chladič pro IO4 | ||
1 ks | přepínač (označ. P) 946 221 01 1 | ||
1 ks | konektor DIN pevný (3 dutinky) | ||
1 ks | foliová klávesnice TS 523 (modifikovaný potisk) | ||
35 ks | koncovka 4FA 898 03 | ||
40 ks | kontakt 4FA 062 06 | ||
1 ks | skříňka (Tesla Bratislava) | ||
1 ks | deska plošných spojil (označ. TRPE) | ||
1 m | vodič plochý PNLY 30 žil (0,15 mm2) | ||
0,5 m | vodič jednoduchý s izol. PVC (vnitřní průměr 0,7 mm) |
Seznam součástek logické sondy k stavebnici PETR
Integrované obvody: | |||
1 ks | IO5 | MH 7474 | |
1 ks | IO6 | MH 7404 | |
Ostatní polovodiče: | |||
1 ks | T17 | tranzistor KC508 | |
1 ks | D4 | dioda KA 261 | |
5 ks | D1-D3,D5,D6 | dioda KA 206 | |
1 ks | D7 | dioda LED zelená LQ 1702 | |
1 ks | D8 | dioda LED červená LQ 1102 | |
Ostatní součástky: | |||
2 ks | R48,R49 | odpor TR 191 15k | |
2 ks | P1,P2 | odpor. trimr TP 093 680R | |
1 ks | C5 | kondenzátor TK 754 22p | |
1 ks | C11 | elektrolyt TE 131 6M8/6.3V | |
2 ks | C12,C13 | elektrolyt TE 981 10M/6V | |
1 ks | deska plošných spojů | ||
(oddělený díl desky stavebnice PETR) |
Seznam součástek pro rozšíření stavebnice PETR
Integrované obvody: | |||
1 ks | IO7 | parněť EPROM K573RF5(2716) popř. | |
K573RF3(2732) | |||
1 ks | IO8 | MH 8282 | |
1 ks | IO9 | MHB 8243 | |
Ostatní součástky: | |||
1 ks | C14 | TK 783 100n | |
1 ks | objímka IO 24 pin | ||
1 ks | K2 | konektor FRB TX 511 20 11 | |
(na desce mikropočítače PETR) | |||
1 ks | K3 | konektor FRB TY 511 20 11 | |
1 ks | konektor FRB TY 511 20 13 (pro kabel) | ||
1 ks | deska plošných spojů | ||
(oddělený díl desky stavebnice PETR) |
Odpovědi na otázky v textu
[?1] Bude čítač adres PC po provedení jedné instrukce ukazovat vždy na v pořadí další následující instrukci zapsanou v programu ?
Nebude. Například po provedení instrukce skoku (JMP) může být další instrukce ke zpracování umístěna v programu kdekoliv. Obdobných instrukcí jako JMP je více a označují se jako řídicí instrukce (viz odst. 2.2).
[?2] Kolik podprogramů lze do sebe nejvýše vnořit tak, aby nedošlo k přeplnění zásobníku ?
Deset, neboť zásobník mikropočítače PETR má položek deset
[?3] Kolik kroků může nejvýše obsahovat program pro mikropočítač PETR ?
Počet kroků programu není omezen. Pokud jste odpověděli, že 128 resp. 256 uvědomte si, že počet kroků programu nesouvisí ani tak s velikostí paměti jako spíše s typem instrukcí. Např. jednoinstrukční program CYKL: JMP CYKL je nekonečný cyklus, při kterém procesor neustále dokola provádí tuto jedinou instrukci. Tento případ se někdy označuje jako dynamický stop procesoru. Dynamický proto, že procesor nepřetržitě pracuje, stop proto, že se přitom z adresy CYKL nikam jinam nedostane.
[?4] Jsou tyto dva úseky programů funkčně stejné ?
| | (1) AEQ 100 (2) ALT 90 JF ANO JF NE NE: ... AGT 90 | JF NE ANO: ... JMP ANO NE: ... | ANO: ...
Nejsou. Byly by ekvivalentní v případě, že by porovnávaly obsah střadače s obsahem téže buňky paměti! Navíc řešení (2) je nejen delší, ale i časově náročnější.
[?5] Kdy se v tomto programu nastavuje příznak F, který testuje instrukce JF ?
Při provádění instrukce AEQ, která testuje rovnost mezi obsahem střadače a srovnávací konstantou 001.
[?6] Tabulku pro zobrazení písmen a symbolů si laskavě doplňte sami podle výše uvedeného návodu. Přitom tvary písmen,lze volit různě, např. c lze zobrazit jako [ ] nebo [ ] apod. Některá písmena se zobrazují těžko, např. k jako [ ] , některá zobrazit nejde - např. x .
[?7] Jaký bude obsah střadače v okamžiku, kdy se program zastaví na instrukci HALT, a proč ?
Obsah střadače bude ACC=0, neboť k přetečení dojde poprvé při ACC=256. Do střadače se tedy dosadí hodnota ACC:=256-256=0 a nastaví se F:=1, viz popis instrukce ADD.
[?8] Popište funkci takto zapsané instrukce:
adr kód instrukce komentář ............................................................ 003 21.003 JMPI 003 ; ?
Takto zapsaná instrukce má význam skoku sama na sebe. Program se na ní zacyklí.
[?9] Upravte program tak, aby se po stisknutí tlačítek ( 0 ). (1) , (2) nebo (3) zastavil !
Pro řešení lze využít posloupnosti kódů, které uvedená tlačítka generují - viz obr. 5.:
adr kód instrukce komentář ............................................................ 000 26.000 KEY ;přečíst stav klávesnice do ACC 001 10.010 AEQ 010 ;je stisknuté tlačítko 002 11.000 JF 000 ;ne číst znovu 003 13.011 ALT 011 ;ukončit program ? 004 11.007 JF 007 ;ano, ale jen pro daná tlačítka 005 02.000 DISP 000 ;jinak zobrazit kód na displej 006 09.000 JMP 000 ;a číst znovu z klávesnice 007 01.000 HALT ;stop 011 00.004 ;omezovač pro ukončení programu
[?10] Jaký výsledek bude mít instrukce LDAI ležící na adrese dané operandem, tedy například:
adr kód instrukce komentář ............................................................ 001 19.001 LDAI 001 ;???
Výsledek bude stejný jako u instrukce LDC 001 , po provedení bude tedy obsah střadače ACC=001 !
[?11] Napište úsek programu pro kopírování obsahu portu P1 na port. P2.
Program může mít např. tento tvar:
adr kód instrukce komentář ............................................................ 000 04.255 LDC 255 ; ACC := 1111 1111 001 17.008 P10UT 8 ;zajistí správné čtení portu P1 002 16.008 P1 IN 8 ; ACC := obsah P1 003 18.008 P20UT 8 ; P2 := obsah ACC
[?12] Proč se u instrukce RET neudává adresa, ze které má program dále pokračovat ?
Protože návrat z podprogramu vede vždy na adresu následující za poslední instrukcí CALL. Tato návratová adresa se automaticky ukládá do zásobníku právě proto, aby mohla být použita při následující instrukci RET.
U ostatních řídících instrukcí se cílová adresa, ze které má program pokračovat, vždy uvádí.
[?13] Jak lze spustit program z konkrétní adresy, řekněme 123? Lze program spustit od adresy 300 ?
Z přípustné (existující) adresy, např. 123 lze spustit program tak, že nejprve příkazem ( PC ) nastavíme hodnotu čítače adres na 123 a potom spustíme program příkazem (RUN).
Z adresy 300 program spustit nelze. Adresový prostor mikropočítače PETR je v rozsahu 0 až 127 (při rozšíření až 255). Adresa 300 tedy v mikropočítači PETR neexistuje.
[?14] Může dojít k chybě E 006 (prázdný zásobník) při zpracováni tohoto programu ?
adr kód instrukce komentář ............................................................ 000 23.010 CALL 010 ;volání podprogramu 001 09.000 JMP 000 ;stále dokola | | 010 04.001 LDC 001 ;podprogram pro výpis vzorku 011 14.008 P1OUT 8 ; 0000 0001 -> port P1 012 24.000 RET ;konec podprogramu
Při spuštění programu od adresy 0 nebo 1 nemůže. Může k ni však dojit, spustíte-li nebo krokujete-li program od adres 010, 011, 012 (tj. instrukce RET by se Měla provést dřivé než instrukce CALL).
+----+-----------+ +----+-----------+ +----+-----------+ +----+------------+ +----+-----------+ +----+-----------+ | kód| symb. | | kód| symb. | | kód| symb. | | kód| symb. | | kód| symb. | | kód| symb. | +-+--+-----------+ +-+--+-----------+ +-+--+-----------+ +-+--+------------+ +-+--+-----------+ +-+--+-----------+ | |00|NOP | | |2B|XCH A,R3 | | |56|JT1 adr | | |81|MOVX A,@R1 | | |AC|MOV R4,A | |*|D7|MOV PSW,A | | |01| | | |2C|XCH A,R4 | |*|57|DA A | | |82| | | |AD|MOV R5,A | | |D8|XRL A,R0 | | |02|OUTL BUS,A | | |2D|XCH A,R5 | | |58|ANL A,R0 | | |83|RET | | |AE|MOV R6,A | | |D9|XRL A,R1 | |*|03|ADD A,#d | | |2E|XCH A,R6 | | |59|ANL A,R1 | | |84|JMP adr | | |AF|MOV R7,A | | |DA|XRL A,R2 | | |04|JMP adr | | |2F|XCH A,R7 | | |5A|ANL A,R2 | | |85|CLR F0 | | |B0|MOV @R0,#d| | |DB|XRL A,R3 | | |05|EN I | | |30|XCHD A,@R0 | | |5B|ANL A,R3 | | |86|JNI adr | | |B1|MOV @R1,#d| | |DC|XRL A,R4 | | |06| | | |31|XCHD A,@R1 | | |5C|ANL A,R4 | | |87| | | |B2|JB5 adr | | |DD|XRL A,R5 | | |07|DEC A | | |32|JB1 adr | | |5D|ANL A,R5 | | |88|ORL BUS,#d | | |B3|JMPP A | | |DE|XRL A,R6 | | |08|INS A,BUS | | |33| | | |5E|ANL A,R6 | | |89|ORL P1,#d | | |B4|CALL adr | | |DF|XRL A,R7 | | |09|IN A,P1 | | |34|CALL adr | | |5F|ANL A,R7 | | |8A|ORL P2,#d | | |B5|CPL P1 | | |E0| | | |0A|IN A,P2 | | |35|DIS TCNTI | |*|60|ADD A,@R0 | | |8B| | | |B6|JF0 adr | | |E1| | | |0B| | | |36|JTO adr | |*|61|ADD A@R1 | | |8C|ORLD P4,A | | |B7| | | |E2| | | |0C|MOVD A,P4 | | |37|CPL A | | |62|MOV T,A | | |8D|ORLD P5,A | | |B8|MOV R0,#d | | |E3|M0VP3 A,@A | | |0D|MOVD A,P5 | | |38| | | |63| | | |8E|ORLD P6,A | | |B9|MOV R1,#d | | |E4|JMP adr | | |0E|MOVD A,P6 | | |39|OUTL Pl,A | | |64|JMP adr | | |8F|ORLD P7,A | | |BA|MOV R2,#d | | |E5|SEL MB0 | | |0F|MOVD A,P7 | | |3A|OUTL P2,A | | |65|STOP TCNT | | |90|MOVX @R0,A | | |BB|MOV R3,#d | | |E6|JNC adr | | |10|INC @R0 | | |3B| | | |66| | | |91|MOVX @R1,A | | |BC|MOV R4,#d | | |E7|RL A | | |11|INC @R1 | | |3C|MOVD P4,A | |*|67|RRC A | | |92|JB4 adr | | |BD|MOV R5,#d | | |E8|DJNZ R0,adr| | |12|JB0 adr | | |3D|MOVD P5,A | |*|68|ADD A,R0 | |*|93|RETR | | |BE|MDV R6,#d | | |E9|DJNZ R1,adr| |*|13|ADDC A,#d | | |3E|MOVD P6,A | |*|69|ADD A,R1 | | |94|CALL adr | | |BF|MOV R7,#d | | |EA|DJNZ R2,adr| | |14|CALL adr | | |3F|MOVD F7,A | |*|6A|ADD A,R2 | | |95|CPL F0 | | |C0| | | |EB|DJNZ R3,adr| | |15|DIS I | | |40|ORL A,@R0 | |*|6B|ADD A,R3 | | |96|JNZ adr | | |C1| | | |EC|DJNZ R4,adr| | |16|JTF adr | | |41|ORL A,@R1 | |*|6C|ADD A,R4 | |*|97|CLR C | | |C2| | | |ED|DJNZ R5,adr| | |17|INC A | | |42|MOV A,T | |*|6D|ADD A,R5 | | |98|ANL BUS,#d | | |C3| | | |EE|DJNZ R6,adr| | |18|INC R0 | | |43|ORL A,#d | |*|6E|ADD A,R6 | | |99|ANL P1,#d | | |C4|JMP adr | | |EP|DJNZ R7,adr| | |19|INC R1 | | |44|JMP adr | |*|6F|ADD A,R7 | | |9A|ANL P2,#d | | |C5|SEL RB0 | | |F0|MOV A,@R0 | | |1A|INC R2 | | |45|STRT CNT | |*|70|ADDC A@,R0 | | |9B| | | |C6|JZ adr | | |F1|MOV A,@R1 | | |1B|INC R3 | | |46|JNT1 adr | |*|71|ADDC A,@R1 | | |9C|ANLD P4,A | | |C7|MOV A,PSW | | |F2|JB7 adr | | |1C|INC R4 | | |47|SWAP A | | |72|JB3 adr | | |9D|ANLD P5,A | | |C8|DEC R0 | | |F3| | | |1D|INC R5 | | |48|ORL A,R0 | | |73| | | |9E|ANLD P6,A | | |C9|DEC R1 | | |F4|CALL adr | | |1E|INC R6 | | |49|ORL A,R1 | | |74|CALL adr | | |9F|ANLD P7,A | | |CA|DEC R2 | | |F5|SEL MB1 | | |1F|INC R7 | | |4A|ORL A,R2 | | |75|ENT0 CLK | | |A0|MOV @R0,A | | |CB|DEC R3 | | |F6|JC adr | | |20|XCH A,@R0 | | |4B|ORL A,R3 | | |76|JF1 adr | | |A1|MOV @R1,A | | |CC|DEC R4 | |*|F7|RLC A | | |21|XCH A,@R0 | | |4C|ORL A,R4 | | |77|RR A | | |A2| | | |CD|DEC R5 | | |F8|MOV A,R0 | | |22| | | |4D|ORL A,R5 | |*|78|ADDC A,R0 | | |A3|MOVP A,@A | | |CE|DEC R6 | | |F9|MOV A,R1 | | |23|MOV A,#d | | |4E|ORL A,R6 | |*|79|ADDC A,R1 | | |A4|JMP adr | | |CF|DEC R7 | | |FA|MOV A,R2 | | |24|JMP adr | | |4F|ORL A,R7 | |*|7A|ADDC A,R2 | | |A5|CLR F1 | | |D0|XRL A,@R0 | | |FB|MOV A,R3 | | |25|EN TCNTI | | |50|ANL A@R0 | |*|7B|ADDC A,R3 | | |A6| | | |D1|XRL A@R1 | | |FC|MOV A,R4 | | |26|JHT0 adr | | |51|ANL A,@R1 | |*|7C|ADDC A,R4 | |*|A7|CPL C | | |D2|JB6 adr | | |FD|MOV A,R5 | | |27|CLR A | | |52|JB2 adr | |*|7D|ADDC A,R5 | | |A8|MOV R0,A | | |D3|XRL A,#d | | |FE|MOV A,R6 | | |28|XCH A,R0 | | |53|ANL A,#d | |*|7E|ADDC A,R6 | | |A9|MOV R1,A | | |D4|CALL adr | | |FF|MOV A,R7 | | |29|XCH A,R1 | | |54|CALL adr | |*|7F|ADDC A,R7 | | |AA|MOV R2,A | | |D5|SEL RB1 | +-+--+-----------+ | |2A|XCH A,R2 | | |55|STRT T | | |80|MOVX A,@R0 | | |AB|MOV R3,A | | |D6| | +-+--+-----------+ +-+--+-----------+ +-+--+-----------+ +-+--+------------+ +-+--+-----------+
+--------------+-------+ +--------------+---+---+ +--------------+---+---+ +--------------+---+---+ | symb. |kód|B/C| | symb. |kód|B/C| | symb. |kód|B/C| | symb. |kód|B/C| +-+------------+---+---+ +-+------------+---+---+ +-+------------+---+---+ +-+------------+---+---+ |*|ADD A,R0 | 68|1/1| | |DEC R0 | C8|1/1| | |JNT0 a | 26|2/2| | |ORL A,R0 | 48|1/1| |*| R1 | 69|1/1| | | R1 | C9|1/1| | |JNT1 a | 46|2/2| | | A,R1 | 49|1/1| |*| R2 | 6A|1/1| | | R2 | CA|1/1| | |JNZ a | 96|2/2| | | A,R2 | 4A|1/1| |*| R3 | 6B|1/1| | | R3 | CB|1/1| | |JTF a | 16|2/2| | | A,R3 | 4B|1/1| |*| R4 | 6C|1/1| | | R4 | CC|1/1| | |JT0 a | 36|2/2| | | A,R4 | 4C|1/1| |*| R5 | 6D|1/1| | | R5 | CD|1/1| | |JT1 a | 56|2/2| | | A,R5 | 4D|1/1| |*| R6 | 6E|1/1| | | R6 | CE|1/1| | |JZ a | C6|2/2| | | A,R6 | 4E|1/1| |*| R7 | 6F|1/1| | | R7 | CF|1/1| | |MOV A,#d | 23|2/2| | | A,R7 | 4F|1/1| |*|ADD A,@R0 | 60|1/1| | |DIS I | 15|1/1| | |MOV A,PSW | C7|1/1| | |ORL A,@R0 | 40|1/1| |*| @R1 | 61|1/1| | | TCNTI | 35|1/1| | |MOV A,RO | F8|1/1| | | A,@R1 | 41|1/1| |*|ADD A,#d | 03|2/2| | |DJNZ R0,a | E8|2/2| | | R1 | F9|1/1| | |ORL A,#d | 43|2/2| |*|ADDC A,R0 | 78|1/1| | | R1,a | E9|2/2| | | R2 | FA|1/1| | |ORL BUS,#d | 88|2/2| |*| R1 | 79|1/1| | | R2,a | EA|2/2| | | R3 | FB|1/1| | |ORL P1,#d | 89|2/2| |*| R2 | 7A|1/1| | | R3,a | EB|2/2| | | R4 | FC|1/1| | | P2,#d | 8A|2/2| |*| R3 | 7B|1/1| | | R4,a | EC|2/2| | | R5 | FD|1/1| | |ORLD P4,A | 8C|1/2| |*| R4 | 7C|1/1| | | R5,a | ED|2/2| | | R6 | FE|1/1| | | P5,A | 8D|1/2| |*| R5 | 7D|1/1| | | R6,a | EE|2/2| | | R7 | FF|1/1| | | P6,A | 8E|1/2| |*| R6 | 7E|1/1| | | R7,a | EF|2/2| | |MOV A,@R0 | F0|1/1| | | P7,A | 8F|1/2| |*| R7 | 7F|1/1| | |EN I | 05|1/1| | | @R1 | F1|1/1| | |OUTL BUS,A | 02|1/2| |*|ADDC A,@R0 | 70|1/1| | | TCNTI | 25|1/1| | |MOV A,T | 42|1/1| | |OUTL P1,A | 39|1/2| |*| @R1 | 71|1/1| | |ENT0 CLK | 75|1/1| |*|MOV PSW,A | D7|1/1| | | P2,A | 3A|1/2| |*|ADDC A,#d | 13|2/2| | |IN A,P1 | 09|1/2| | |MOV R0,A | A8|1/1| | |RET | 83|1/2| | |ANL A,R0 | 58|1/1| | | A,P2 | 0A|1/2| | | R1,A | A9|1/1| |*|RETR | 93|1/2| | | R1 | 59|1/1| | |INC A | 17|1/1| | | R2,A | AA|1/1| | |RL A | E7|1/1| | | R2 | 5A|1/1| | |INC R0 | 18|1/1| | | R3,A | AB|1/1| |*|RLC A | F7|1/1| | | R3 | 5B|1/1| | | R1 | 19|1/1| | | R4,A | AC|1/1| | |RR A | 77|1/1| | | R4 | 5C|1/1| | | R2 | 1A|1/1| | | R5,A | AD|1/1| |*|RRC A | 67|1/1| | | R5 | 5D|1/1| | | R3 | 1B|1/1| | | R6,A | AE|1/1| | |SEL MB0 | E5|1/1| | | R6 | 5E|1/1| | | R4 | 1C|1/1| | | R7,A | AF|1/1| | | MB1 | F5|1/1| | | R7 | 5F|1/1| | | R5 | 1D|1/1| | |MOV R0,#d | B8|2/2| | |SEL RB0 | C5|1/1| | |ANL A,@R0 | 50|1/1| | | R6 | 1E|1/1| | | R1,#d | B9|2/2| | | RB1 | D5|1/1| | | @R1 | 51|1/1| | | R7 | 1F|1/1| | | R2,#d | BA|2/2| | |STOP TCNT | 65|1/1| | |ANL A,#d | 53|2/2| | |INC @R0 | 10|1/1| | | R3,#d | BB|2/2| | |STRT CNT | 45|1/1| | |ANL BUS,#d | 98|2/2| | | @R1 | 11|1/1| | | R4,#d | BC|2/2| | |STRT T | 55|1/1| | | P1,#d | 99|2/2| | |INS A,BUS | 08|1/2| | | R5,#d | BD|2/2| | |SWAP A | 47|1/1| | | P2,#d | 9A|2/2| | |JB0 a | 12|2/2| | | R6,#d | BE|2/2| | |XCH A,R0 | 28|1/1| | |AHLD P4,A | 9C|1/2| | |JB1 a | 32|2/2| | | R7,#d | BF|2/2| | | A,R1 | 29|1/1| | | P5,A | 9D|1/2| | |JB2 a | 52|2/2| | |MOV @R0,A | A0|1/1| | | A,R2 | 2A|1/1| | | P6,A | 9E|1/2| | |JB3 a | 72|2/2| | | @R1,A | A1|1/1| | | A,R3 | 2B|1/1| | | P7,A | 9F|1/2| | |JB4 a | 92|2/2| | |MOV @R0,#d | B0|2/2| | | A,R4 | 2C|1/1| | |CALL 0a | 14|2/2| | |JB5 a | B2|2/2| | | @R1,#d | B1|2/2| | | A,R5 | 2D|1/1| | | 1a | 34|2/2| | |JB6 a | D2|2/2| | |MOV T,A | 62|1/1| | | A,R6 | 2E|1/1| | | 2a | 54|2/2| | |JB7 a | F2|2/2| | |MOVD A,P4 | 0C|1/2| | | A,R7 | 2F|1/1| | | 3a | 74|2/2| | |JC a | F6|2/2| | | A,P5 | 0D|1/2| | |XCH A,@R0 | 20|1/1| | | 4a | 94|2/2| | |JF0 a | B6|2/2| | | A,P6 | 0E|1/2| | | A,@R1 | 21|1/1| | | 5a | B4|2/2| | |JF1 a | 76|2/2| | | A,P7 | 0F|1/2| | |XCHD A,@R0 | 30|1/1| | | 6a | D4|2/2| | |JMP 0a | 04|2/2| | |MOVD P4,A | 3C|1/2| | | A,@R1 | 31|1/1| | | 7a | F4|2/2| | | 1a | 24|2/2| | | P5,A | 3D|1/2| | |XRL A,R0 | D8|1/1| | |CLR A | 27|1/1| | | 2a | 44|2/2| | | P6,A | 3E|1/2| | | A,R1 | D9|1/1| |*| C | 97|1/1| | | 3a | 64|2/2| | | P7.A | 3F|1/2| | | A,R2 | DA|1/1| | | F0 | 85|1/1| | | 4a | 84|2/2| | |MOVP A/aA | A3|1/2| | | A,R3 | DB|1/1| | | F1 | A5|1/1| | | 5a | A4|2/2| | |MOVP3 A,@A | E3|1/2| | | A,R4 | DC|1/1| | |CPL A | 37|1/1| | | 6a | C4|2/2| | |MOVX A,@R0 | 80|1/2| | | A,R5 | DD|1/1| |*| C | A7|1/1| | | 7a | E4|2/2| | | A,@R1 | 81|1/2| | | A,R6 | DE|1/1| | | F0 | 95|1/1| | |JMPP @A | B3|1/2| | |MOVX @R0,A | 90|1/2| | | A,R7 | DF|1/1| | | F1 | B5|1/1| | |JHC a | E6|2/2| | | @R1,A | 91|1/2| | |XRL A,@R0 | D0|1/1| |*|DA A | 57|1/1| | |JNI a | 86|2/2| | |NOP | 00|1/1| | | A,@R1 | D1|1/1| | |DEC A | 07|1/1| | | | | | | | | | | | |XRL A,#d | D3|2/2| +-+------------+---+---+ +-+------------+---+---+ +-+------------+---+---+ +-+------------+---+---+ Pozn: * - ovlivňuje CY, B/C - počet bytů/počet cyklů, a - adresa, d - data
+-----------------+--------------------------+ +-----------------+--------------------------+ | symb. | význam | | symb. | význam | +--+--------------+--------------------------+ +--+--------------+--------------------------+ | |ADD A,R |Add register to A | |S | | | | |ADD A,@R |Add data memory to A | |u | | | | |ADD A,#d |Add immediate to A | |b | | | | |ADDC A,R |Add register with CY | |r |CALL adr |Jump to subroutine | | |ADDC A,@R |Add data memory with CY | |o |RET |Return | | |ADDC A,#d |Add immediate with CY | |u |RETR |Return and restore status | |A |ANL A,R |And register to A | |t | | | |c |ANL A,@R |And data memory to A | |i | | | |c |ANL A,#d |And immediate to A | |n | | | |u |ORL A,R |Or register to A | |e | | | |m |ORL A,@R |Or data memory to A | +--+--------------+--------------------------+ |u |ORL A,#d |Or immediate to A | |F |CLR C |Clear CY | |l |XRL A,R |Excl. Or register to A | |l |CPL C |Complement CY | |a |XRL A,@R |Excl. Or data memory to A | |a |CLR F0 |Clear Flag 0 | |t |XRL A,#d |Excl. Or immediate to A | |g |CPL F0 |Complement Flag 0 | |o |INC A |Increment A | |s |CLR F1 |Clear Slag 1 | |r |DEC A |Decrement A | | |CPL F1 |Complement Flag 1 | |s |CLR A |Clear A | +--+--------------+--------------------------+ | |CPL A |Complement A | | |MOV A,R |Move register to A | | |DA A |Decimal Adjust A | | |MOV A,@R |Move data memory to A | | |SWAP A |Swap nibbles of A | | |MOV A,#d |Move immediate to A | | |RL A |Rotate A left | |D |MOV R,A |Move A to register | | |RLC A |Rotate A left through CY | |a |MOV @R,A |Move A to data memory | | |RR A |Rotate A right | |t |MOV R,#d |Move immediate to reg. | | |RRC A |Rot. A right through CY | |a |MOV @R.#d |Move immed. to data mem. | +--+--------------+--------------------------+ | |MOV A,PSW |Move PSW to A | | |IN A,P |Input port to A | |M |MOV PSW,A |Move A to PSW | | |OUTL P,A |Output A to port | |o |XCH A,R |Exchange A and register | | |ANL P,#d |And immediate to port | |v |XCH A,@R |Exch. A and data memory | |IO|ORL P,#d |Or immediate to port | |e |XCHD A,@R |Exch. nibble of A and reg.| |nu|INS A,BUS |Input BUS to A | |d |MOVX A,@R |Move ext. data mem. to A | |pt|OUTL BUS,A |Output A to BUS | | |MOVX @R,A |Move A to ext. data mem. | |up|ANL BUS,#d |And immediate to BUS | | |MOVP A,@A |Move to A from curr. page | |tu|ORL BUS,#d |Or immediate to BUS | | |MOVP3 A,@A |Move to A from Page 3 | |/t|MOVD A,P |Input Expander port to A | +--+--------------+--------------------------+ | |MOVD P,A |Out. A to Expander port | |TC|STRT T |Start Timer | | |ANLD P,A |And A to Expander port | |io|MOV A,T |Read Timer/Counter | | |ORLD P,A |Or A to Expander port | |mu|MOV T,A |Load Timer/Counter | +--+--------------+--------------------------+ |en|STRT CNT |Start Counter | |R | | | |rt|STOP TCNT |Stop Timer/Counter | |e | | | |/e|EN TCNTI |Enable Timer/Counter Int. | |g | | | | r|DIS TCNTI |Disable Timer/Counter Int.| |i |INC R |Increment register | +--+--------------+--------------------------+ |s |INC @R |Increment data memory | |C |EN I |Enable ext. interrupt | |t |DEC R |Decrement register | |o |DIS I |Disable ext. interrupt | |e | | | |n |SEL RB0 |Select register bank 0 | |r | | | |t |SEL RB1 |Select register bank 1 | |s | | | |r |SEL MB0 |Select memory bank 0 | +--+--------------+--------------------------+ |o |SEL MB1 |Select memory bank 1 | | |JMP adr |Jump unconditional | |l |ENT0 CLK |Enable Clock output on T0 | | |JMPP @A |Jump indirect | +--+--------------+--------------------------+ | |DJNZ R,adr |Decrement reg. and skip | | |NOP |No Operation | | |JC adr |Jump on CY=1 | +--+--------------+--------------------------+ | |JNC adr |Jump on CY=0 | |B |JZ adr |Jump on A Zero | |r |JNZ adr |Jump on A not Zero | Pozn.: |a |JT0 adr |Jump on T0=1 | R = R0-R7 |n |JNT0 adr |Jump on T0=0 | @R = R0-R1 |c |JT1 adr |Jump on T1=1 | P = P1-P2 [P4-P7] |h |JNT1 adr |Jump on T1=0 | #d = data (8 bitů) | |JF0 adr |Jump on F0=1 | adr = adresa (8 nebo 12 bitů) | |JE1 adr |Jump on F1=1 | b = 0-7 | |JTF adr |Jump on liner flag | | |JNI adr |Jump on INT=0 | | |JBb adr |Jump on Accumulator Bit | +--+--------------+--------------------------+
kód | název | význam | p o p i s |
01.xxx | HALT | zastavení programu | na displeji se vypíše "H" Jako příznak a "aaa" jako adresa zastavení HALT |
20.ddd | DISP | výpis na display | ddd=0 . . . zobrazí ACC Jako 3 cifry, ddd=1 až 6 . . . zobrazí ACC do "ddd"-tého displeje ddd=255 . . . všechny displeje se vymažou |
03.ddd | NOP | prodleva | prodleva ddd =1,28 milisekund |
04.kkk | LDC | ACC: =kkk | naplněni střadače konstantou kkk |
05.aaa | LDA | ACC: =MEM(aaa) | naplněni střadače obsahem paměti na adrese aaa |
06.aaa | STA | MEM(aaa):=ACC | zápis obsahu střadače do paměti na adresu aaa |
07.aaa | ADD | ACC: =ACC+MEM(aaa) | součet obsahu střadače s obsahem paměti na adr. aaa |
06.aaa | SUB | ACC: =ACC-HEMrozdíl obsahu střadače a obsahu paměti na adr. aaa | |
09.aaa | JMP | skok v programu | skok na adresu aaa |
10.aaa | AEQ | test na rovnost | F: =1 pro ACC: =HEM(aaa), Jinak F:=0 |
11.aaa | JF | podmíněný skok | skok na adresu aaa pro F=l |
12.aaa | AGT | porovnání | F: =1 pro ACC>MEH(aaa), Jinak F: =0 |
13.aaa | ALT | porovnáni | F: =1 pro ACC |
14.xxx | CPL | ACC:=NOT ACC | inverze obsahu střadače, ACC: =255-ACC |
15.aaa | AND | ACC: =ACC and MEM(aaa) | logický součin obsahu střadače a obsahu paměti na adr. aaa |
16.00d | P1IN | ACC:=P1 | d=8 ... čtení celého portu P1, d=0 až 7 ... Čteni len d-tého bitu |
17.00d | P10UT | P1: =ACC 2) pro d=0 | d=8 ... zápis celého portu P1, d=0 až 7 ... zápis jen d-tého bitu |
18.00d | P20UT | P2: =ACC 2) pro d=0 | d=8 ... zápis celého portu P2, d=0 až 7 ... zápis jen d-tého bitu |
19.aaa | LDAI | ACC: =@MEH(aaa) | naplnění střadače podle směrníku z adresy aaa paměti |
20.aaa | STAI | @MEM(aaa): =ACC | zápis obsahu střadače do paměti dle směrníku z adr. aaa |
21.aaa | JMPI | nepřímý skok | skok dle směrníku v paměti na adrese aaa |
22.aaa | OR | ACC: =ACC or MEM(aaa) | logický součet obsahu střadače a obsahu paměti na adr. aaa |
23.aaa | CALL | voláni podprogramu | skok do podprogramu na adresu aaa, přitom se uloží návratová adresa do zásobníku |
24.xxx | RET | návrat z podprogramu | návrat z podprogramu podle adresy v zásobníku |
25.aaa | JT | podmíněný skok | podmíněný skok na adr. aaa pokud Je linka T0=1 |
26.xxx | KEY | čteni klávesnice | ACC:=KEY přejte kód tlačítka není-li stisknuta žádná klávesa. vrací ACC:=128 |
27.00h | INT | ovládáni přerušeni | h=1 ... povoleni, h=0 ... zákaz vnějšího přerušeni |
Vydáno pro potřebu uživatelů mirkoelektronických sytému TESLA
Řada : | Operační systém MS DOS |
Název : | Mikropočítačová stavebnice Petr |
Autor : | Kolektiv autorů |
Vydavatel : | TESLA ELTOS, státní podnik |
Institut mikroelektronických aplikaci | |
Třída Vítězného února 17, Praha 2 | |
ve Vydavatelství a nakladatelství Novinář | |
ve spolupráci s čs. redakci VN MON Praha | |
Vydání : | první, 1988 |
Náklad : | 1 000 výtisků |
Vydala Tesla Eltos, státní podnik,
Institut mikroelektronických aplikaci ve Vydavatelství a nakladatelství
Novinář Praha ve spolupráci s československou redakci VN MON v roce 1986
ÚVOD | Novinky | 8 Bitů | Příslušenství | Drobnosti | TTL | Kontakt
SAPI-1 | ONDRA | PMI-80 | PMD-85 | klony PMD-85 | klony SM50/40 | PETR | PLAN-80A | IQ151 | TNS | FK-1 | HVĚZDA | SP 830 | PCS 1-QR6000