Historie osmibitových mikroprocesoru a mikroradicu ZILOG . Americká firma ZILOG vstoupila na trh mikroprocesoru v roce 1973. V dobe, kdy svet dobývaly obvody Intel 8080, se objevil obvod s typovým oznacením Z80. Osmibitový mikroprocesor s odlišnou architekturou, zalozenou na sade univerzálních registru, které mohly slouzit pro jakoukoliv funkci, tedy i jako stradac. Architektura umoznovala pruznejší prístup k registrum, optimální vyuzití instrukcí a tím i rychlejší chod programu nez u procesoru jiných výrobcu pri stejném hodinovém kmitoctu. Ješte dríve, nez IBM dala svetu osobní pocítace, museli se spokojit první pocítacoví nadšenci s címsi, co je dnes mozno srovnávat s PC jen velmi stezí. Dodnes však jméno Sinclair predstavuje pojem. A Sinclair obsahoval mikroprocesor Z80 CPU ! Postupem casu byl mikroprocesor Z80 CPU (Central Processor Unit) následován obvody Z80 CTC (Counter-Timer Circuit), Z80 PIO (Parallel Input/Output), Z80 SIO (Serial Input/Output), Z80 DMA (Direct Memory Access) a dalšími. S rozvojem technologie se jednak menila struktura obvodu od TTL pres NMOS az po CMOS, jednak se zvetšovala hustota integrace a v jednom pouzdre se slucovalo stále více obvodu drívejší stavebnice. Na konci vývoje stál obvod Z80 IPC (Intelligent Peripheral Controller), který obsahoval nejen procesor, ale paralelní i sériové vstupne/výstupní obvody (Porty), oscilátor, cítace. Tedy podle dnes zavedené terminologie - mikroradic. Obvody rady Z80, prestoze dnes jiz typování obvodu smazalo príslušnost k rade Z80 (napr. Z84C0010PEC je novodobý CMOS procesor Z80), tvorí znacný podíl na svetové produkci mikroprocesoru. Az na výjimky, obvody rady Z80 nikdy neobsahovaly zádnou pamet krome základní registrové výbavy. Ani soucasní pokracovatelé rady, obvody Z180 a šestnáctibitový Z380 nemají na cipu pamet. To je v tvrdé konkurenci nevýhoda. Musel se objevit nový obvod. Obvody rady Z8 jsou 8 bitové CMOS mikroradice. Vycházejí z principu univerzální sady registru, na cipu je však techto registru pro všeobecné pouzití (General Purpose Register) az 256, takze uz je mozno hovorit o pameti RAM. Navíc cip obsahuje i pamet pro ulození programu v provedení PROM ( pouzívá se zkratka OTP - One Time Programmable ) a to nejméne 512 Bytu ale také az 32 KBytu. Dále cip obsahuje dva 14 bitové cítace, dva analogové komparátory, oscilátor a nejméne 14 vstupu / výstupu. Cip dále obsahuje Watch Dog Timer (preklad tohoto termínu do ceštiny se stále nedarí ), Power On Reset (ceský termín nulování pri zapnutí napájení je mozný, ale anglický je lepší) a další obvody. Všechny obvody rady Z8 mají jeden shodný instrukcní soubor. Mnemonicky pripomíná instrukcní soubor Z80, funkcne je však jiný. Presto prechod od programování obvodu Z80 k rade Z8 je snadný. Pro efektivní programování je k dispozici assembler, pro podporu vývoje je pouzíván hardwarový emulátor rízený osobním pocítacem. Rada Z8 v roce 1998 obsahuje více jak stovku jednotlivých typu, lišících se velikostí pameti, poctem vstupu a výstupu, rychlostí, dovolenou pracovní teplotou, pouzdry pro klasickou i povrchovou montáz. Speciální obvody obsahují i AD a DA prevodníky, sériový komunikacní kanál (UART), jádro Z8 tvorí základ mnoha jednoúcelových obvodu pro rízení klávesnic osobních pocítacu nebo obvodu pro infracervené dálkové ovládání. Tato ucebnice nemuze a ani nechce popsat funkci všech obvodu rady Z8. Chce pouze na nekolika málo obvodech vysvetlit vlastnosti spolecné celé rade Z8. Ucebnice popisuje architekturu rady Z8, instrukcní soubor, práci s assemblerem a emulátorem. S pomocí ucebnice je tedy mozno navrhnout aplikaci s nejrozšírenejšími obvody rady Z8 a postup pak uplatnit, po akceptování konkrétních parametru, na kterýkoliv obvod rady Z8. Text ucebnice predpokládá, ze ctenár je seznámen s obecnou teorií mikroprocesoru a mikroradicu a ovládá pouzívanou terminologii. Autor se omlouvá za castejší pouzívání originálních anglických termínu všude tam, kde se jejich pouzívání vzilo, kde ceský preklad je méne výstizný nebo smešný a predevším tam, kde je to nutné (procesor bude vzdy rozumet pouze instrukci DJNZ - Decrement and Jump if Non Zero a nikoliv ZSNN Zmenši o jednu a Skákej kdyz Není Nula).
Obsah. 1. Všeobecné parametry mikroradicu Z8. 1.1. Mikroradice typu Z86 E30, Z86 E31, Z86 E33, Z86 733 1.2. Mikroradice typu Z86 E02, Z86 E04, Z86 E08 1.3. Elektrické parametry mikroradicu Z8. 2. Adresní prostor mikroradicu Z8. 2.1. Pamet RAM. 2.1.1.Standardní sada registru. 2.1.2. Rozšírená sada registru, banka F. 2.2. Pamet PROM. 2.3. Zásobník (Stack). 2.4. Rídící registry pro prístup do pameti. 2.5. Registry, jejich adresy a identifikátory. 3. Oscilátor mikroradicu Z8. 4. RESET mikroradicu Z8. 4.1. Definovaný stav rídících registru a portu. 4.2. RESET pri zapnutí napájení (POR - Power On Reset). 4.3. WDTMR - Watch Dog Timer. 5. Vstupní / výstupní porty. 5.1. Port 0. 5.2. Port 2. 5.3. Port 3. 5.4. Analogové komparátory. 5.5. Rezim snízeného vyzarování rušivých napetí. 6. Cítace, casovace. 6.1. Rízení cítacu. 6.2. Výstupní módy cítacu (pouze u typu Z86E30/31/33/733) . 6.3. Vstupní módy cítace T1. 6.3.1. Pocítání vnejších impulsu. 6.3.2. Hradlování vnitrního signálu SCLK vnejšími impulsy. 6.3.3. Monostabilní rezim jednorázový. 6.3.4. Monostabilní rezim opakovatelný. 6.3.5. Zapojení cítacu T0 a T1 do kaskády. 6.3.6. Nastavení cítacu po signálu RESET. 7. Prerušení. 7.1. Zdroje prerušení. 7.2. Priorita prerušení. 7.3. Maskování prerušení. 7.4. Programové prerušení. 7.5. Vektorové prerušení. 7.6. Prerušení na dotaz. 8. Úsporné rezimy. 8.1. Rezim HALT. 8.2. Rezim STOP. 8.2.1. Ukoncení rezimu STOP signálem Power On Reset. 8.2.2. Ukoncení rezimu STOP casovacem WDT. 8.2.3. Ukoncení rezimu STOP signálem z urceného zdroje. 9. Registr volitelných funkcí. 10. Programování mikroradicu Z8. 10.1. Príznak výsledku operace. 10.2. Notace pouzívaná pro popis instrukcí. 10.3. Ctyrbitová adresa na míste osmibitové adresy. 10.4. Instrukcní soubor Z8.
3 3 4 5 6 6 7 7 8 8 9 10 11 12 12 12 13 14 15 16 17 18 18 19 20 21 21 21 21 22 22 22 22 23 24 24 24 25 25 25 26 26 26 26 26 27 28 29 29 30 30 31
-111. ZMASM - Zilog Macro Cross Assembler. 11.1. Instalace ZDS vcetne ZMASM. 11.2. Struktura ZMASM. 11.3. Formát zdrojového textu pro ZMASM. 11.3.1. Príkazový rádek 11.3.2. Pole náveští (label). 11.3.3. Pole instrukce. 11.3.4. Pole operandu. 11.3.5. Pole komentáre. 11.3.6. Konstanty. 11.3.7. Symboly. 11.3.8. Operátory. 11.3.9. Výrazy. 11.4. Direktivy assembleru. 12. Vývojové prostredí ZiLOG. 12.1. Sestava vývojového prostredí pro mikroradice Z8. 12.1.1. Napájecí zdroj. 12.1.2. Propojení emulátoru s osobním pocítacem. 12.1.3. Prizpusobení emulátoru pro pozadovaný typ mikroradice. 12.1.4. Prizpusobení emulátoru k umístení krystalu oscilátoru. 12.1.5. Prizpusobení emulátoru ke zpusobu napájení aplikace. 12.1.6. Pripojení emulátoru k aplikaci. 12.2. Spuštení emulátoru. 12.2.1. Instalace GUI . 12.2.2. Spuštení GUI . 12.3. Konfigurace emulátoru pro pozadovaný typ mikroradice. 12.4. Spuštení programu na emulátoru. 12.4.1. Vlození programu do pameti emulátoru. 12.4.2. Zobrazení souboru v pameti emulátoru. 12.4.3. Zobrazení obsahu registru emulovaného mikroradice. 12.4.4. Ladení programu. 12.4.5. Ulození rozpracovaného programu. 12.4.6. Ulození obsahu pameti emulátoru. 12.5. Programování OTP verzí mikroradicu. 13. Zilog Developer Studio ZDS 1.00 s assemblerem ZMASM. 13.1. Instalace ZDS 1.00. 13.2. Spuštení ZDS . 13.3. Otevrení projektu. 13.4. Sestavení projektu. 13.5. Konfigurace assembleru pro projekt. 13.6. Konfigurace linkeru pro projekt. 13.7. Vytvorení spustitelného souboru ∗.ld 13.8. Vyuzití chybového hlášení pri oprave zdrojového textu. 13.9. Ulození a otevrení rozpracovaného projektu.
46 46 47 48 48 48 49 49 49 49 50 50 50 51 53 53 53 53 53 54 54 54 55 55 55 56 56 56 57 58 58 60 61 62 63 63 63 63 64 64 65 65 66 66
-2-
1. Všeobecné parametry mikroradicu Z8. 1.1. Mikroradice typu Z86 E30, Z86 E31, Z86 E33, Z86 733
Technické parametry: typ obvodu velikost RAM (B) velikost ROM (kB) pocet I / O cítace komparátory prerušení max. kmitocet (MHz) Icc, rezim RUN (mA)
Z86E31 125 2 24 2 2 6 16 7
Z86E30 237 4 24 2 2 6 16 7
Z86E33 237 4 24 2 2 6 12 15
Z86 733 237 8 24 2 2 6 12 15
-3-
1.2. Mikroradice typu Z86 E02, Z86 E04, Z86 E08
Technické parametry: typ obvodu velikost RAM (B) velikost ROM (kB) pocet I / O cítace komparátory prerušení max. kmitocet (MHz) Icc, rezim RUN (mA)
Z86E02 61 0.5 14 1 2 5 8 3.8
Z86E04 125 1 14 2 2 6 12 6.8
Z86E08 125 2 14 2 2 6 12 6.8
-4-
1.3. Elektrické parametry mikroradicu Z8. Napájecí napetí Pracovní teplota
Ucc Standard Extended Maximální napetí pinu proti GND Maximální ztrátový výkon celého obvodu *1 Maximální proud do vstupu Maximální proud z výstupu / otevrený kolektor Maximální proud kazdého I / O pinu Maximální soucet proudu všech I / O kazdého portu Vstupní napetí, úroven H Vstupní napetí, úroven L Výstupní napetí, úroven H Výstupní napetí, úroven L Napájecí proud v rezimu RUN Icc *1 Napájecí proud v rezimu HALT Icc1 *1 Napájecí proud v rezimu STOP Icc2 *1 Perioda hodinových impulsu TpC *2 Doba nástupné / sestupné hrany hodinových impulsu Doba nástupné /sestupné hrany vstup. impulsu cítacu Doba nábehu napájecího napetí pro Power On Reset
5 ± 0.5 0 az +70 - 40 az + 105 - 0.6 az +7 0.46 / 1.65 / 1.21 ± 600 ± 600 20 60 > 2.8 < 1.5 > 4.8 < 0.4 3.8 / 7 / 15 2.5 / 2.5 / 3.7 1/1/3 125 / 83 / 62 az DC < 15 < 100 12 az 100
V o C o C V W µA µA mA mA V V V V mA mA µA ns ns ns ms
Poznámky: *1 Tri údaje platné zleva pro typy Z86E 02 / 04 + 08 / 30 + 31 + 33 *2 Tri údaje platné zleva pro kmitocty 8 / 12 / 16 MHz Elektrické parametry jsou v zanedbatelné míre zjednodušeny, aby jejich výcet byl strucný a prehledný. Dodrzením uvedených hodnot nebude zádný z obvodu ohrozen.
Typové znacení obvodu Zilog.
-5-
2. Adresní prostor mikroradicu Z8. Mikroradice Z8 mohou vytváret adresy pro prístup do ctyr adresních prostoru: Standardní sada registru. Obsahuje rídící registry, registry vstupne/ výstupních portu a registry pro všeobecné pouzití (GPR - General-Purpose Register). Muze obsahovat az 256 registru RAM. Rozšírená sada registru. Obsahuje rídící registry pro nadstandardní funkce. Obvody 30/31/33/733 mají 3 registry RAM rozšírené sady F, obvody 02/04/08 rozšírenou sadu nemají vubec. Pamet pro program. Cip obsahuje nejméne 512B a nejvíce 32KB pameti PROM (také je pouzívána zkratka OTP - One Time Programmable) nebo ROM. Do této pameti je ukládán program a datové konstanty. Vnejší pamet . Mikroradice Z8 mají 16-bitový cítac programu (PC-Program Counter) a mohou tedy adresovat az 64kB pameti. Cip obsahuje nejvýše 32kB, obvykle jen 2 nebo 4 kB. Pamet nad tuto velikost muze být pripojena jako vnejší pamet RAM nebo ROM a mohou do ní být ulozeny jak program tak data. Vnejší pamet mohou adresovat pouze obvody, které mají plne vybavené Porty 0 a 1. Obvody v této ucebnici vnejší pamet adresovat nemohou.
2.1. Pamet RAM. Nejvetší pamet RAM, kterou by mohl cip obvodu Z8 obsahovat, je slozena ze Standardní sady registru a Rozšírené sady registru.
Standardní sada registru (nebo její cást) je na cipu obsazena vzdy (ale v ruzné velikosti). Rozšírená sada registru muze obsahovat specializované registry a je implementována jen u nekterých typu mikroradicu. Mikroradice typu Z86E02 / 04 / 08 nemají zádné registry rozšírené sady, typy Z86E30 / 31/ 33 / 733 mají implementovány nekteré registry Banky F .
-6-
2.1.1. Standardní sada registru. Sada je delena do 16 skupin po 16 registrech. Pro kazdou ze 16 skupin se pouzívá název Pracovní skupina (Working Register Group) . Cip obvodu rady Z8 obsahuje vzdy alespon Pracovní skupiny 0 az 3 (tj. 64 registru) a Pracovní skupinu F, kde jsou umísteny rídící registry. Pracovní skupiny 1 az E obsahují pouze registry pro všeobecné pouzití (GPR - General Purpose Register) a jejich poctem je pro jednotlivé typy urcena velikost pameti RAM. Registry oznacené WO (Write Only) jsou urceny jen pro zápis, jejich ctení dává výsledek FF.
2.1.2. Rozšírená sada registru, banka F. Banky 1 az F, které tvorí rozšírenou sadu registru, jsou na cipu implementovány podle speciálních funkcí, kterými je konkrétní typ mikroradice vybaven Typy Z86E02 / 04 / 08 neobsahují zádné registry rozšírené sady. Typy Z86E30 / 31 / 733 obsahují banku F rozšírené sady.
-7-
2.2. Pamet PROM. 16-bitový cítac programu (PC-Program Counter) muze adresovat az 64kB pameti. Obvody rady Z8 obsahují nejméne 512 B pameti typu PROM, pro kterou je uzíván název OTP (One Time Programmable). Prvních 12 adres 0000H az 000BH je rezervováno pro ulození šesti dvoubytových vektoru prerušení, první instrukce programu musí být ulozena na adrese 000CH.
Pri behu programu je po kazdé instrukci zvýšen obsah PC (Program Counter). Pri chybne sestaveném programu muze obsah PC presáhnout nejvyšší adresu pameti. Program poté pokracuje výkonem instrukcí NOP (No Operation) az do vynulování obsahu PC. Pak je ovšem obsah adresy 0000H povazován za instrukci, coz zpusobí zhroucení programu.
2.3. Zásobník (Stack). Zásobník je pamet LIFO (Last In - First Out) kterou program automaticky pouzívá pro ukládání návratových adres pri volání podprogramu (instrukce CALL), návratových adres a obsahu registru príznaku (FLAGS) pri prerušení. Do zásobníku také mohou být ulozena jakákoliv data (instrukce PUSH) a ze zásobníku zase vyzvednuta (instrukce POP). Zásobník muze pouzívat pouze registry GPR. Dno zásobníku je obvykle umísteno na nejvyšší implementovanou adresu GPR. Napr. U Z86E02 je to adresa 3FH, u Z86E30 je to adresa EFH. Zásobník je zalozen definováním obsahu registru SPL (Stack Pointer).
Instrukce CALL a PUSH nejprve snízí (dekrementuje) obsah registru SPL, poté ulozí urcená data na adresu, kterou SPL obsahuje (na kterou SPL "ukazuje"). Instrukce RET, IRET a POP nejprve data ze zásobníku vyzvednou a poté zvýší (inkrementují) obsah SPL. Pri chodu programu tedy zásobník "roste" od definovaného dna smerem k nizším adresám a "ubývá" smerem k vyšším. Registr SPL stále "ukazuje" na "vrchol" zásobníku. Nesprávné definování dna zásobníku a predevším nesprávné pouzívání instrukcí PUSH a POP muze zpusobit prepsání dat nebo stavových registru zásobníkem nebo registr SPL muze obsahovat neexistující adresu. Tím vzdy dojde ke zhroucení programu. Proti temto situacím nejsou mikroradice nijak chráneny a správné pouzívání zásobníku musí zajistit programátor. Zásobník muze být umísten i do vnejší pameti, ukazatel zásobníku je pak tvoren dvojicí registru SPL a SPH. Obvody v této ucebnici nemohou pouzívat vnejší pamet a tedy nemohou pouzívat ani vnejší zásobník. Obsah registru SPH (adresa FEH) je proto ignorován, registr SPH muze být pouzit jako GPR.
-8-
2.4. Rídící registry pro prístup do pameti. Registr SPL DEC
HEX
Název Popis
255
FF
SPL
Stack Pointer Low Byte
Ukazatel zásobníku, nizší byte
Registr obsahuje pri chodu programu vzdy adresu vrcholu zásobníku. Na zacátku programu, který zásobník pouzívá, musí být SPL nastaven na adresu, která pak tvorí dno zásobníku. Obsah registru je menen instrukcemi CALL, PUSH, POP, RET, IRET a pri prerušení (Interrupt). Po signálu RESET není obsah registru SPL definován.
Registr SPH DEC
HEX
Název
Popis
254
FE
SPH
Stack Pointer High Byte
Ukazatel zásobníku, vyšší byte
Pri umístení zásobníku do vnejší pameti registr SPH obsahuje vyšší byte ukazatele zásobníku. Pri vnitrním zásobníku je SPH ignorován. Obvody v této ucebnici nemohou SPH vyuzít. Registr RP DEC
HEX
Název Popis
253
FD
RP
Register Pointer
Ukazatel banky a pracovních registru
Registr obsahuje adresu Banky - bity D3 az D0 a adresu Pracovní skupiny (Working Group) bity D7 az D4. Obsah registru je mozno nastavit instrukcí SRP (Set Register Pointer).
Po signálu RESET je obsah registru 00H, registr adresuje Standardní sadu, pracovní skupinu 0.
-9-
2.5. Registry, jejich adresy a identifikátory. Kazdý z registru standardní a rozšírené sady je jednoznacne identifikovatelný 12 bitovou absolutní adresou. Všechny rídící registry mají pridelen identifikátor (8 bitová adresa) 000H 0FDH F0FH 045H
P0 RP WDTMR -
Registr standardní sady, Port 0 Registr standardní sady, Registr Pointer Registr rozšírené sady F, Watch Dog Timer Registr Registr standardní sady, GPR, pracovní skupina 4
Registry pro všeobecné pouzití (GPR) nemají absolutní identifikátor, uvnitr pracovní skupiny mají prideleny relativní identifikátory R0 az R15 (ctyrbitová adresa). Instrukcní soubor Z8 pouzívá 8 bitové nebo 4 bitové adresy. Osmibitová adresa je doplnena bity D3-D0 registru RP, ctyrbitová adresa je doplnena obsahem celého RP registru. Bity D7-D4 adresují vzdy pracovní skupinu. Bity D3-D0 urcí, která banka rozšírené sady nahradí banku 0 standardní sady.
- 10 -
3. Oscilátor mikroradicu Z8. Všechny mikroradice obsahují Piercuv oscilátor, který je pouzíván jako zdroj hodinových impulsu pro casování všech obvodu na cipu. Výhodou tohoto rešení je nízká cena, vysoká úroven výstupního signálu, malé zatezování krystalu, stabilita kmitoctu se zmenou napájecího napetí i teploty.
Výstupní kmitocet oscilátoru CLK (Clock) je tvarován a soucasne delen dvema na signál SCLK (System Clock), coz je kmitocet pro casování procesoru. Delicku dvema je mozno vyradit nastavením bitu D1 registru SMR (F0BH) na hodnotu 1. Obsah harmonických kmitoctu v signálu SCLK a tím vyzarování procesoru se snízí na cca 25%. Kmitocet oscilátoru pak muze být maximálne 4MHz. Pin X1 je vstupem oscilátoru, pin X2 je výstupem. Z pinu X2 muze být signál CLK vyveden pro synchronizaci jiného obvodu (mikroprocesoru). Mikroprocesor Z8 muze pracovat s kmitoctem casování od 0 Hz do maximálního kmitoctu podle typu obvodu.
Oscilátor je nutno navrhnout tak, aby vodice, spojující krystal, kondenzátory C1 a C2 a piny X1 a X2 byly tak krátké a široké jak jen je mozné. Soucástky musí být umísteny co nejblíze k k pinum X1 a X2 oscilátoru. Pin X1 je pouzíván také jako programovací pin nebo pin pro vstup do speciálního testovacího rezimu. Pro tyto funkce je na pin X1 privádeno napetí o cca 2V vyšší nez je napájecí napetí Ucc. Pin X1 proto není chránen uvnitr pouzdra diodou, pripojenou na pin Ucc a je proto náchylný na vnejší rušivé signály. V prostredí s vysokou úrovní rušivých signálu je doporuceno pripojit vnejší diodu mezi pin X1 a Ucc. Tato dioda nemá zádný vliv na funkci oscilátoru. Obvody Z86C30/31/33/733 a Z86E02...1925 mohou být naprogramovány tak, ze oscilátor je rízen RC obvodem. Výhodou RC oscilátoru je nízká cena, nevýhodou je horší stabilita kmitoctu. RC oscilátor je vhodný pro levné a nenárocné aplikace.
- 11 -
4. RESET mikroradicu Z8. 4.1. Definovaný stav rídících registru a portu. Po pripojení napájecího napetí (funkce POR - Power On Reset), a po aktivaci obvodu WDT v rezimu RUN a rezimu HALT je generován signál RESET, který nastaví rídící registry a porty mikroradice do definovaného stavu. Soucasne je nastaven obsah PC (Program Counter) na hodnotu 000CH. Obvody popisované v této ucebnici nemají RESET pin a nemohou být nastaveny do výchozího stavu vnejším signálem. Obsah rídících registru po signálu RESET. Adresa 0FF 0FE 0FD 0FC 0FB 0FA 0F9 0F8 0F7 0F6 0F5 0F4 0F3
Ident. SPL SPH RP FLAGS IMR IRQ IPR P01M P3M P2M PRE0 T0 PRE1
D7 U U 0 U 0 0 U 0 0 1 U U U
D6 U U 0 U U 0 U 1 0 1 U U U
U U 0 U U 0 U 0 0 1 U U U
U U 0 U U 0 U 0 0 1 U U U
D5 U U 0 U U 0 U 1 0 1 U U U
D4 U U 0 U U 0 U 1 0 1 U U U
D3 D2 U U 0 U U 0 U 0 0 1 U U 0
U U 0 U U 0 U 1 0 1 0 U 0
D1 D0
prerušení zakázáno všechny pozadavky na prerušení vynulovány vnitrní zásobník, P0 všech osm vstupu P3 vstupy digitální, P2 výstupy otevrený kolektor P2 všech osm vstupu T0 jednorázový rezim T1 jednorázový rezim, vnejší vstup
0F2 0F1 0F0 003 002 001 000 F0F F0B F00
T1 U TMR 0 SIO U P3 1 P2 U P1 U P0 U GPR U WDTMRU SMR 0 PCON 1
U 0 U 1 U U U U U 0 1
U 0 U 1 U U U U U 1 1
U 0 U 1 U U U U 0 0 1
U 0 U U U U U U 1 0 1
U 0 U U U U U U 1 0 1
U 0 U U U U U U 0 0 1
U 0 U U U U U U 1 0 0
citace zastaveny digitální rezim všech osm vstupu, výstupy (po nastavení) otevr. kolektory všech osm vstupu, výstupy (po nastavení) push-pull WDT cca 10ms, WDT povolen ve STOP a HALT SCLK=CLK / 2 P0 výstupy push-pull, P3 výstupy digitální
1 - bit nastaven na 1 0 - bit nastaven na 0 U - nedefinovaná hodnota
4.2. RESET pri zapnutí napájení (POR - Power On Reset). Mikroradice Z8 obsahují komparátor, který sleduje úroven napájecího napetí Ucc. Pokud je napetí Ucc menší nez cca 2.7 V, je aktivován obvod POR. Pokud se napetí Ucc zvýší na úroven zajištující spolehlivou funkci mikroradice, je generován signál RESET. Signál RESET je synchronizován s casováním procesoru a je zpozden o cca 10 ms + 18 TpC pro stabilizaci podmínek pro chod procesoru po ustálení napájecího napetí. Po signálu RESET jsou všechny rídící registry a porty nastaveny na definovaný obsah (cl.4.1.), cítac programu je nastaven na hodnotu 000CH. Obvod POR je aktivován i pri chodu mikroradice, pokud napájecí napetí Ucc poklesne pod úroven cca 2.7 V a to i na dobu nekolika ns. Proti nezádoucí aktivaci POR je vhodné pripojit filtracní kondenzátory na napájecí napetí co nejblíze pouzdru mikroradice.
- 12 -
4.3. WDTMR - Watch Dog Timer. Watch Dog je cítac, který pri nacítání predvolené hodnoty generuje signál RESET. Je-li WDT v chodu v rezimu RUN nebo HALT, má RESET dusledky jako POR, tedy nastavuje rídící registry a cítac programu. Po signálu RESET není WDT v chodu, do cinnosti je uveden první instrukcí WDT v programu. Kazdá další instrukce WDT nastaví casovac do výchozího stavu. Je-li casovac WDT spušten, není mozno ho z funkce vyradit. Nedosáhne-li program další instrukce WDT vcas, je generován RESET. Tím je zabráneno bloudení programu v dusledku poruchových stavu. Programátor musí umístit instrukce WDT do vhodných míst programu, aby dosáhl pozadované funkce. Casovac WDT je rízen vlastním RC oscilátorem na cipu. Obvody Z86E30/31/33/733 mohou volit rízení WDT bud vnitrním RC oscilátorem nebo hodinovým kmitoctem CLK. Délku cítání casovace WDT není mozno menit u obvodu Z86E02/04/08, které nemají registr WDTMR. Doba cítání je závislá na hodnote napájecího napetí a teplote okolí, není závislá na kmitoctu CLK a muze být v mezích cca 10 az 70 ms. Casovac WDT muze být v chodu i v úsporných rezimech HALT a STOP. Obvody, které mají registr WDTMR (Z86E30/31/33/733), mohou volit chod casovace obsahem tohoto registru. Obvody bez registru WDTMR (Z86E02/04/08) mohou programove umoznit chod casovace v rezimu HALT instrukcí WDH. Po této instrukci je casovac spoušten a nastavován instrukcemi WDT. V rezimu STOP muze být chod casovace WDT umoznen naprogramováním tzv. Option registru (clánek 9.). Registr WDTMR DEC
HEX
Název
Popis
Write Only
F0F
WDTMR Watch Dog Timer Register
Registr nastavení WDT
Registr WDTMR je prístupný pouze po dobu 60 cyklu po RESET. Poté nemuze být zádným zpusobem menen jeho obsah. Pokud je WDT v cinnosti v rezimu HALT, jeho aktivace má za následek signál RESET a uvedení rídících registru a portu do výchozího stavu. Pokud je pozadován chod casovace v rezimu STOP, musí být jako oscilátor nastaven vnitrní RC oscilátor, protoze signál SCLK je v rezimu STOP odpojen. Aktivace WDT bezícího v rezimu STOP nenastavuje výchozí stavy všech rídících registru. Prehled volby funkcí WDT pro ruzné typy mikroradicu Z8: oscilátor pro WDT délka cítání WDT funkce v HALT funkce v STOP
Z86E02/04/08 vnitrní RC pevná cca 10ms povoluje instrukce WDH Option Register
Z86E30/31/33/733 vnitrní RC nebo SCLK, bit D4 WDTMR volitelná, bity D1a D0 WDTMR volitelná, bit D2 WDTMR volitelná, bit D3 WDTMR - 13 -
5. Vstupní / výstupní porty. Mikroradice Z8 mohou mít az 32 vstupu / výstupu, které jsou usporádány do ctyr osmibitových portu.
Všechny porty i jejich rídící registry jsou soucástí pameti RAM a jsou prístupné jako kterýkoliv GPR registr, bez speciálních instrukcí. Kazdý z portu P0, P1 a P2 má oddelený vstupní a výstupní registr. Zápis do bitu, které jsou konfigurovány jako vstupy, ukládá data do výstupního registru, odkud nemohou být ctena. Jsou-li bity prekonfigurovány na výstupy, data ulozená ve výstupním registru jsou prenesena na piny a mohou
být ctena. Tento mechanismus dovoluje uzivateli výstupní signály nejdríve nastavit a poté pripojit na výstupní piny. Vstupní signály nepricházejí synchronne s casováním procesoru a jejich ctení by mohlo dávat nestabilní výsledky. Úrovne vstupních signálu jsou proto po dobu dvou hodinových cyklu ulozeny ve vyrovnávací pameti a teprve poté cteny.
Kazdý pin portu P0, P1 a P2 je zapojen jako obousmerný CMOS vstup/výstup. Signál /OUT Enable konfiguruje pin jako výstup, signál /Open-Drain uzavírá horní tranzistor a konfiguruje pin jako otevrený kolektor. Všechny piny jsou chráneny dvema diodami proti napetím vyšším nez Ucc a nizším nez GND. Na kazdý pin je zapojen obvod Auto-Latch, který nastaví definované úrovne na pinu v následujících prípadech: - pin, konfigurovaný jako vstup, není pripojen na zádný signál, je "ve vzduchu" - pin, jako vstup, je pripojen na trístavový signál ve vysokoohmovém stavu - pin jako výstup Open - Drain se zapsanou úrovní "1" , oba hlavní tranzistory jsou uzavreny Po signálu RESET se úrovne všech pinu nastaví do náhodných stavu, avšak do definovaných úrovní "0" nebo "1". Obvody Auto-Latch jsou standardne aktivní, mohou být globálne vyrazeny naprogramováním Option registru (clánek 9.). - 14 -
5.1. Port 0. Port 0 je osmibitový CMOS obousmerný I/O Port. Programove muze být nastavena vzdy celá ctverice bitu (P00-P03 a P04-P07) jako vstupy nebo výstupy. Obvody Z86E30/31/33/733 mají implementován kompletní Port 0, obvody Z86E02/04/08 mají pouze tri piny P00, P01 a P02. Port 0 je umísten jako registr standardní sady s adresou 00H, pro jeho konfiguraci slouzí rídící registr P01M s adresou F8H a registr PCON s adresou F00H.
Registr P01M Write Only
DEC
HEX
Název
Popis
248
F8
P01M
Port 0-1 Mode
DEC
HEX
Název
Popis
F00
PCON
Port Configuration
Registr nastavení módu Portu 0 a 1
Registr PCON Write Only
Registr konfigurace Portu
- 15 -
5.2. Port 2. Port 2 je osmibitový CMOS obousmerný I/O Port. Programove muze být nastaven kazdý bit jako vstup nebo výstup. Port 2 je umísten jako registr standardní sady s adresou 02H, pro jeho konfiguraci slouzí rídící registr P2M s adresou F6H a registr P3M s adresou F7H.
Registr P2M Write Only DEC
HEX
Název
Popis
246
F6
P2M
DEC
HEX
Název
247
F7
P3M
Port 2 Mode
Registr nastavení módu Portu 2
Registr P3M Write Only Popis
Port 3 Mode
Registr nastavení módu Portu 3
- 16 -
5.3. Port 3. Port 3 je osmibitový CMOS I/O Port, který má odlišné zapojení i odlišnou funkci od portu 0 a 2. Piny P30-P33 jsou trvale zapojeny jako vstupy, Piny P34-37 trvale jako výstupy. Výstupy jsou vzdy pouze Push-Pull, vstupy P31-33 nemají obvody Auto-Latch a proti prepetí jsou chráneny pouze diodami proti GND. Typy Z86E02/04/08 mají pouze tri vstupy P31,32,33. Port 3 je umísten jako registr standardní sady s adresou 03H, pro jeho konfiguraci slouzí rídící registr P3M s adresou F7H a registr PCON s adresou F00H. Port P3 slouzí predevším pro prístup k analogovým komparátorum a cítacum a pro vstup signálu od vnejších zdroju prerušení. Pro prehled o všech moznostech Portu 3 je nutno prostudovat kapitoly, popisující zmínené obvody.
Stav "prepínacu" na obrázku je po signálu RESET. Plný význam všech bitu registru P3M je popsán v cl. 5.2. Port 2, registru PCON v clánku 5.1. Port 1 a registru TMR a PRE1 v clánku 6. Cítace, casovace.
- 17 -
5.4. Analogové komparátory. Všechny typy Z8 v této ucebnici mají dva analogové komparátory. Neinvertující vstupy komparátoru jsou pripojeny na piny P31 a P32, oba invertující vstupy jsou propojeny a pripojeny na pin P33. Funkce komparátoru je mozno vyuzívat, jsou-li vstupy P31, P32 a P33 nastaveny do analogového rezimu, tedy po nastavení bitu D1 registru P3M na hodnotu 1. Instrukce LD P3M, #xxxx xx1xB nastaví analogový rezim. (x - libovolná hodnota bitu) Jestlize napetí na vstupu komparátoru (pin P31) je vyšší nez napetí na pinu P33, výstup komparátoru je na úrovni 1. Výstupní úroven komparátoru se zmení na 0, je-li napetí na vstupu P31 menší nez napetí na pinu P33. Nejmenší rozdíl napetí mezi vstupy, na který muze komparátor
definovat výstupní hodnotu, je 10mV. Dovolený rozsah napetí pinu P31,P32 a P33 je od GND-0.3V do Ucc-1.5V. Výstup komparátoru AN1 je zdrojem vnitrního prerušení IRQ2, obdobne výstup komparátoru AN2 je zdrojem prerušení IRQ0. Podrobne viz clánek 7. Prerušení. Výstupy komparátoru mohou být pripojeny na výstupy portu P3. To je mozné pouze u typu, které mají registr PCON, v této ucebnici tedy u typu Z86E30/31/33/733. Je-li bit D0 registru PCON nastaven na hodnotu 1, je výstup komparátoru AN1 pripojen na pin P34, výstup komparátoru AN2 pak na pin P37. Výstupy komparátoru na piny P34, P37 nastaví posloupnost instrukcí LD RP,#0FH ; nastaví Register Pointer na pracovní skupinu 0, rozšírená sada F LD R0,#xxxx xxx1B ; nastaví bit D0 registru PCON na 1 Analogové komparátory, pokud je nastaven analogový rezim, jsou funkcní i v rezimu HALT (clánek 8). Komparátory nejsou funkcní v rezimu STOP. Pokud však analogový rezim byl zvolen pred vstupem mikroradice do rezimu STOP, po výstupu z rezimu STOP je analogový rezim obnoven.
5.5. Rezim snízeného vyzarování rušivých napetí. Kazdé zarízení, pracující v impulsním rezimu, je zdrojem elektromagnetického vyzarování, které muze pusobit rušive na jiná elektronická zarízení. Úroven rušivých napetí je tím vetší, cím rychlejší jsou zmeny, které jsou prícinou vyzarování. Mikroradice Z8 je mozno nastavit do rezimu, kdy úroven rušivých napetí, vyzarovaných do okolí, je co nejmenší. Toho se dosahuje predevším zpomalením nástupných a sestupných hran hodinových impulsu (nikoliv snízením hodinového kmitoctu) a úpravou impedancí vstupne/výstupních portu. Nastavením bitu D7, D6, D5 a D3 registru PCON (viz. clánek 5.1) na hodnotu 0 je mozno nastavit do rezimu nízkého vyzarování nezávisle oscilátor a porty P0, P2, P3 . Navíc je mozno nastavit bit D1 registru SMR na hodnotu 1 a vyradit tak z cinnosti delicku, která výstupní signál oscilátoru delí dvema. Dusledkem popsaného nastavení je: - úroven rušivého vyzarování se snízí asi na 25% oproti vyzarování pri standardním rezimu - výstupní odpor portu je cca 200 Ω - kmitocet vnitrních hodin je roven kmitoctu krystalu a smí být maximálne 4MHz Výše popsané nastavení rezimu snízeného vyzarování je mozné pouze u typu, které mají registry PCON a SMR, tedy pouze u typu Z86E30/31/33/733. Obvody typu Z86E02/04/08 mohou být do obdobného rezimu nastaveny naprogramováním príslušného bitu Option registru (clánek 9.).
- 18 -
6. Cítace, casovace. Všechny typy mikroradicu Z8 jsou vybaveny dvema cítaci (Z86E02 a Z86E03 mají pouze jeden cítac) , které nejsou závislé na chodu procesoru a odlehcují tak programu od casove kritických cinností jako je merení casových intervalu nebo pocítání událostí. Kazdý z cítacu je tvoren osmibitovým registrem a šestibitovou preddelickou. Cítac T0 je umísten jako registr standardní sady s adresou F4H, jako preddelicka PRE0 slouzí registr F5H. Cítac T1 je registr standardní sady s adresou F2H, jako preddelicka PRE1 slouzí registr F3H. Pro konfiguraci obou cítacu je pouzit rídící registr TMR s adresou F1H, nekteré funkce cítacu se nastavují v registrech SMR (F0BH) a P3M (F7H).
Cítace pracují v rezimu odecítání od pocátecní nastavené hodnoty k nule. Po dosazení nulového obsahu se cítac bud zastaví a musí být znovu spušten (jednorázový rezim), nebo je opet naplnen pocátecní hodnotou a odecítání se opakuje. Zdrojem vstupních impulsu muze být bud oscilátor mikroradice nebo vnejší zdroj (pouze pro cítac T1), pripojený na pin P31. Cítac T0 po dosazení nulového stavu generuje prerušení IRQ4, cítac T1 je obdobne zdrojem prerušení IRQ5. Výstupy cítacu mohou být (pouze u typu Z86E30/31/33/733) pomocí bitu D7 a D6 registru TMR propojeny na pin P36. Schéma propojení je na obrázku v clánku 5.3. Port 3. Úplné programování registru TMR je v clánku 6.1.
Delicky ctyrmi, 6-bitové preddelicky a 8-bitové cítace tvorí dohromady šestnáctibitový synchronní zpetný cítac, který muze být nastaven do ctyr módu, popsaných dále. Preddelicky jsou Write Only registry, jejich ctení dává výsledek FFH. Šest vyšších bitu preddelicek muze mít hodnotu 1 az 64D. Dva nejnizší bity preddelicek jsou rídící bity, které urcují mód cítacu a zdroj vstupních impulsu pro cítac T1. Kazdý cítac je ve skutecnosti slozen z osmibitového cítace, Write Only registru, ve kterém je zapsána pocátecní hodnota cítace a Read Only registru, ze kterého je ctena okamzitá hodnota cítace. Pocátecní hodnota cítacu muze být 1 az 256D. Pro úplnost je treba zopakovat, ze typ Z86E02 neobsahuje cítac T0.
- 19 -
6.1. Rízení cítacu. Chod obou cítacu je rízen obsahem registru TMR. Registr TMR DEC
HEX
Název
241
F1
TMR
Popis
Timer Mode Register
Registr nastavení módu cítacu
Zapsáním hodnoty 1 do bitu D0 (D2) se prenese pocátecní hodnota z registru T0 (T1) a PRE0 (PRE1) do príslušných hardwarových cítacu. Následující hodinový impuls SCLK nastaví do bitu D0 (D2) hodnotu 0 a pripraví oba bity pro další operaci zápisu pocátecních hodnot. Nová pocátecní hodnota muze být zapsána do cítace kdykoliv. Jestlize v okamziku zapsání pocátecní hodnoty cítac odecítá, pokracuje v odecítání od nove nastavené pocátecní hodnoty. Cítac T0 (T1) zustává v klidu, pokud bit D1 (D3) má hodnotu 0 a odecítá, má-li bit D1 (D3) hodnotu 1. První snízení obsahu cítace o jednu nastává ctyri hodinové cykly poté, co byla hodnota bitu D1 (D3) nastavena na 1. Jestlize cítac pracuje v módu vnejších vstupních impulsu, cítac snízí svuj obsah na první vnejší impuls po nastavení bitu D1 (D3). Bity D0 a D1 (D2 a D3) mohou být nastaveny soucasne. Napríklad instrukce OR TMR, #03H nastaví oba bity na hodnotu 1, zapíše pocátecní hodnoty do cítace T0 a cítac spustí. Po spuštení cítace T0 (T1) mení vstupní impulsy TCLK obsah preddelicky, tj. bitu D7-D2 registru PRE0 (PRE1). Jestlize obsah preddelicky dosáhne nuly, je ihned zapsána pocátecní hodnota (pouze do preddelicky) a cítání pokracuje. Jestlize napr. je preddelicka nastavena na delení tremi, její obsah je 3-2-1-3-2-1- atd. Pokazdé, kdyz preddelicka PRE0 (PRE1) dosáhne "nuly", príští TCLK impuls snízí obsah cítace T0 (T1) o 1. Kdyz dosáhne nulového stavu cítac T0 (T1), je generován pozadavek na prerušení IRQ4 (IRQ5). V závislosti na nastaveném módu cítac bud zastaví cítání a zachová svuj obsah 00H (jednorázové odecítání) nebo je znova automaticky zapsána pocátecní hodnota a cítání se opakuje (opakované odecítání). Mód cítacu se volí obsahem bitu D0 registru PRE0 a PRE1. Preddelicka vzdy pracuje v módu opakovaného odecítání. Cítac T0 (T1) muze být kdykoliv zastaven nastavením bitu D0 (D3) registru TMR na hodnotu 0 a znovu spušten nastavením tohoto bitu na hodnotu 1. Cítac pokracuje v odecítání z obsahu, který mel v okamziku, kdy byl zastaven. Stav cítace muze být cten kdykoliv, ctení nemá vliv na obsah cítace. Registr preddelicky je Write Only a nemuze být cten. Merí-li cítac cas, je interval i od spuštení do dosazení nulového stavu roven: i=txpxv kde t - interval TCLK (odvozen od SCLK ) p - pocátecní hodnota preddelicky (1D - 63D tj. 0000 01xxB - 1111 11xxB) v - pocátecní hodnota cítace (1D - 256D tj. 0000 0001B - 0000 0000B)
- 20 -
6.2. Výstupní módy cítacu (pouze u typu Z86E30/31/33/733) . Výstupy cítacu mohou být vyvedeny na pin P36 nastavením bitu D7 a D6 registru TMR.
Nastavení výstupního módu a spuštení cítace muze být provedeno soucasne. Napríklad instrukce OR TMR, #43H (tj. 0100 0011B) - pripojí výstup cítace T0 na pin P36 - nastaví úroven výstupu na pinu P36 na hodnotu 1 - zapíše pocátecní hodnoty z registru PRE0 a T0 do cítace - spustí cítac T0 Pokud je pin P36 nastaven jako výstup cítace, nemohou být do bitu D6 registru P3 zapisována zádná data. Hodnota bitu však muze být programem kdykoliv ctena.
6.3. Vstupní módy cítace T1. Nastavením bitu D1 registru PRE1 na hodnotu 0 a bitu D5, D4 registru TMR muze cítac T1 zpracovat vnejší signály ze vstupního pinu P31 v jednom ze ctyr módu:
Pro všechny módy popsané dále se predpokládá, ze programátor zajistil nastavení pocátecních hodnot cítace dríve popsaným zpusobem. Kazdá zmena úrovne z hodnoty 1 na hodnotu 0 (sestupná hrana) na vstupu P31 generuje pozadavek na prerušení IRQ2 ve všech vstupní módech i pri zastaveném cítaci. IRQ2 musí být proto maskován podle potreb konkrétní aplikace.
6.3.1. Pocítání vnejších impulsu. Nastavením bitu D5 a D4 registru TMR na hodnotu 00 pracuje cítac T1 jako prostý cítac událostí, kde událostí je sestupná hrana impulsu, privedeného na pin P31. Cas mezi dvemi po sobe následujícími událostmi musí být vetší nez 8TpC.
6.3.2. Hradlování vnitrního signálu SCLK vnejšími impulsy. Nastavením bitu D5 a D4 registru TMR na hodnotu 01 merí cítac T1 dobu mezi dvema po sobe následujícími událostmi. Cítac T1 pocítá, je-li úroven signálu TIN rovna 1. Pozadavek na prerušení IRQ2 je generován sestupnou hranou signálu TIN.
- 21 -
6.3.3. Monostabilní rezim jednorázový.
Nastavení bitu D5 a D4 registru TMR na hodnotu 10 má za následek, ze cítac T1 je odstartován sestupnou hranou vnejšího signálu na pinu P31 a pocítá impulsy SCLK. Další zmeny signálu P31 nemají na cítac T1 zádný vliv. Je-li nastaven jednorázový rezim odecítání (bit D0 registru PRE1 má hodnotu 0), cítac T1 se zastaví po dosazení nulového stavu a generuje pozadavek prerušení IRQ5. V opakovaném rezimu odecítání je cítac další sestupnou hranou signálu TIN opet spušten.
6.3.4. Monostabilní rezim opakovatelný. Nastavení bitu D5 a D4 registru TMR na hodnotu 11 má za následek, ze cítac T1 je odstartován z pocátecní hodnoty opakovane kazdou sestupnou hranou vnejšího signálu na pinu P31 a pocítá impulsy SCLK. Je-li nastaven jednorázový rezim odecítání (bit D0 registru PRE1 má hodnotu 0), cítac T1 se zastaví po dosazení nulového stavu a generuje pozadavek prerušení IRQ5. V opakovaném rezimu odecítání je cítac další sestupnou hranou signálu TIN opet spušten.
6.3.5. Zapojení cítacu T0 a T1 do kaskády. V nekterých aplikacích muze být potrebné merení casových intervalu delších nez je cas, meritelný jedním cítacem. V takovém prípade je mozné propojit výstup cítace T0 se vstupem cítace T1. Cítac T0 je treba konfigurovat pro opakované odecítání a pripojit jeho výstup na pin P36. Cítac T1 musí být konfigurován pro vnejší vstup z pinu P31. T1 muze pracovat jak pro jednorázové tak i pro opakované odecítání. Dosáhne-li cítac T1 nulového stavu, generuje pozadavek na prerušení IRQ5. Pozadavky IRQ2 a IRQ4 jsou také generovány, ale v této konfiguraci vetšinou nejsou dulezité a mely by být zakázány.
6.3.6. Nastavení cítacu po signálu RESET. Po signálu RESET jsou cítace zastaveny a obsah registru T0, T1 a preddelicek má náhodnou hodnotu. Mód cítacu je nastaven pro jednorázové odecítání a pro externí vstupní signál. Vstupní mód je nastaven pro cítání vnejších událostí, výstup P36 je od cítacu odpojen.
- 22 -
7. Prerušení Mikroradice Z8 mohou vyuzít 6 ruzných zdroju pro prerušení chodu procesoru. Az ctyri zdroje mohou být vnejší, zdrojem prerušení mohou být cítace a komparátory. Všechna prerušení mohou být maskována a mohou být nastaveny libovolné priority. Všech šest prerušení muze být globálne zakázáno instrukcí DI (Disable Interrupt) a globálne povoleno instrukcí EI (Enable Interrupt). Pro rízení prerušení slouzí tri rídící registry. - IRQ, registr pro zápis pozadavku na prerušení - IMR, registr pro maskování jednotlivých prerušení - IPR, registr pro nastavení priority prerušení
7.1. Zdroje prerušení. jméno IRQ0 IRQ1 IRQ2 IRQ3 IRQ4 IRQ5
vnitrní zdroj komparátor AN2 komparátor AN1 cítac T0 cítac T1
DEC
HEX
Název Popis
250
FA
IRQ
vnejší zdroj P32 P33 P31 P30 nebo P32 -
obsluzný vektor 0000, 0001 0002, 0003 0004, 0005 0006, 0007 0008, 0009 000A, 000B Registr IRQ
Interrupt ReQuest Register
Registr pozadavku prerušení
Je-li nekterý ze signálu prerušení aktivní, nastaví príslušný bit na hodnotu 1. Po signálu RESET je registr IRQ nastaven na hodnotu 00H, tedy všechny pozadavky na prerušení jsou vynulovány. Krome toho je registru IRQ nastaven pouze pro ctení. Zápis do registru je povolen instrukcí EI (Enable Interrupt). - 23 -
7.2. Priorita prerušení. Šest pozadavku na prerušení muze být registrem IPR serazeno podle priority. Jsou-li pak generovány ve stejný okamzik dva nebo více pozadavku na prerušení, je vzdy jako první obslouzen pozadavek s nejvyšší prioritou. Pro úcely prirazení priority je šest prerušení rozdeleno do trí skupin po dvou. Obsah registru IPR pak definuje poradí v kazdé skupine a poradí skupin. Registr IPR DEC
HEX
Název Popis
249
F9
IPR
Write Only
Interrupt Priority Register Registr priority prerušení
7.3. Maskování prerušení. Kazdý ze šesti pozadavku na prerušení je mozno jednotlive maskovat a tím zabránit jeho vykonání. Krome toho mohou být zakázána všechna prerušení globálne. Registr IMR DEC
HEX
Název Popis
251
FB
IMR
Interrupt Mask Register
Registr masky prerušení
Je-li bit D7 nastaven na 0, jsou všechna prerušení zakázána a bity D0 az D5 nemají zádný význam. Bit D7 muze být nastaven na hodnotu 0 instrukcí DI (Disable Interrupt) a na hodnotu 1 instrukcí EI (Enable Interrupt). Bit D7 je automaticky nastaven na hodnotu 0 pri aktivaci kteréhokoliv prerušení a zpetne nastaven na hodnotu 1 instrukcí IRET (Interrupt Return). Po signálu RESET je bit D7 nastaven na 0, všechna prerušení jsou zakázána. Pred zmenou obsahu registru IMR nebo IPR musí být bit D7 registru IMR nastaven na 0 instrukcí DI. Tato podmínka je automaticky splnena pouze po signálu RESET a po vstupu do rutiny pro obsluhu prerušení.
- 24 -
7.4. Programové prerušení. Prerušení muze být vyvoláno i programove pouzitím registru IRQ jako cílového operandu kterékoliv instrukce, která má prístup ke standardní sade registru. Kterékoliv z šesti prerušení se vyvolá nastavením príslušného bitu registru IRQ na hodnotu 1. Napríklad instrukce OR IRQ, #20H ( tj. 0010 0000B) nastaví bit D5. Jestlize prerušení je globálne povoleno a není nastaven zádný pozadavek na prerušení s vyšší prioritou, program pokracuje obsluznou rutinou, která je definována vektorem IRQ5.
7.5. Vektorové prerušení. Kazdý ze šesti pozadavku na prerušení má pridelenou adresu v pameti programu, kam musí být ulozena adresa (obsluzný vektor) pocátku rutiny príslušného prerušení. Adresy pro ulození vektoru jsou uvedeny v tabulce v clánku 7.1. Cinnost mikroradice po vyvolání prerušení je následující: - ulození obsahu cítace programu (PC) a registru príznaku (FLAGS) do zásobníku - naplnení cítace programu obsluzným vektorem - vykonání instrukcí obsluzné rutiny - ukoncení obsluzné rutiny instrukcí IRET - vyzvednutí registru príznaku a návratové adresy ze zásobníku - pokracování programu instrukcí následující po instrukci, pri níz došlo k prerušení Pozadavek na prerušení je testován v kazdém strojovém cyklu. Presmerování programu na prerušení trvá 24TpC. Další 2TpC zabere synchronizace vnitrních klopných obvodu. Pozadavek na prerušení je realizován az po úplném dokoncení instrukce, pri které byl pozadavek na prerušení zjišten. V nejhorším prípade k prerušení dojde za cas 24TpC + 2Tpc + pocet TpC nejdelší instrukce obsazené v programu. Kazdý realizovaný pozadavek na prerušení nastaví bit D7 registru IMR na hodnotu 0 a zakáze globálne všechna prerušení. Pokud je pozadováno, aby prerušení bylo mozno prerušit jiným prerušením s vyšší prioritou, musí obsluzná rutina: - ulozit obsah registru IMR do zásobníku - naplnit registr IMR novou maskou - povolit prerušení instrukcí EI (Enable Interrupt) - po ukoncení obsluhy vlastního prerušení zakázat prerušení instrukcí DI (Disable Interrupt) - vyzvednout ze zásobníku puvodní obsah registru IMR a obnovit obsah IMR - vykonat instrukci IRET (Interrupt Return)
7.6. Prerušení na dotaz. Pri obsluze prerušení na dotaz je prerušení globálne zakázáno a pouze v programem urceném okamziku je ucinen dotaz, zda príslušný pozadavek na prerušení existuje. Dotaz je obvykle uskutecnen testem obsahu registru IRQ. Pokud je príslušný bit registru nastaven a výsledek testu je kladný, program se vetví nebo volá obsluznou rutinu prerušení. Program pro obsluhu prerušení IRQ 2 na dotaz muze být napsán takto: EI ;inicializace registru pro obsluhu prerušení DI ;globální zákaz prerušení ...
TM IRQ,#04H JR Z, NEXT CALL SERVICE NEXT: . . . SERVICE: ... AND IRQ,#FBH RET
;test bitu D2 registru IRQ (04H je 0000 0100B) ;skok na náveští NEXT pri negativním výsledku testu ;volání podprogramu SERVICE pro prerušení ;pokracování programu ;obsluzný podprogram prerušení ;vynulování bitu D2 registru IRQ (FBH je 1111 1011B) ;návrat z podprogramu - 25 -
8. Úsporné rezimy. Krome standardního rezimu RUN mohou být všechny typy Z8 uvedeny do dvou úsporných rezimu, ve kterých má mikroradic snízenou spotrebu energie. Oba rezimy, HALT a STOP, jsou vhodné zejména pro aplikace napájené z baterií.
8.1. Rezim HALT. V rezimu HALT jsou odpojeny vnitrní hodinové impulsy od procesoru a je tak zastaven chod programu. Casování logiky prerušení a cítacu zustává v chodu. Mikroradic vstupuje do rezimu HALT instrukcí HALT. Standardne musí program obsahovat po sobe následující instrukce: NOP ; No Operation, pro vyprázdnení registru instrukce HALT ; vstup do rezimu HALT Spotreba mikroradice v rezimu HALT je podle typu obvodu cca 40 az 60% spotreby v rezimu RUN. Další snízení spotreby je mozno u typu, které mají registr SMR, delením kmitoctu SCLK šestnácti. Nastavení registru SMR je popsáno v clánku 8.2. Rezim HALT je mozno ukoncit kterýmkoliv prerušením, vnitrním nebo vnejším. Po vykonání obsluzné rutiny prerušení program pokracuje instrukcí, následující po HALT. Rezim HALT je také ukoncen signálem RESET nebo aktivací casovace Watch Dog (pokud v rezimu HALT bezí). Program poté startuje instrukcí na adrese 000CH.
8.2. Rezim STOP. V rezimu STOP je zastavena veškerá cinnost mikroradice. Mikroradic vstupuje do rezimu STOP pomocí instrukce STOP. Standardne musí program obsahovat po sobe následující instrukce: NOP ; No Operation, pro vyprázdnení registru instrukce STOP ; vstup do rezimu STOP Spotreba mikroradice v rezimu STOP je cca 1µA. Minimalizovat spotrebu je mozno: - snízením napájecího napetí na spodní hranici dovoleného rozsahu (standardne 4.5V) - nepouzíváním casovace WDT v rezimu STOP - minimalizací proudu z výstupních portu - zapojením všech nepouzitých vstupu (digitálních i analogových) na Ucc nebo GND Rezim STOP je mozno ukoncit vypnutím a zapnutím napájecího napetí, aktivací casovace WDT a signálem, urceným pro výstup ze STOP rezimu. Program vzdy startuje od adresy 000CH. Registry jsou nastaveny do výchozího stavu, viz. clánek 4.1. Výjimky v nastavení registru pri opuštení rezimu STOP urceným signálem jsou uvedeny v clánku 8.2.3.
8.2.1. Ukoncení rezimu STOP signálem Power On Reset. Vypnutím a zapnutím napájecího napetí je aktivován obvod POR (Power On Reset), který generuje signál RESET. Rídící registry jsou uvedeny do výchozího stavu. Tento zpusob je pouzitelný vzdy a u všech typu mikroradicu Z8.
8.2.2. Ukoncení rezimu STOP casovacem WDT. Typy Z86E30/31/33/733, které mají WDTMR registr, aktivují WDT v rezimu STOP nastavením bitu D3 na hodnotu 1 (viz. clánek 4.3.). Typy Z86E02/04/08, které registr WDTMR nemají, mohou aktivovat WDT v rezimu STOP naprogramováním Option Registru (clánek 9). Jestlize je WDT aktivován, rezim STOP je ukoncen dosazením nastaveného casu casovace WDT. Rídící registry jsou uvedeny do výchozího stavu. Chod casovace v rezimu STOP zvyšuje spotrebu mikroradice.
- 26 -
8.2.3. Ukoncení rezimu STOP signálem z urceného zdroje. Obvody Z86E02/04/08 mohou pro výstup z rezimu STOP vyuzít pouze jediný signál, privedený na pin P27, konfigurovaný jako vstup. Signál je aktivní na úrovni Low (0). Obvody typu Z86E30/31/33/733 mohou obsahem registru SMR konfigurovat více signálu, jejichz aktivní stav ukoncí rezim STOP. Registr SMR Write Only DEC
HEX
Název Popis
F0B
SMR Stop Mode Recovery
Registr konfigurace rezimu STOP
Všechny bity registru SMR jsou Write Only s vyjímkou bitu D7, který je Read Only. Jednotlivé bity registru SMR mají funkci: - D0 Hodnota 1 aktivuje delicku a kmitocet signálu TCLK pro T0 a T1 je odvozen ze signálu SCLK delením šestnácti. Funkce je pouzitelná pro rezim HALT, kde snizuje spotrebu. - D1 Hodnota 1 vyradí delicku dvema a kmitocet signálu SCLK/TCLK je roven kmitoctu krystalu. Funkce je spolu s bitem D7 registru PCON vyuzívána pro rezim snízeného vyzarování mikroradice. Kmitocet krystalu muze být nejvýše 4 MHz. - D2, D3, D4 Osm kombinací bitu urcuje zdroj signálu pro výstup z rezimu STOP. Vstupy P31, P32, P33 musí být nastaveny do digitálního rezimu, piny P20 az 27 musí být nastaveny jako vstupy. Kombinace 110 a 111 mají funkci podle obrázku.
- D5 Hodnota 1 zpusobí, ze výstup z rezimu STOP je zpozden 5ms po aktivaci signálu RESET. Toto zpozdení je zarazeno pri standardním nastavení pro lepší synchronizaci všech obvodu po signálu RESET. Je-li bit D5 nastaven na hodnotu 0, mikroradic vystoupí z rezimu STOP behem 5 TpC. - D6 Hodnota 0 definuje aktivní úroven zvoleného signálu pro výstup ze STOP rezimu na úroven Low (0). Hodnota 1 definuje aktivní úroven zvoleného signálu na úroven High (1). - D7 Bit je nastaven na hodnotu 0, jestlize mikroradic ukoncil rezim STOP signálem RESET. Bit je nastaven na hodnotu 1, pri výstupu z rezimu STOP signálem z urceného zdroje (teplý start). Bit je Read Only a je programem pouzitelný jako príznak výstupu z rezimu STOP. Po "teplém startu" jsou rídící registry nastaveny do výchozího stavu s vyjímkou výstupních portu P2 a P3, rídících registru P2M, P3M a P01M a registru WDTMR. Obsah vyjmenovaných registru zustává beze zmeny.
- 27 -
9. Registr volitelných funkcí. Na cipu kazdého mikroradice je 8-bitový Option Register, který není softwarove prístupný a jehoz obsah je mozno zmenit pri ukládání programu do pameti OTP. Obsahem registru je mozno trvale naprogramovat do obvodu funkce, které mikroradice Z8 nemohou softwarove zajistit vubec a nebo je nelze nastavit u nekterých typu, nebot nemají implementován nekterý z registru rozšírené sady. Temito funkcemi lze napr. zabránit ctení programu z pameti, nastavovat rezim snízeného vyzarování nebo volit druh oscilátoru. Moznosti volby funkcí jsou ruzné nejen u jednotlivých typu Z8 ale také u jednotlivých verzí jednoho typu obvodu. Detaily je nutno zjistit z technické specifikace. typ obvodu Z86E02...1903 Z86E02...1925 Z86E04...1866 Z86E04...1903 Z86E08...1866 Z86E08...1903 Z86E30... Z86E31... Z86E33... Z86733...
PROM Low Protect EMI
X X X X X X X X X X
X X X X X X -
Trvalý WDT
X X X X X X X X X X
Latch Test RC Xtal 32kHz Disable Disable oscilátor oscilátor oscilátor
X X X X X X X X X X
X X X X X X X X
X X X -
X X
X X X X
PROM Protect - Nastavení bitu blokuje PROM proti ctení i zápisu. Pouzívá se proti kopírování programu. Je nutno nastavit az po vlození programu do pameti. Low EMI - Po nastavení bitu má obvod vlastnosti popsané v clánku 5.5. Trvalý WDT - Casovac WDT je nastaven pro chod ve všech rezimech (RUN, HALT, STOP) a není mozno ho vyradit. Programove je nutno ho vcas nulovat. Pouzívá se pri aplikaci v prostredí s vysokou úrovní rušení. Autolatch Disable - Vyrazuje z cinnosti obvody Autolatch na vstupech (clánek 5.). Test Disable - Zabranuje vstupu obvodu do testovacího rezimu v dusledku rušivého prostredí. Spolu s nastavením trvalého chodu WDT zajištuje nejvyšší ochranu proti vnejšímu rušení . RC oscilátor - Modifikuje obvod oscilátoru pro rízení RC clenem. Pokud není bit nastaven, musí být oscilátor rízen krystalem. Xtal oscilátor - Modifikuje obvod oscilátoru pro rízení krystalem. Pokud není bit nastaven, je vhodné rídit oscilátor RC clenem. 32kHz oscilátor - Modifikuje obvod oscilátoru pro aplikace s kmitoctem 32kHz. Pokud není bit nastaven, je mozno oscilátor standardne pouzívat s kmitoctem 8 az 16 MHz podle typu obvodu. Jednotlivé bity Option Registru mohou být nastaveny pri ukládání programu do pameti OTP. Programátory, dodávané oficiálními distributory obvodu Zilog, tuto funkci standardne nabízejí. Pokud je nekterý z bitu Option Registru nastaven, není mozno jeho funkci zrušit. Nenastavené bity je mozno nastavit dodatecne, pokud nebyl nastaven bit PROM Protect. Obsah Option Registru není mozno císt u obvodu typu Z86E02/04/08, u obvodu typu Z86E30/31/33/733 je mozno obsah registru precíst standardním programátorem, pokud nebyl nastaven bit PROM Protect.
10. Programování mikroradicu Z8. Instrukcní soubor Z8 má celkem 47 základních instrukcí pro operace, které je mozno roztrídit do skupin podle funkce: - instrukce pro zmeny obsahu registru (CLR, LD, POP, PUSH) - aritmetické operace (ADC, ADD, CP, DA, DEC, DECW, INC, INCW, SBC, SUB) - logické instrukce (AND, COM, OR, XOR) - bitové manipulace (TCM, TM) - rotace a posuny obsahu registru (RL, RLC, RR, RRC, SRA, SWAP) - rízení chodu programu (CALL, DJNZ, IRET, JP, JR, RET) - rízení procesoru (CCF, DI, EI, HALT, NOP, RCF, SCF, SRP, STOP, WDH, WDT) - prístup do vnejší pameti (LDC, LDE, LDCI, LDEI) - obvody v této ucebnici nevyuzívají Po prelození do strojového kódu je generováno 235 platných kódu instrukcí, zbývající kódy, pokud jsou pouzity, vykoná procesor jako prázdnou instrukci. Další text predpokládá, ze pro psaní programu bude pouzit assembler Zilog ZMASM, jehoz základy jsou popsány v kapitole 11. Tvar instrukce v asembleru ZMASM je
asm kde
asm cc dst src
[cc,] [dst [,src] ]
mnemonická zkratka instrukce podmínka (obsah registru FLAGS) pro podmínené skoky cílový (Destination) operand zdrojový (Source) operand
10.1. Príznak výsledku operace. Vetšina instrukcí nastavuje nekteré z bitu registru FLAGS na definovanou hodnotu. Stav registru je vyuzíván predevším pro podmínené vetvení programu. Obsah registru je ukládán do zásobníku pri prerušení, instrukce IRET ze zásobníku obsah registru FLAGS obnovuje. Po signálu RESET není obsah registru FLAGS definován. Registr FLAGS DEC
HEX
Název
Popis
252
FC
FLAGS
Program Control FLAGS
Registr príznaku
C Carry Flag 1 výsledek aritmetické operace generuje prenos nebo výpujcku ze 7.bitu 0 výsledek aritmetické operace bez prenosu nebo výpujcky ze 7.bitu Po rotaci nebo posunu je príznak C roven bitu naposledy posouvaného z registru.
Z Zero Flag 1 výsledek aritmetické nebo logické operace je roven nule 0 výsledek aritmetické nebo logické operace je ruzný od nuly
S Sign Flag 1 výsledek aritmetické operace je záporný 0 výsledek aritmetické operace je kladný Príznak S obsahuje hodnotu nejvyššího bitu výsledku aritmetických a logických operací, posunu a rotací. Pokud registr zobrazuje císlo se znaménkem, obsahuje dvojkový doplnek císla. Kladné císlo má v nejvyšším bitu 0, záporné císlo 1 a príznak záporného císla je také 1.
V Overflow
1 výsledek aritmetické operace a posunu je mimo interval -128 az +127 0 výsledek aritmetické operace a posunu je uvnitr intervalu -128 az +127 Logické operace nastavují príznak V na hodnotu 0.
- 29 -
D Decimal Adjust
1 po odecítání, instrukce SUB, SBC 0 po scítání, instrukce ADD, ADC
H Half Carry
1 prenos nebo výpujcka z tretího bitu pri scítání a odecítání 0 bez prenosu nebo výpujcky z tretího bitu pri scítání a odecítání Príznaky D a H vyuzívá instrukce DA, nemají slouzit jako podmínka testu.
10.2. Notace pouzívaná pro popis instrukcí. Na míste operandu dst a src se podle adresního módu, který instrukce pripouští, dále pouzívá notace dst src rozsah príklad instrukce r r pracovní registr , 4-bit adresa R0 az R15 ADD R3, R11 R R registr, 8-bit adresa 00H az FFH ADD 34H, 12H RR registrový pár, prímý operand sudé 00H az FFH DECW 30H @r @r neprímý prac. registr, 8-bit adresa @R0 az @R15 ADD 4BH, @R3 @R @R neprímý registr, 8-bit adresa @00H az @FFH LD 34H, @45H @RR neprímý reg. pár, 8-bit adresa sudé 00H az FFH CALL @A4H Addr 16-bit prímá adres 0000H az FFFFH CALL 1A27H Arel relativní adresa +127 az -128 JR #9 #IM prímý operand #00H az #FFH LD 34H, #A5 (rx) index registr (R0) az (R15) LD R10, 24H Pro zápis císel se pouzívají znaky: H za císlem hexadecimální císlo % pred císlem hexadecimální císlo dekadické císlo B za císlem binární císlo
napr. 12H, FFH napr. %12, %FF napr. 12, 90 napr. 10B, 11011B
10.3. Ctyrbitová adresa na míste osmibitové adresy. Ve všech instrukcích, které pouzívají operandy R a @R je mozno pouzít také operandy r a @r. V takovém prípade je prictena konstanta EH k hornímu Nibble operandu. Príklad: Standardní podoba instrukce AND 3AH, 42H generuje kód 54 42 3A instrukce AND R5, 42H generuje kód 54 42 E5 Dusledkem tohoto kódování je, ze registry E0 az EF nejsou prístupné prímou osmibitovou adresou, ale jen jako pracovní registry R0 az R15 (po nastavení registru RP na pracovní skupinu E) nebo neprímým adresováním.
- 30 -
10.4. Instrukcní soubor Z8. V clánku jsou detailne popsány všechny instrukce, které mohou pouzít mikroradice z této ucebnice. U kazdé instrukce jsou uvedeny dovolené adresní módy, funkce instrukce a nastavení príznaku. Detailne není popisován zpusob tvorby cílového kódu, z príkladu u kazdé instrukce muze zájemce o proniknutí do strojového kódu zásady odpozorovat. Délka instrukce je udávána v poctu strojových cyklu (napr. 6.5). Mikroradice Z8 mohou vetšinu instrukcí ukládat do registru instrukce v dobe, kdy procesor vykonává ješte instrukci predchozí. Celková délka instrukce v TpC je dána souctem císla pred teckou (Execution cycles) a císla za teckou. To je skutecná délka instrukce, pokud ji procesor vykonává izolovane. Císlo za teckou (Pipeline cycles) udává, o kolik TpC se doba výkonu instrukce zkrátí, pokud je vykonána za jinou instrukcí. Pokud je pocet cyklu udán dvema hodnotami oddelenými lomítkem (napr. 12/10.0 u instrukce podmíneného skoku), pak císlo pred lomítkem je délka v prípade platné podmínky (program "skáce"), za lomítkem je délka v prípade neplatné podmínky. Pro nastavení registru FLAGS jsou pouzity znaky: 0 príznak vzdy nastaven na 0 1 príznak vzdy nastaven na 1 ∗ príznak nastaven na 0 nebo 1 podle výsledku operace − instrukce príznak nemení Χ instrukce mení príznak na nedefinovanou hodnotu
ADC
ADC dst, src
Add with Carry OPC
dst
src
príklad
OpCode
cyklu
12 13 14 15 16 17
r r R R R @R
r @r R @R #IM #IM
ADC R3, R11 ADC R15, @R10 ADC 34H, 12H ADC 4BH, @R3 ADC 6CH, #03H ADC @D4, #02H
12 3B 13 FA 14 12 34 15 E3 4B 16 6C 03 17 D4 02
6.5 6.5 10.5 10.5 10.5 10.5
dst ← dst + src + C Zdrojový operand spolu s príznakem prenosu C (Carry) je pricten k cílovému operandu. Soucet je ulozen do cílového operandu, obsah zdrojového operandu se nemení.
C ∗
Z ∗
S ∗
V ∗
D 0
H ∗
- 31 -
ADD
ADD dst, src
Add OPC 02 03 04 05 06 07
dst r r R R R @R
src r @r R @R #IM #IM
príklad ADD R3, R11 ADD R15, @R10 ADD 34H, 12H ADD 4BH, @R3 ADD 6CH, #03H ADD @D4H, #02H
OpCode 02 3B 03 FA 04 12 34 05 E3 4B 06 6C 03 07 D4 02
cyklu 6.5 6.5 10.5 10.5 10.5 10.5
dst ← dst + src Zdrojový operand je pricten k cílovému operandu. Soucet je ulozen do cílového operandu, obsah zdrojového operandu se nemení.
C ∗
Z ∗
AND
S ∗
V ∗
D 0
H ∗
AND dst, src
Logical AND OPC 52 53 54 55 56 57
dst r r R R R @R
src r @r R @R #IM #IM
príklad AND R1, R14 AND R4, @R13 AND 3AH, 42H AND R5, @45H AND 7AH, #F0H AND @R3, #05H
OpCode 52 1E 53 4D 54 42 3A 55 45 E5 56 7A F0 57 E3 05
cyklu 6.5 6.5 10.5 10.5 10.5 10.5
dst ← dst AND src Zdrojový operand je po bitech logicky secten s cílovým operandem. Výsledek je ulozen do cílového operandu, obsah zdrojového operandu se nemení.
C −
Z ∗
CALL
S ∗
V 0
D −
H −
CALL dst
Call Procedure OPC D6 D5
dst src Addr @RR
príklad CALL 3524H CALL A4H
OpCode D6 35 21 D4 A4
cyklu 20.0 20.0
SP ← SP -2, @SP ← PC, PC ← dst Ukazatel zásobníku (SP) je zmenšen o 2, obsah cítace programu (PC) (tj. adresa první instrukce následující po CALL) je ulozena do zásobníku, urcená cílová adresa je ulozena do PC. Cítac programu obsahuje první adresu procedury. Konec procedury má být ukoncen instrukcí RET (Return).
C −
Z −
S −
V −
D −
H −
- 32 -
CCF
CCF
Complement Carry Flag OPC EF
dst
src
príklad CCF
OpCode EF
cyklu 6.5
C ← NOT C Príznak C je zmenen na opacnou hodnotu.
C ∗
Z −
CLR
S −
V −
D −
H −
CLR dst
Clear OPC B0 B1
dst R @R
src
príklad CLR R6 CLR @A5H
OpCode B0 E6 B1 A5
cyklu 6.5 6.5
dst ← 0 Cílový operand je nulován, tedy jeho obsah je 00H.
C −
Z −
COM
S −
V −
D −
H −
COM dst
Complement OPC 60 61
dst R @R
src
príklad COM 08H COM @08H
OpCode 60 08 61 08
cyklu 6.5 6.5
dst ← NOT dst Jednotlivé bity cílového operandu jsou zmeneny na opacnou hodnotu.
C −
Z ∗
CP
S ∗
V 0
D −
H −
CP dst, src
Compare OPC A2 A3 A4 A5 A6 A7
dst r r R R R @R
src r @r R @R #IM #IM
príklad CP R3, R11 CP R15, @R10 CP 34H, 12H CP 4BH, @R3 CP 6CH, #2AH CP @D4, #5FH
OpCode cyklu A2 3B 6.5 A3 FA 6.5 A4 12 34 10.5 A5 E3 4B 10.5 A6 6C 2A 10.5 A7 D4 5F 10.5
dst - src Zdrojový operand je porovnán s cílovým operandem (odectením od cílového operandu) a jsou nastaveny príslušné príznaky. Obsah obou operandu se nemení.
C ∗
Z ∗
S ∗
V ∗
D −
H −
- 33 -
DA
DA dst
Decimal Adjust OPC 40 41
dst R @R
src
príklad DA 5FH DA @45H
OpCode 40 5F 41 45
cyklu 8.5 8.5
dst ← DA dst Cílový operand je nastaven jako dve ctyrbitová BCD císla. Operace se pouzívá jako korekce výsledku po binárním scítání ADD, ADC a odecítání SUB, SBC. Jestlize cílový operand není výsledkem platné operace scítání nebo odecítání, není výsledek DA definován.
C ∗
Z ∗
DEC
S ∗
V Χ
D −
H −
DEC dst
Decrement OPC 00 01
dst R @R
src
príklad DEC R10 DEC @B3H
OpCode 00 EA 01 B3
cyklu 6.5 6.5
dst ← dst - 1 Obsah cílového operandu je zmenšen o jednu.
C −
Z ∗
DECW
S ∗
V ∗
D −
H −
DECW dst
Decrement Word OPC 80 81
dst RR @R
src
príklad DECW 30H DECW @R0
OpCode 80 30 81 E0
cyklu 10.5 10.5
dst ← dst - 1 Obsah cílového operandu (musí to být sudá adresa) je zmenšen o jednu.
C −
Z ∗
DI
S ∗
V ∗
D −
H −
DI
Disable Interrupts OPC 8F
dst
src
príklad DI
OpCode 8F
cyklu 6.1
IMR(7) ← 0 Bit D7 registru IMR je nastaven na hodnotu 0. Všechna prerušení jsou zakázána, prestoze jsou "potenciálne" povolena, tj. príchod pozadavku na prerušení je zaznamenán, príslušný bit registru IRQ je nastaven, ale k prerušení nedojde.
C −
Z −
S −
V −
D −
H −
- 34 -
DJNZ
DJNZ r, dst Decrement and Jump if Non-Zero OPC 0A
dst Arel
src
...
rA
OpCode 0A 09
cyklu 12/10.5
rA Arel
12/10.5
FA D3
12/10.5
...
Arel
DJNZ r, Arel
...
FA
príklad DJNZ R0, #9 ...
Arel
DJNZ R15, #-45
r ← r - 1, If r <>0 then PC ← PC + Arel Cílový operand (pracovní registr R0 az R15) je pouzit jako cítac a jeho obsah je zmenšen o jednu. Jestlize obsah cílového operandu po zmenšení není roven nule, relativní adresa je prictena k cítaci programu (PC) a program pokracuje instrukcí na takto vytvorené adrese. Relativní adresa muze mít hodnotu od +127 do -128. Cítac programu v okamziku pricítání obsahuje adresu instrukce následující za DJNZ. Kdyz obsah cílového operandu dosáhne nuly, program pokracuje instrukcí následující za instrukcí DJNZ.
C −
Z −
S −
V −
D −
H −
Instrukce DJNZ je obvykle pouzívána pro vytvorení programové smycky. V následujícím príklade je pomocí smycky vytvoren interval o délce 255 stroj. cyklu LOOP: LD R1, #FF DJNZ R1, LOOP
EI
EI
Enable Interrupts OPC 9F
dst
src
príklad EI
OpCode 9F
cyklu 6.1
IMR(7) ← 1 Bit D7 registru IMR je nastaven na hodnotu 1. Povoluje všechna prerušení, která jsou "potenciálne" povolena.
C −
Z −
HALT
S −
V −
D −
H −
HALT
Halt OPC 7F
dst
src
príklad HALT
OpCode 7F
cyklu 7.0
Instrukce HALT odpojuje hodinové impulsy od procesoru, oscilátor, cítace a zdroje vnitrních prerušení IRQ1, IRQ2 a IRQ3 zustávají v cinnosti. Rezim HALT muze být ukoncen signálem prerušení, vnejším nebo vnitrním.
C
Z
S
V
D
H
−
−
−
−
−
−
Pred vstupem do rezimu HALT musí být vyprázdnen registr instrukce, aby se zabránilo zastavení procesoru v "polovine " instrukce. Bezprostredne pred instrukcí HALT musí být vykonána instrukce NOP. - 35 -
INC
INC dst
Increment OPC 0E ... rE ... FE
dst
20 21
R @R
src
príklad INC R0 ... INC r ... INC R15
OpCode 0E
cyklu 6.5
rE
6.5
FE
6.5
INC R10 INC @B3H
20 EA 21 B3
6.5 6.5
dst ← dst + 1 Obsah cílového operandu je zvetšen o jednu.
C −
Z ∗
INCW
S ∗
V ∗
D −
H −
INCW dst
Increment Word OPC A0 A1
dst RR @R
src
príklad INCW 30H INCW @R0
OpCode A0 30 A1 E0
cyklu 10.5 10.5
dst ← dst - 1 Obsah cílového operandu (musí to být sudá adresa) je zvetšen o jednu.
C −
Z ∗
IRET
S ∗
V ∗
D −
H −
IRET
Interrupt RETURN OPC BF
dst
src
príklad IRET
OpCode BF
cyklu 16.0
FLAGS ← @SP, SP← SP+1, PC ← @SP, SP← SP+2, IMR(7) ← 1 Instrukcí má být ukoncena obsluzná rutina prerušení. Instrukce obnovuje obsah registru príznaku a obsah cítace programu. Povoluje také všechna prerušení, která jsou "potenciálne" povolena.
C ∗
Z ∗
S ∗
V ∗
D ∗
H ∗
- 36 -
JP
JP cc, dst
Jump OPC ccD
dst Addr
src
...
7D 8D
príklad JP cc, 1520H
OpCode ccD 15 20
cyklu 12/10.0
7D 15 20 8D 15 20
12/10.0 12.0
...
Addr Addr
JP C, 1520H JP 1520H
...
...
ED
Addr
JP NZ, 1520H
ED 15 20
12/10.0
30
@RR
JP @RR2
30 E2
8.0
If cc = TRUE then PC ← dst Jestlize je splnena podmínka cc, program prechází na cílovou adresu. Není-li podmínka cc splnena, program pokracuje instrukcí následující za JP.
C −
Z −
JR
S −
V −
D −
H −
JR cc, dst
Jump Relative OPC ccB
dst Arel
src
...
7B 8B
OpCode ccB 09
cyklu 12/10.0
7B 09 8B 09
12/10.0 12.0
EB D3
12/10.0
...
Arel Arel
JR C, #9 JR #9
...
EB
príklad JR cc, #9
...
Arel
JR NZ, #-45
If cc = TRUE then PC ← PC + Arel Jestlize je splnena podmínka cc, relativní adresa je prictena k cítaci programu a program prechází na cílovou adresu. Není-li podmínka cc splnena, program pokracuje instrukcí následující za JR. Relativní adresa musí být v rozsahu +127 az -128. Cítac programu v okamziku pricítání obsahuje adresu instrukce následující za JR.
C −
Z −
S −
kód
cc
definice
0 1 2 3 4 5 6 7 8
F LT LE ULE OV MI Z / EQ C / ULT
False Less Then Less Then or Equal Unsigned Less Than or Equal Overflow Minus Zero / Equal Carry / Unsigned Less Then True
V −
D −
H − príklad instrukce
vzdy nepravdivý S XOR V = 1 Z OR (S XOR V)) =1 C OR Z = 1 V=1 S=1 Z=1 C=1 vzdy pravdivý
JP LT, dst JP LE,dst JP ULE, dst JP OV, dst JP MI, dst JP Z, dst / JP EQ, dst JP C, dst / JP ULT, dst JP dst
9 A B C D E F
GE Greater Than or Equal GT Greater Than UGT Unsigned Greater Then NOV No Overflow PL Plus NZ / NE Non-Zero / Not Equal NC/UGENo Carry
S XOR V = 0 Z OR (S XOR V) =0 (C=0) AND (Z = 0) V=0 S=0 Z=0 C=0
JP GE, dst JP GT, dst JP UGT, dst JP NOV, dst JP PL, dst JP NZ, dst / JP NE, dst JP NC, dst / JP UGE, dst
- 37 -
LD
LD dst, src
Load OPC
dst
src
príklad
r8
r
R
LD r, R
...
cyklu
r8 R
6.5
...
F8 r9
OpCode
R*
R
LD R15, 34H
r
LD R, r
...
F8 34
6.5 r9 R
6.5
...
E9
R*
rC
r
#IM
...
LD 34H, R14
E9 34
6.5
LD r, #IM
rC #IM
6.5
...
EC
#IM
LD R14, #34H
EC 34
6.5
E3 F3
r @r
@r r
LD R13, @R12 LD @R13, R12
E3 DC F3 DC
6.5 6.5
E4
R
R
LD 34H, 45H
E4 45 34
10.5
E5 F5
R @R
@R R
LD 34H, @45H LD @34H, 45H
E5 45 34 F5 45 34
10.5 10.5
E6 E7
R @R
#IM #IM
LD 34H, #A4H LD @R14, #FCH
E6 34 A4 E7 EE FC 10.5
C7 D7
r (rx)
(rx) r
LD R10, 24H(R0) LD F0H(R0), R10
C7 A0 24 D7 A0 F0
10.5
10.5 10.5
dst ← src Obsah zdrojového operandu je ulozen do cílového operandu, obsah zdrojového operandu se nemení. Pri indexovaném adresování (kód C7 a D7) je konecná adresa vytvorena prictením obsahu index registru ke zdrojovému (C7) nebo cílovému (D7) operandu. Príklad: LD R10, 24H(R0) Jestlize pracovní registr R0 obsahuje 08H a registr 2CH (tj. 24H + 08H) obsahuje 4FH, výsledkem instrukce je ulození hodnoty 4FH do pracovního registru R10. Obsah registru R0 a 2CH se nezmení.
C
Z
S
V
D
H
−
−
−
−
−
−
Poznámka: *R v tomto formátu instrukce je mozno pouzít pouze plnou 8-bitovou adresu
- 38 -
NOP
NOP
No Operation OPC FF
dst
C −
src
príklad NOP
Z −
S −
OR
OpCode FF
V −
D −
príklad OR R3, R11 OR R15, @R10 OR 34H, 12H OR 4BH, @R3 OR 6CH, #03H OR @D4, #02H
OpCode 42 3B 43 FA 44 12 34 45 E3 4B 46 6C 03 47 D4 02
cyklu 6.0
H −
OR dst, src
Logical OR OPC 42 43 44 45 46 47
dst r r R R R @R
src r @r R @R #IM #IM
cyklu 6.5 6.5 10.5 10.5 10.5 10.5
dst ← dst OR src Zdrojový operand je logicky secten (OR) s cílovým operandem. Výsledek je ulozen do cílového operandu, obsah zdrojového operandu se nemení.
C −
Z ∗
POP
S ∗
V 0
D −
H −
POP dst
Pop OPC 50 51
dst R @R
src
príklad POP 08H POP @R6
OpCode 50 08 51 E6
cyklu 10.5 10.5
dst ← @SP, SP← SP+1 Obsah adresy na vrcholu zásobníku je ulozen do cílového operandu. Ukazatel zásobníku je zvýšen o 1.
C −
PUSH
Z −
S −
V − PUSH src
D −
H −
Push OPC 70 71
dst
src R @R
príklad PUSH 08H PUSH @R6
OpCode 70 08 71 E6
cyklu 10.1 12.1
SP← SP-1,@SP ← src Ukazatel zásobníku je snízen o 1. Obsah zdrojového operandu je ulozen na adresu na vrcholu zásobníku.
C −
Z −
S −
V −
D −
H −
- 39 -
RCF
RCF
Reset Carry Flag OPC CF
dst
src
príklad RCF
OpCode CF
cyklu 6.5
C← 0 Príznak C (Carry) je nastaven na 0.
C 0
Z −
RET
S −
V −
D −
H −
RET
Return OPC AF
dst
src
príklad RET
OpCode AF
cyklu 14.0
PC ← @SP, SP← SP+2 Instrukcí má být ukoncena procedura volaná instrukcí CALL. Instrukce obnovuje obsah cítace programu.
C −
Z −
RL
S −
V −
D −
H −
RL dst
Rotate Left OPC 90 91
dst R @R
src
príklad RL C6H RL @C6H
OpCode 90 C6 91 C6
cyklu 6.5 6.5
C ← dst(7), dst(0)← dst(7), dst(1) ← dst(0), . . . , dst(7) ← dst(6) Obsah cílového operandu je rotován o jeden bit vlevo. Hodnota bitu D7 je presunuta do bitu D0 a také do príznaku C.
C ∗
Z ∗
S ∗
V ∗
D −
H −
- 40 -
RLC
RLC dst Rotate Left Trough Carry OPC 10 11
dst R @R
src
príklad RLC C6H RLC @R6
OpCode 10 C6 11 E6
cyklu 6.5 6.5
C ← dst(7), dst(0)← C, dst(1) ← dst(0), . . . , dst(7) ← dst(6) Obsah cílového operandu spolu s príznakem C je rotován o jeden bit vlevo. Hodnota bitu D7 nahradí príznak C a príznak C je presunut do bitu D0 .
C ∗
Z ∗
RR
S ∗
V ∗
D −
H −
RR dst
Rotate Right OPC E0 E1
dst R @R
src
príklad RR R6 RR @C6H
OpCode E0 E6 E1 C6
cyklu 6.5 6.5
C ← dst(0), dst(0)← dst(1), dst(1) ← dst(2), . . . , dst(7) ← dst(0) Obsah cílového operandu je rotován o jeden bit vpravo. Hodnota bitu D0 je presunuta do bitu D7 a také do príznaku C.
C ∗
Z ∗
S ∗
V ∗
D −
H −
RRC
RRC dst Rotate Right Through Carry OPC
dst
src
príklad
OpCode
cyklu
C0 C1
R @R
RRC C6H RRC @2CH
C0 C6 C1 2C
6.5 6.5
C ← dst(0), dst(0)← dst(1), dst(1) ← dst(2), . . . , dst(7) ← C Obsah cílového operandu spolu s príznakem C je rotován o jeden bit vpravo. Hodnota bitu D0 nahradí príznak C a príznak C je presunut do bitu D7 .
C ∗
Z ∗
S ∗
V ∗
D −
H −
- 41 -
SBC
SBC dst, src
Subtract with Carry OPC
dst
src
príklad
OpCode
cyklu
32 33 34 35 36 37
r r R R R @R
r @r R @R #IM #IM
SBC R3, R11 SBC R15, @R10 SBC 34H, 12H SBC 4BH, @R3 SBC 6CH, #03H SBC @D4, #02H
32 3B 33 FA 34 12 34 35 E3 4B 36 6C 03 37 D4 02
6.5 6.5 10.5 10.5 10.5 10.5
dst ← dst - src - C Zdrojový operand spolu s príznakem prenosu C (Carry) je odecten od cílového operandu. Výsledek je ulozen do cílového operandu, obsah zdrojového operandu se nemení.
C ∗
Z ∗
SCF
S ∗
V ∗
D 1
H ∗
SCF
Set Carry Flag OPC DF
dst
src
príklad SCF
OpCode DF
cyklu 6.5
C← 1 Príznak C je nastaven na 1.
C 1
Z −
SRA
S −
V −
D −
H −
SRA dst
Shift Right Arithmetic OPC D0 D1
dst R @R
src
príklad SRA R6 SRA @C6H
OpCode D0 E6 D1 C6
cyklu 6.5 6.5
C ← dst(0), dst(0)← dst(1), dst(1) ← dst(2), . . . , dst(6) ← dst(7), dst(7) ← dst(7) Obsah cílového operandu je posunut o jeden bit vpravo. Hodnota bitu D0 nahradí príznak C. Bit D7 (znaménko) se nezmení a jeho hodnota je presunuta do bitu D6.
C ∗
Z ∗
S ∗
V 0
D −
H −
- 42 -
SRP
SRP src
Set Register Pointer OPC 31
dst
src #IM
príklad SRP F0H
OpCode 31 F0
cyklu 6.1
RP ← src Hodnota specifikovaná prímým operandem je ulozena do registru RP (Register Pointer, rídící registr s adresou FDH). Bity D7-D4 registru RP adresují pracovní skupinu šestnácti registru ve standardní sade, bity D3-D0 urcují, která banka rozšírené sady nahradí banku 0. Není-li urcená banka implementována, je adresována banka 0. Dusledky konkrétního obsahu registru RP jsou vysvetleny v clánku 2.5.
C −
Z −
STOP
S −
V −
D −
H −
STOP
Stop OPC 6F
dst
src
príklad STOP
OpCode 6F
cyklu 6.0
Instrukce STOP odpojuje hodinové impulsy od všech obvodu mikroradice a snizuje spotrebu na minimum. Rezim STOP muze být ukoncen signálem RESET nebo signálem pro ukoncení rezimu STOP.
C −
Z −
S −
V −
D −
H −
Pred vstupem do rezimu STOP musí být vyprázdnen registr instrukce, aby se zabránilo zastavení procesoru v "polovine " instrukce. Bezprostredne pred instrukcí STOP musí být vykonána instrukce NOP.
SUB
SUB dst, src
Subtract OPC 22 23 24 25 26 27
dst r r R R R @R
src r @r R @R #IM #IM
príklad SUB R3, R11 SUB R15, @R10 SUB 34H, 12H SUB 4BH, @R3 SUB 6CH, #03H SUB @D4H, #02H
OpCode 22 3B 23 FA 24 12 34 25 E3 4B 26 6C 03 27 D4 02
cyklu 6.5 6.5 10.5 10.5 10.5 10.5
dst ← dst - src Zdrojový operand je odecten od cílového operandu. Výsledek je ulozen do cílového operandu, obsah zdrojového operandu se nemení.
C ∗
Z ∗
S ∗
V ∗
D 1
H ∗
- 43 -
SWAP
SWAP dst
Swap Nibbles OPC F0 F1
dst R @R
src
príklad SWAP B3H SWAP @R5
OpCode F0 B3 F1 E5
cyklu 6.5 6.5
dst (7- 4) ← → dst (3- 0) Obsah horních ctyr bitu a dolních ctyr bitu cílového operandu je vzájemne zamenen.
C Χ
Z ∗
S ∗
V Χ
D −
H −
TCM
TCM dst, src Test Complement Under Mask OPC 62 63 64 65 66 67
dst r r R R R @R
src r @r R @R #IM #IM
príklad TCM R3, R11 TCM R15, @R10 TCM D4H, R0 TCM DFH, @07H TCM R13, #02H TCM @5DH, #10H
OpCode 62 3B 63 FA 64 E0 D4 65 07 DF 66 ED 02 67 5D 10
cyklu 6.5 6.5 10.5 10.5 10.5 10.5
(NOT dst) AND src Instrukce testuje, zda specifikované bity cílového operandu jsou rovny 1. Testované bity jsou specifikovány nastavením na hodnotu 1 odpovídajících bitu zdrojového operandu (masky). Je-li príznak Z nastaven na 1, jsou testované bity rovny 1. Obsah obou operandu se nemení.
C −
TM
Z ∗
S ∗ TM dst, src
V 0
D −
H −
Test Under Mask OPC 72 73 74 75 76 77
dst r r R R R @R
src r @r R @R #IM #IM
príklad TM R3, R11 TM R15, @R10 TM D4H, R0 TM DFH, @07H TM R13, #02H TM @5DH, #10H
OpCode cyklu 72 3B 6.5 73 FA 6.5 74 E0 D4 10.5 75 07 DF 10.5 76 ED 02 10.5 77 5D 10 10.5
dst AND src Instrukce testuje, zda specifikované bity cílového operandu jsou rovny 0. Testované bity jsou specifikovány nastavením na hodnotu 1 odpovídajících bitu zdrojového operandu (masky). Je-li príznak Z nastaven na 1, jsou testované bity rovny 0. Obsah obou operandu se nemení.
C −
Z ∗
S ∗
V 0
D −
H −
- 44 -
WDH
WDH Watch-Dog Timer Enable During HALT Mode OPC 4F
dst
src
príklad WDH
OpCode 4F
cyklu 6.0
Instrukce WDH povoluje chod casovace Watch-Dog v rezimu HALT, jinak je casovac po vstupu do rezimu HALT zastaven. Instrukce nenuluje casovac. Casovac se spouští a nuluje instrukcí WDT, instrukce WDH bez WDT nemá zádný úcinek.
C −
Z Χ
S Χ
V Χ
D −
H −
Po instrukci WDH by nemela následovat instrukce, pro kterou je dulezitý obsah registru FLAGS. Instrukce je platná pouze pro obvody typu Z86E02 /04 /08.
WDT
WDT
Watch-Dog Timer OPC 5F
dst
src
príklad WDT
OpCode 5F
cyklu 6.0
První instrukce WDT spouští chod casovace Watch-Dog, kazdá další instrukce obnovuje výchozí stav casovace a zabranuje vyvolání signálu RESET.
C −
Z Χ
S Χ
V Χ
D −
H −
Po instrukci WDT by nemela následovat instrukce, pro kterou je dulezitý obsah registru FLAGS.
XOR Logical Exclusive OR
XOR dst, src
OPC B2 B3 B4 B5 B6 B7
dst r r R R R @R
src r @r R @R #IM #IM
príklad XOR R3, R11 XOR R15, @R10 XOR 34H, 12H XOR 4BH, @R3 XOR 6CH, #03H XOR @D4, #02H
OpCode B2 3B B3 FA B4 12 34 B5 E3 4B B6 6C 03 47 D4 02
cyklu 6.5 6.5 10.5 10.5 10.5 10.5
dst ← dst XOR src Se zdrojovým operandem a cílovým operandem je vykonána logická funkce XOR. Výsledek je ulozen do cílového operandu, obsah zdrojového operandu se nemení.
C −
Z ∗
S ∗
V 0
D −
- 45 -
H −
11. ZMASM - Zilog Macro Cross Assembler. ZMASM je základní programový nástroj vývojového prostredí pro mikroradice Zilog a spolu s ostatními nástroji slouzí pro zvýšení produktivity vývojových prací. ZMASM umoznuje uzivateli tvorit programy pro mikroradice v prostredí assembleru vcetne ladení programu a programování OTP verzí mikroradicu. ZMASM umoznuje preklad zdrojových textu do príslušných strojových kódu. Soucasne vytvárí i soubory, které umoznují ladení programu s vyuzitím zdrojového textu vcetne všech poznámek a tabulek symbolu. Asembler umoznuje samostatný preklad a ladení jednoduchých zdrojových souboru a jejich sestavu v jeden výsledný soubor. Assembler podporuje makra, strukturovaný a podmínený preklad. ZMASM je samostatne dostupný ve verzi pro Windows 3.11. nebo jako soucást ZDS (Zilog Developer Studio) pro Windows 95. Další text predpokládá pouzití ZMASM jako soucást ZDS, samostatné pouzití ZMASM je popsáno v pomocných souborech po instalaci ZMASM pod Windows 3.11.
11.1. Instalace ZDS vcetne ZMASM. Instalacní disketa obsahuje textový soubor readme.txt, s popisem autorských práv a pokyny pro instalaci. a) Vlozte první instalacní disketu ZDS 1.00 do mechaniky A nebo B. ze Správce souboru spustte soubor a:\ setup (nebo b:\ setup) b) Postupujte podle instrukcí instalacního programu. V okne Select Components oznacte ¤ Zilog Developer Studio (ZDS) 1.00 Standardní instalace umístí program do adresáre C:\Programy\Zilog Developer Studio\ ZDS 1.00 Dosavadním uzivatelum assembleru ZASM se doporucuje seznámení se souborem pod ikonou Importing Compatibility, který obsahuje rozdíly mezi ZASM a novým assemblerem ZMASM.
- 46 -
11.2. Struktura ZMASM.
Textový editor není prímou soucástí ZMASM, je soucástí ZDS. Zdrojový text ∗.s. Vstupní soubor pro ZMASM. Musí splnovat syntaktická pravidla uvedená v clánku 11.3. (Zdrojové texty v jazyku C pouzívají príponu .asm). Relativní binární soubor ∗.o Výstupní soubor assembleru. Obsahuje strojový kód, pocátecní adresa souboru je vzdy 00H. Soubor muze být cástí (modulem) úplného programu, muze být ulozen v knihovne a pouzit pro sestavu více úplných programu. Assembler vytvorí soubor ∗.o , pokud v konfiguraci je nastaveno Settings / Assembler / Object / Generate debug information a není nastavenoSettings / Assembler / Object / Generate an absolute object file. Soubor ∗.lst obsahuje informace o procesu prekladu, zejména chybová hlášení, kopii kazdého prekládaného rádku a strojový kód prekládaných instrukcí. Pokud assembler vytvárí relativní soubor, obsahuje ∗.lst i tabulku symbolu. Assembler vytvorí soubor ∗.lst, pokud je nastavena konfigurace Settings / Assembler / Listing / Generate a listing file . Spustitelný soubor ∗.ld obsahuje všechny informace, potrebné pro spuštení kódu na emulátoru a ladení s vyuzitím zdrojového souboru. Linker vytvorí soubor ∗.ld, pokud v konfiguraci je nastaveno Settings / Assembler / Object / Generate debug information Settings / Linker / Output / Generate debug information a není nastavenoSettings / Assembler / Object / Generate an absolute object file. Settings / Linker / Output / Generate an absolute object file Podmínkou pro vytvorení spustitelného souboru ∗.ld navíc je, aby zdrojový text jako první príkaz pro assembler obsahoval príkaz GLOBALS ON, který zprístupní symboly pro assembler. Sestavený binární soubor ∗ .hex Obsahuje strojový kód, který je spustitelný na mikroradici Z8. Muze být vytvoren sestavením více relativních binárních souboru. ZMASM vytvorí soubor ∗.hex pokud v konfigurace je nastaveno: Settings / Assembler / Object / Generate an absolute object file Settings / Linker / Output / Generate an absolute object file Soubor ∗.map obsahuje informace o procesu spojování relativních souboru, seznam souboru a jejich umístení v sestaveném souboru. Linker vytvorí soubor ∗.map, pokud v konfigurace je nastaveno: Settings / Linker / Output / Generate a link map file
Soubor ∗.sym obsahuje tabulku symbolu, pouzitých ve zdrojovém textu. Soubor je generován, pokud je generován absolutní výstupní soubor ∗.hex. Pokud assembler generuje relativní soubor, je tabulka symbolu obsazena v tomto relativním souboru, samostatný soubor ∗.sym není vytvoren. - 47-
11.3. Formát zdrojového textu pro ZMASM. Zdrojový text musí splnovat syntaktická pravidla. Pri jejich porušení asembler není schopen generovat výstupní soubory. Vzhledem k tomu, ze cca do konce roku 1997 byl ve vývojovém prostredí Zilog pouzíván asembler ZASM, je nutno upozornit na rozdíly v syntaktických pravidlech obou systému. ZMASM je velmi vysoce kompatibilní se ZASM, na úrovni krátkých a relativne jednoduchých programu pro mikroradice Z8 je kompatibilita prakticky 100%. Dosavadním uzivatelum assembleru ZASM se doporucuje seznámení se souborem pod ikonou Importing Compatibility, který obsahuje rozdíly mezi ZASM a novým assemblerem ZMASM. Další text není kompletním popisem assembleru, zkrácený popis by mel umoznit efektivní programování mikroradicu typu Z86E02/04/08 a Z86E30/31/33. Úplný popis ZMASM je obsazen v pomocných souborech dostupných po instalaci ZDS nebo ZMASM.
11.3.1. Príkazový rádek Základním elementem zdrojového textu je príkazový rádek, pro který platí: a) muze obsahovat nejvýše 512 ASCII znaku plus znak (znaky) pro ukoncení rádku b) rádek je ukoncen znakem LF (Line Feed, ASCII kód 10) nebo dvojicí znaku CR LF (Carriage Return Line Feed, ASCII kód 13 10) c) rádek je rozdelen do ctyr polí d) kazdé z polí muze mít libovolnou délku pri dodrzení pravidla a) a muze zacínat na libovolné pozici rádku s vyjímkou pravidla e) e) první pozice rádku je vyhrazena pro zacátek náveští (Label), jen náveští muze (ale nemusí) zacínat na první pozici rádku f) jednotlivá pole musí být od sebe navzájem oddelena, k oddelení musí být pouzit znak mezera (Space, ASCII kód 32) a/nebo znak Tab (ASCII kód 9) g) jednotlivá pole mají stanovené poradí - pole náveští (label) - pole instrukce - pole operandu - pole komentáre Platný príkazový rádek má formát [ label [ : ] ] instrukce [ operand ] [ ; komentár ] h) v nekterých polích se rozlišují velké (upper case) a malé (lower case) znaky pole rozlišení príklad náveští / symboly ano "Start " a "start" jsou dve ruzná náveští instrukce a direktivy ne "LOAD" a "load", "Macro" a "macro" je totéz název procedury (makro) ano "Fetch" a "fetch" jsou dve ruzná makra operandy ano "Abs" a "ABS" jsou dva ruzné operandy
11.3.2. Pole náveští (label). Pole náveští je nepovinné. Pokud je pouzito, obsahuje náveští pro identifikaci rádku, na který se pak muze odkazovat jiný príkazový rádek. Pro náveští platí pravidla: a) v príkazovém rádku muze být pouze jedno náveští b) jestlize náveští nezacíná na první pozici rádku, musí být ukonceno znakem " : " (dvojtecka) doporucuje se pouzívat dvojtecku i v prípade, ze náveští zacíná na první pozici rádku
c) mezi náveštím a dvojteckou muze být znak mezera d) jako náveští muze být pouzit kterýkoliv symbol (cl. 11.3.7. ) e) náveští je místní (local label), jestlize jeho první znak je "$" nebo poslední znak je "?" - 48 -
11.3.3. Pole instrukce. Pole instrukce obsahuje mnemonickou zkratku instrukce nebo direktivu assembleru. Pokud není na rádku definováno náveští, muze pole instrukce zacínat na kterékoliv pozici rádku s výjimkou první pozice.
11.3.4. Pole operandu. Pole operandu obsahuje jeden nebo více operandu , jestlize príslušná instrukce nebo direktiva operandy vyzaduje. Pokud pole obsahuje více nez jeden operand, musí být operandy od sebe navzájem oddeleny znakem " , " (cárka). Na míste operandu muze být pouzit symbol (cl. 11.3.7. ).
11.3.5. Pole komentáre. Pole komentáre muze obsahovat jakýkoliv retezec ASCII znaku (krome znaku pro konec rádku) jako poznámku (komentár). Pro komentár platí pravidla: a) zacíná znakem " ; " (stredník) b) muze zacít na kterékoliv pozici rádku vcetne první pozice c) pokud zacíná na první pozici rádku, muze zacínat znakem " ∗ " d) rádky obsahující pouze mezery a znaky konec rádku jsou povazovány za komentár
11.3.6. Konstanty. Assembler ZMASM definuje ctyri typy konstant - Aritmetické konstanty celocíselné (Integer) Základním typem celocíselné konstanty je dekadické císlo bez jakékoliv predpony nebo prípony. Konstanty je mozno psát i jako císla binární, osmicková a hexadecimální, které musí být rozlišeny príponou (suffix) nebo predponou (prefix). prefix suffix typ konstanty príklady b, B binární 00B, 01b, 11110000B o, O osmicková 10O, 010000o, 226O, 1232o dekadická 1000, 25, 77 % h, H hexadecimální 78h, 0FH, 0abh, %a8, %1E Hexadecimální konstanty obsahují císlice 0 az 9 a písmena A az F (velká nebo malá). Aby nedošlo k zámene se symboly, musí hexadecimální konstanta zacínat znakem " % " nebo císlicí 0 az 9. - Znakové konstanty (Charakter) Znaková konstanta predstavuje jeden ASCII znak uzavrený do jednoduchých uvozovek (ASCII kód 39). Znaková konstanta má hodnotu dekadického kódu ASCII znaku. Príklady : 'a' znaková konstanta, dekadický kód 97 'C' znaková konstanta, dekadický kód 67 - Retezcové konstanty (String) Retezcová konstanta je jeden nebo více ASCII znaku uzavrených do dvojitých uvozovek (ASCII kód 34). Retezcová konstanta je uzívána pro jména souboru u direktiv, které je vyzadují. Príklad : "version" retezec sedmi znaku
- Symbolické konstanty Symbolická konstanta je pojmenovaná konstanta s hodnotou prirazenou direktivou EQU nebo SET. Príklad : PRE1_REACT equ %cb
- 49 -
11.3.7. Symboly. Symbol je znak nebo kombinace znaku, pouzitý na míste náveští, operandu instrukce nebo direktivy. Symbol musí splnovat pravidla: a) symbol muze obsahovat císlice, malá a velká písmena a speciální znaky "_"(podtrzení), "."(tecka), "$","?"a"#" b) malá a velká písmena jsou ruzné znaky c) znak "." (tecka) muze být pouze jako první znak symbolu d) jako první znak symbolu nesmí být císlice ani znak " # " e) symbol musí obsahovat alespon 1 znak a méne nez 128 znaku
11.3.8. Operátory. Následující tabulka obsahuje seznam všech ZMASM operátoru. Ne všechny operátory jsou pouzitelné pro Z8 mikroradice ! Oddelené skupiny operátoru jsou serazeny od nejvyšší do nejnizší priority. Operátory se stejnou prioritou jsou vykonány v poradí (zleva / zprava) které uvádí tabulka. Priorita muze být vzdy upravena pomocí závorek, které mají vyšší prioritu nez kterýkoliv operátor. Unární operátory jsou vzdy psány jako predpona k operandu, binární mezi dvema operandy. Operátor
popis
typ
poradí
>, HIGH <, LOW HIGH16 LOW16 + ~ ! ** * / % <<, SHL >>, SHR + + & ^ | = != < > <= >= && || ^^ ==
vyšší byte nizší byte vyšší slovo nizší slovo plus minus jednickový doplnek logické NOT mocnina násobení delení modulo posun vlevo posun vpravo plus minus spojení retezcu bitové AND bitové Exclusive OR bitové OR rovná se nerovná se menší nez vetší nez menší nebo rovno vetší nebo rovno logické AND logické OR logické Exclusive OR logická ekvivalence
unární unární unární unární unární unární unární unární binární binární binární binární binární binární binární binární binární binární binární binární binární binární binární binární binární binární binární binární binární binární
zprava zprava zprava zprava zprava zprava zprava zleva zleva zleva zleva zleva zleva zleva zleva zleva zleva zleva zleva zleva zleva zleva zleva zleva zleva zleva zleva zleva zleva zleva
11.3.9. Výrazy. Výrazem je konstanta, symbol nebo kombinace konstant, symbolu a operátoru. Assembler vypocítá výraz jako jedinou hodnotu, kterou pouzije jako operand. Výrazy mohou být absolutní, relativní, retezcové, logické, podmínené. Pro sestavení programu pro mikroradice Z8 vystacíme s informací o existenci výrazu. Úplné informace o výrazech a jejich pouzívání obsahuje uzivatelský manuál. - 50 -
11.4. Direktivy assembleru. Assembler ZMASM podporuje cca 70 direktiv a pro vyšší kompatibilitu se ZASM a jinými assemblery dalších cca 45 direktiv (jako alias u direktiv, s kterými jsou kompatibilní). Pro úcely této ucebnice jsou dále uvedeny pouze direktivy, bez jejichz uzití se pravdepodobne neobejde prumerný program pro zde popisované mikroradice Z8.
CHIP
alias CPU
Specifikuje typ mikroradice Syntax CHIP microcontroller Protoze assembler ZMASM podporuje instrukcní soubory všech mikroprocesoru ZILOG, je nutno urcit, pro který mikroprocesor je program (zdrojový text) urcen. Direktiva CHIP prípadne CPU je však podporována predevším pro kompatibilitu s jinými assemblery. Ve vývojovém prostredí Zilog plní tuto funkci volba "Project/Target" (verze Windows). Direktiva CHIP není ve zdrojovém textu povinná.
DB DW
alias .BYTE alias .WORD Pridelí místo v pameti a zapíše pocátecní hodnotu Syntax [ label ] [ label ]
DB DW
[ [ repeat1 ] ] initializer1 [ , [ [ repeat2 ] ] initializer2 ] . . . [ [ repeat1 ] ] initializer1 [ , [ [ repeat2 ] ] initializer2 ] . . .
Direktiva pridelí rozsah pameti. DB pridelí 8bitový byte, DW pridelí 16 bitové slovo. Na pridelené místo zapíše hodnotu operandu initializer. Kazdý initializer muze být ulozen vícekrát, pokud je pouzit operand [ repeat ]. Pokud je pouzit label, udává adresu pametového místa prideleného pro první initializer. Príklad MemDat : DB 0 ; pridelí 1 byte na adrese MemDat a zapíše hodnotu 0 DB [10] 0 ; pridelí 10 bytu, do kazdého zapíše hodnotu 0 DW [5] 0 ; pridelí pet 16bitových slov, do kazdého zapíše hodnotu 0 DB %0a ; pridelí 1 byte a zapíše hodnotu 0aH
EQU SET
alias .EQU alias .SET Prirazuje symbolu hodnotu výrazu Syntax symbol symbol
EQU SET
výraz výraz
Direktiva priradí symbolu hodnotu i typ. Rozdíl mezi direktivami EQU a SET je ten, ze SET dovolí znovu definovat symbol jiz dríve definovaný direktivou SET. Symbol definovaný direktivou EQU jiz nemuze být predefinován.
Pokud výraz obsahuje symbol, musí být tento symbol predtím definován. Príklad ONE EQU 1 TWO EQU 2 THREE EQU ONE+THREE R1_INIT EQU %0F - 51 -
GLOBALS Zprístupnuje všechny symboly pro linker Syntax GLOBALS
mode
Direktiva zakazuje nebo povoluje prístup ke všem symbolum, definovaným po direktive. Operand mode musí mít jednu ze dvou hodnot, ON nebo OFF. Direktiva nesmí mít náveští (label). Pokud je pro úcely ladení programu ve vývojovém prostredí ZILOG pozadováno vytvorení souboru *.ld a *.sym (viz. cl. 11.2.), musí být jako první direktiva zdrojového textu napsána GLOBALS ON.
MACRO MACEND
alias .MACRO alias .ENDM
Definuje makro Syntax macroname
MACRO [ fParameter1 [ , fParameter2 ] . . . ] statements MACEND
Direktiva MACRO oznacuje zacátek a direktiva MACEND konec definice procedury makro. Statements jsou príkazy tela makra, mohou to být direktivy, instrukce nebo poznámky. Makro musí mít jméno macroname, kterým je voláno. fParameter jsou formální parametry makra, kterých muze být 0 az 255. Kazdý parametr musí být platný symbol. Parametrem nemuze být vyhrazené slovo, napr. jméno registru. Makro musí být definováno dríve nez je voláno. Príklad TIMER MACRO interval LD PRE1, # interval MACEND ...
TIMER
%03
; volá makro TIMER
ORG
alias .ORG Nastavuje cítac adres na definovanou hodnotu Syntax ORG výraz Direktiva nastaví cítac adres na absolutní hodnotu operandu výraz. Direktiva nesmí mít náveští (label). Príklad ORG %0C ; umístí kód instrukce LD na adresu 0C
LD
P2M, #%00
- 52 -
12. Vývojové prostredí ZiLOG. 12.1. Sestava vývojového prostredí pro mikroradice Z8. Mikroradice Z8 nejsou nabízeny ve verzích s pametí EEPROM. Pred vlozením programu do OTP pameti mikroradice je proto nutné odladit program do nejmenších detailu na hardwarové aplikaci. Podmínkou pro to je dostupnost emulátoru. Levný emulátor Z86CCP01ZEM umoznuje ladení programu na zákaznické aplikaci, v reálném case, s oddeleným napájením aplikace a emulátoru, s vlastním oscilátorem aplikace. Emulátor je soucasne programátorem, na nemz je mozno odladený program zapsat do OTP verzí mikroradice. Emulátor umoznuje ladení programu pro všechny obvody Z8 popisované v této ucebnici.
Vývojové prostredí pro mikroradice Z8 obsahuje: - emulátor Z86CCP01ZEM s návodem, kabel k uzivatelské aplikaci - ZDS 1.00 - ZiLOG Developer Studio - integrované prostredí pro Windows 95 - ZMASM - ZiLOG Macro Cross Assembler (zkrácený popis v clánku 11.) - GUI 3.14 - grafické prostredí emulátoru pro Windows Pro kompletaci vývojového prostredí je treba: - PC kompatibilní IBM, 8MB RAM, Windows 95 - napájecí zdroj 8V, 0.5A - sériový kabel
12.1.1. Napájecí zdroj. Pro prílezitostnou práci postací sítový adaptér cca 8V, 0.5A , pro dlouhodobou práci je vhodný stabilizovaný zdroj 8V. Napájecí napetí se pripojí na svorky 8VDC a GND. Je nutno dodrzet polaritu napájecího napetí !
12.1.2. Propojení emulátoru s osobním pocítacem. Emulátor se pripojuje k PC standardním sériovým kabelem délky cca 2.5m na konektor emulátoru CANON 25F a nekterý sériový port (COM1 az COM4 pocítace). Podle konektoru sériového portu pocítace je treba pouzít jeden z následujících kabelu. kabel 25M(emulátor) ßà 25F(PC) prímý, tj. pin2ßà pin2 , pin3ßà pin3 . nebo kabel 25M(emulátor) ßà 9F (PC) zkrízený, tj.pin2 ßà pin3 , pin3ßà pin2 Není mozno pouzít COM uvolnený odpojením myši, je nutno myš odinstalovat !
12.1.3. Prizpusobení emulátoru pro pozadovaný typ mikroradice. Emulátor podporuje všechny obvody, popisované v této ucebnici. Protoze obvody v pouzdrech s 18 piny mají odlišne vyvedeny I/O porty, je nutno pomocí prepínacu J4, J5 a J6 prizpusobit emulátor pro konkrétní typ mikroradice. typ nastavení J4, J5, J6 Z86E 02/04/08 1-2 nastaveno pri dodání Z86E 03/06 2-3 PRELOZIT všechny (J4, J5, J6) Z86E 3x / 4x OFF ODSTRANIT všechny (J4, J5, J6)
- 53 -
12.1.4. Prizpusobení emulátoru k umístení krystalu oscilátoru. Po propojení emulátoru s aplikací muze být „zivý“ pouze jeden krystal oscilátoru bud v emulátoru nebo v aplikaci. Druhý krystal musí být odpojen nebo odstranen. Krystal v emulátoru má kmitocet 8MHz. Prepínace J2 a J3 propojují obvody krystalu. umístení krystalu krystal X1 v emulátoru oba krystaly osazeny krystal v aplikaci
nastavení J2 a J3 OFF nastaveno pri dodání OFF „zivý“krystal v emulátoru, krystal v aplikaci odpojen 1-2 „zivý“krystal v aplikaci, krystal z emulátoru odstranit
12.1.5. Prizpusobení emulátoru ke zpusobu napájení aplikace. Pro ladení programu je vhodnejší, aby aplikace byla napájena z emulátoru. Pro definitivní odladení je však dulezité napájet aplikaci z vlastního zdroje. Jen tak je mozno zjistit pusobení rušivých vlivu ze skutecného napájecího zdroje a ostatních elektronických obvodu aplikace. Prepínac J1 prepojuje napájení aplikace. napájení aplikace napájení z emulátoru samostatné napájení
nastavení J1 1-2 nastaveno pri dodání OFF
Pokud má aplikace samostatný napájecí zdroj, je nutno dodrzovat postup zapínání a vypínání napájecích zdroju a propojení emulátoru s aplikací (originální User’s Manual).
12.1.6. Pripojení emulátoru k aplikaci. Pro seznámení s emulátorem je mozno všechny funkce emulátoru spustit i bez pripojené aplikace. Pro ladení programu se aplikace pripojuje k emulátoru do jedné z objímek P1, P2, P3 plochým kabelem s konektory. Je nutno dodrzet orientaci kabelu, pin 1 (cervený vodic) na pin 1. Pri otocení kabelu hrozí znicení aplikace nebo emulátoru. V emulátoru jsou osazeny tri objímky DIP (P1-18 pinu, P2-28 pinu a P3-40 pinu). Dodán je pouze kabel 18 - 18 pinu DIP. Jiné kabely nebo redukce je nutno prikoupit nebo vyrobit.
Rozmístení uzivatelsky dulezitých prvku na desce emulátoru.
- 54 -
12.2. Spuštení emulátoru. Provoz emulátoru je mozný pouze s bezícím programem GUI. Program GUI bezí na PC pouze s pripojeným emulátorem.
12.2.1. Instalace GUI . Grafické prostredí GUI 3.14 se instaluje z prostredí Windows spuštením programu Setup.exe. Instalacní program obsahuje pokyny pro postup instalace. Standardní instalace umístí program GUI 3.14 do adresáre C:\Programy\Z8ICE_3.14
12.2.2. Spuštení GUI . Po pripojení emulátoru k PC a zapnutí napájení se GUI 3.14 spouští z ikony Z8ICE_3.14. Je nabídnuto okno pro nastavení komunikace mezi PC a emulátorem.
Je treba vybrat typ emulátoru Z86CCP00ZEM, oznacit císlo sériového portu, na který je emulátor pripojen a vybrat rychlost prenosu. Po potvrzení konfigurace se zobrazí zpráva o probíhající komunikaci GUI s emulátorem.
Pokud komunikace neprobehne úspešne, zobrazí se chybová zpráva. Je nutno zkontrolovat propojení s PC a napájecí napetí emulátoru. Je vhodné vyzkoušet i jinou (nizší) rychlost prenosu. Stlacit tlacítko MASTER RESET na desce emulátoru a znovu spustit GUI. Predpokladem pro správnou cinnost dále popsaných funkcí je existence spustitelného souboru. Pokud ješte nejste seznámeni s assemblerem ZMASM a prostredím ZDS, pouzijte spustitelný soubor, který po instalaci ZDS 1.00 najdete v adresári C:\ ZDS_1 \ SAMPLES \ Z8\ Reaction.ld. Soubor je urcen pro spuštení na mikroradici typu Z86E02.
- 55 -
12.3. Konfigurace emulátoru pro pozadovaný typ mikroradice. Po spuštení GUI a navázání komunikace mezi GUI a emulátorem je nabídnuto okno:
Polozka Microcontroller po rozvinutí nabídne seznam všech typu, které daná verze GUI podporuje. Z nabídky vyberte pozadovaný typ mikroradice. V polozce Z8 ROM Size muzete zvolit velikost pameti emulátoru pro ulození programu. V polozce je soucasne informace o velikosti skutecné pameti vybraného typu mikroradice. Polozky Expanded Register Banks a Selected Ports informují o implementovaných registrech a portech vybraného typu mikroradice a nelze je zmenit. Polozka Emulation Mode nabízí moznosti emulace, pro Z86CCP01ZEM je to pouze CCP Family Okno konfigurace je mozno otevrít z hlavního Menu volbou polozky Configuration / Device jen kdyz na pracovní ploše není jiné okno.
12.4. Spuštení programu na emulátoru. 12.4.1. Vlození programu do pameti emulátoru. Predpokládáme, ze jiz existuje spustitelný soubor ∗.ld, vytvorený v prostredí ZDS prekladem zdrojového textu. Pokud takový soubor není k dispozici, pouzijeme pro nácvik soubor, který po instalaci ZDS najdete v adresári C:\ ZDS_1 \ SAMPLES \ Z8\ Reaction.ld. Soubor je urcen pro spuštení na mikroradici typu Z86E02. Z nabídky hlavního menu vybrat File \ Download Application. File View OTP! Open Session Save Session Download Application Download To Z8 Code Memory Upload Z8 Code Memory Upload Data Memory Exit Alt + F4
Configuration
Help
- 56 -
Tlacítkem Browse najít pozadovaný adresár , vybrat a oznacit soubor s príponou .ld V polozce Object Format vybrat Zilog Object Module Format. V polozce Memory Pad With oznacit FF IN HEX. Pozn. Pokud je ve spoleèném adresáøi se souborem Reaction.ld také soubor Reaction.s, mùže se pøi pokusech objevit varování „Source file Reaction.s is newer that OMF load file“.
12.4.2. Zobrazení souboru v pameti emulátoru. Program, ulozený do pameti emulátoru je mozno zobrazit pro kontrolu nebo editaci.
Z nabídky hlavního menu vybrat View \ Memory \ Z8 Code Memory. File
View Registers Memory Debug Output
OTP!
Configuration
Help
Z8 Code Memory Z8 Date Memory
Je zobrazeno okno Z8 Code Memory a zmení se nabídka hlavního menu: File View Tracking Edit OTP! FontSize Window Help
Okno zobrazuje adresy v rozsahu urceném konfigurací (cl. 12.3.) a obsah kazdé adresy v hexadecimálním kódu. Dále je zobrazen kurzor oznacující adresu pro editaci jejího obsahu. Stavový rádek (spodní okraj okna) informuje o naposled provedené cinnosti (napr. Tracking Absolute, memory address =%000C ). Pri zobrazení okna Z8 Code Memory je mozno zvolit z hlavní nabídky: Tracking - nastaví kurzor na zvolené místo pameti Edit \ Fill - vyplní oznacenou oblast pameti emulátoru pozadovanými znaky \ Clear All - vyplní celou pamet emulátoru znaky FF nebo 00 OTP! - otevre okno pro programování pametí OTP (clánek 12.5.) Font Size - volí velikost (6, 8, 10, 12) znaku pro zobrazení obsahu okna Window - usporádá okna na pracovní ploše V okne Z8 Code Memory je mozno prímo editovat strojový kód nastavením kurzoru na pozadovanou adresu a prepsáním obsahu adresy. Kurzor muze být presouván kurzorovými klávesami nebo pomocí funkce Tracking. Pri editaci se mení pouze obsah pameti emulátoru. Pokud mají být zmeny uchovány, je nutno výsledek editace ulozit do zvoleného souboru funkcí File \ Upload Z8 Code Memory (clánek 12.4.6.).
- 57 -
12.4.3. Zobrazení obsahu registru emulovaného mikroradice. Jednou z podstatných funkcí emulátoru je moznost zobrazit kdykoliv obsah všech registru emulovaného mikroradice. File
View Registers Memory Debug Output
OTP!
Configuration
Help
Z8 Registers - obsah pameti RAM Z8 Expand Registers - obsah rozšírené sady registru Z8 Status - obsah rídících registru Z8 Counter / Timers - obsah cítacu Z8 Ports - obsah vstupních/výstupních portu
Okna pro zobrazení pameti ROM a registru je mozno otevrít vícenásobne, jejich rozmery a umístení na pracovní ploše je mozno rídit obecnými zásadami pro práci s okny pod Windows. Jenom jedno okno muze být aktivní. Obsah oken Z8 Registers a Z8 Expand Registers je usporádán obdobne jako okno Z8 Code Memory. Ostatní okna zobrazují obsah zvolených registru i s jejich symbolickými názvy, registry urcené pouze pro zápis jsou zobrazeny cervene s príponou (WO, tj. Write Only). Obsah registru je mozno volbou funkce Format zobrazit v hexadecimálním nebo binárním tvaru.
12.4.4. Ladení programu. Ladení programu je proces, kdy program v pameti emulátoru je spušten a je sledována jeho funkce na pripojené aplikaci. Emulátor pritom umoznuje chod programu v reálném case, zastavení na predem nastavených zarázkách (break point), rucní krokování po jednotlivých instrukcích a chod programu rychlostí cca 2 instrukce za sekundu. Z nabídky hlavního menu vybrat View \ Debug \ Z8 Debug File
View Registers Memory Debug Output
OTP!
Configuration
Z8 Debug Z8 Source
- 58 -
Help
Z nabídky hlavního menu vybrat View \ Debug \ Z8 Source
Okno Debug zobrazuje zpetne prelozený kód programu, v levém sloupci adresy, v pravém sloupci úplné instrukce. V levé cásti okna jsou abecedne serazeny symboly vcetne adres. Okno Source zobrazuje úplný zdrojový text vcetne poznámek. Listování programem. Kliknutí myší na šipku v pretácecím pruhu nebo potazení ukazatele v pretácecím pruhu listuje pouze vpred. Listování zpet není korektní, nebot zpetný preklad muze zacít „uprostred“ instrukce a první 2 rádky seznamu nemusí být správné !! Tlacítkem STEP je mozno listovat vpred o nastavený pocet rádku. Zdrojovým textem je mozno listovat standardním postupem, tedy pretácecím pruhem a kurzorovými klávesami vcetne PageUp a Pade Down. Nastavení zarázek (break point). Program, který nevykonává ocekávanou cinnost, je nutno zastavit na vhodném míste a zkontrolovat obsah registru mikroradice. Libovolnou instrukci programu je proto mozno oznacit, nastavit na ní zarázku, na která se program po spuštení zastaví. Zarázku je mozno nastavit : - dvojklik myší na adresu ve výpisu programu (okno Debug) - dvojklik na rádek s instrukcí ve zdrojovém textu (okno Source) Všechny zarázky jsou v programu oznaceny znakem ∗ u adresy a celý rádek je zobrazen cervene. Seznam všech nastavených zarázek je zobrazen v poli vlevo vedle tlacítek BRK. Vymazání zarázek (break point). - dvojklik myší na adresu s nastavenou zarázkou (okno Debug)
- dvojklik na rádek ve zdrojovém textu (okno Source) s nastavenou zarázkou - tlacítko CLEAR ALL smaze všechny nastavené zarázky - 59 -
Spuštení programu. Tlacítko RESET nastavuje cítac programu (registr PC) na adresu 000C. Tlacítko není funkcní pri behu programu. Tlacítko JUMP nastaví cítac programu na hodnotu, která je vepsána v editacním poli vedle tlacítka JUMP. Adresu do editacního pole je mozno vepsat kliknutím na instrukci ve výpisu programu nebo na rádek v seznamu náveští. Tlacítko GO spouští program od aktuálního stavu cítace programu. Program se zastaví na první nastavené zarázce. Tlacítko RESET + GO spouští program od adresy 000C. Program se zastaví na první nastavené zarázce. Tlacítko HALT zastavuje program. Pokud nejsou nastaveny zarázky, je program mozno zastavit pouze tlacítkem HALT. Obsahuje-li program instrukce pro vstup do STOP módu, je mozno emulátor zastavit pouze výstupem ze STOP módu tak jak je definován programem. Je také mozno resetovat aplikaci tlacítkem TARGET RESET. Rádek s adresou, na které se program zastavil (aktuální stav cítace programu) je prosvetlen zlute. Tlacítko STEP spustí program a vykoná pocet instrukcí, který je vepsán v poli vedle tlacítka STEP. Pocet instrukcí muze být nastaven od 1 do 99999999. Pokud je nastaven STEP 1, program krokuje po jedné instrukci i v podprogramech volaných instrukcí CALL. Tlacítko STEP OVER spustí program a vykoná 1 instrukci. Pokud je touto instrukcí CALL, vykoná se celý volaný podprogram v reálném case. STEP OVER je totéz jako nastavení zarázky na instrukci bezprostredne následující za aktuální instrukci a spuštení programu tlacítkem GO. Trasování chodu programu. Je-li aktivní okno Debug, je mozno z hlavního menu vybrat nabídku Run a nastavit zpusob chodu programu. Informace o chodu programu jsou vypisovány do okna Output. File
View
OTP! Run FontSize Window Help Trase Code - vypisuje seznam všech vykonaných instrukcí Trase Call - vypisuje seznam vykonaných instrukcí CALL Animate - program bezí rychlostí cca 2 instrukce za sekundu Clear Trace - smaze všechny výpisy v okne Output
Editace programu v okne Debug. Okno pro zobrazení zpetne prelozeného programu má vestaven jednorádkový assembler. Kliknutím na rádek s vybranou instrukcí je rádek barevne zvýraznen. Obvyklým editacním postupem je mozno zmenit kód instrukce a její operandy. Konec editace potvrdit klávesou ENTER. Prekladac emulátoru provede syntaktickou kontrolu a pokud nezjistí chybu, zmeny se zapíší do pameti emulátoru a po spuštení bezí zmenený program. ! ! Editace je vhodná pouze pro drobné zmeny . Není mozno menit adresu editovaného údaje a proto je prakticky neproveditelné zmenit délku instrukce ! ! ! ! Zmeny v programu vzniklé editací nejsou zapsány do originálního hexadecimálního souboru. Pokud mají být zmeny uchovány, je nutno výsledek editace ulozit do zvoleného souboru funkcí File \ Upload Z8 Code Memory (clánek 12.4.6.). ! !
12.4.5. Ulození rozpracovaného programu. Pokud je nutno proces ladení programu prerušit, je mozno ulozit nastavené podmínky volbou funkce File \ Save Session. Do zvoleného adresáre, do souboru zvoleného jména s nabídnutou príponou .prj jsou ulozeny informace o emulovaném typu mikroradice, jméno souboru .hex s ladeným kódem, pozice otevrených oken, adresy zarázek.
! ! Funkce File \ Save Session neukládá zmeny v kódu, vzniklé pri editaci bud v okne Z8 Code Memory (clánek 12.4.2.) nebo v okne Debug (clánek 12.4.4.). Pokud mají být zmeny uchovány, musí být ulozeny funkcí File \ Upload Z8 Code Memory (clánek 12.4.6.). Informace, ulozené funkcí File \ Save Session je mozno pri novém spuštení GUI opet nahrát funkcí File \ Open Session.
- 60 -
12.4.6. Ulození obsahu pameti emulátoru. Pri editaci programu bud v okne Z8 Code Memory (clánek 12.4.2.) nebo v okne Debug (clánek 12.4.4.), se mení pouze obsah pameti emulátoru, nemení se puvodní soubory. Pokud má být výsledek editace programu uchován, je nutno ho ulozit funkcí File \ Upload Z8 Code Memory.
Po vybrání adresáre, zvolení formátu a vepsání jména souboru Save All - ulozí celý obsah pameti do soboru File name Save - ulozí do souboru File Name cást pameti od Start Address do End Address ( u souboru s binárním formátem od adresy 0000 do End Address)
- 61 -
12.5. Programování OTP verzí mikroradicu. Na emulátoru Z86CCP01ZEM je mozno programovat verze mikroradicu s pametí OTP. Pri dodání je v emulátoru osazena patice ZIF (Zero Input Force) pro pouzdra DIP s 18 piny. Pro pouzdra DIP s pocty pinu 28 a 40 je nutno príslušné patice zapájet do desky emulátoru. Pro jiné typy pouzder (SOIC, PLC, QFP) je nutno zakoupit nebo zhotovit adaptéry. File
View
OTP!
Configuration
Help
Device - Nabízí seznam všech mikroradicu, které je mozno danou verzí GUI programovat Topmark - Pro vybraný typ mikroradice nabízí seznam existujících variant Programming Options - Pro vybraný typ a variantu mikroradice zobrazuje nabídku programování Registru volitelných funkcí (clánek 9.) BLANK CHECK - Kontroluje zda je pamet mikroradice prázdná, tj. obsah všech adres je FF. Kladný výsledek je zobrazen jako zpráva PASSED! v polozce Command Status. Pri záporném výsledku je zobrazena první adresa, jejíz obsah není FF. VERIFY - Porovná obsah pameti mikroradice s obsahem pameti emulátoru, tj obsahem okna Z8 Code Memory. Kladný výsledek je zobrazen jako zpráva PASSED! v polozce Command Status. Pri záporném výsledku je zobrazena první adresa, jejíz obsah je rozdílný.
EXAMINE - Kopíruje obsah pameti mikroradice do pameti emulátoru. Po zpráve DONE! je obsah ihned zobrazen v okne Z8 Code Memory a v okne Debug, pokud jsou otevrena. READ OPTIONS - Cte skutecný stav Registru volitelných funkcí mikroradicu typu Z86E3x,Z86E4x, Z867x. Pro jiné typy mikroradicu je tlacítko neprístupné. Pokud je naprogramován bit EPROM Protect, funkce READ OPTIONS dává nesprávný výsledek. OTP CHECKSUM - Pocítá zkušební soucet obsahu celé pameti OTP (nikoliv pouze obsah pameti zabranou programem), výsledek zobrazí v polozce Check Sum. RAM CHECKSUM - Pocítá soucet obsahu pameti RAM, výsledek zobrazí v polozce Check Sum. PROGRAM - Zapíše obsah pameti emulátoru (Z8 Code Memory) do OTP pameti mikroradice. Prubeh operace je zobrazován v polozce Command Status. Jako soucást funkce PROGRAM je vzdy zarazena funkce VERIFY. Konec úspešného programování je oznámen zprávou DONE! Device Serialization - Pri programování je mozno na urcené místo pameti zapsat „výrobní císlo“ mikroradice. Zásady tvorby císla jsou vysvetleny v souboru Readme.txt v kapitole REVISION HISTORY SUMMARY pro verzi 3.00. Funkce je neprístupná pokud je polozka Method oznacena None. - 62 -
13. Zilog Developer Studio ZDS 1.00 s assemblerem ZMASM. 13.1. Instalace ZDS 1.00. Integrované prostredí ZDS 1.00 se instaluje z prostredí Windows príkazem setup.exe. Instalacní program obsahuje pokyny pro postup instalace. V okne Select Components oznacte ¤ Zilog Developer Studio (ZDS) 1.00 Standardní instalace umístí program do adresáre C:\Programy\Zilog Developer Studio\ ZDS 1.00 Pokud uzivatel nepracuje pod Windows 95, muze instalovat samotný ZMASM pro Windows 3.11
13.2. Spuštení ZDS . Spustit Programy \Zilog Developer Studio \ ZDS 1.00.
Project Viewer zobrazuje názvy všech souboru (vcetne cesty), které jsou pozadovány pro sestavení projektu. Soubory které lze editovat (napr. zdrojové texty), je mozno dvojklikem myši zobrazit v okne Projekt Workspace. Project Workspace je pracovní plocha pro vytvorení a editaci zdrojových textu. Ovládání editoru je popsáno v Help / text editor. Na pracovní ploše muze být otevreno více oken, manipulace (rozmery, usporádání) podle všeobecných zásad Windows95. Output Window zobrazuje všechny zprávy a informace, generované pri chodu assembleru a linkeru. Chybová hlášení mohou být pouzita pro prímý vstup na místo chyby ve zdrojovém textu. Menu View umoznuje otevrít / zavrít okna Project Viewer a Output Window. Standardním postupem Windows 95 je mozno zmenit rozmery oken, a premístit je na libovolné místo na pracovní ploše.
13.3. Otevrení projektu. Menu File / New Project
Project Name: Název projektu vcetne cesty do cílového adresáre. Do tohoto adresáre budou ukládány výstupní produkty asembleru bez ohledu na to, kde jsou ulozeny zdrojové texty. Cílový adresár je mozno vyhledat tlacítkem Browse. Pro seznámení se s funkcemi ZDS doporucujeme zalozit (napr. pomocí Windows Explorer) adresár C:\ ProgramFiles \ Zds_1.00 \Training, který je dále v návodu pouzíván jako vzor. Chip Family, Chip Identification slouzí k oznacení typu mikroradice, pro který je projekt urcen. Assembler ZMASM podporuje všechna jádra ZILOG, tedy Z80, Z8 a Z89C00. Identifikace cílového typu mikroradice je nutná pro výber príslušného instrukcního souboru. - 63 -
13.4. Sestavení projektu. Menu Project / Add To Project / Files
Pokud ješte nejste seznámeni s assemblerem ZMASM a prostredím ZDS, pouzijte zdrojový soubor, který po instalaci ZDS (clánek 13.1.) najdete v adresári C:\ ProgramFiles \ Zds_1.00 \ SAMPLES \ Z8 \ Reaction.s. Soubor muze být do projektu zarazen z puvodního adresáre nebo muze být zkopírován do adresáre C:\ ProgramFiles \ Zds_1.00 \Training Soubor je urcen pro aplikaci na mikroradici typu Z86E02.
13.5. Konfigurace assembleru pro projekt. Menu Project / Settings / Assembler
Konfiguraci je mozno nastavit v oblastech Settings / Assembler Message ü Suppress assembler banner potlacuje tisk loga a verze ZMASM Suppress warning messages potlacuje tisk chybových hlášení Treat warning as errors chybové hlášení ukoncí preklad Listing ü Generate a listing file generuje soubor ∗.lst Generate a list of symbols generuje soubor ∗.sym Generate a symbol table cross vkládá císla rádku k symbolum v souboru ∗.lst Object ü Generate debug information generuje soubor ∗.o Generate an absolute object file generuje soubor ∗.hex Preprocessor Symbols to define definuje symboly (obdobne jako EQU) Include Path definuje cestu k souborum INCLUDE Znakem ü je oznacena doporucená konfigurace assembleru. Pokud pozadujeme vytvorení spustitelného souboru ∗.ld vcetne tabulky symbolu a prístupnost zdrojového textu pro ladení, musí být nastavení Settings / Assembler / Object / Generate Debug information a nesmí být nastaveno Settings / Assembler / Object / Generate an absolute object file. Podmínkou pro vytvorení úplného spustitelného souboru ∗.ld navíc je, aby zdrojový text jako první príkaz pro assembler obsahoval direktivu GLOBALS ON, která zprístupní symboly pro assembler.
- 64 -
13.6. Konfigurace linkeru pro projekt. Menu Project / Settings / Linker
Pokud pozadujeme vytvorení spustitelného souboru ∗.ld vcetne tabulky symbolu a prístupnost zdrojového textu pro ladení, musí být nastavení Settings / Assembler / Object podle clánku 3.6. Dále musí být nastavení Settings / Linker / Output / Generate Debug information a nesmí být nastaveno Settings / Linker / Output / Generate an absolute object file.
Podmínkou pro vytvorení úplného spustitelného souboru ∗.ld navíc je, aby zdrojový text jako první príkaz pro assembler obsahoval príkaz GLOBALS ON, který zprístupní symboly pro assembler.
13.7. Vytvorení spustitelného souboru ∗.ld Menu Build / Assembly / CompilePrelozí soubor, který je práve aktivní v okne Project Workspace nebo který je oznacen v okne Project Viewer. Vytvorí soubor ∗.o nebo ∗.hex podle konfigurace assembleru (clánek 13.5.) / Build Sestaví výstupní soubor projektu podle nastavené konfigurace. Znovu prekládá pouze zdrojové soubory, jejichz datum editace je pozdejší nez datum vytvorení výstupního souboru (∗.ld nebo ∗.hex) / Rebuild All Sestaví výstupní soubor projektu podle nastavené konfigurace. Prekládá všechny zdrojové soubory bez ohledu na datum jejich poslední editace. / Update All Dependencies Aktualizuje seznam všech souboru, které zdrojové texty vyzadují direktivou INCLUDE. Prubeh prekladu a sestavení výstupního souboru je zobrazen v okne Output Window. Úspešný proces musí být ukoncen zprávami assembleru i linkeru 0 error(s) , 0 warnig(s) .
- 65 -
Všechny výstupní soubory, tj. zejména ∗.o, ∗.lst, ∗.ld a ∗.map jsou ukládány do adresáre, definovaného projektem (cl. 13.3). tedy adresáre se souborem ∗.zws. Prítomnost souboru je mozno zkontrolovat Menu File / Open File, nalistovat adresár Program Files \ Zds_1.00 \Training
Z ikony „Detaily“(vpravo nahore) je mozno overit datum vytvorení souboru a tím jejich aktuálnost.
13.8. Vyuzití chybového hlášení pri oprave zdrojového textu. Pro editaci zdrojového textu je mozno vyuzít chybová hlášení, která jsou pri chodu ZMASM vypisována do okna Output. Pro simulaci chyby pouzijte postup: - Z menu View / Project View uzavrít okno Project View, okno Project Workspace se rozšírí - Posuvem textu v okne najít cást s hlavickou ** Initialize ** - Zmenit název registru P2M na P2MX, - Spustit preklad Build / Build - Do okna Output jsou vepsána hlášení o poctu chyb, kódu chyb, císla rádku jejich výskytu - Dvojklik na chybové hlášení umístí kurzor na rádek s chybou
- Po oprave chyby a novém prekladu je generováno hlášení bez chyb.
13.9. Ulození a otevrení rozpracovaného projektu. Rozpracovaný projekt je mozno ulozit volbou Menu File / Save Project a znovu otevrít volbou File / Open Project
© ECOM s.r.o. Ceské Mezirící, A.Jiráska 384, leden 1999 - 66 -