[Saidi indeks] [Sisukord]
 

 


4. Praktikumis teostatavaid harjutusi

4.1. Tutvumine monitorprogrammiga. Püsimälus olevate alamprogrammide kasutamine

4.1.1. Ülesanne monitorprogrammiga tutvumiseks

Monitorprogrammiga tutvumise eesmärgiks on harjutada monitorprogrammi käskude kasutamist, õppida tundma monitorprogrammi ja tema pakutavaid võimalusi programmide silumiseks. Kui monitorprogrammi käsud on n.ö. käe sisse kulunud, võimaldab see hilisemate harjutuste käigus kiiremini programme töödelda.

(1) Programmi laadimiseks kontrollerisse minna kataloogi, kus on transleeritud programm. Sisestada MS-DOS-i käsurealt z180 . Silumiskeskkonnas vaadata sama programmi paiknemist mälus käsuga dump . Kuvada programm käsuga list . Heksakoodis aadressi asemel võib kasutada programmis defineeritud märgendeid.
Kogu eelnev ja ka järgnev monitorprogrammiga tutvumine salvestada käsuga view faili_nimi. Seejuures tuleb arvestada, et sama nimega fail kirjutatakse üle. Ka tuleb silmas pidada, et ekraani puhver on piiratud mahuga. Seepärast tuleb pikema silumise korral ekraani seisu korduvalt eri nimedega failidesse salvestada.
Käivitada programm käsuga go . Algusaadress on kohustuslik, kui see pole eelnevalt käsuloendurisse salvestatud.
Testida käskudega xreg ja dump, kas tulemus vastab oodatule. Kui tulemus on oodatust erinev, s.t. programm ei tööta, siis laadida käsuloendurisse programmi algusaadress (xreg pc algusaadress). Käsuga trace või trace n asuda programmi siluma. Pikemate tsüklite või alamprogrammide korral, mis ei vaja silumist, seada paika katkestuspunktid (break set aadress) ja täita käsuga go programm kuni katkestuspunktideni.
Ülejäänud monitorprogrammi käske kasutada vastavalt vajadusele.

4.1.2. Püsimälus olevate alamprogrammide kasutamine

4.1.2.1. Püsimälus olevad alamprogrammid

Püsimälus ROM olevate alamprogrammide tekstid on lisas 3 ja aadressid failis LKZ180.INC. Iga kasutaja võib endale teha suvalisi include-faile, ent monitorprogrammi alamprogrammide kasutamiseks peab ühes include-failis olema tekst failist LKZ180.INC

Kasutaja käsutuses on järgmised Toivo Vajakase koostatud alamprogrammid:
(a) CP_BC_HL - 16-bitiste märgita arvude võrdlemine. Arvud peavad olema registrites BC ja HL. Kui BC (b) DIV16 - 32-bitise märgita täisarvu jagamine 16-bitise täisarvuga. Jagatav on HL- ja DE-registrites, jagaja -BC-registris, jagatis - DE-registris ja jääk - HL - registris.
(c) MULT16 - 16-bitiste märgita täisarvude korrutamine. Tegurid peavad olema BC- ja DE-registrite, korrutis on registrites DE, HL.
(d) PRINTF - ASCII-koodis arvu saatmine kuvarile. HL-registris peab olema teisendatav arv, A-registris arvu alus (2,10, või 16). Saab kasutada ka alamprogramme, kus A-registrisse laetakse vastav alus: PRINTX (alus 16), PRINTD (alus 10), PRINTB (alus 2).
(e) SCANF1 - Klaviatuurilt ASCII-koodis sisestatud stringi teisendamine täisarvuks. A-registris peab olema arvu alus (2, 8, 10 või 16). Sisestamisel võib kasutada "+"- ja "-"-märke. Alamprogrammist väljumisel on väärtus HL-registris. Sisestatavad arvud võivad olla 0...65535 (0000H...FFFFH) või -32768...+32767. Nende piiride ületamist ei testita.
(f) KBHIT - Testitakse klaviatuuri olekut. Kui ühtegi sisestust pole, siis A=0, Zero=1, muidu A<>0, Zero=0.
(g) GETCH - Sümboli lugemine klaviatuurilt. Alamprogrammist väljumisel on sümbol A-registris.
(h) GETCHE - Sümboli lugemine klaviatuurilt ja saatmine "kajana" tagasi kuvarile. Loetud sümbol on A-registris.
(i) TOUPPER - A-registris oleva tähe teisendamine suurtäheks.
(j) GETCHEU - Sama, mis GETCHE, ent kuvarile saadetakse kajana suurtäht sisestatud tähest sõltumata.
(k) PUTCH - A-registris oleva baidi saatmine kuvarile.
(l) PUTS - Stringi saatmine kuvarile. Stringi algusaadress peab olema HL-registris.

4.1.2.2. Ülesanded

(1) Alamprogrammi MULT16 kasutades korrutada kaks 16-bitist märgita arvu. Esitada registrite sisu salvestus (käsud xreg ja view faili nimi)

(2) Võrrelda alamprogrammi CP_BC_HL kasutades eelmises harjutuses kasutatud tegureid. Esitada registrite sisu salvestus.

(3) Liita harjutuses (1) saadud korrutisele 5 ja jagada ta teguriga, mis harjutuse (2) põhjal oli väiksem. Esitada registrite sisu salvestus.

(4) Saata harjutuses (1) kasutatud tegurid ja saadud korrutis kuvarile kümnendsüsteemis.

(5) Saata harjutuses (3) kasutatud jagatav, jagaja, jagatis ja jääk kuvarile kümnendsüsteemis.

(6) Lugeda klaviatuurilt kaks arvu, korrutada need ja saata korrutis kuvarile,

(7) Koostada alamprogramm autorit ja programmi identifitseeriva logo kuvamiseks kasutajaprogrammi käivitamisel. Alamprogramm koostada nii, et seda saaks programmidega linkida nt. include-faili LKZ180.INC koosseisus.

(8) Koostada programm, mis kuvab logo, loeb klaviatuurilt kaks märgita kümnendarvu, saadab "kaja" kuvarile, võrdleb sisestatud arve ja saadab sõnalise tulemuse kuvarile, korrutab need arvud ja väljastab tulemuse kuvarile kümnend-, heksa- ja binaarkoodis.

4.2. Protsessori signaalide tundmaõppimine ja programmide silumine

4.2.1. Põhimõte

Monitorprogramm võimaldab tundma õppida protsessori registrite kasutamist ja valmiskirjutatud programme siluda, loogikaanalüsaatoriga saab uurida protsessori ja ka teiste seadmete signaale, tundma õppida masinatsükleid. Samuti võimaldab ta programme siluda.

Programmide silumisel, vigade avastamisel ja protsessori signaalide tundmaõppimisel loogikaanalüsaatori abil saadud ajadiagrammide alusel kontrollitakse signaalide vastavust koostatud programmi käskudele. Selleks on vaja õppida lugema ajadiagramme ja tundma ära masinatsükleid. Peab teadma käskude kirjeldusi ja koode. Ajadiagrammide kaudu tundmatu programmi koostamisel ja silumisel on esmaseks ülesandeks koostada diagrammi kirjeldus järgmisel viisil:

Takt/M1/MREQ/IORQ/WR/RDAndmed (D)Aadress (A)Kirjeldus
1-400110001100018230HKäsu LD SP,mn käsukoodi lugemine, A=käsukoodi aadress, D=käsukood
510110001100018230H
6111111111111100B0H DRAM-i värskendus
7-8101111111111100B0H
911111111111118231H
10-1410110000000008231HKäsu LD SP,mn esimese operandi n lugemine, A=operandi aadress, D=operand
15111111111111100B1H
16-17101111111111100B1HDRAM-i värskendus
1811111111111118232H
19-2310110101100008232HKäsu LD SP,mn teise operandi m lugemine, A=operandi aadress, D=operand
...........................

Aluseks on graafik 3 lisas 2. Ajadiagrammil võivad esineda perioodilised tsüklid, mille aadress on eelmise tsükliga võrreldes ühe võrra suurem, andmed aga samad. Kirjeldatud tsükkel on dünaamilise mälu DRAM värskendamine. Kuigi kontrolleril ei kasutata dünaamilist mälu, teostab protsessor automaatselt mäluvärskendust, kui see pole keelatud. Värskenduse saab keelata, kui seada värskenduse juhtimisregistri RCR bitt 7 (REFE) seisu 0.
Ajadiagrammi kirjeldamiseks vajalikud käskude kirjeldused ja käsukoodid on protsessori kirjelduses [6]. Nende alusel tuleb koostada programmi tekst assemblerkeeles:

8230H		LD	SP,B000H
		LD	IX,8246H
		LD	(IX+00),44H
		LD	A,2DH
		ADD	A,(IX+00)
		LD	BC,0100H
		OUT	(C),A
		RST	8

8246H		MEM:	DS	1
Sellele tuleb lisada kommentaarid:
8230H		LD	SP,B000H		;Seada pinuviit
		LD	IX,8246H
		LD	(IX+00),44H		;Lugeda üks arv
		LD	A,2DH			;Lugeda teine arv
		ADD	A,(IX+00)		;Liita arvud
		LD	BC,0100H
		OUT	(C),A			;Saata tulemus DAC-ile
		RST	8

8246H		MEM:	DS	1

Kommenteeritud programmi järgi koostada algoritm selle kohta, mida programm teeb:

[Image - algoritm]

Järgnevalt tuleb programm kontrollerisse laadida, käivitada ja saada kätte ajadiagramm, mis koostatud programmi osas ei tohi esialgsest ajadiagrammist erineda. Erinevused võivad olla aga DRAM-i värskendustes.

Näiteprogrammi ajadiagrammi lugemiseks kasutati loogikaanalüsaatori sisemist takti sagedusega 33 MHz. Trigersõna:

X0000110	   00100000	      : kõrgemad baidid
1XXXXXXX	XX0XX00X	: madalamad baidid
Assemblerkeeles koostatud valmis programmi silumisel tuleks järgida järgmisi nõudeid:
  1. kui on võimalik täita programmi mõtteliste osade kaupa, testida ja veenduda esialgu üksikosade õigsuses;
  2. kui osa täitmisel esineb tõrkeid või vigu, täita see programmilõik sammhaaval;
  3. veenduda, et programm on õigesti mällu laaditud ja mälupesad korralikud (kasutada mälu testimist);
  4. tingimuslike siirete korral testida hoolikalt seatavaid lippe ja siirdekäsu vastavust algoritmile;
  5. kontrollida, kas pole viga algoritmis endas;
  6. kui on tulutult kaua aega viga otsitud, on praktikumi aja säästmiseks kasulik paluda kellelgi teisel programm üle vaadata, sest värske silm võib vea kiiremini leida.

4.2.2. Ülesanded

(1) Koostada mõnekäsuline programm, mis hõlmab mälust lugemist, mällu kirjutamist, sisend-väljundseadmetesse kirjutamist ja sealt lugemist, aritmeetika- ja loogikakäske. Käivitada koos programmiga loogikaanalüsaator. Saadud ajadiagrammi põhjal koostada käsukoodi lugemise ajadiagramm, operandide ja andmete lugemise ning kirjutamise ajadiagrammid, sisend-väljundseadmetesse kirjutamise ning sealt lugemise ajadiagrammid. Kõige lõpuks koostada käsu koodilugemise ja käsu täitmise terviklik ajadiagramm. Kontrollida koostatud diagrammide vastavust protsessori kirjelduses [6] toodule.

(2) Juhendajalt saadud ajadiagrammi järgi koostada programmi tekst . Mida programm teeb?

(3) Koostada juhendajalt saadud ajadiagrammi kirjeldus. Mida programm teeb?

(4) Koostada juhendajalt saadud ajadiagrammi kasutades programmi tekst, laadida programm kontrollerisse, siluda, käivitada programm samade algandmetega, mis olid ajadiagrammil esitatud programmil. Koos programmiga käivitada ka loogikaanalüsaator sama trigersõnaga, millega käivitati ajadiagrammil olev programm. Esitada trigersõna ja leida analüsaatori taktsagedus. Kontrollida saadud ajadiagrammi vastavust esialgsele. Erinevuste korral need esitada ja siluda programmi seni, kuni ajadiagrammid on identsed. Kui erinevusi ei õnnestu kõrvaldada, siis miks?

(5) Juhendajalt saadud ajadiagrammi põhjal koostada programmi tekst koos kommetaaridega. Koostada teksti järgi selle tegevuse algoritm, mida programm teeb.

4.3. Kontrolleri koostisosade testimine

4.3.1. Põhimõte

Mikroprotsessorsüsteem koosneb paljudest koostisosadest. Võib juhtuda, et mingitel süsteemisisestel või süsteemist sõltumatutel põhjustel ei tööta mõni süsteemi komponentidest normaalselt. Kui rauas või tarkvaras pole korrasoleku kontrolli ette nähtud, võivad häired põhjustada andmete kaotsiminekut või isegi kontrolleri mittekäivitumist.
Komponentide riknemist võivad põhjustada nt. tugevad voolukõikumised ja ülepinged, samuti kasutaja hooletus (viikude lühistamine jne.).
Kontrolleril on võimalik testida asünkroonset jadaväratit, rööpväratit, muutmälu teatud osa, ADC-d ja DAC-i.

4.3.2. Muutmälu RAM testimine

4.3.2.1 Põhimõte
RAM-i on võimalik testida alates aadressist 8000H kuni aadressini EFFFH kaasa arvatud. Testimiseks kirjutatakse mälupessa arv 00H, loetakse pesast arv tagasi ja võrreldakse pessa kirjutatuga. Kui erinevust pole, korratakse sama arvuga FFH. Kui pesast loetud arv erines pessa kirjutatust, võib sellel hetkel testimise katkestada ja väljastada veateate koos vigase pesa aadressiga. Võib ka lihtsalt väljastada veateate ja vigase pesa aadressi, ent jätkata testimist, kuni kogu mälu on kontrollitud.
Antud algoritmi korral joonisel 4.3.1 väljastatakse vigase pesa aadress, ent mälu testitakse lõpuni. Algandmeteks on mälu algusaadress ja lõppaadress, loendur1 loendab korralike pesi, loendur2 aga vigaseid pesi.

[Image - Joonis 4.3.1]

Joonis 4.3.1: Muutmälu testimine

4.3.2.2. Ülesanne
(1) Koostada algoritmi järgi joonisel 4.3.1 programm muutmälu testimiseks. Tulemuste väljastamiseks kasutada püsimälus olevaid alamprogramme. Väljastada teated testi tulemuste kohta, testitud baitide arv, korralike ja vigaste baitide arv. Kontrolleri mälu testida alates aadressist 8000H kuni EFFFH (kaasa arvatud) välja arvatud mäluosa, kus asub testprogramm ise.

4.3.3. Rööpvärati testimine

4.3.3.1. Põhimõte
Rööpväratil on võimalik testida andmeregistreid ning sisend- ja väljundviike. Registri korrasoleku kontrollimiseks initsialiseeritakse port väljundpordiks, kirjutatakse andmeregistrisse testsõna, initsialiseeritakse port sisendpordiks, loetakse andmeregistri sisu ja võrreldakse seda porti saadetud sõnaga. Kui on erinevusi, saadetakse kuvarile veateade koos vigase biti järjenumbriga. Sisendi ja väljundi kontrollimiseks ühendatakse A-port B-pordiga, A-port initsialiseeritakse väljundpordiks, B-port - sisendpordiks ja saadetakse A-porti testsõna, mida loetakse B-pordist. Loetud sõna võrreldakse saadetud sõnaga.
4.3.3.2. Ülesanded
(1) Koostada programm rööpvärati portide andmeregistrite testimiseks. Tulemused väljastada kuvarile. Testida andmeregistrite korrasolekut.

(2) Koostada programm rõõpvärati sisend- ja väljundpordi kontrollimiseks. Tulemused väljastada kuvarile. Ühendada A-port B-pordiga ja testida värati korrasolekut. Kui esineb viga, siis määrata port, mis on korrast ära.

4.3.4. Analoog-digitaalmuunduri testimine

4.3.4.1. Põhimõte
ADC-l on olemas nii unipolaarne kui ka bipolaarne töömoodus. Mõlemas reziimis tuleb kontrollida muundamise täpsust. Selleks antakse signaaliallikast ADC sisendisse alalispinge, mis on muundamisvahemikus. Sisendpinget mõõdetakse digitaalvoltmeetriga. Seejärel käivitatakse muundur ja võrreldakse muundamisel saadud andmesõna tabelis oleva väärtusega [13, lk. 57].
4.3.4.2. Ülesanne
(1) Koostada programm, mis väljastab analoog-digitaalmuundi sisendis oleva pinge väärtuse kuvarile. Väärtused esitada andmesõnana. Muundist loetud andmesõna väljastada kuvarile siis, kui esineb muutus võrreldes eelneva andmesõnaga. Mõõta sisendpinge väärtused mõlema töömooduse korral vähemalt 10 erineva pingeväärtuse korral, kaasa arvatud ka minimaalne ja maksimaalne. Kas saadud tulemus vastab tabelile 2.5.1? Kui ei, siis miks? Koostada graafik, mis näitab andmesõna sõltuvust sisendpingest ja uus tabel. Kui suur sisendpinge muutus vastab ühele kvandile? Kas muundamine on lineaarne?

4.3.5. Digitaal-analoogmuunduri testimine

4.3.5.1. Põhimõte
DAC on seatud unipolaarsesse töömoodusesse. Tema testimiseks tuleb kontrollida sisestatud andmesõna ja saadud väljundpinge vastavust [13, lk.57].
4.3.5.2. Ülesanne
(1) Koostada programm, mis saadaks klaviatuurilt sisestatud andmesõna DAC-i. Kontrollida digitaalvoltmeetriga muunduri väljundpinge vastavust sisestatud andmesõnale vähemalt 10 eri väärtuse korral, kaasa arvatud ka minimaalne ja maksimaalne. Koostada graafik, mis näitaks väljundpinge sõltuvust andmesõnast. Kas muundamine on lineaarne? Kas tulemus vastab tabelile 2.6.1? Kui ei, siis miks? Koostada uus tabel. Kui suur väljundpinge muutus vastab ühele kvandile?

4.3.6. Asünkroonse jadavärati testimine

4.3.6.1. Põhimõte
Asünkroonse jadavärati kanalil ASCI0 saab kontrollida, kas saatmise andmeregister TDR0 on korras. Vastuvõtu andmeregistrit RDR0 ei saa kirjutamis-lugemismeetodil testida, sest RDR0 on vaid loetav register. Ühendades värati viigud joonise 4.3.2 kohaselt, saab testida värati sisendit ja väljundit. Selleks tuleb lubada saatja ja vastuvõtja, saata andmesõna käsuga OUT0 (TDR0),g TDR0 registrisse ja lugeda seejärel käsuga IN0 g,(RDR0) RDR0-registri sisu. Kui viimane on identne saadetud sõnaga, on värat korras. Saatmis- ja vastuvõtualgoritmid ning värati initsialiseerimise kirjeldus on punktis 4.7.2.

[Image - Joonis 4.3.2]

Joonis 4.3.2: ASCI0-i testimine

4.3.6.2. Ülesanded
(1) Koostada programm registri TDR0 kontrollimiseks andmesõnadega FFH ja 00H. Tulemus väljastada kuvarile.

(2) Koostada programm ja algoritm ASCI0-i testimiseks, kui viigud on ühendatud joonise 4.3.2 kohaselt. Tulemused esitada kuvaril. Ühendada viigud ja testida loogikaanalüsaatori abil erinevaid saatmiskiirusi, andmeformaate ja paarsusi. Esitada testide tulemused.


Üles seatud Thu., 09.07.1998.
Viimati muudetud Sat., 06.11.1999 02:57 PM CEST
WWW-lehekülje kujundus, õigused, vastutus © Heiki Kasemägi, 1998-1999

[Tagasi eelmisele leheküljele (JavaScript)] [3. peatükk] [Sisukord] [Peatükk 4.4]