Ú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


8 bity / PETR





PETR


TESLA ELTOS



MIKROPOČÍTAČOVÁ

STAVEBNICE

PETR









TESLA ELTOS, státní podnik.

Institut mikroelektronických aplikací









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   datumpoznámka
01květen 87IMA informace 6/87
02duben 88pů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





Obsah:

    JAK ČÍST TUTO PŘÍRUČKU
  1. ÚVODEM

  2. POPIS MIKROPOČÍTAČE PETR
    1. Architektura Mikropočítače PETR
    2. Instrukční soubor Mikropočítače PETR

  3. OVLÁDÁNI MIKROPOČÍTAČE PETR OBSLUHOU
    1. Příkazy zadávané obsluhou
    2. Zpracováni chyb
    3. Zprávy zobrazované na displeji

  4. POPIS IMPLEMENTACE MIKROPOČÍTAČE PETR
    1. Technické řešení stavebnice
    2. Popis řídicího programu

  5. DOPLŇKY MIKROPOČÍTAČE PETR
    1. Popis obvodového zapojeni logické sondy
    2. Popis obvodového zapojení vnější paměti a expanderu
    3. Vývojové prostředky pro programování stavebnice PETR

  6. OSAZENÍ A OŽIVENÍ STAVEBNICE PETR
    1. Osazení logické sondy
    2. Osazení. Mikropočítače PETR
      1. Osazení a oživení obvodu displeje
      2. Osazení obvodů Mikropočítače
      3. Osazení obvodu Magnetofonu
    3. Osazeni vnější paměti

  7. PŘÍKLADY PROGRAMŮ
    1. Digitální teploměr
    2. Zobrazování na displeji
    3. Sčítáni čísel
    4. Putující segment na displeji
    5. Zapojeni vnějšího přerušeni
    6. Převody soustav
    7. Hodiny

    LITERATURA


  1. PŘÍLOHA Výpis programu PETR
  2. PŘÍLOHA Schéma:
  3. Seznam součástek:
  4. PŘÍLOHA Odpovědi na otázky v textu
  5. PŘÍLOHA Tabulky 8048


    JAK ČÍST TUTO PŘÍRUČKU ...

    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ů.



  1. ÚVODEM
  2. 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:

    1. kapitola [Úvodem ...] obsahuje základní informace o uspořádání příručky a o významu Jednotlivých části textu.

    2. kapitola [Popis mikropočítače PETR] popisuje virtuální mikropočítač PETR, zejména jeho architekturu. Obsahuje také přehled všech základních instrukcí mikropočítače.

    3. kapitola [Ovládáni mikropočítače PETR obsluhou] je věnována popisu ovládání mikropočítače. Jsou názorně popsány všechny ovládací příkazy a manipulace s kazetovým magnetofonem.

    4. kapitola [Popis implementace mikropočítače PETR] je určena hlavně těm zájemcům, kteří chtějí stavebnici využit Jako universální systém s jednočipovým mikropočítačem řady 8048. Takové využití ovšem předpokládá hlubší znalost Jednočipového mikropočítače řady 8048, jeho podpůrných obvodů a způsobu programováni, proto i. text této kapitoly je psán stručněji a možná i méně názorněji. Je však doplněn seznamem odkazů na další odbornou literaturu.

    5. kapitola [Doplňky mikropočítače PETR] obsahuje popis doplňků vlastního mikropočítače, které jsou součásti stavebnice.

    6. kapitola [Sestavení a oživení stavebnice] Je podrobným návodem k tomu, jak sestavit a oživit Jednotlivé části mikropočítače.

    7. kapitola [Příklady programů a aplikaci] je návodem k využití mikropočítače PETR. Obsahuje příklady programů a doplňkových zapojení některých prakticky ověřených aplikací.


    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.



  3. POPIS MIKROPOČÍTAČE PETR
  4. 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.



    1. Architektura mikropočítače PETR
    2. 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.



    3. Instrukční soubor mikropočítače PETR
    4. 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:

      instrukceovlivňuje
      ACCF
      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.




         ADD adresa   
       
                      
      Přičtení obsahu paměti ke střadači
      ............................................................
      (Add Memory to Accumulator)

      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.




         AEQ adresa   
       
                      
      Test na rovnost obsahu střadače s obsahem paměti
      .........................................................................................
      (Accumulator Equal to Memory ?)

      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.




         AGT adresa   
       
                      
      Test zda je obsah střadače větší než obsah paměti
      .......................................................................................
      (Accumulator Greater then Memory ?)

      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
      



         ALT adresa   
       
                      
      Test zda je obsah střadače menší než obsah paměti
      .........................................................................................
      (Accumulator Less then Memory ?)

      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: ...
      



         AND adresa   
       
                      
      Logický součin obsahu střadače s obsahem paměti
      .........................................................................................
      (Logical And Accumulator with Memory)

      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
      000
      010
      100
      111




         CALL adresa   
       
                      
      Skok do podprogramu
      .......................................
      (Call Subroutine)

      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 ?




         CPL   
       
                      
      Invertuje obsah střadače
      ...............................................
      (Complement Accumulator)

      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.




         DISP parametr   
       
                      
      Zobrazení na displej
      ...................................
      (Display)

      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:

      1. Je-li parametr rrr=0, zobrazí se obsah střadače dekadicky na třech pravých pozicích displeje, obsah tří levých pozic se nemění:
      2. Např.: adr kód instrukce komentář

        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]
        

      3. Je-li parametr rrr=255, vymaže se obsah všech pozic displeje (zhasnou se všechny segmenty ve všech pozicích).
      4. Je-li parametr rrr = 1 až 6, přepíše se obsah střadače do zvolené pozice displeje 1 až 6. Přitom jednotlivé bity binárního rozvoje střadače přímo ovládají jednotlivé segmenty displeje (1=svítí, 0=zhasnuto). Přiřazeni jednotlivých segmentů je pak:

      5.                       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:
      dekadicky
      0   252
      1144
      2118
      3182
      4154
      5174
      6238
      7148
      8254
      9190
                  

      Pro rozsvícení písmene S na pravé krajové
      pozici displeje potřebujeme rozsvítit
      segmenty 0, 3, 6, 2 a 3. Tedy do střadače
      je třeba zapsat
      S0+S5+S6+S2+S3 = 4+8+2+128+32 = 174
      a pak zobrazit znak na 1.pozici.


      Úlohu řeší např. následující posloupnosi
      instrukcí

                    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             





         HALT   
       
                      
      Zastavení výpočtu
      ...............................
      (Halt)

      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ě.




         INT i   
       
                      
      Povolení / zákaz přerušeni
      .............................................
      (Interrupt Enable / Disable)

      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.




         JF adresa   
       
                      
      Skok podle příznaku F
      .......................................
      (Jump if Flag)

      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.
      



         JMP adresa   
       
                      
      Skok
      ............
      (Jump)

      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č ?




         JMPI adresa   
       
                      
      Nepřímý skok
      .........................
      (Jump Indirect)

      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   ; ?
      



         JT adresa   
       
                      
      Skok podle linky T0
      ..................................
      (Jump if Test Pin)

      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.




         KEY   
       
                      
      Ctění klávesnice
      ..............................
      (Keyboard Read)

      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 !




         LDA adresa   
       
                      
      Naplnění střadače přímo
      .............................................
      (Load Accumulator Direct)

      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
      



         LDAI adresa   
       
                      
      Naplněni střadače nepřímo
      ...............................................
      (Load Accumulator Indirect)

      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   ; ???
      



         LDC konstanta   
       
                      
      Naplněni střadače konstantou
      .....................................................
      (Load Accumulator Immediate)

      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í.




         NOP parametr   
       
                      
      Prázdná instrukce / prodleva
      .....................................................
      (No Operation / Delay)

      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 .




         OR adresa   
       
                      
      Logický součet obsahu střadače s obsahem paměti
      .........................................................................................
      (Logical Or Accumulator with Memory)

      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
      000
      011
      101
      111




         P1IN parametr   
       
                      
      Ctěni z portu P1
      .................................
      (Input from Port P1)

      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
      
      



         P1OUT parametrtr   
       
                      
      Zápis na port, P1
      ................................
      (Output to Port P1)

      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
      
      



         P2OUT parametrtr   
       
                      
      Zápis na port, P2
      ................................
      (Output to Port P2)

      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.




         RET   
       
                      
      Návrat z podprogramu
      ..........................................
      (Return from Subroutine)

      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 ?




         STA adresa   
       
                      
      Uložení obsahu střadače přímo
      ......................................................
      (Store Accumulator Direct)

      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
      
      



         STAI adresa   
       
                      
      Uložení obsahu střadače nepřímo
      ..........................................................
      (Store Accumulator Indirect)

      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.




         SUB adresa   
       
                      
      Odečtení obsahu paměti od střadače
      ................................................................
      (Subtract Memory from Accumulator)

      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ý.



  5. OVLÁDANÍ MIKROPOČÍTAČE PETR OBSLUHOU


    1. Příkazy zadávané obsluhou

    2. 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 !




         (ACC)   
      (PC)
       
                      
      Prohlížení a změna stavu procesoru




      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.




         (LOAD)   
       
                      
      Načteni programu z magnetofonové kazety




      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.




         (MEM)   
       
                      
      Prohlížení a změna obsahu paměti




      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čí.




         (RUN)   
       
                      
      Spuštění programu




      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 ?




         (SAVE)   
       
                      
      Uložení programu na magnetofonovou kazetu




      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.




         (STEP)   
       
                      
      Krokování programu




      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.



    3. Zpracováni chyb
    4. 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:

      1. Pokus zapsat do paměti hodnotu, kterou v ni nelze zobrazit (číslo větší než 255), nebo pokus zadat adresu větší než 255.
      2. Adresa je mimo rozsah osazené paměti.
      3. Neznámá instrukce - pokus interpretovat data jako instrukci (program nejspíše "zabloudil").
      4. Operand mimo povolený rozsah (0..1, 0..8 apod.).
      5. Přeplnění zásobníku návratových adres (při CALL).
      6. Prázdný zásobník návratových adres (při RET).
      7. Chyba čteni z magnetofonu - nesouhlasí kontrolní součet.

      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
      
      

    5. Zprávy zobrazované na displeji





  6. POPIS IMPLEMENTACE MIKROPOČÍTACE PETR
  7. 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.


    1. Technické řešení stavebnice
    2. 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

      • procesor řady 48 s řídícim programem na čipu.
      • řízení procesoru krystalem 6 MHz,
      • paměť mikropočítače PETR 256B = 128 paměťových buněk,
      • interface pro kazetový magnetofon,
      • stabilizátor napětí,
      • 18 signálů uživatelského pole,
      • 6 číslicovek displeje,
      • foliová klávesnice 21 tlačítek a
      • spotřeba max. 5V/320 mA.


    3. Popis řídicího programu
    4. 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ň:

      • zavést svůj program do počítače,
      • nechat ho provést procesorem,
      • a pokud chceme na cílovém počítači programy ladit i
      • sledovat (a případně měnit) stav a průběh výpočtu.

      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:

      • simulovat počítač "PETR", především interpretovat jeho instrukční soubor,
      • komunikovat s obsluhou a vykonávat její příkazy (například spustit program),
      • ovládat na fyzické úrovni všechny periferie systému, tj. klávesnici, displej a magnetofon.

      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:

      PROPOJKYADRESOVÁNI PAMĚTI PRO PROGRAM
      EAT11. KB2. - 3. KB4. KB
      110 - 3FFH
      PETR
      --
      100 - 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
      0x0 - 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.



  8. DOPLŇKY MIKROPOČÍTAČE PETR

    1. Popis obvodového zapojení logické sondy
    2. 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

      • indikace L a H pro obvody slučitelné s TTL,
      • indikace oblasti X (0,8 + 2,4V) zhasnutím obou diod LED.
      • min. šířka vstupního impulzu 20 ns,
      • zatížení měřeného místa 0,2 vstupu TTL,
      • paměť impulzu L nebo H,
      • ochrana proti zápornému vstupnímu napětí,
      • napájecí napětí 4,75 až 5,25 V a
      • odběr z napájecího zdroje max. 60 mA.

      Schéma zapojení logické sondy je v příloze.


    3. Popis obvodového zapojeni vnější paměti a expanderu
    4. 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].


    5. Vývojové prostředky pro programování stavebnice PETR
    6. 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ů:

      • překladač z jazyka symbolických adres do strojového kódu procesoru PETR,
      • zpětný překladač ze strojového kódu do jazyka symbolických adres,
      • konverzní program pro vytvoření záznamu na magnetofonu ve formátu PETR,
      • konverzní program pro přečtení záznamu ve formátu PETR z magnetofonu.

      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.



  9. OSAZENÍ A OŽIVENÍ STAVEBNICE PETR
  10. 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.


    1. Osazení logické sondy (deska označena **)
    2. 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.



      Obr. 6 Osazení logické sondy



    3. Osazení mikropočítače PETR
    4. 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.



      Obr. 7 Umístění C15 a C16


      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ů



      1. Osázeni a oživeni obvodu displeje
      2. 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.


      3. Osazení obvodů mikropočítače
      4. 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.



        Obr. 12 Obvod klávesnice



      5. Osazeni obvodu magnetofonu
      6. 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ů.


    5. Osazení vnější paměti
    6. 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.



      Obr. 14 Osazeni vnější paměti


      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.



  11. PŘÍKLADY PROGRAMŮ


    1. Digitální teploměr

    2. 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í.



    3. Zobrazování na displeji

    4. 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
      
      


    5. Sčítání čísel

    6. 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í
      
      


    7. Putující segment na displeji

    8. 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
      
      


    9. Zapojení vnějšího přerušeni

    10. 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:

      1. V komentáři hvězdičkou * označené instrukce slouží ke zkrácení nulového pulzu na výstupu INT monostabilního klopného obvodu. To je důležité v případě, že jeho délka, daná hodnotou prvků C1 a R1, je větší než je délka trváni obsluhy přerušení. Pak by se totiž jedno a totéž přerušení přijmulo opakovaně (obdobně jako v pozn. 3).

      2. Všimněte si, že po instrukci RET bude hlavni program pokračovat z místa, ve kterém byl přerušen. Proč ? Protože při přerušení se zpracovává vždy jedna vnucená instrukce z adresy 000, v našem příkladě je to instrukce CALL INTR. Ta volá podprogram na adrese INTR=020, zatím co návratovou adresu do přerušeného hlavního programu odloží do zásobníku. Tuto adresu pak využije instrukce RET.

      3. Co se stane, zapojíme-li vstup INT trvale na úroveň 0 ? Náš příklad skončí chybou přetečení zásobníku. Proč ? Protože po každém povolení přerušeni instrukcí INT 1 (na adrese 027) se ještě před provedením instrukce RET vyžádá znovu obsluha přerušeni, instrukce CALL INTR na adrese 000 bude rekurzivně (tj. stále dokola) volat podprogram na adrese INTR=020 až se zásobník přeplní návratovými adresami a běh programu skončí chybou E 005 .



    11. Převody soustav

    12. 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).



    13. Hodiny

    14. 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.



  12. LITERATURA
  13. /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.




  1. PŘÍLOHA : Výpis programu PETR

  2. 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 ACC SET 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 ACCMEM
    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
    
    


  3. PŘÍLOHA

  4. Schéma:
    Seznam součástek:


    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 stabilizátoru napětí



    Schéma zapojení logické sondy



    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 ksIO1MHB 8155
    1 ksIO2MHB 8048 (paměť programu maskou)
    1 ksIO3MAA 741
    1 ksIO4MA 7805
     
    Ostatní polovodiče:
    8 ksT1-T8tranzistor BC 178
    2 ksT15,16tranzistor KC 508
    6 ksT9-T14tranzistor K.F 517
    4 ksD9-D12dioda KY 132/80
    3 ksD13-D15dvoumístná jednotka VQE 24E
     
    Odpory TR 191:
    9 ksR1-R8,R3156R
    20 ksR9-R281k
    1 ksR29330R
    3 ksR30,R39,R454k7
    3 ksR32-R343k3
    4 ksR35-R37,R472k2
    1 ksR3847k
    1 ksR40100
    2 ksR41,R4210k
    1 ksR436k8
    1 ksR441M
    1 ksR4622k
     
    Kondenzátory:
    2 ksC1,C2TF008 1000M/16V
    5 ksC3,C4,C9,C15,C16   TK 783 100n
    1 ksC6TK 754 22p
    2 ksC7,C8TE 135 1M/40V
    1 ksC10TK 783 4n7
     
    Ostatní součástky:
    1 ksX1 krystal 6MHz (malé provedení)
    2 ksobjímka IO 40 pin
    1 kskonektor klávesnice (1/2 objímky IO 24 pin)
    1 kschladič pro IO4
    1 kspřepínač (označ. P) 946 221 01 1
    1 kskonektor DIN pevný (3 dutinky)
    1 ksfoliová klávesnice TS 523 (modifikovaný potisk)
    35 kskoncovka 4FA 898 03
    40 kskontakt 4FA 062 06
    1 ksskříňka (Tesla Bratislava)
    1 ksdeska plošných spojil (označ. TRPE)
    1 mvodič 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 ksIO5MH 7474
    1 ksIO6MH 7404
     
    Ostatní polovodiče:
    1 ksT17tranzistor KC508
    1 ksD4dioda KA 261
    5 ks   D1-D3,D5,D6   dioda KA 206
    1 ksD7dioda LED zelená LQ 1702
    1 ksD8dioda LED červená LQ 1102
     
    Ostatní součástky:
    2 ksR48,R49odpor TR 191 15k
    2 ksP1,P2odpor. trimr TP 093 680R
    1 ksC5kondenzátor TK 754 22p
    1 ksC11elektrolyt TE 131 6M8/6.3V
    2 ksC12,C13elektrolyt TE 981 10M/6V
    1 ksdeska plošných spojů
    (oddělený díl desky stavebnice PETR)


    Seznam součástek pro rozšíření stavebnice PETR

    Integrované obvody:
              
    1 ksIO7parněť EPROM K573RF5(2716) popř.
    K573RF3(2732)
    1 ks   IO8MH 8282
    1 ksIO9MHB 8243
     
    Ostatní součástky:
    1 ksC14   TK 783 100n
    1 ksobjímka IO 24 pin
    1 ksK2konektor FRB TX 511 20 11
    (na desce mikropočítače PETR)
    1 ksK3konektor FRB TY 511 20 11
    1 kskonektor FRB TY 511 20 13 (pro kabel)
    1 ksdeska plošných spojů
    (oddělený díl desky stavebnice PETR)




  5. PŘÍLOHA

  6. 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).



  7. PŘÍLOHA

  8. Tabulky 8048
    Tabulka instrukcí PETR


    • Seznam instrukcí mikroprocesoru 8048/8049 seřazený vzestupně podle vnitřního kódu

    • +----+-----------+ +----+-----------+ +----+-----------+ +----+------------+ +----+-----------+ +----+-----------+
      | 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|           |
      +-+--+-----------+ +-+--+-----------+ +-+--+-----------+ +-+--+------------+ +-+--+-----------+
      


    • Abecedně seřazený seznam Instrukcí mikroprocesoru 8048/8049

    • +--------------+-------+ +--------------+---+---+ +--------------+---+---+ +--------------+---+---+
      |     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
      


    • Funkční přehled instrukcí mikroprocesoru 8048/8049

    • +-----------------+--------------------------+ +-----------------+--------------------------+
      |     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   |
      +--+--------------+--------------------------+
      


    • SEZNAM INSTRUKCÍ STAVEBNICE "PETR"

    • kódnázevvýznamp o p i s
      01.xxxHALTzastavení programuna displeji se vypíše "H" Jako příznak a "aaa" jako adresa zastavení HALT
      20.dddDISPvýpis na displayddd=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.dddNOPprodlevaprodleva ddd =1,28 milisekund
      04.kkkLDCACC: =kkknaplněni střadače konstantou kkk
      05.aaaLDAACC: =MEM(aaa)naplněni střadače obsahem paměti na adrese aaa
      06.aaaSTAMEM(aaa):=ACCzápis obsahu střadače do paměti na adresu aaa
      07.aaaADDACC: =ACC+MEM(aaa)součet obsahu střadače s obsahem paměti na adr. aaa
      06.aaaSUBACC: =ACC-HEMrozdíl obsahu střadače a obsahu paměti na adr. aaa
      09.aaaJMPskok v programuskok na adresu aaa
      10.aaaAEQtest na rovnostF: =1 pro ACC: =HEM(aaa), Jinak F:=0
      11.aaaJFpodmíněný skokskok na adresu aaa pro F=l
      12.aaaAGTporovnáníF: =1 pro ACC>MEH(aaa), Jinak F: =0
      13.aaaALTporovnániF: =1 pro ACC
      14.xxxCPLACC:=NOT ACCinverze obsahu střadače, ACC: =255-ACC
      15.aaaANDACC: =ACC and MEM(aaa)logický součin obsahu střadače a obsahu paměti na adr. aaa
      16.00dP1INACC:=P1d=8 ... čtení celého portu P1,
      d=0 až 7 ... Čteni len d-tého bitu
      17.00dP10UTP1: =ACC 2) pro d=0d=8 ... zápis celého portu P1,
      d=0 až 7 ... zápis jen d-tého bitu
      18.00dP20UT   P2: =ACC 2) pro d=0d=8 ... zápis celého portu P2,
      d=0 až 7 ... zápis jen d-tého bitu
      19.aaaLDAIACC: =@MEH(aaa)naplnění střadače podle směrníku z adresy aaa paměti
      20.aaaSTAI@MEM(aaa): =ACC   zápis obsahu střadače do paměti dle směrníku z adr. aaa
      21.aaaJMPInepřímý skokskok dle směrníku v paměti na adrese aaa
      22.aaaORACC: =ACC or MEM(aaa)logický součet obsahu střadače a obsahu paměti na adr. aaa
      23.aaa   CALLvoláni podprogramuskok do podprogramu na adresu aaa, přitom se uloží návratová adresa do zásobníku
      24.xxxRETnávrat z podprogramunávrat z podprogramu podle adresy v zásobníku
      25.aaaJTpodmíněný skokpodmíněný skok na adr. aaa pokud Je linka T0=1
      26.xxxKEYčteni klávesniceACC:=KEY přejte kód tlačítka není-li stisknuta žádná klávesa. vrací ACC:=128
      27.00hINTovládáni přerušenih=1 ... povoleni, h=0 ... zákaz vnějšího přerušeni


      Seznam chyb:
      1. Pokus zapsat do paměti hodnotu, kterou v ni nelze zobrazit (číslo větší než 255) nebo chyba při převodu BCD -> binární číslo.
      2. Adresa je mimo rozsah osazené paměti.
      3. Neznámá instrukce - pokus interpretovat data Jako instrukci (program nejspíše "zabloudil").
      4. Operand mimo povolený rozsah (0..1, 0..8 apod.).
      5. Přeplnění zásobníku návratových adres (při CALL).
      6. Prázdný zásobník návratových adres (při RET).
      7. Chyba čtení z magnetofonu - nesouhlasí kontrolní součet.


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









Obsah:

    JAK ČÍST TUTO PŘÍRUČKU
  1. ÚVODEM

  2. POPIS MIKROPOČÍTAČE PETR
    1. Architektura Mikropočítače PETR
    2. Instrukční soubor Mikropočítače PETR

  3. OVLÁDÁNI MIKROPOČÍTAČE PETR OBSLUHOU
    1. Příkazy zadávané obsluhou
    2. Zpracováni chyb
    3. Zprávy zobrazované na displeji

  4. POPIS IMPLEMENTACE MIKROPOČÍTAČE PETR
    1. Technické řešení stavebnice
    2. Popis řídicího programu

  5. DOPLŇKY MIKROPOČÍTAČE PETR
    1. Popis obvodového zapojeni logické sondy
    2. Popis obvodového zapojení vnější paměti a expanderu
    3. Vývojové prostředky pro programování stavebnice PETR

  6. OSAZENÍ A OŽIVENÍ STAVEBNICE PETR
    1. Osazení logické sondy
    2. Osazení. Mikropočítače PETR
      1. Osazení a oživení obvodu displeje
      2. Osazení obvodů Mikropočítače
      3. Osazení obvodu Magnetofonu
    3. Osazeni vnější paměti

  7. PŘÍKLADY PROGRAMŮ
    1. Digitální teploměr
    2. Zobrazování na displeji
    3. Sčítáni čísel
    4. Putující segment na displeji
    5. Zapojeni vnějšího přerušeni
    6. Převody soustav
    7. Hodiny

    LITERATURA


  1. PŘÍLOHA Výpis programu PETR
  2. PŘÍLOHA Schéma:
  3. Seznam součástek:
  4. PŘÍLOHA Odpovědi na otázky v textu
  5. PŘÍLOHA Tabulky 8048




Ú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


8 bity / PETR



SAPI.cz - web o československých osmibitech, zejména SAPI-1. Provozuje EC1045 od roku 2011
Za korekce češtiny dekuji: MELSOFTovi, Silliconovi, Martinu Lukáškovi a NOSTALCOMPovi

Když začínám blbnout z 8bitů tak se chodím léčit mezi otaku.
Animefest.cz