68
ARHITECTURA SISTEMELOR CU MICROPROCESOR (Intel 8080,Zilog Z80) APLICAŢII Aplicaţii 2013: Facultatea E.T.T.I. Iaşi, secţia E.A. Hriţcu Alioşa

Aplicatii ASM

Embed Size (px)

Citation preview

Page 1: Aplicatii ASM

ARHITECTURA SISTEMELOR CU MICROPROCESOR

(Intel 8080,Zilog Z80) APLICAŢII

Aplicaţii 2013: Facultatea E.T.T.I. Iaşi, secţia E.A.

Hriţcu Alioşa

Page 2: Aplicatii ASM
Page 3: Aplicatii ASM

PREFAŢĂ Apariţia circuitelor integrate pe scară largă (Large Scale Integration) şi a

microprocesoarelor, ca automate secvenţiale programabile prin instrucţiuni (programabile soft), a reprezentat o etapă decisivă în dezvoltarea societăţii, etapă reprezentată prin automatizarea tuturor activităţilor (de la automatizarea activităţilor de birou şi de arhivare, până la automatizarea activităţilor industriale). Astfel, s-a obţinut o creştere a bunăstării sociale atât prin mărirea calităţii, cât şi a randamentului tuturor activităţilor.

Sistemele programabile prin instrucţiuni, numite generic sisteme de procesarea (prelucrarea) informaţiei sau sisteme de calcul, ce realizează efectuarea automată a operaţiilor aritmetice, logice, de ramificare şi de transfer, au pătruns în toate domeniile de activitate, dezvoltându-se programe pentru aplicaţii foarte complexe.

Acum folosirea sistemelor de calcul reprezintă o parte foarte importantă în educaţia şi activitatea noastră, viaţa fără calculator şi telefon, ca mijloace de transmitere şi prelucrare a informaţiei, neputând fi concepută. De menţionat că telefonul mobil este foarte util, puterea sa de utilizare fiind însă dată de o unitate centrală de operare (unitate de calcul) ce permite implementarea pe telefon a numeroase aplicaţii asociate unui sistem de calcul.

Omul modern nu poate concepe viaţa fără informaţie şi fără mişcare, ambele controlate şi comandate eficient prin liantul reprezentat de sistemele de calcul.

Simplificând, putem afirma cu siguranţă că viaţa nu poate fi concepută fără calculator, ca element de prelucrare a informaţiei şi fără automobil, simbol al mişcării, ce ne asigură mobilitate.

Elementele de informaţie şi de mişcare se regăsesc în numeroase aplicaţii şi cu precădere în aplicaţiile de frontieră (la limita între domenii). Astfel, automobilul cu ardere internă este controlat, eficientizat şi chiar condus de un sistem de calcul realizat cu microprocesor sau microcontrolor (microcontroller). Sistemul de calcul însuşi este o simbioză între informaţie şi mişcare, prelucrarea informaţiei făcîndu-se cu circuite integrate pe scară largă, dar stocarea ei făcând apel la o memorie de mare capacitate, numită memorie de masă, realizată pe bandă de casetofon sau microdrive, floppy disk ori pe hard disk, ce sunt elemente în mişcare.

Importanţa domeniului electric în dezvoltarea societăţii este evidenţiată de apariţia în acest domeniu de facultăţi tehnice cu specializări pe telecomunicaţii, electronică industrială, microelectronică, ingineria calculatoarelor, automatizări, informatică, electromecanică, electroenergetică ori mecatronică, diversificare realizată după 1990, dar având bazele puse în perioada socialistă de industrializare a României.

Acest curs, intitulat Arhitectura sistemelor cu microprocesor este în programa specializării de Electronică Aplicată a facultăţii de Electronică, telecomunicaţii şi tehnologia informaţiei din Universitatea Tehnică „Gh. Asachi” din Iaşi, fiind precedat de cursurile Circuite integrate digitale şi Automate Programabile.

În cadrul disciplinei, la curs se prezintă bazele funcţionării microprocesoarelor, prin analiza microprocesoarelor de 8 biţi Intel 8080 şi Zilog Z80, iar la aplicaţii se analizeză programul Monitor şi structura unui sistem de dezvoltare cu microprocesor Zilog Z80. Astfel, un cursant dispune de toate cunoştinţele necesare realizării unui sistem cu microprocesor şi programării de aplicaţii în limbaj de asamblare.

Îmi exprim întreaga mea recunoştinţă faţă de toţi cei care au contribuit la educarea şi formarea mea profesională.

Şef lucrări doctor inginer

Hriţcu Alioşa

Page 4: Aplicatii ASM

1-1

LIMBAJE DE PROGRAMARE Fiecare sistem de calcul conţine o unitate centrală de operare capabilă să efectueze un număr

finit de operaţii elementare ce i-au fost implementate. Pentru ca o unitate centrală de operare să efectueze o operaţie elementară ce i-a fost implementată, trebuie să i se indice, atât operaţia elementară de efectuat, cât şi mărimile operanzilor implicaţi, sau locurile din sistem unde aceştia se găsesc.

Definiţie Ansamblul informaţiilor necesare unităţii centrale de operare pentru a efectua o operaţie

elementară implementată se numeşte instrucţiune. Cu alte cuvinte, o instrucţiune reprezintă o comandă dată unităţii centrale de operare. Fiecare

unitate centrală de operare dispune de un grup de instrucţiuni, prin care poate fi comandată să efectueze operaţiile elementare ce i-au fost implementate, numite instrucţiuni de comandă.

Rezolvarea unei probleme complexe într-un sistem de calcul, impune descompunerea problemei într-o succesiune de operaţii elementare comandate unităţii centrale de operare din sistemul de calcul prin instrucţiuni.

Definiţie Ansamblul instrucţiunilor sub a căror comandă o unitate centrală de operare rezolvă o

problemă impusă se numeşte program. Un sistem de calcul operează în baza doi de numeraţie, pe cuvinte binare formate dintr-un

acelaşi număr de caractere binare numite biţi, număr ce reprezintă o caracteristică a sistemului, fiind sisteme de calcul ce operează pe cuvinte binare din 1, 2, 4, 8, 16, 32, 64 sau 128 de biţi. Sistemul binar s-a impus în sistemele de calcul pentru că foloseşte doar două simboluri ce pot fi reprezentate electric prin două tensiuni mult diferite între ele, fapt ce oferă o mare imunitate la perturbaţii .

Rezultă că pentru efectuarea unui program într-un sistem de calcul, instrucţiunile şi datele din componenţa programului vor trebui codificate (reprezentate) prin cuvinte binare, adică în forma simbolică binară.

Dificultatea de programe direct în forma simbolică binară, singura formă simbolică acceptată într-un sistem de calcul, a condus spre alte forme simbolice de reprezentare a datelor şi instrucţiunilor, forme simbolice mai accesibile unui programator.

Definiţii 1. Ansamblul instrucţiunilor de comandă a unei unităţi centrale de operare, reprezentate într-

o formă simbolică, se numeşte limbaj de programare. 2. Ansamblul instrucţiunilor de comandă a unei unităţi centrale de operare, reprezentate în

formă simbolică binară, se numeste limbaj maşină. 3. Un program realizat în limbaj maşină se numeşte program obiect. 4. Un program realizat într-un limbaj de programare a cărui formă simbolică e diferită de

forma simbolică binară a limbajului maşină, se numeşte program sursă. Observaţie Un limbaj de programare este mijlocul de a comunica unui automat programabil sarcina de

efectuat descrisă ca o succesiune de comenzi recunoscute de automat.

Efectuarea într-un sistem de calcul a unui program obiect necesită depunerea cuvintelor binare din componenţa programului în locaţiile memoriei sistemului.

O creştere a eficienţei programării s-a obţinut prin înlocuirea formei simbolice binare a limbajului maşină, cu forma simbolică octală sau forma simbolică hexazecimală, astfel prin reducerea numărului de caractere dintr-un cuvânt, simplificându-se sarcina de programare a aplicaţiilor. Efectuarea într-un sistem de calcul a unui program sursă realizat în forma simbolică octală sau hexazecimală, impune conversia sa într-un program obiect ale cărui cuvinte binare să se

Page 5: Aplicatii ASM

1-2

depună în memoria sistemului în care se operează, sarcini ce se realizează automat cu un program special, rezident în memoria sistemului şi numit în cazul conversiei din forma simbolică octală încărcător octal, iar în cazul conversiei din forma simbolică hexazecimală încărcător hexazecimal.

Dificultatea programării cu limbaje de programare în formele simbolice octală şi hexazecimală a condus la un nou limbaj de programare, într-o nouă formă simbolică, numită formă simbolică de asamblare, în care notaţia fiecărei instrucţiuni de comandă a unităţii centrale de operare conţine două câmpuri, dintre care primul, numit mnemonic, indică sugestiv operaţia efectuată în instrucţiune printr-un grup de litere din denumirea în limba engleză a operaţiei din instrucţiune, iar al doilea câmp, numit operand sau adresă, indică mărimea operanzilor din instrucţiune, sau locaţiile din sistem unde aceşti operanzi se găsesc.

Definiţie Totalitatea instrucţiunilor de comandă a unei unităţi centrale de operare, exprimate în forma

simbolică de asamblare se numeşte limbaj de asamblare.

Pentru a efectua într-un sistem de calcul un program sursă în limbaj de ansamblare, acest program trebuie convertit într-un program obiect ale cărui cuvinte binare să fie depuse în locaţiile sistemului, sarcini ce se realizează automat cu un program special, rezident în memoria sistemului şi numit program de asamblare, ori simplu asamblor. Instrucţiunile limbajelor de programare ce corespund formelor simbolice binară, octală, hexazecimală şi de ansamblare, fiind doar reprezentări simbolice ale instrucţiunilor de comandă ale unităţii centrale de operare, vor specifica şi registrele folosite din unitatea centrală de operare, astfel că programarea cu asemenea limbaje impune programatorului să gestioneze registrele unităţii centrale de operare ale cărei arhitectură internă şi funcţionare trebuie să le cunoască. Fiecare tip de unitate centrală de operare dispune de limbaje proprii de programare în formele simbolice binară, octală, hexazecimală şi de ansamblare şi ca urmare un program realizat într-un asemenea limbaj al unui tip de unitate centrală de operare, nu poate fi efectuat într-un sistem de calcul conţinând alt tip de unitate centrală de operare, spunându-se că limbajele de programare în formele simbolice binară, octală, hexazecimală şi de asamblare nu au portabilitate. Necesitea unor limbaje de programare ce să aibă portabilitate şi să fie mai accesibile unui utilizator, a condus la crearea de noi limbaje de programare formate din instrucţiuni complexe, diferite de cele de comandă ale unităţii centrale de operare şi independente de arhitectura internă şi funcţionarea unităţii centrale de operare, numite limbaje de progamare de înalt nivel. Astfel de limbaje de programare sunt: BASIC, FORTRAN, COBOL, C++, etc. Pentru efectuarea într-un sistem de calcul a unui program sursă realizat într-un limbaj de programare de înalt nivel, se impune, atât conversia programului sursă într-un program obiect format din instruncţiuni de comandă ale unităţii centrale de operare din sistemul de calcul în care se operează, cât şi depunerea cuvintelor binare ale programului obiect în memoria sistemului. Aceste sarcini, de conversie şi depozitare, sunt efectuate automat cu un program rezident în memoria sistemului numit compilator şi despre care se spune că realizează o compilare. Realizarea conversiei instrucţiunilor unui limbaj de programare de înalt nivel, caracterizat prin portabilitate, în instrucţiuni de comandă ale unităţii centrale de operare din sistemul de calcul folosit, impune compilatorului să preia gestionarea registrelor interne ale unităţii centrale de operare, programul compilator fiind astfel dependent de tipul unităţii centrale de operare folosite. O instrucţiune a unui limbaj de programare de înalt nivel fiind mai complexă decât o instrucţiune de comandă a unităţii centrale de operare, va fi convertită de compilator în mai multe instrucţiuni de comandă a unităţii centrale de operare, dintre care unele nu au nici un efect în sarcina de efectuat. De aceea, programul obiect obţinut prin compilarea unui progam sursă realizat cu un limbaj de programare de înalt nivel va fi mai mare decât în cazul realizării programului cu un limbaj de programare format din instrucţiuni de comandă a unităţii centrale de operare, cum sunt limbajele de programare în formele simbolice binară, octală, hexazecimală şi de asamblare. Din această cauză, într-un sistem de calcul timpul de efectuare a unei sarcini programată într-un limbaj de programare de înalt nivel va fi mai mare decât în cazul programării sarcinii direct într-un limbaj

Page 6: Aplicatii ASM

1-3

de programare într-una din formele simbolice binară, octală, hexazecimală, sau de asamblare, adică într-un limbaj de programare la nivelul unităţii centrale de operare. Indiferent de limbajul de programare folosit, conversia unui program sursă în program obiect se realizează cu un progam special de conversie corespunzător limbajului de programare folosit şi care va ocupa o parte a memoriei sistemului, fapt ce reduce capacitatea de memorie aflată la dispoziţia programatorului. În afara conversiei propriuzise, programelor de conversie li se pot implementa (prevedea) şi efectuarea altor sarcini, ceea ce duce la creşterea mărimii şi complexităţii acestor programe. Dintre programele de conversie amintite, un asamblor poate necesita, după complexitatea sa, o zonă de memorie de 2... 16 kilolocaţii, în timp ce un compilator necesită peste 32 kilolocaţii. Din considerentele prezentate mai sus, se recomandă ca pogramarea în limbaj de asamblare să fie utilizată în sisteme de calcul de capacitate redusă, pentru comenzi în timp real ce necesită rezolvări rapide, în aplicaţii de serie mare (pentru economie de circuite de memorie) şi în aplicaţiile necesitând multe operaţii de transfer şi puţine calcule, în timp ce programarea în limbaje de înalt nivel se recomandă în sistemele de mare capacitate, în aplicaţiile cu multe calcule, în aplicaţiile de serie mică unde preţul de cost nu contează şi când se dispune deja de programe performante de înalt nivel. Se tinde spre generalizarea limbajelor de înalt nivel prin creşterea capacităţii circuitelor de memorie şi a vitezei de operare a unităţilor centrale de operare integrate numite microprocesoare şi prin apariţia de limbaje de pogramare de înalt nivel, performante.

Page 7: Aplicatii ASM

2-1

ASAMBLOARE TIPURI DE ASAMBLOARE Dupǎ modul în care opereazǎ şi dupǎ sarcinile suplimentare pe care le executǎ un asamblor,

se deosebesc urmatoarele tipuri de asambloare: − Cross-asamblorul, este un program de asamblare prin care se realizeazǎ conversia unui

program sursǎ realizat în limbaj de asamblare al unui tip de unitate centralǎ de operare, într-un program obiect exprimat în limbajul maşinǎ al tipului de unitate centralǎ de operare folositǎ în sistemul de calcul în care se opereazǎ. Cross-asamblorul realizeazǎ portabilitatea unui limbaj de asamblare.

− Auto-asamblorul, numit şi asamblor rezident, este programul de asamblare care opereazǎ într-un sistem de calcul asupra programelor realizate in limbajul de asamblare al unitǎţii centrale de operare din sistemul de calcul pe care se operează.

− Macro-asamblorul, este programul de asamblare care permite ca la programarea în limbaj de asamblare, programatorul sǎ poatǎ defini, în cadrul oricǎrui program, noi instrucţiuni în limbaj de asamblare, numite macro-instrucţiuni, pe care apoi sǎ le foloseascǎ în realizarea programului.

− Meta-asamblorul, este un program de asamblare ce deserveşte mai multe tipuri de unitǎţi centrale de operare şi operând deci cu mai multe limbaje de asamblare.

− Asamblorul cu o singurǎ trecere, este programul de asamblare care opereazǎ printr-o singurǎ explorare asupra unui program sursǎ în limbaj de asamblare. Acest tip de asamblor trebuie sǎ rezolve problema notaţiilor din programul în limbaj de asamblare şi a generării programului obiect corect, printr-o singură explorare a programului sursă în limbaj de asamblare.

− Asamblorul cu dublǎ trecere, este programul de asamblare care acţioneazǎ asupra unui program sursǎ în limbaj de asamblare, prin douǎ explorǎri succesive, la prima trecere identificându-se şi definindu-se notaţiile simbolice folosite, iar la a doua trecere înlocuindu-se notaţiile cu valorile pe care le definesc şi generându-se programul obiect corect.

− Micro-asamblorul, numit şi asamblor de microprograme, este un program utilizat pentru redactarea microprogramelor, care, înscrise în memoria de comandǎ a unei unitǎţi centrale de operare, stabilesc modul de efectuare a instrucţiunilor de comandǎ a unitǎţii centrale de operare.

CARACTERISTICILE UNUI ASAMBLOR Un asamblor impune ca instrucţiunile dintr-un limbaj de asamblare sǎ fie divizate în

urmǎtoarele zone, numite câmpuri: câmpul etichetǎ, câmpul mnemonic, câmpul operand şi câmpul comentariu. Delimitarea câmpurilor dintr-o instrucţiune în limbaj de asamblare se realizeazǎ cu urmǎtoarele semne separatoare:

„ : ” = separǎ câmpurile etichetǎ şi mnemonic; „ ” (= spaţiu alb) = separǎ câmpurile mnemonic şi operand; „ , ” = separǎ doi operanzi din câmpul operand; „ ; ” = separǎ câmpurile operand şi comentariu. Câmpul etichetǎ este primul câmp dintr-o instrucţiune în limbaj de asamblare, completarea

acestiu câmp nefiind însǎ obligatorie. Acest câmp poate conţine o notaţie simbolicǎ, numitǎ etichetǎ, cǎreia asamblorul îi atribuie ca valoare adresa locaţiei de memorie în care se aflǎ primul cuvânt al instrucţiunii numit cuvânt instrucţiune.

Deoarece, notaţiile etichetelor contribuie la documentarea unui program, a cǎrui rapidǎ urmǎrire şi înţelegere o uşureazǎ, se recomandǎ folosirea de notaţii sugestive pentru etichete. Astfel, prima instrucţiune dintr-un grup de instrucţiuni ce realizeazǎ o temporizare, va primi eticheta „TIME” .

Pentru stabilirea notaţiilor etichetelor se recomandǎ: − sǎ nu se utilizeze ca etichete notaţiile simbolice de instrucţiuni, deoarece aceste notaţii fie

creazǎ confuzie, fie nu sunt luate în consideratie de asamblor; − sǎ nu se utilizeze pentru etichete notaţii cu un numǎr de caractere mai mare decât cel admis,

deoarece asamblorul va elimina, de la începutul etichetei, caracterele suplimentare, existând

Page 8: Aplicatii ASM

2-2

posibilitatea ca noua etichetǎ rezultatǎ prin eliminare de caractere, fie sǎ coincidǎ cu o alta, generând eroare, fie sǎ înceapǎ cu un caracter înterzis de asamblor;

− sǎ se evite utilizarea în notaţiile etichetelor a caracterelor speciale numerice şi alfanumerice ori a literelor mici, recomandându-se doar folosirea majusculelor şi a cifrelor;

− notaţia fiecǎrei etichete sǎ înceapǎ cu o literǎ mare, dar diferitǎ de I, O, Z. Folosirea de etichete la realizarea unui program în limbaj de asamblare oferǎ urmǎtoarele

avantaje: − o etichetǎ atribuitǎ unei instrucţiuni permite eeperarea uşoarǎ a instrucţiunii în cadrul

programului; − dacǎ se atribuie altǎ valoare unei etichete, asamblorul va efectua automat modificarea în

toate instrucţiunile din program, ce conţin acea etichetǎ; − asamblorul poate translata un întreg program într-o altă zonǎ a memoriei, doar prin

adǎugarea unei constante la fiecare etichetǎ din program; − etichetarea sugestivǎ a primei instrucţiuni dintr-un program, etichetǎ reprezentând titlul

programului, permite o bunǎ arhivare a programului într-o blibiotecǎ de programe; − folosirea etichetelor uşureazǎ munca de programare, prin faptul cǎ nu mai trebuie calculate

adresele locaţiilor de memorie în care urmeazǎ a se depune cuvintele programului. Câmpul mnemonic al unei instrucţiuni în limbaj de asamblare, indicǎ operaţia efectuatǎ în

înstrucţiune printr-un grup de litere provenit din denumirea operaţiei în limba englezǎ. Câmpul comentariu este admis de toate asambloarele, comentariile neavând nici un efect în

obţinearea programului obiect. Rolul comentariilor este doar de a permite uşoara înţelegere a programelor.

Pentru realizarea de comentarii eficiente se recomandǎ: − comentariile sǎ fie scurte, precise şi fǎrǎ abrevieri; − în comentariu se va arǎta funcţia îndeplinitǎ în aplicaţie şi nu modul cum unitatea centralǎ

de operare executǎ instrucţiunile; − se vor comenta punctele cheie ale programului şi instrucţiunile a căror semnificaţie nu este

evidentǎ; − comentariile se fac pe instrucţiuni şi pe secvenţe de instrucţiuni; − se vor comenta detaliile semnificative. Câmpul operand, numit şi câmp adresǎ, este câmpul al cǎrui conţinut este lǎsat la dispoziţia

programatorului, asamblorul impunând în acest câmp urmǎtoarele: a) Registrele interne ale unitǎţii centrale de operare să fie indicate printr-o notaţie impusǎ; b) Un numǎr ce reprezintǎ un operand, sau o adresǎ, poate fi indicat într-o instrucţiune în

limbaj de asamblare în sistemele binar, octal, hexazecimal, indicate prin literele B, Q şi respectiv H adǎugate la sfârşitul numǎrului, în timp ce un numǎr neurmat de o literǎ este interpretat de asamblor ca exprimat în baza zece. Deoarece asamblorul impune ca un numǎr sǎ înceapǎ obligatoriu cu o cifrǎ, forma hexazecimalǎ de exprimare a unui numǎr, al cǎrui prim caracter este o literǎ, va fi obligatoriu precedatǎ de cifra 0 (zero).

Exemplu ADD 3 ; A←A+ 103 =A+ 200000011

LD A,47H ; A← 1647 = 2.00 00 1111

LD A,0F0H ; A← 16F0 = 2.01 11 0001

LD A,147Q ; A← 8147 = 21000 . .1111

SUB 01100000B ; A←A - 201100000

c) Un operand sau o adresǎ pot fi expimate prin coduri ASCII (= American Standard Code for Interchange Information) ale unor caractere, fapt recunoscut de asamblor prin încadrarea grupului de caractere ASCII între apostrofuri.

Exemplu LD H,’B’ ; H←cod ASCII al literei B

d) Un operand sau o adresǎ pot fi indicate printr-o notaţie simbolicǎ, asamblorul impunând ca

Page 9: Aplicatii ASM

2-3

notaţia folositǎ sǎ fie definitǎ printr-o pseudoinstrucţiune specificǎ, anterior instrucţiunii unde-i folositǎ.

Exemplu NAME : EQU 5 ; Se defineşte NAME = 105 = 200000101

… LD B, NAME ; B←NAME = 105 = 200000101

e) Un operand poate fi indicat prin adresa locaţiei unde se aflǎ, adresǎ dată de rezultatul relaţiei de adunare între un numǎr, numit deplasament, şi conţinutul, simbolizat prin $, al numǎrǎtorului de locaţii al asamblorului, numărător ce are o funcţionare similarǎ cu a registrului numǎrator de adrese PC (=Program Counter) al unitǎţii centrale de operare. Deplasamentul însă, trebuie indicat într-o formǎ acceptatǎ de asamblor.

Exemplu LD ($+0E1H), A ; cuvântul din registrul A e încǎrcat în locaţia a cărei ; adresă este rezultatul expresiei: $+16E1

f) Un operand sau o adresǎ pot fi indicate ca rezultat al unei expresii între mǎrimi exprimate într-o formǎ acceptatǎ de asamblor, mǎrimile şi rezultatul având în binar o reprezentare prin 16 caractere binare. Într-o expresie în care intervin mai multe mǎrimi, asamblorul va efectua întâi operaţiile dintre paranteze, restul operaţiilor fiind efectuate într-o ordine de prioritate impusǎ de asamblor, operaţiile cu aceiaşi prioritate fiind efectuate în ordinea în care apar de la stǎnga spre dreapta espresiei. Punerea unei întregi expresii între paranteze semnificǎ însǎ conţinutul locaţiei de memorie a cǎrei adresǎ este chiar rezultatul expresiei.

Operaţiile pe care asamblorul ZILOG Z80 le permite în câmpul operand şi ordinea lor de

prioritate, sunt date în tabelul urmǎtor:

OPERAŢIE PRIORITATE DESCRIERE

+ -

.NOT. .RES.

1

Incrementare Decrementare NU logic REZULTAT

** 2 Exponenţiere * /

.MOD. .SHR. .SHL.

3

Înmulţire Împǎrţire MODULO Decalaj logic la dreapta Decalaj logic la stǎnga

+ -

4 Adunare Scǎdere

.AND. 5 ŞI logic .OR.

.XOR. 6

SAU logic SAU EXCLUSIV logic

= .GT. , .LT.

.UGT. , .ULT. 7

Egalitate > , < între numere fǎrǎ semn > , < între numere cu semn

Observaţii 1) Operaţia .RES. semnificǎ suprimarea depǎşirii în cazul numerelor cu semn în vederea

pǎstrǎrii nealterate a semnului. 2) Operaţiile .SHL. , .SHR. ce realizeazǎ decalarea logicǎ la stǎnga, respectiv la dreapta vor

fi indicate în forma

Page 10: Aplicatii ASM

2-4

1 2.SHL. n ,n

în care 1n este numǎrul decalǎrilor de efectuat, iar 2n este numarul ai cǎrui biţi sunt decalaţi.

Aceste decalǎri sunt numite logice deoarece bitul de pondere maximǎ dintr-o decalare cu o poziţie la dreapta şi bitul de pondere minimǎ dintr-o decalare cu o poziţie la stânga, rǎmânând liberi în urma decalǎrii, vor fi puşi în „0” logic.

3) Rezultatul generat într-o operaţie de comparare va fi unul din calificative FALS, ori ADEVǍRAT, calificativul FALS fiind indicat printr-un rezultat cu toţi biţii în „0” logic, iar rezultatul ADEVǍRAT având toţi biţii în „1” logic.

Page 11: Aplicatii ASM

3-1

PSEUDOINSTRUCŢIUNI Un limbaj de asamblare al unei unităţi centrale de operare este format din instrucţiunile de

comandă a unităţii centrale, şi dintr-un grup special de instrucţiuni, numite pseudoinstrucţiuni, prin care se comanda asamblorului, şi nu unităţii centrale de operare, efectuarea unor operatii absolut necesare în obţinerea programului obiect corect. O pseudoinstrucţiune nu are o codificare binară proprie şi, spre deosebire de o instrucţiune de comandă a unităţii centrale de operare, nu este convertită în cuvinte binare.

Limbajul de asamblare al microprocesorului Intel 8080, conţine următoarele pseudoinstrucţiuni:

a) Pseudoinstrucţiunea cu simbolizarea: ETICHETĂ: ORG adresă; comentariu ,

comandă asamblorului să atribuie notaţiei din câmpul etichetă, ca valoare, numărul de adresă indicat în câmpul operand într-o formă acceptată de asamblor, şi să iniţializeze numărătorul de locaţii al asamblorului cu numărul de adresă din câmpul operand, ce reprezintă chiar adresa primei locaţii a zonei de memorie în care se va depune programul ce urmează, operaţie numită de iniţializare, şi indicată cu mnemonica ORG după denumirea ORIGIN dată acestei operaţii în limba engleză.

Într-un asamblor, numărătorul de locaţii, a cărui funcţionare e similară cu a registrului numărator de adrese PC (=Program Counter) al unităţii centrale de operare, va indica adresa locaţiei de memorie alocată depunerii fiecărui cuvânt al programului obiect.

Într-un program în limbaj de asamblare, acolo unde se impune trecerea la o nouă zonă de memorie a cărei prima adresă este diferită de cea conţinută în numărătorul de locaţii al asamblorului, se va introduce o nouă pseudoinstrucţiune cu mnemonica ORG.

b) Pseudoinsrtucţiunea cu simbolizarea: ETCHETĂ: EQU operand; comentariu ,

comandă asamblorului să atribuie notaţiei din câmpul etichetă valoarea indicată în câmpul operand într-o formă acceptată de asamblor, operaţie numită de echivalenţă şi indicată cu mnemonica EQU stabilită după denumirea EQUATE dată acestei operaţii în limba engleză.

Într-un program, unei etichete i se poate atribui o valoare printr-o pseudoistrucţiune de echivalentă, doar o singură dată, orice redefinire ulterioară a notaţiei etichetei nefiind luată în consideraţie de asamblor.

c) Pseudoinstrucţiunea cu simbolizarea: ETICHETĂ: SET operand; comentarii ,

comandă asmblorului să atribuie notaţiei din câmpul etichetă valoarea indicată în câmpul operand într-o formă acceptată de asamblor, operaţie numită de setare şi având mnemonica SET ce reprezintă denumirea dată acestei operaţii în limba engleză. Pseudoinstrucţiunea de setare acţionează ca şi cea de echivalenţă, de care se deosebeşte însă prin aceea că într-un program o aceiaşi etichetă poate fi redefinită ori de câte ori este nevoie.

În limbajul de asamblare al microprocesorului Z80, operaţia de setare este numită definire etichetă, iar pseudoinstrucţiunea echivalentă celei de setare are simbolizarea:

ETICHETĂ: DEFL operand; comentarii , în care mnemonica DEFL a fost stabilită după denumirea DEFINE LABEL din limba engleză a operaţiei definire etichetă.

d) Pseudoinstrucţiunea cu simbolizarea: ETICHETĂ: DS operand; comentarii ,

comandă asamblorului ca, începând cu adresa aflată în numărătorul de locaţii al asamblorului, să rezerve atâtea locaţii succesive de memorie, câte specifică numărul indicat în câmpul operand într-o formă acceptată de asamblor, şi să atribuie notaţiei din câmpul etichetă,ca valoare, adresa primei locaţii rezervate, operaţie numită difinire stocare şi având mnemonica DS stabilită după denumirea DEFINE STORAGE date acestei operaţii în limba engleză.

În locaţiile rezervate cu această pseudoinstrucţiune, se vor depune ulterior date.

Page 12: Aplicatii ASM

3-2

e) Pseudoinstrucţiunea cu simbolizarea: ETICHETĂ: DB operand; comentarii ,

comandă asamblorului să depună cei maxim 8 octeţi indicaţi în câmpul operand într-o formă acceptată de asamblor, şi în ordinea în care apar de la stânga spre dreapta câmpului operand, în locaţii succesive de memorie, începând cu adresa aflată în numărătorul de locaţii al asamblorului, şi să atribuie notaţiei din câmpul etichetă, ca valoare, adresa de depozitare a primului octet, operaţie numită definire octet şi având mnemonica DB stabilită după denumirea DEFINE BYTE dată operaţiei în limba engleză.

f) Pseudoinstrucţiunea cu simbolizarea: ETICHETĂ: DW OPERAND; comentarii ,

comandă asamblorului să depună cele maxim 8 cuvinte din câmpul operand, fiecare cuvânt format din câte doi octeţi, indicaţi într-o formă acceptată de asamblor, începând cu octetul de pondere minimă, în locaţii succesive de memorie, pornind de la adresa aflată în numărătorul de locaţii al asamblorului şi în ordinea în care octeţii apar de la stânga spre dreapta câmpului operand, şi să atribuie notaţiei din câmpul etichetă, ca valoare, adresa de depozitare a primului octet, operaţie numită definire cuvânt şi având mnemonica DW, după denumirea DEFINE WORD dată acestei operaţii în limba engleză.

g) Pseudoinstrucţiunea cu simbolizarea: ETICHETĂ: END operand; comentarii ,

semnalează sfârşitul programului sursă în limbaj de asamblare şi comandă asamblorului să atribuie notaţia din câmpul etichetă, ca valoare, adresa indicată în câmpul operand într-o formă acceptată de asamblor şi să încarce această adresă în registrul numarator de adrese PC al microprocesorului, astfel trecându-se la executarea programului pornind de la această adresă. Necompletarea câmpului operand semnifică faptul că adresa de început a programului este zero.

Observaţii (1) Când în câmpul operand al unei pseudoinstrucţiuni, sau instrucţiuni, se foloseşte o notaţie,

această notaţie trebuie definită anterior în program cu o pseudoinstrucţiune specifică. (2) Într-un program o adresă neetichetată va fi indicată printr-o expresie de adunare ori

scădere a unei constante dintr-o etichetă din program, astfel reducând numărul de etichete folosite ce pot fi sugestive.

(3) Un program în limbaj de asamblare este cuprins între pseudoinstrucţiunile ORIGIN şi END.

(4) Orice limbaj de asamblare conţine pseudoinstrucţiunile prezentate, eventual cu alte mnemonice. Astfel, pseudoinstrucţiunile limbajului de asamblare al microprocesorului ZILOG Z80 sunt:

(a1) ETICHETĂ : ORG adresa; comentariu (b1) ETICHETĂ : EQU operand; comentariu (c1) ETICHETĂ : DEFL operand; comentariu (d1) ETICHETĂ : DEFS operand; comentariu

Mnemonica DEFS (= DEFINE STORAGE) indică operaţia definire stocare. (e1) ETICHETĂ : DEFB operand; comentariu

Mnemonica DEFB (=DEFINE BYTE) indică operaţia definire octet, câmpul operand conţinând un singur octet.

(f1) ETICHETĂ : DEFW operand; comentariu Mnemonica DEFW (=DEFINE WORD) indică operaţia definire cuvânt, câmpul operand conţinând un singur cuvânt indicat începând cu octetul de pondere minimă.

(g1) ETICHETĂ: END operand; comentariu Mnemonica END indică sfarşitul programului sursă în limbaj de asamblare.

Modul de folosire a pseudoinstrucţiunilor la programarea în limbaj de asamblare este

prezentat în următorul

Page 13: Aplicatii ASM

3-3

Exemplu

ETICHETĂ: SIMBOLIZARE; (Mnemonic+Operand)

COMENTARII

CANRAS: ORG 1000H ; CANRAS=1000H = adresa primului cuvânt din program şi titlul programului.

CONST: EQU 0F0H; CONST=F0H= valoare ce nu poate fi redefinită NAME: SET ‘B’; NAME=Cod ASCII al literei B=valoare ce poate fi

redefinită DB 10H ; CANRAS=(1000H) 10H DW 0010H ; (1001H) 00H ; (1002H)10H

CLOCK: DS 1 ; rezervare locaţie cu adresa 1003H=CLOCK MOV A,C ; AC şi (1004H)MOV CALL 00,51H ; apel la adresa 5100H

(1005H)CALL ; (1006H)00H ; (1007H)51H BLOK: ORG 5100H ; programul se continuă la adresa 5100H

ADI NAME ; AA+NAME = ’A’+’B’ (5100H)ADI ; (5101H)’B’=NAME

…. END 1004H ; PC1004H ; execuţia programului începe de la

adresa 1004H, iar programul sursă s-a încheiat.

MACROINSTRUCŢIUNI Într-un program în limbaj de asamblare, un acelaşi grup de instrucţiuni se poate repeta de mai

multe ori, la fiecare repetare însă o parte dintre operanzi modificându-şi valorile. Pentru simplificarea programării în limbaj de asamblare, asambloarele puternice, numite macro-asambloare, oferă programatorului posibilitate definirii într-un program a unui grup repetitiv de instrucţiuni, în care operanzii variabili numiţi parametri sunt reprezentaţi cu notaţii simbolice, printr-o instrucţiune distinctă, numită macroinstrucţiune, cu alt mnemonic şi al cărei câmp operand conţine enumerarea notaţiilor parametrilor.

Grupul repetitiv de instrucţiuni, pentru a fi definit ca o macroinstrucţiune, se încadrează între două pseudoinstrucţiuni prevăzute limbajului de asamblare, una de început având simbolizarea:

ETICHETĂ: MACRO enumerare notaţii parametri; comentarii , ce informează asamblorul că instrucţiunile ce urmează se definesc ca o macroinstrucţiune al cărei mnemonic este dat de notaţia din câmpul ETICHETĂ şi în al cărei câmp operand se enumeră notaţiile parametrilor, şi una de sfârşit având simbolizarea:

ETICHETĂ: ENDM; comentarii , şi indicând asamblorului sfârşitul definirii macroinstrucţiunii. Se spune că s-a realizat definirea macroinstrucţiunii.

Astfel, în program, în locul repetării grupului de instrucţiuni pentru valori determinate ale parametrilor, se introduce macroinstrucţiunea cu mnemonica stabilită la definirea sa şi în al cărei câmp operand sunt enumerate valorile parametrilor exact în ordinea în care apar la definirea macroinstrucţiunii. Se spune că în program se realizează referirea la macroinstrucţiunea definită.

În procesul asamblarii, pentru obţinerea formei binare a programului obiect, fiecare macroinstrucţiune din program va fi înlocuită prin instrucţiunile din componenţa sa în care parametrii au valorile indicate în macroinstrucţiune. Se spune că la asamblare se realizează dezvoltarea macroinstrucţiunilor din programul sursă.

Programarea cu macroinstrucţiuni implică deci următoarele trei etape: definirea macroinstrucţiunilor, realizată la începutul unui programsursă în limbaj de asamblare, referirea la macroinstrucţiunile definite în procesul de realizare a programuuil sursă şi dezvoltarea

Page 14: Aplicatii ASM

3-4

macroinstrucţiunilor din programul sursă, în procesul asamblării . Programarea cu macroinstrucţiuni oferă următoarele avantaje: - programul sursă cu macroinstrucţiuni este mai scurt; - macroinstrucţiunile reprezintă noi instrucţiuni pentru un limbaj de asamblare; - definirea corectă a macroinstrucţiunilor reduce considerabil probabilitatea comiterii unei

erori la programare. La programarea cu macroinstrucţiuni, deşi programele sursă obţinute sunt mai scurte,

programele obiect rezultate în urma asamblării au aceiaşi mărime ca în cazul progamării f ără macroinstrucţiuni.

Observaţie Spaţiul de memorie ocupat de un program va fi mai mic dacă macroinstrucţiunile ce definesc

un grup mai mare de 15 instrucţiuni vor fi înlocuite prin subprograme.

PROGRAM SURSĂ CU MACROINSTRUCŢIUNI PROGRAM

DEZVOLTAT TIME : MACRO NAME, FLY ; Instr. M1 ; definire macroinstrucţiune, cu Instr. M2 ; parametrii NAME şi FLY Instr. M3 ; ENDM ; Instr. P1 ; Instr. P1 Instr. P2 ; Instr. P2

TIME 10,20 ; referire la macroinstrucţiune, cu ; NAME=10, FLY=20, ce va ; fi dezvoltată în instrucţiunile ; componente, la asamblare

Instr. M1 Instr. M2 Instr. M3

Instr. P3 ; Instr. P3 Instr. P4 ; Instr. P4

TIME 10H,20H ; referire la macroinstrucţiune, cu ; NAME=10H, FLY=20H, ce va ; fi dezvoltată în instrucţiunile ; componente, la asamblare

Instr. M1 Instr. M2 Instr. M3

Instr. P5 Instr. P5 … …

Page 15: Aplicatii ASM

4-1

ADUNAREA A DOUĂ NUMERE DIN 16 CIFRE ZECIMALE Aplicaţia constă în adunarea a două numere din câte 16 cifre zecimale, fiecare număr fiind

situat în opt locaţii succesive de memorie începând cu cifra de pondere minimă, iar fiecare locaţie conţinând câte două cifre zecimale. Microprocesorul Intel 8080 folosit, operând pe cuvinte din opt biţi, rezultă că adunarea acestor numere necesită opt etape successive. În fiecare etapă se vor aduna octeţii de aceeaşi pondere ai numerelor şi cifra de transport generată din etapa anterioară.

Această sarcină va conţine o fază de iniţializare a registrelor folosite din microprocesor, registre ce sunt indicate mai jos cu precizarea destinaţiei lor.

Numărarea celor opt etape de adunare foloseşte registrul C ca numărător prin decrementare a etapelor aplicaţiei.

Această sarcină, fiind descrisă ca un subprogram, va realiza cu primele instrucţiuni salvarea în stivă a registrelor afectate şi care vor fi refăcute din stivă cu ultimele instrucţiuni din program.

Algoritmul descris prin organigramă şi programul sarcinii sunt prezentate mai jos.

Adresă ETICHETĂ : SIMBOLIZARE ; COMENTARII Nr.cicluri ORG 1080 H; Informare asamblor că adresa

de început este 1080 H: numărător locaţii ← 1080 H.

1080 H 1081 H

SUM: PUSH PSW; PUSH B;

Salvare în stivă a registrelor afectate.

3c 3c

1082 H 1084 H

MVI C,8; XRA A;

Numărare etape cu registrul C Anulare A şi CY printr-o operaţie SAU EXCLUSIV.

2c 1c

1085 H 1086 H

REPEAT: LDAX D; ADC M;

Adunarea în binar a octeţilor de aceeaşi pondere.

2c 2c

1087 H DAA; Corecţie rezultat. 1c 1088 H MOV M,A; Salvare rezultat în locul

primului operand care astfel se distruge.

2c

1089 H 108A H

INX H; INX D;

Generare adrese în pregătirea etapei următoare.

1c 1c

108B H 108C H

DCR C; JNZ REPEAT;

Numărare etapă încheiată afectând Z=0 dacă sarcina nu s-a terminat, când se reia o nouă etapă de la eticheta REPEA .

1c 3c

108F H 1090 H

POP B; POP PSW;

La terminarea sarcinii, când Z=1, se refac din stivă registrele afectate BC şi PSW.

3c 3c

H Adresă octet din primul operand L D Adresă octet din al 2-lea operand E B Numărător de etape C A S Z - AC - P - CY F (=PSW)

Page 16: Aplicatii ASM

4-2

Adresă ETICHETĂ : SIMBOLIZARE ; COMENTARII Nr.cicluri 1091 H RET; Revenire în programul

apelant. 3c

END 1080 H; Informare asamblor că programul s-a sfârşit şi să se treacă la execuţia sa prin transferul: PC← 1080 H.

Total: 31c

Fig.1 Organigrama aplicaţiei SUM Teme 1. Să se completeze programul de la rubrica ADRESĂ şi pentru fiecare instrucţiune a

programului să se indice atât tipurile de adresare folosite, cât şi descrierea sintetică. 2. Să se determine timpul T de efectuare a programului ştiind că frecvenţa tactului sistemului

este f=2Mhz şi considerând că fiecare ciclu de maşina este efectuat în trei stări. 3. Rol stivă. 4. Salvare registre în memoria stivă la început de subrutină.

START

PUSH PSW,B C←8 A←A ⊕ A; (⇒ ⇒CY=0, A=0)

A←(DE) A←A+(HL)+CY DAA (HL)←A

HL←HL+1 DE←DE+1

C←C-1

Z=1?

POP B, PSW

STOP

Iniţializare registre microprocesor şi salvarea registrelor afectate în stivă.

Adunarea octeţilor cu aceeaşi pondere şi salvare rezultat în locul primului operand.

Pregătirea următoarei etape.

Numărare etapă încheiată.

Sarcină terminată?

Refacerea din stivă a registrelor afectate.

Nu

Da

SUM:

REPEAT:

Page 17: Aplicatii ASM

4-3

5. Registrele de date ale microprocesorului Intel 8080 : B, C, D, E, H, L, M = (HL), A. 6. PSW (= Processor Status Word ), notat şi AF. Rolul bistabilelor de condiţie.

S Z - AC - P - CY

PSW 7 PSW6 PSW5 PSW4 PSW3 PSW2 PSW1 PSW 0 Low Byte of PSW (=Processor Status Word) ≡ F (=Flag Flip-Flop Register)

7. Ajustare zecimală a unui rezultatului din registrul accumulator A. 8. Afectarea bistabilului de condiţie de transport CY în instrucţiunile aritmetice şi logice. 9. Operare în complement faţă de 2.

Page 18: Aplicatii ASM

5-1

ÎNMUŢIREA A DOUĂ NUMERE DE 8 BIŢI Programul de înmuţire a două numere de 8 biţi va fi realizat după organigrama oţinută pe baza

alocării registrelor interne de date ale microprocesorului Intel 8080 şi a algoritmului evidenţiat prin următorul exemplu de înmulţire a două numere din cîte 3(trei) biţi fiecare:

Deânmulţit ………. 1 1 0 × Înmulţitor ……….. 1 0 1 1 1 0 0 0 0 1 1 0 0 Rezutat………. 1 1 1 1 0

Pentru a evidenţia etapele identice în algoritmul operaţiei de înmulţire şi desfăşurarea fiecărei etape, exemplul prezentat se pune în următoarea formă: 1 1 0 × ………………..Deânmulţit 1 0 1 ………………..Înmulţitor Etapa 1 : produs parţial 1 (iniţial nul)……...0 0 0 + 1 1 0 rezultat parţial 1…….....................1 1 0 → Etapa 2 : produs parţial 2……….....................1 1 0 + 0 0 0 0 rezultat parţial 2……..................... 0 1 1 0 → Etapa 3 : produs parţial 3………......................0 1 1 0 + 1 1 0 0 rezultat parţial 3……...................... 1 1 1 1 0 = Rezultat Final

Acest exemplu evidenţiază că operaţia de înmulţire a două numere binare are loc în atâtea etape identice ca desfăşurare, câţi biţi are înmulţiorul. În fiecare etapă se stabileşte starea definitivă a câte unui bit al rezultatului căutat, începând de la bitul de pondere minimă, şi doar în etapa finală se stabileşte starea definitivă pentru biţii de pondere maximă al căror număr este egal cu numărul de biţi ai deânmulţitului. Într-o etapă se formează un produs parţial deplasând cu o poziţie la dreapta rezultatul din etapa precedentă, la care adunând, sau nu, deânmulţiul (după cum bitul implicat din înmulţitor este în starea logică “1”, respectiv ”0”) se generează rezultatul parţial al etapei.

Se porneşte de la un produs parţial iniţial nul în prima etapă, iar rezultatul ultimei etape este chiar rezultatul căutat.

În efectuarea acestei sarcini de înmulţire se folosesc registrele microprocesorului Intel 8080 indicate în fig.1 cu precizarea destinaţiei lor, modul lor de folosire fiind evidenţiat în organigrama aplicaţiei, ce reprezintă forma grafică a algoritmului de rezolvare sarcinii de înmulţire.

Sarcina de înmulţire este descrisă ca subprogram, fapt ce impune să se salveze în stivă registrele microprocesorului afectate în subprogram, cu primele instrucţiuni din subprogram, iar cu ultimele instrucţiuni ale subprogramului să se refacă din stivă aceste registre. Astfel se asigură funcţionarea corectă a programului apelant în momentul revenirii din subprogramul încheiat, deoarece registrele microprocesorului au conţinutul din momentul apelării. Salvarea, atât a registrelor de date, cât şi a celor de adrese, se face în memoria stivă. Un transfer cu memoria stivă implică transferul a doi octeţi, acest mod de funcţionare fiind datorat faptului că memoria stivă a fost concepută iniţial doar pentru salvare de numere de adresă.

Conţinutul registrului HL este stabilit anterior subprogramului. În această aplicaţie, etapa de inţializare este numerotată ca a 9-a etapă şi de aceea

numărătorul de etape este iniţializat în 9.

Page 19: Aplicatii ASM

5-2

Fig.1 Alocarea registrelor şi organigrama aplicaţiei

START

STOP

E←E-1

A←A+B

(HL) ← B HL←HL-1 (HL) ← C

POP D,B,PSW RET

A←B

A←C 1×RAR C←A

1×RAR, B←A

PUSH PSW PUSH B,D B←0 E←9 C←(HL) HL ← HL+1 D←(HL)

Salvare în stivă

Iniţializare registre µP

CY←bitul implicat din înmulţitor

Numărare etapă afectând Z=1 la sfârşitul sarcinii .

Sarcină încheiată ?

A←produs parţial

Test bit înmulţitor

Rezultat parţial

Produs parţial

Salvare rezultat

Refacere din stivă

CY=1?

Da

Nu

Z=1?

Nu

Da

MUL :

CYCLE :

PASS :

STOP :

A←C 1×RAR C←A

Definitivare rezultat.

D Deînmulţit Numărător de etape E

B Rezultat parţial Înmulţitor C A CY 7 6 .. 0

Page 20: Aplicatii ASM

5-3

Adresă (H)

ETICHETĂ : SIMBOLIZARE ; COMENTARIU Nr.

cicluri ORG 1800H ; Nr. locaţii ←1800H=adresă de

început a programului.

1800 MUL: PUSH PSW ; PUSH B ; PUSH D ;

Salvare în stivă a registrelor PSW,B,D în această ordine.

MVI B,0 ; MVI E,9; MOV C,M ; INX H ; MOV D,M ;

B←0 E←9 C←M=(HL)= înmulţitor H←HL+1 D←M=(HL)=deânmulţit

180A CYCLE: DCR E ; JZ STOP ;

Numărare etapă cu Z=1 la sfârşit sarcină.CYCLE=180AH

MOV A,C; RAR; MOV C,A ;

Bitul de testat al înmulţitorului se transferă în CY.

MOV A,B ; A←produs parţial JNC PASS ;

ADD B; Generare rezultat prin adunare dacă bit înmulţitor este 1.

PASS: RAR ; MOV B,A ; JMP CYCLE ;

Pregătire etapă următoare cu generare produs parţial şi salt la o nouă etapă.

STOP: MOV A,C; RAR; MOV C,A ;

Definitivare rezultat în registrul C.

MOV M,B ; DCR H ; MOV M,C ;

Salvare rezultat din registrul BC, în locul operanzilor.

POP D ; POP B ; POP PSW ; RET ;

Refacere registre din stivă dar în ordine inversă a salvării lor.

END ; Sfârşit program sursă .

Temă 1. Să se completeze programul la rubricile Adresă şi Nr. cicluri, precum şi cu descrierea

sintetică a instrucţiunilor. 2. Să se determine timpul de efectuare a programului, dacă frecvenţa tactului sistemului este

de 2MHz .

Page 21: Aplicatii ASM

6-1

ÎMPĂRŢIREA A DOUĂ NUMERE DE OPT BIŢI Pentru împărţirea a două numere binare de opt biţi se va evidenţia algoritmul pe baza analizei

unui exemplu , apoi se va construi organigrama prin fixarea registrelor interne folosite din microprocesorul Intel 8080, în final scriindu-se programul de împărţire în limbajul de asamblare al microprocesorului Intel 8080.

Determinarea algoritmului de împărţire în binar foloseşte exemplul de împărţire a două numere binare de patru biţi, ce decurge ca în zecimal.

Pentru exemplul prezentat se poate scrie: 1110 : 0010 = 0111 + 0000 deâmpărţit : împărţitor = cât + rest Exemplul de împărţire pe patru biţi poate fi pus în forma: 1 1 1 0 : 0 0 1 0 = 0 1 1 1 Rest parţial iniţial .............................. 0 0 0 0 Primul deâmpărţit parţial 0 0 0 1 - 0 0 0 0 Primul rest parţial .................................. 0 0 0 1 Al doilea deâmpărţit parţial 0 0 1 1 - 0 0 1 0 Al doilea rest parţial ................................ 0 0 0 1 Al treilea deâmpărţit parţial 0 0 1 1 - 0 0 1 0 Al treilea rest parţial ................................... 0 0 0 1 Al patrulea deâmpărţit parţial 0 0 1 0 - 0 0 1 0 Al patrulea rest parţial ................................... 0 0 0 0 = Rest final Din exemplul prezentat rezultă ca operaţia de împărţire se face într-un număr de etape

identice ca desfăşurare, egal cu numărul de biţi ai deâmpărţitului. În fiecare etapă este implicat câte un bit al deâmpărţitului începând de la cel de pondere maximă, şi al cărui rang este acelaşi cu al bitului câtului a cărui stare definitivă se determină.

Astfel, într-o etapă intermediară se formează din restul parţial al etapei anterioare, prin adăugarea ca bit de pondere minimă a bitului implicat din deâmpărtit, un deâmpărţit parţial, din care scăzând, sau nu, împărţitorul (după cum deâmpărţitul parţial obţinut este mai mare, sau egal, respectiv mai mic decât împărţitorul), se va genera restul parţial al etapei. Remarcăm că în prima etapă deâmpărţitul parţial se obţine dintr-un rest parţial iniţial nul şi că restul parţial generat în ultima etapă reprezintă chiar restul final.

La efectuarea împărţirii, registrele folosite din microprocesorul Intel 8080 sunt indicate în fig.1 împreună cu precizarea destinaţiei lor.

În această aplicaţie, registrul numărător de etape, în care la iniţializare doar bitul de pondere

1 1 1 0 : 1 0 = 1 1 1 1 0 = 1 1 1 0 = 1 0 1 0 = =

Page 22: Aplicatii ASM

6-2

maximă este pus în starea logică „1”, realizează numărarea unei etape efectuate prin deplasarea conţinutului său cu o poziţie la dreapta prin bistabilul de transport CY. Astfel, după a opta etapă, bascularea bistabilului de transport în starea CY=1 va indica sfârşitul operaţiei de împărţire.

Se observă de asemenea că într-o etapă, bitul în starea „1” din registrul numărător în inel are acelaşi rang cu al bitului implicat din cât, care astfel poate fi adus în starea logică „1” printr-o operaţie logică OR între registrul destinat câtului şi cel numărător în inel.

Această operaţie este descrisă prin organigrama şi programul prezentate mai jos.

Fig.1 Alocarea registrelor microprocesorului

Adresă ETICHETĂ: SIMBOLIZARE ; COMENTARIU ORG 1000; Nr. locaţii ← 1000 DEÂMP: EQU 0A1H; DEÂMP= 0A1H ÎMP: EQU 07H; ÎMP= 07H; EQU= EQUATE= EQUAL

1000 DIVIDE: XRA A ; A←A⊕A=0, DIVIDE= 1000 1001 MOV B,A; B←A= 0 1002 MOV L,A; L←A= 0 1003 MVI D,80H; D←1000.0000B=80H 1005 MVI C,DEÂMP; C← DEÂMP 1007 MVI E, ÎMP; E← ÎMP 1009 LOOP: MOV A, C; 1010 RAL; 1011 MOV C, A; 1012 MOV A, B; 1013 RAL; 1014 MOV B,A;

Formare a deâmpărţitului parţial, rotind registrul BC cu o poziţie la stânga ca două rotiri successive pe opt biţi folosind CY şi rotind întâi registrul C şi apoi B (L00P= =1009).

1015 CMP E; 1016 JC PASS;

Salt la adresa PASS =1024 dacă deâmpărţit parţial < împărţitor.

1019 SUB E; 1020 MOV B, A; 1021 MOV A,D; 1022 ORA L; 1023 MOV L, A;

Dacă deâmpărţit parţial > împărţitor, generează rest prin scădere şi pune în “1” bitul implicat din CÂT.

1024 PASS: MOV A, D; 1025 RRC; 1026 MOV D, A; 1027 JNC LOOP;

Numără etapa consumată realizând CY= 1 la sfârşit de sarcină, iar dacă CY= 0 salt la adresa LOOP= 1009

END DIVIDE; PC←DIVIDE= 1000

H Cât L D Numărător în inel Împărţitor E B Rest Deâmpărţit C A S Z - AC - P - CY F

Page 23: Aplicatii ASM

6-3

Fig.2 Organigrama sarcinii de împărţire Temă 1. Care este timpul de execuţie a programului la o frecvenţă a tactului sistemului de 2MHz? 2. Să se rescrie aplicaţia pentru cazul când este tratată ca subprogram.

START

A←C 1×RAL C←A A←B 1×RAL B←A

A←A⊕A= 0 B, L← A D←80H C←DEÂMP E←ÎMP

CMP E

A←A - E B←A

A←D 1×RRC D←A

A←D

A←A∪L

L←A

Iniţializare registre microprocesor

Formare deâmpărţit parţial

deîmpărţit - împărţitor

deîmpărţit < împărţitor?

Formare deâmpărţit parţial

Da

Nu

Operaţie neterminată ?

Numărare etapă încheiată.

Bitul din CÂT, pus în starea “1”.

STOP

Da

Nu

CY=1?

CY=0?

DIVIDE:

LOOP:

PASS:

Page 24: Aplicatii ASM

7-1

TRANSFER HANDSHAKING Aplicaţia constă dintr-un subprogram de transfer în memoria sistemului cu microprocesor a

unui bloc de date din 128 octeţi, furnizaţi de un periferic destinat achiziţiei de date, subprogramul fiind efectuat printr-o cerere de întrerupere lansată de periferic când toţi cei 128 octeţi sunt gata de transfer. Fiind vorba de un transfer handshaking, canalul de comunicaţie între periferic şi sistemul cu microprocesor este constituit astfel:

- semnalele de comandă END şi DA (=Data Acknowledge) sunt emise de microprocesor pe biţii de rang 1 şi respectiv de rang 0 ai portului de ieşire cu adresa 2E hexa;

- semnalul de control DR (=Data Ready) generat de periferic este transferat prin bitul de rang 0 al portului de intrare cu adresa 3F hexa;

- transferul celor 128 octeţi se face prin portul de intrare cu adresa 3E hexa Aceste semnale de sincronizare, utilizate în transferul handshaking de date, a căror forme de

undă sunt reprezentate în fig.1, au următoarele semnificaţii: - când perifericul dispune de toţi cei 128 octeţi, va aplica microprocesorului semnalul INT=1,

căruia astfel îi solicită o întrerupere temporară a programului în curs de execuţie, în vederea efectuării subprogramului mai prioritar, de transfer al blocului de date din 128 octeţi;

- la sfârşitul instrucţiunii în curs de execuţie, microprocesorul, acceptând cererea de

întrerupere, emite semnalul INTA =0, sub acţiunea căruia blocul de control al perifericului transmite microprocesorului prin magistrala de date instrucţiunea de apel RST 4, prin a cărei efectuare microprocesorul trece la executarea programului de întrerupere, plasat de la adresa 39=0027 hexa, şi care începe cu emiterea semnalului de comandă END=0, ce informează perifericul că este pregătit pentru recepţia unui octet, comanda END=0 fiind păstrată pe toată durata de transferare a celor 128 octeţi;

- blocul logic de comanda al perifericului, sub acţiunea semnalului INTA =0 îşi va anula cererea de întrerupere, a cărei deservire tocmai a început, prin emiterea semnalului INT=0, iar sub acţiunea semnalului END=0, va aplica portului de intrare de date un octet, după care va emite semnalul de control DR=1 pentru a informa microprocesorul că la portul de intrare de date cu adresa 3E hexa este disponibilă o nouă dată;

- programul de întrerupere supraveghează permanent semnalul DR, prin citirea portului de intrare cu adresa 2E hexa, şi imediat ce se identifică semnalul DR=1 programul continuă cu citirea datei din portul de intrare cu adresa 3E hexa, după care se emite către logica de control a perifericului semnalul de comandă DA=1, ce determină perifericul să emită semnalul DR=0 până când se aplică portului de intrare de date cu adresa 3E hexa următorul octet de transferat;

- fiecare octet transferat este numărat şi după transferarea celui de al 128-lea octet se încheie aplicaţia de întrerupere prin emiterea către periferic a semnalului de comandă END=1.

Fig.1 Semnalele de sincronizare asociate transferului handshaking

Această sarcină are alocate prin instrucţiunea de apel su simbolizarea RST 4

doar 8 locaţii de memorie, începând cu adresa 32 (=4×8), spaţiu total insuficient aplicaţiei şi din

t END

DR (=Data Ready)

DA (=Data Acknowledge)

Page 25: Aplicatii ASM

7-2

care se trece, prin ramificare de apel, în zona din memoria sistemului unde se continuă programul. Aplicaţia va începe cu validarea funcţionării în întreruperi a microprocesorului şi ini ţializarea

registrelor folosite din microprocesor, registre ce sunt indicate în fig.3, cu precizarea destinaţiei lor.

Fig.2 Organigrama aplicaţiei de transfer handshaking

Numărarea celor 128 etape de transfer de octeţi foloseşte registrul C ca numărător prin decrementare, iar registrul HL, iniţializat cu adresa de început a zonei de destinaţie a transferului, va servi la formarea adresei de destinaţie pentru fiecare din cei 128 octeţi preluaţi de la periferic.

START START

EI

CALL RELOC

RET

Salvare în stivă: PSW, HL, BC

Iniţializare: END←0 C←128 HL←ADDR

Numărare etapă: C←C-1

Preluare octet: A←Input Byte HL←A

Impuls DA: DA←1 DA←0

STOP

Nu.

Da

Sarcină încheiată?

Nu

Da

RELOC:

LOOP:

Pregătire etapă: HL←HL+1

Z=1?

Inhibare periferic END←1

Refacere registre BC, HL, PSW

STOP

SERV:

RET

STOP:

Octet nou? (CY=1?)

Page 26: Aplicatii ASM

7-3

Această sarcină, va începe cu salvarea în stivă a registrelor afectate şi se va încheia cu instrucţiunile de refacere din stivă a registrelor folosite.

Algoritmul aplicaţiei este descris prin organigramă din fig.2.

Fig.3 Alocarea registrelor microprocesorului

Adresă ETICHETĂ : SIMBOLIZARE ; COMENTARII Nr.cicluri

ORG 0021H; numărător locaţii ← 0021H . 0021 H SERV: EI

CALL RELOC; RET; ORG 4E00H; ADDR:

MASK: SET 1100H; EQU 1132H;

Definire notaţii.

4E00 H RELOC: PUSH PSW; PUSH H; PUSH B;

Salvare în stivă a registrelor afectate.

LDA MASK; ANI 0FDH; MOV B,A;

În octetul de la adresa MASK, ce conţine toate semnalele de comandă, se face END=0

OUT 2EH; Se emite END=0. LXI H,ADDR; HL←ADDR=adresa zonei de

destinaţie a transferului

MVI C,80H; C (=numărător etape)←128 LOOP: IN 3FH; A←(3F)= semnale de control RAR; CY← semnalul DR JNC LOOP; Se testează DR până ce DR=1 IN 3EH; A←(3E) dacă CY=0

MOV M,A; (HL)←A=octet de intrare MOV A,B;

ORI 01H; OUT 2EH; XRI 01H; OUT 2EH;

Se emite un impuls DA=1 cu durata timpului de efectuare a ultimilor două instrucţiuni.

DCR C; Se numără transferal efectuat JZ STOP; Z=1? (sarcină încheiată?) INX H; HL←HL+1 (=adresă nouă) JMP LOOP; Salt pentru următorul transfer. STOP: LDA MASK;

OUT 2EH; La final se emit semnalele de comandă: END=1 şi DA=0

H Adresă de destinaţie a octetului de intrare L

B Numărător de etape C A CY 7 6 .. 0

Page 27: Aplicatii ASM

7-4

Adresă ETICHETĂ : SIMBOLIZARE ; COMENTARII Nr.cicluri POP B;

POP H; POP PSW;

Se refac din stivă registrele afectate

RET; Revenire în SERV END; Sfârşitul programului sursă.

Teme 1. Să se completeze programul de la rubrica ADRESĂ şi pentru fiecare instrucţiune a

programului să se indice atât tipurile de adresare folosite, cât şi descrierea sintetică. 2. Să se determine timpul T de efectuare a programului ştiind că frecvenţa tactului sistemului

este f=2Mhz şi considerând că fiecare ciclu de maşina este efectuat în trei stări. 3. Să se rescrie programul în limbajul de asamblare al microprocesorului Zilog Z80. 4. Să se corecteze programul pentru situaţia în care trecerea de la secvenţa SERV, la secvenţa

RELOC se face prin salt necondiţionat.

Page 28: Aplicatii ASM

8-1

CONVERTOR ANALOG-NUMERIC PE OPT BIŢI, CU REGISTRU CU APROXIMAŢII SUCCESIVE (CANRAS) În asistarea numerică a unui proces controlat este necesară măsurarea numerică a unor

parametri prin convertoare analog-numerice. Convertoarele analog-numerice fiind elemente scumpe se impune ca acolo unde este posibil un acelaşi convertor să fie utilizat în conversia succesivă a mai multor mărimi analogice.

Între convertoarele analog-numerice cele mai rapide, dar scumpe, sunt convertoarele de tip paralel, iar cele mai ieftine, dar lente, sunt convertoarele cu reacţie.

Un compromis între preţ şi viteză de conversie îl realizează convertoarele analog-numerice cu registru cu aproximaţii succesive pe reacţie. Astfel, o conversie pe k biţi este realizată cu un convertor analog-numeric de tip paralel într-un tact al generatorului de sincronizare ce pilotează

convertorul, cu un convertor analog-numeric cu numărător pe reacţie în k2 tacte, iar cu un convertor analog-numeric cu registru cu aproximaţii succesive pe reacţie (CANRAS) în k tacte.

În cazul unui CANRAS, într-o etapă de conversie se stabileşte starea finală a câte unui bit din rezultatul căutat, începând de la bitul de pondere maximă, iar numărul de etape de conversie este egal cu numărul de biţi ai rezultatului. La începutul unei etape se stabileşte starea logica „1”, pentru bitul de prelucrat, iar biţii de pondere superioară având stările definitiv stabilite în etapele anterioare. Rezultatul parţial astfel format, este convertit numeric-analogic şi comparat cu mărimea analogică de măsurat. Compararea va indica prin starea logica „0” că rezultatul parţial este mai mic decât cel real. Rezultatul comparării reprezintă chiar starea definitivă a bitului prelucrat, astfel generându-se rezultatul etapei.

O conversie CANRAS pe opt biţi va conţine deci opt etape de conversie, identice ca desfăşurare.

În aplicaţia prezentată partea de registru cu aproximaţii succesive a fost implementată pe un sistem cu microprocesor Intel 8080 folosind o interfaţă paralelă PPI 8255.

Fig.1 Realizare CANRAS

Circuitul de interfaţă PPI 8255 este tratat ca un circuit de memorie prin conectarea

terminalelor sale RD şi WR la liniile MEMR şi respectiv MEMW ale magistralei de comandă şi

Clock

Intel 8228

CS , A0, A1

PPI 8255

CNA

Intel 8224

STSTB

Uin

+ - COMP

Intel 8080

ADDRESS BUS

DATA BUS

Q

D0..D7

RD,WR DBIN HOLDA

Φ1,Φ2 RESET READY SYNC

DI0..DI7 DO0..DO7

RDYIN RESIN

MEMR

MEMW

RD WR D0..D7

A0..A15

IOR

IOW

INTA

PC0 PA

Page 29: Aplicatii ASM

8-2

control şi ca urmare transferul de date cu locaţiile interfeţei PPI 8255 se poate face prin mai multe tipuri de instrucţiuni decât în cazul tratării interfeţei ca circuit de intrare-ieşire. Registrele folosite sunt indicate în fig.3, cu precizarea destinaţiei lor, iar algoritmul aplicaţiei este evidenţiat prin organigrama din fig.2.

Fig.2 Organigrama aplicaţiei

START

PUSH PSW,B,D B,E←A=A ⊕ A=0

CY ←1 Programare PPI

A ←A, RAR, E←A

A ←B , A←A+E B ←A , PA←A

POP D,B,PSW RET

C←1

C←C-1

STOP

A ← (PC) A ←A∩ (01H)

A ←B , A←A-E B ←A

CY=?

Z=1?

Z=0?

=1 =0

STOP :

CANRAS :

STAGE :

=0

=1

=0

=1

TIME :

Page 30: Aplicatii ASM

8-3

Fig.3 Alocarea registrelor microprocesorului

Numărarea celor 9 etape, dintre care prima este de iniţializare şi următoarele 8 etape sunt de conversie, se face prin deplasarea la dreapta a conţinutului registrului pe 9 biţi format din registrul numărător de etape E şi bistabilul de transport CY, în care un singur bit se află în starea logică „1” şi al cărui rang coincide în fiecare etapă de conversie cu rangul bitului prelucrat din rezultatul ce se determină. Astfel, bitul din rezultat, ce este prelucrat într-o etapă, poate fi stabilit într-una din stările logice „0”, sau „1”, printr-o operaţie aritmetică între rezultatul parţial aflat în registrul B şi conţinutul registrului numărător E, fără a se afecta restul biţilor rezultatului.

Adresă ETICHETĂ : SIMBOLIZARE ; COMENTARIU ORG 1800H; Informare asamblor.

PPICOM : PPIPA : PPIPC :

EQU 0003H; EQU 0000H; EQU 0002H;

PPICOM=3 PPIPA=0 PPIPC=2

1800H CANRAS : PUSH PSW; PUSH B; PUSH D;

Salvare registre afectate în stivă.

MVI A,81H; STA PPICOM;

Programare PPI8255 in mod 0 : PA=>, PC −0 3 <= .

XRA A; MOV E,A; MOV B,A; STC;

A ←A ⊕ A=0 E←A=0 B ←A=0 CY ←1

STAGE : MOV A,E; RAR; MOV E,A; JC STOP;

Numărare etapă afectând CY=1 la sfârşit de sarcină, când se încheie programul de la eticheta STOP.

MOV A,B; ADD E; MOV B,A; STA PPIPA;

Formare rezultat parţial: salvat în B şi înscris în portul PA conectat la CNA.

TIME :

MVI C,1; DCR C; JNZ TIME;

Temporizare de circa 10 µsec necesară stabilizării ieşirii comparatorului.

LDA PPIPC; ANI 1;

Z ← PC0

JNZ STAGE; Dacă PC0 =1 continuă cu numărarea etapei

de la adresa etichetată STAGE.

B Rezultat parţial Numărător de temporizare C

D Numărător în inel E A CY 7 6 .. 0

Page 31: Aplicatii ASM

8-4

Adresă ETICHETĂ : SIMBOLIZARE ; COMENTARIU MOV A,B;

SUB E; MOV B,A;

Dacă PC0 =0, pune în 0 bitul prelucrat din

rezultat.

JP STAGE; Încheie etapa cu numărarea ei, de la eticheta (adresa) STAGE.

STOP : POP D; POP B; POP PSW; RET;

Refacere registre µP din stivă şi revenire în programul apelant.

END 1800H; PC ← 1800H

Teme

1. Să se completeze programul la rubrica ADRESĂ şi pentru fiecare instrucţiune să se indice descrierea sintetică şi tipurile de adresare folosite. 2. Să se refacă programul pentru cazul tratării interfeţei PPI 8255 ca circuit de intrare-ieşire. 3. Pentru prgramul prezentat să se determine timpul de efectuare ştiind că: f=2MHz,

stareciclu T3T ⋅= .

4. Să se refacă programul pentru cazul numărării în inel doar a celor 8 etape de conversie.

Page 32: Aplicatii ASM

9-1

CONTOLUL UNEI TASTATURI Cel mai frecvent, comanda unui sistem cu microprocesor, în vederea efectuarii unei sarcini,

este realizată de utilizator printr-o claviatură ce reprezintă un ansamblu de comutatoare acţionate manual. Comanda unui sistem cu microprocesor prin intermediul unei clavituri impune însă o supraveghere permanentă a claviaturii pentru a se realiza, atât identificarea tastei apăsate cu generarea codului binar al tastei reprezentat prin numărul de ordine al tastei în cadrul claviaturii, cât şi protecţia împotriva apăsării simultane a mai multor taste şi a comutărilor multiple ce apar la acţionarea unei taste datorită vibraţiei mecanice a lamelor de contact ale comutatorului. Aceste probleme pot fi rezolvate fie pe cale hardware de către un circuit specializat prin care claviatura se conectează la sistem, fie printr-un subprogram al programului MONITOR ce realizează şi gestionează sarcinile prevăzute sistemului. Determinarea adresei subprogramului din MONITOR corespunzător sarcinii unei taste apăsate se face pe baza codului binar al tastei apăsate ‚ cu subprogramul din MONITOR destinat supravegherii claviaturii. La terminarea efectuării subprogramului sarcinii comandate de la claviatură, programul MONITOR va reveni automat la suprvegherea claviaturii în vederea detectării unei tastei apăsate. Obişnuit claviatura se conectează la sistemul cu microprocesor prin intermediul unor registre de intrare-ieşire, numite porturi , ale unui circuit de interfaţă cu transfer paralel de date. În cazul claviaturilor cu un număr redus de taste, fiecare tasta se conectează la câte un bit de intrare, situaţie reprezentată în fig.1 pentru cazul obişnuit al tastelor având comutatoarele normal deschise.

Fig.1 Claviatură simplă

Numărul biţilor de intrare-ieşire prin care o claviatură se conectează la sistemul cu

microprocesor a fost redus prin conectarea tastelor claviaturii într-o matrice în care fiecare tastă apăsată realizează un scurtcircuit între linia şi coloana la a căror intersecţie se află, matricea claviturii fiind conectată cu fiecare linie şi coloană la câte un bit distinct de intrare-ieşire. Astfel, într-o clavitură având n⋅m taste aşezate într-o matrice cu n linii şi m coloane numărul biţilor de intrare-ieşire pentru supravegherea claviaturii s-a redus de la n⋅m la n+m. Într-o clavitură matriceală, numărul biţilor de intrare-ieşire pentru supravegherea claviaturii este minim dacă matricea este pătrată. Conectarea la un sistem cu microprocesor a unei claviaturi cu 16 taste aşezate într-o matrice cu 4 linii şi 4 coloane şi supravegheată prin baleere de linii este prezentată în fig.2.

R1 R2 R3

SW1 SW2 SW3

ADDRESS BUS

CONTROL BUS

PC2PC1PC0

DATA BUS

D0..D7 A0, A1,CS

RESET,

WR , RD

+Vcc=+5V

PPI 8255

Page 33: Aplicatii ASM

9-2

Fig.2 Tehnica baleerii de linii

Identificarea într-o clavitură matriceală a unei taste apăsate se poate face prin două tehninci: tehnica baleerii (de linii sau de coloane) şi tehnica inversării . Problema apăsării simultane accidental a mai multor taste se rezolvă prin ignorarea tastelor până în momentul când rămâne apăsată doar o singură tastă.

Fig.3 Oscilaţiile mecanice ale unei lamele de contact

Protecţia împotriva oscilaţiilor parazite de tensiune produse de vibraţiile mecanice ale contactelor întrerupătorului unei taste acţionată şi a căror standardizare este de 10 msec, este realizată prin citirea stării claviaturii cu o întârziere de cel puţin 10 msec din momentul acţionării tastei, aşa cum se arată în fig.3.

METODA BALEERII Această metodă este exemplificată în fig.2 pentru o claviatură matriceală din 16 taste formată din 4 linii şi 4 coloane. Într-o claviatură matriceală identificarea unei taste apăsate prin metoda baleerii de linii se face prin citirea stărilor coloanelor matricii, când doar o singură linie a matricei claviaturii se află în starea logica „0”, într-un ciclu de baleere fiecare linie fiind pusă în starea logica „0” în câte o etapă distinctă. Deoarece o tastă apasată realizează într-o claviatură matriceală un scurtcircuit între linia

„1” (=+5V)

„0” t

Citire la presare

Citire la depresare

≥10 msec ≥10 msec

R4

R1

R2

R3

0

0

0

4

3 (=cod tastã)2 1 0

0

0

0

C

B A 9 8

7 6 5 1

1

1

1

1

F E D

PA

PIO Z80

CONTROL BUS

ADDRESS BUS

DATA BUS

+Vcc=+5V

1

IEI, IEO,

INT,RD,

IORQ,M1

CE,

B / A,C / D

D0..D7

PB

SW F tastã apãsatã

Cu

vân

t sta

re c

olo

ane

Cu

vân

t sta

re li

nii

PA0

PA3

PB0

PB3

Page 34: Aplicatii ASM

9-3

şi coloana la a căror intersecţie se află, rezultă că prin metoda baleerii de linie, starea logică „0” va apărea doar pe coloana tastei apăsate şi numai în etapa în care pe linia tastei apăsate se aplică starea logică „0”. Într-o etapă, existenţa în starea logică „0” a unei linii şi a unei coloane identifică precis tasta apăsată aflată la intersecţia lor.

Supravegherea unei claviaturi matriceale prin metoda baleerii impune deci ca un ciclu de baleere completă a claviaturii să conţină un număr de etape egal cu numărul de linii al matricii dacă se realizează baleerea de linii, ori cu numărul de coloane al matricii dacă se realizează baleerea de coloane.

Prin această metodă liniile sau coloanele ce se baleează vor fi conectate la biţi de ieşire, în timp ce coloanele respectiv liniile ale căror stări se testează se vor conecta la biţi de intrare.

Se observă că determinarea doar a existenţei unei taste apăsate dintr-o claviatură matriceală se poate face într-o singură etapă prin punerea în starea logică „0” a tuturor biţilor de ieşire alocaţi supravegherii claviaturii şi citirea biţilor de intrare între care doar bitul de intrare corespunzător tastei apăsate se va afla în starea logică „0”, indicând existenţa unei taste apăsate.

În general, supravegherea unei claviaturi matriceale implică realizarea următoarelor sarcini: determinarea existenţei unei taste apăsate, identificarea tastei apăsate şi a codului său şi determinarea adresei subrutinei asociată tastei apăsate.

Aceste sarcini, dintre care cea de determinare a existenţei unei taste apăsate poate lipsi, pot fi realizate ca subrutine distincte sau ca secvenţe distincte în cadrul programului din MONITOR destinat supravegherii claviturii.

Exemplu Fie un sistem cu microprocesor având o claviatură matriceală supravegheată prin baleere de

linii şi formată din 24 taste dispuse pe 3 linii şi 8 coloane, 16 taste fiind taste cifrice hexazecimale, iar 8 taste fiind funcţionale, reprezentat în fig.4.

Fig.4 Tastatură cu 16 taste cifrice şi 8 taste funcţionale

R8 R7 R6 R5 R4 R3 R2 R1

PA6 PA7 PC4PC5 PC6 PA0 PA1 PA2 PA3 PA4 PA5

7

PA PC4-7

F

0 1 23 4 56

STORE

8 9 A B C D E

RUN RETSETSTEPREAD WRITELOAD

DATA BUS

ADDRESS BUS

+Vcc=+5V

PPI 8255

RESET,WR , RD CS, A0, A1 D0..D7

CONTROL BUS

Page 35: Aplicatii ASM

9-4

Fig.5 Organigrama aplicaţiei de control a tastaturii

START

(PPICOM)←92H (PA← şi PC4-7→)

E←3=nr.linii B←0=cod tastă 0 C←EFH=cod de baleaj primă linie

A←C (PPIPC)←A

A←(PPIPA) A←A⊕FFH

E←E+1 RRA

B←B+1

A←B A←A+8 B←A

A←C RLC A C←A

D←B

CALL TIME (timer 9,1 msec)

A←D A←A∩10H

“NUMBER” SUBRUTINE

A←D A←A+A A←C B←0

HL←TABEL HL←HL+BC

A←(HL) HL←HL+1 H←(HL) L←A PC←HL

STOP

Z=0?

Z=1?

Z=1?

CY=1?

=1 =0

=1

=1

=1

=0

=0

=0

KEY:

SCAN:

LOOP:

COUNT:

SAVE:

NUMBER:

Page 36: Aplicatii ASM

9-5

Organigrama aplicaţiei de control al unei claviaturi din 16 taste cifrice şi 8 taste funcţionale este prezentată în fig.5.

În această aplicaţie, adresele subrutinelor funcţionale se află situate într-un tabel în care fiecare adresă ocupă câte două locaţii successive. Ca urmare, acest tabel va fi citit din două în două locaţii, poziţia în tabel a adresei unei subrutine funcţionale determinându-se cu relaţia:

TABEL+2×cod tasta. Spaţiul de adresare alocat acestui tabel este: TABEL + 2×16, … , TABEL + 2×23 + 1,

eticheta TABEL fiind o constantă de identificare a adresei de început a tabelului. În limbajul de asamblare al microprocesorului Intel 8080 programul are următoarea formă:

Adresă (H) ETICHETĂ : SIMBOLIZARE ; COMENTARIU

PPICOM : PPIPC : PPIPA :

ORG 1800H; EQU 03H; EQU 02H; EQU 00H;

Informare asamblor şi definirea notaţiilor, prin pseudoinstrucţiuni.

1800

KEY : MVI A,92H; OUT PPICOM;

Programare PPI 8255 în mod 0 cu PA pe intrare şi 4 7PC − pe ieşire.

SCAN : MVI B,0; MVI E,3; MVI C,0EFH;

Iniţializare registre.

LOOP : MOV A,C; OUT PPIPC;

Baleerea liniei indicate în C.

IN PPIPA; XRI 0FFH; JNZ COUNT;

Citire cuvânt stare coloane şi Z=0 la tastă apăsată.

DCR E; JZ SCAN;

Numărare etapă şi la sfârşit ciclu reluare bleere.

MOV A,B; ADI 8; MOV B,A;

Pregătire etapă următoare formând în registrul B codul primei taste din linia următoare.

MOV A,C; RLC ; MOV C,A;

Pregătire etapă următoare formând în registrul C codul de baleere al liniei următoare.

JMP LOOP; Salt la etapa următoare. COUNT :

SAVE :

RRA ; JC SAVE; INR B; JMP COUNT; MOV D,B;

Formare a codului tastei apăsate în registrul B prin incrementări repetate şi salvare cod tastă apăsată în registrul D.

CALL TIME; Temporizare 9,1 msec pt. vibraţii. MOV A,D;

ADI 10H; JZ NUMBER;

Dacă tasta apăsată este cifrică atunci salt la subrutina NUMBER de tratare cifrică a tastei.

MOV A,D; ADD A; MOV C,A; MVI B,0;

Dacă tasta apăsată este funcţională, se formează în registrul BC dublul codului tastei apăsate.

LXI H,TABLE; DAD B;

Se formează în registrul HL adresa ce indică subrutina funcţională.

Page 37: Aplicatii ASM

9-6

Adresă (H) ETICHETĂ : SIMBOLIZARE ; COMENTARIU MOV A,M;

INX H; MOV H,M; MOV L,A; PCHL;

Se extrage din tabelă, în registrul HL, adresa subrutinei funcţionale care plasată în registrul PC determină declanşarea efectuării subrutinei funcţionale.

TIME : CYCLE : LAP :

MVI L,48H; MVI B,0CH; DCR B; JNZ LAP; DCR L; JNZ CYCLE;

Subrutină de temporizare 9,1 msec

RET; Revenire în programul apelant. END; Informare asamblor.

Completare În limbajul de asamblare al microprocesorului Zilog Z80 programul are următoarea formă:

Adresă (H) ETICHETĂ : SIMBOLIZARE ; COMENTARIU

PPICOM : PPIPC : PPIPA :

ORG 1800H; EQU 03H; EQU 02H; EQU 00H;

Informare asamblor şi definire etichete cu pseudoinstrucţiuni.

1800

KEY : LD A,92H; OUT (PPICOM),A ;

Programare PPI 8255 în mod 0 cu PA pe intrare şi 4 7PC − pe ieşire.

SCAN : LD B,0; LD E,3; LD C,0EFH;

Iniţializare registre.

LOOP : LD A,C; OUT (PPIPC),A;

Baleerea liniei indicate în C.

IN A,(PPIPA); XOR 0FFH; JP NZ,COUNT;

Citire cuvânt stare coloane şi Z=0 la tastă apăsată.

DEC E; JP Z,SCAN;

Numărare etapă şi la sfârşit ciclu reluare bleere.

LD A,B; ADD A,8; LD B,A;

Pregătire etapă următoare formând în registrul B codul primei taste din linia următoare.

LD A,C; RLC A; LD C,A;

Pregătire etapă următoare formând în registrul C codul de baleere al liniei următoare.

JP LOOP; Salt la etapa următoare. COUNT :

SAVE :

RR A; JP C,SAVE; INC B; JP COUNT; LD D,B;

Formare a codului tastei apăsate în registrul B prin incrementări repetate şi salvare cod tastă apăsată în registrul D.

CALL TIME; Temporizare 9,1 msec pt. vibraţii. LD A,D;

AND 10H; JP Z,NUMBER;

Dacă tasta apăsată este cifrică atunci salt la subrutina NUMBER de tratare cifrică a tastei.

Page 38: Aplicatii ASM

9-7

Adresă (H) ETICHETĂ : SIMBOLIZARE ; COMENTARIU LD A,D;

ADD A,A; LD C,A; LD B,0;

Dacă tasta apăsată este funcţională, se formează în registrul BC dublul codului tastei apăsate.

LD HL,TABLE; ADD HL,BC;

Se formează în registrul HL adresa ce indică subrutina funcţională.

LD A,(HL); INC HL; LD H,(HL); LD L,A; LD PC,HL;

Se extrage din tabelă, în registrul HL, adresa subrutinei funcţionale care plasată în registrul PC determină declanşarea efectuării subrutinei funcţionale.

TIME : CYCLE : LAP :

LD L,48H; LD B,0CH; DEC B; JP NZ,LAP; DEC L; JP NZ,CYCLE;

Subrutină de temporizare 9,1 msec

RET; Revenire în programul apelant. END; Informare asamblor.

Teme 1. Să se completeze programele la rubrica ADRESĂ. 2. Să se determine frecvenţa tactului sistemului din subrutina de temporizare cu eticheta

TIME, considerând că fiecare ciclu de maşina are trei stări. 3. Cu frecvenţa tactului determinată la punctul 2. , să se determine timpul de execuţie al

programului.

Page 39: Aplicatii ASM

10-1

CONTROLUL UNEI TASTATURI. METODA INVERSĂRII Prin metoda inversării, identificarea tastei apăsate dintr-o claviatură matricială se realizează

în două etape, indiferent de mărimea matricii claviaturii, linia şi coloana la a căror intersecţie se află tasta apăsată fiind identificată fiecare în câte o etapă.

Astfel, într-o etapă, linia tastei apăsate se identifică prin starea logică „0” din cuvântul de stare linii, citit la biţii de intrare la care-s conectate liniile, când coloanele matricii claviaturii sunt aduse în starea logică „0” prin biţii de ieşire la care sunt conectate. În următoarea etapă, după inversarea sensului de transfer pentru toţi biţii de supraveghere la care matricea claviaturii este conectată, se determină coloana tastei apăsate prin starea logică „0” din cuvântul de stare coloane, citit la biţii din intrare la care sunt conectate coloanele, când pe biţii de ieşire la care sunt conectate liniile, se aplică fie stări logice „0”, fie cuvântul de stare al liniilor din etapa anterioară în care doar bitul liniei tastei apăsate este în stare logică „0”.

Cele două cuvinte, de stare linii şi de stare coloane, identifică precis tasta apăsată prin linia şi coloana la a căror intersecţie se află, fiind folosite în determinarea codului tastei apăsate.

Metoda inversării este exemplificată în fig.1 pentru cazul unei claviaturi matriceale din 16 taste, dispuse pe 4 linii şi 4 coloane.

Fig.1 Etapele metodei inversării

Metoda inversării necesită însă schimbarea sensului de transfer al tuturor biţilor de supraveghere a claviaturii matriceale, prin reprogramarea interfeţei cu transfer paralel de date, notată PIO, înaintea fiecărei etape.

TASTATURI CODATE Aceste claviaturi sunt prevăzute cu un bloc logic ce asigură funcţia de identificare a tastei

apăsate cu generarea codului tastei şi se conectează la sistemul cu microprocesor printr-o interfaţă paralelă, aşa cum se arată în fig.2.

R1 R2 R3 R4 R5 R6 R7 R8

0 00 0 1 1 1

PIO Z80

CONTROL BUS

ADDRESS BUS

DATA BUS

cuvânt stare coloane

0

+Vcc=+5V

R1 R2 R3 R4 R5 R6 R7 R8

0 00 0 1 0 1 1

DATA BUS

cuvânt stare linii

PIO Z80

CONTROL BUS

ADDRESS BUS

+Vcc=+5V

PBPB PA PA

1 1 1 0

D0..D7 D0..D7 RD , M1 ,.. CE , A/ B , C/D

PA0 PA3 PB0 PB3

CE , A/ B , C/D RD , M1 ,..

Page 40: Aplicatii ASM

10-2

Fig.2 Claviatură codată folosind o interfaţă paralelă La apăsarea unei taste, claviatura codată o identifică şi generează codul tastei pe care-l

aplică la portul PA, unde-i memorat sub acţiunea semnalului ASTB 0= aplicat interfeţei de logică

asociată claviaturii codate. Starea ASTB 0= , testată de microprocesor prin bitul de intrare PB0, cu rol de fanion al claviaturii, indică existenţa în portul PA a codului unei taste apăsate pe care microprocesorul îl citeşte. La citirea portului PA, interfaţa emite automat semnalul ARDY=1 ce

determină claviatura să emită ASTB 1= şi să treacă apoi la identificarea unei noi taste apăsate. Prin folosirea unei claviaturi codate, programul de supraveghere a claviaturii se simplifică,

realizând doar supravegherea fanionului claviaturii şi determinarea adresei subrutinei tastei apăsate. Programul de control a claviaturii codate din fig.2 s-a realizat, în limbajul de asamblare al

microprocesorului Zilog Z80, după organigrama din fig.3.

Adresă Etichetă : Simbolizare ; Comentariu

CPA : CPB :

PA : PB :

ORG 1800H; EQU addr1; EQU addr2; EQU addr3; EQU addr4;

Informare asamblor CPA,CPB=registre comandă port PB, respectiv PB; PA, PB=adresă port PA, respectiv PB;

1800H KEY : LD A,4FH; OUT (CPA),A;

programare port PA pe intrare; KEY=1800H şi numărător locaţii asamblor ← 1800H

LD A,0BFH; OUT (CPB),A;

programare port PB în mod control;

LD A,0FFH; OUT (CPB),A;

programare port PB cu toţi biţii pe intrare;

TEST-1 :

IN A,(PB); BIT 0,A; JR Z,TEST-1;

detectare stare logică „1” pentru bitul PB0;

TEST-0 :

IN A,(PB); BIT 0,A; JR NZ, TEST-0;

detectare satare logică „0” pentru bitul PB0;

IN A,(PA); JP TASK;

preluare cod tastă în A şi salt la subrutina de identificare a subrutinei sarcinii asociate tastei;

END; informare asamblor

8×R

B/ A

C/D

CE

PB7

PB0

D0..D7

... PB

ASTB

ARDY

PA

ADDRESS BUS

CONTROL BUS

DATA BUS Cod tastã

PIO Z80

+Vcc=+5V

RD, IORQ

INT,M1

Page 41: Aplicatii ASM

10-3

Fig.3 Organigrama sarcinii de supraveghere a unei claviaturi codate

Observaţii 1. În metoda baleerii fiecare din biţii de intrare prin care se supraveghează claviatura

matriceală se protejează la zgomote prin conectarea la sursa de alimentare Vcc=+5V cu un rezistor R, dimensionat pentru încărcarea unui bit de ieşire în starea logică „0” cu maxim o sarcină TTL standard (=1,6 mA), ce este capacitatea maximă de comandă a unui bit de ieşire în tehnologie MOS:

TTL

Vcc 5VR 3,3k

i 1,6mA≥ = = Ω .

2. În metoda inversării fiecare din biţii de supraveghere a claviaturii matriceale, lucrând într-o etapă ca bit de intrare, va trebui protejat la zgomote prin conectarea la sursa de alimentare Vcc=+5V cu un rezistor R, dimensionat pentru ca la încărcarea unui bit de ieşire în starea logică „0” cu două rezistoare R în paralel să nu se depăşească o sarcină TTL standard (=1,6 mA), ce este capacitatea maximă de comandă a unui bit de ieşire în tehnologie MOS:

TTL

R Vcc 5V3,3k

2 i 1,6mA≥ = = Ω .

START

A←PB BIT 0,A

A←PB BIT 0,A

A←PA JP TASK

STOP

PA← PB←

Citire port PB şi Z←PB0

Programare interfaţă

Citire port PB şi Z←PB0

Preluarea cod tastă în A şi salt la identificarea subrutinei tastei

Z=0? =0

=1

=1

=0

Z=1?

KEY:

TEST-1:

TEST-0:

Page 42: Aplicatii ASM

10-4

Temă 1. Să se scrie programul de supraveghere prin metoda inversării a unei tastaturi matriceale

din 32 taste dispuse pe 8 coloane, cu identificarea tastei cu numărul de ordine cel mai mare, având ca exemplu programul de identificare a tastei apăsate cu numărul de ordine cel mai mic într-o tastatură matriceală din 64 taste dispuse pe 8 linii, prezentat mai jos, în limbajul de asamblare al microprocesorului Intel 8080, pentru următoarea alocare de registre:

Adresă (H) ETICHETĂ : SIMBOLIZARE ; COMENTARIU

PPICOM : PPIPB : PPIPA :

ORG 1800H; EQU 03H; EQU 01H; EQU 00H;

Informare asamblor şi definirea notaţiilor, prin pseudoinstrucţiuni.

1800

KEY : MVI A,83H; OUT PPICOM;

Programare PPI 8255 în mod 0 cu PA pe ieşire şi PB pe intrare.

MVI A,0; OUT PPIPA;

Baleerea liniilor matricei tastaturii prin portul PA

IN PPIPB; MOV D,A;

D←PB (=cuvânt starea coloane)

MVI A,91H; OUT PPICOM;

Programare PPI 8255 în mod 0 cu PB pe ieşire şi PA pe intrare.

MVI A,0; OUT PPIPB;

Baleerea coloanelor matricei tastaturii prin portul PB

IN PPIPA; MOV E,A;

E←PA (=cuvânt stare linii)

XRI 0FFH; JZ KEY;

Reluarea unui nou ciclu de baleere dacă nu există tastă apăsată.

CALL TIME; Temporizare 9,1 msec pentru protecţie la vibraţii ale contactelor tastei apăsate.

MVI C,000Q; C←000Q (=codul primei taste) LOOPL : MOV A,E;

RAR; MOV E,A; JNC LOOPC; MOV A,C; ADI 8; MOV C,A; JMP LOOPL

Formarea în C a codului primei taste de pe linia tastei apăsate.

LOOPC : MOV A,D; Formarea codului tastei apăsate în

B Timer 9,1 msec Cod tastă apăsată C

D Octet stare coloane Octet stare linii E H L A CY 7 6 … 0

Page 43: Aplicatii ASM

10-5

Adresă (H) ETICHETĂ : SIMBOLIZARE ; COMENTARIU

RAR ; MOV D,A; JNC LAST; INR C; JMP LOOPC;

registrul C.

MOV A,C; ADD A; MOV C,A; MVI B,0;

Se formează în registrul BC dublul codului tastei apăsate.

LXI H,TABLE; DAD B;

Se formează în registrul HL adresa ce indică subrutina tastei apăsate.

MOV A,M; INX H; MOV H,M; MOV L,A; PCHL;

Se extrage din tabelă, în registrul HL, adresa subrutinei funcţionale a cărei execuţie se declanşează prin transferul ei în registrul PC.

TIME : CYCLE : LAP :

MVI L,90H; MVI B,0CH; DCR B; JNZ LAP; DCR L; JNZ CYCLE;

Subrutină de temporizare 9,1 msec

RET; Revenire în programul apelant. END; Informare asamblor.

2. Să se completeze programul prezentat la punctul 1., la rubrica ADRESĂ. 3. Să se determine, din programul prezentat la punctul 1., frecvenţa tactului sistemului din

subrutina de temporizare cu eticheta TIME, considerând că fiecare ciclu de maşina are trei stări. 4. Cu frecvenţa tactului determinată la punctul 3., să se determine timpul de execuţie al

programului prezentat la punctul 1.

Page 44: Aplicatii ASM

11-1

AFIŞAREA PE CELULE CU ŞAPTE SEGMENTE O diodă luminescentă, notată LED, emite lumină la alimentare directă, intensitatea

luminoasă crescând la creşterea curentului prin diodă. Aprinderea unei diode LED poate fi realizată fie conectându-i anodul la Vcc=+5V şi comandând starea logică „0” în katodul înseriat cu o rezistenţă de limitare a curentului, conexiune numită anod comun, fie conectând katodul la masă şi comandând starea logică „1” în anodul înseriat cu o rezistenţă de limitare a curentului, conexiune numită katod comun şi fiind cea mai utilizată.

O diodă LED poate fi aprinsă şi printr-o alimentare directă, în regim dinamic, cu impulsuri de curent în intervalul 2mA….50mA şi frecvenţă de sute de herţi, datorită inerţiei ochiului şi a comutării rapide a diodelor LED.

Prin reunirea a şapte diode LED ca segmente, se obţine o celulă de afişare cu şapte segmente, iluminarea unui segment realizându-se prin polarizarea directă a diodei din care-i format. Sunt celule de afişare în care reţeaua de şapte segmente este urmată de un punct, realizat tot cu o diodă LED. Obişnuit, o celulă de afişare din şapte segmente şi punct se comandă printr-un registru de 8 biţi aşa cum se arată în figura următoare.

Fig.1 Organizarea şi comanda unei celule de afişare

Diodele din componenţa unei celule de afişare au conectaţi în comun fie anozii, fie katozii, cele mai utilizate fiind celulele de afişare cu katod comun.

Celulele de afişare cu şapte segmente sunt larg folosite deoarece, pe o diodă LED, se pot afişa un număr mare de caractere, aşa cum este exemplificat în tabelul următor pentru celule de afişare cu anod comun.

O celulă de afişare cu şapte segmente şi punct, necesitând comanda diodelor sale printr-un port de 8 biţi, rezultă că într-o alimentare în regim permanent numărul porturilor necesare controlului afişării este egal cu numărul celulelor de afişare utilizate.

În cazul unei afişări dinamice, în care celulele de afişare îşi vizualizează caracterele în mod succesiv şi nu simultan, prin baleere cu frecvenţă ridicată, comanda tuturor celulelor de afişare se face printr-un singur port, în condiţia ca fiecre celulă să dispună de câte un bit separat de validare a alimentării conectat la terminalul comun al diodelor LED componente. Astfel, pentru ca o celulă cu şapte segmente să afişeze un caracter, doar acestei celule i se va conecta alimentarea prin terminalul său de validare, iar codul caracterului de afişat va fi înscris în portul de comandă conectat tuturor celulelor de afişare.

Într-o afişare dinamică pe n celule de afişare, numărul biţilor de comandă a afişării s-a redus la 8+n, dintre care 8 biţi sunt pentru comanda caracterului de afişat şi n biţi pentru comanda validării celulelor, faţă de 8×n biţi de comandă câţi ar fi fost necesari într-o alimentare în regim permanent.

Într-o afişare dinamică, comenzile de validare a celulelor de afişare se fac fie cu o logică suplimentară, caz prezentat în exemplul următor, fie cu biţi de ieşire distincţi.

d h c b a f g e D7 D6 D5 D4 D3 D2 D1 D0

a

b

c

d

e

f g

h

Page 45: Aplicatii ASM

11-2

CODE BD 30 9B BA 36 AE AF 38 BF DATA 0 1 2 3 4 5 6 7 8

DISP.

CODE BE 3F AF 8D B3 BF 0F AD 37 DATA 9 A B C D E F G H

DISP.

CODE 89 B1 9F 85 2B 23 A3 1F 3E DATA I J K L M N O P Q

DISP.

CODE 03 A6 BF B5 B7 A9 07 B6 8A DATA R S T U V W X Y Z

DISP.

CODE B3 A2 32 02 C0 00 DATA ( ) + - ,

DISP.

Exemplu Să se scrie programul de afişare în regim dinamic, cu schema ce urmează, a caracterelor a

căror coduri de comandă sunt situate în spaţiul de adrese 0040H.....0049H. Rezolvare Schema circuitului de afişare, organigrama aplicaţiei şi programul aferent sunt prezentate mai

jos cu următoarele precizări:

- La fiecare înscriere a portului PB, la terminalele BRDY şi BSTB, scurtcircuitate între ele, se generează un impuls numărat cu numărătorul divizor cu zece şi determinând comutarea validării pe următoarea celulă de afişare.

- Iniţial, se înscrie în PB codul caracterului de afişat cu prima celulă, validată prin resetarea

Page 46: Aplicatii ASM

11-3

numărătorului.

Fig.2 Schema electrică

Fig.4 Organigrama aplicaţiei

START

HL←0040H B←9 C←PB

CALL TIME

STOP

(C)←(HL) (HL←HL+1, B←B-1)

Z=0? =1 =0

DISP:

FIRE:

0 … 9 DECODER

D0..D7

DATA BUS

ADDRESS BUS

CONTROL BUS

PB

BRDY :10

CE,A / B,

C / D

RD, INT,

M1, IORQ

BSTB

RESET

PIO Z80

8 COMMAND BITS

10 ENABLE BITS

Page 47: Aplicatii ASM

11-4

Adresă (H)

ETICHETĂ: SIMBOLIZARE ; COMENTARIU

PB :

ORG 1800H ; EQU 01H;

Informare asamblor : Nr. locaţii ← 18.00H. PB=1 (=01H).

18.00 18.03 18.05

DISP :

LD HL,0040H ; LD B,9 ; LD C,PB ;

Iniţializare registre : HL=0040H =adresa primului caracter de afişat, B= numărător de etape, C←PB= adresa portului PB.

18.07 FIRE : OUTI ; Afişează caracterul indicat în registrul HL, numără etapa şi pregăteşte etapa următoare.

18.09 CALL TIME ; Menţine 1msec validarea celulei. 18.0C JR NZ,FIRE ;

Continuă cu următoarea etapă a ciclului în curs; FIRE= -7=0F9H

18.0E JR DISP ; Continuă cu un nou ciclu; DISP= -16=0F0H. 18.10 18.11

TIME :

EXX AF,AF’ ; EXX ;

Salvare registre afectate.

18.12 18.14

$ :

LD B,0AAH ; DJ NZ,$ ;

Iniţializează registru numărător B şi temporizează 1msec la f=2MHz. $= -2=0FEH

18.16 18.17 18.18

EXX ; EX AF,AF’; RET ;

Refacere registre şi revenire.

END ; Informare asamblor.

Temă 1. Să se realizeze tabela codurilor de comandă a afişării pentru conexiunea katod comun. 2. Să se deducă reprezentarea numerelor negative în complement faţă de 2.

Page 48: Aplicatii ASM

12-1

BALEERE TASTATURĂ ŞI CONTROL AFIŞARE Funcţia de bază a sistemului cu microprocesor prezentat, realizează simultan atât sarcina de

afişare dinamică pe şase celule cu şapte segmente şi punct, cât şi sarcina de supraveghere prin baleere de coloană a claviaturii matriceale din 36 taste dispuse pe şase linii şi şase coloane.

Codurile de comandă a celor şase caractere de afişat, stabilite la sfârşitul fiecărei sarcini efectuate, sunt stocate într-o tabelă din şase locaţii succesive de memorie RAM, a cărei primă adresă se află în registrul index IX : (IX), (IX+1), … , (IX+5).

Pentru a nu se afecta afişarea dinamică, fiecare ciclu de baleere a claviaturii se realizează integral şi doar la sfârşit de ciclu fiind semnalată existenţa în registrul A’ a codului tastei apăsate prin starea logică „0” a bistabilului CY’ cu rol de fanion al claviaturii.

Conectarea la sistemul cu microprocesor a afişării şi a claviaturii se face prin circuitul de interfaţă cu transfer paralel de date PPI 8255 (=Programmable Peripheral Interface), aşa cum se arată în schema electrică din fig.1. Porturile interfeţei PPI 8255 sunt utilizate astfel:

- Portul PB, cu adresa etichetată “SEG7”, este utilizat ca port de ieşire pentru generarea celor 8 biţi de comandă a afişării unui character, fiecare bit de ieşire al portului PB, ce poate fi încărcat cu maxim 1,5 mA (= sarcină TTL standard), fiind amplificat în putere cu o poartă logică neinversoare CDB 407, deoarece amplitudinea impulsului de curent pentru aprinderea în regim dinamic a unui LED este de 20 mA, curent fixat cu un rezistor de 220 ohmi;

- Portul PC, cu adresa etichetată „DIGIT” , este folosit ca port de ieşire de date, biţii săi PC0.. PC5 fiind utilizaţi atât pentru baleerea celor 6 coloane din matricea claviaturii, cât şi pentru validarea celor 6 celule de afişare în regim dinamic printr-o amplificare în putere cu porţi logice neinversoare CDB 405, deoarece, în cazul cel mai defavorabil al aprinderii tuturor celor 8 diode LED dintr-o celulă de afişare, curentul de validare este de 160 mA (=8×20 mA/LED), în timp ce un bit de ieşire al portului PC poate fi încărcat cu maxim o sarcină TTL standard;

- Portul PA, cu adresa etichetată „KIN” , este folosit ca port de intrare de date, la biţii PA0.. PA5 fiind conectate liniile matricei claviaturii, iar fiecare bit de intrare al portului este protejat la perturbaţii prin conectare la Vcc=+5V cu un rezistor de 10 kΩ;

- Bitul de intrare PA6, protejat protejat la perturbaţii prin conectare la Vcc=+5V cu un rezistor de 10kΩ, este destinat supravegherii tastei utilizatorului (=USER KEY), utilizatorul având astfel posibilitatea de a completa programul MONITOR cu o aplicaţie proprie

- Bitul de intrare PA7, protejat la perturbaţii prin conectare la Vcc=+5V cu un rezistor de 10kΩ, este folosit pentru citirea programelor de pe bandă magnetică, impulsurile de tensiune necesare fiind formate dintr-un semnal sinusoidal, alternativ şi de mare amplitudine (preluat de pe ieşirea de difuzor suplimentar a casetofonului şi aplicat la intrarea IN printr-un condensator), limitat în intervalul -0,6V.. +5,6V cu diodele D- şi D+ şi amplificat cu două porţi neinversoare CDB 407, care în regiunea liniară asigură o amplificare de aproximativ 2500 (=50×50);

- Bitul de ieşire PC6 generează semnalul de BREAK pentru o linie de întârziere cu două porţi neinversoare CDB 407, fiind astfel, atât protejat la perturbaţii, prin circuitul de intrare al primei porţi din linia de întârziere, cât şi amplificat în putere;

- Bitul de ieşire PC7 este folosit atât pentru generarea semnalelor de control vizual şi sonor, prin amplificare în putere cu tranzistorul T în conexiune repetor pe emitor şi un curent maxim de emitor de 50 mA, cât şi pentru generarea semnelor de salvare pe bandă magnetică la intrarea unui filtru cu banda de trecere 500Hz...3kHz, format din condensatoarele C=10nF, rezistoarele R=10kΩ, rezistorul Re=330Ω şi a cărui ieşire OUT se conectează la intrarea de înregistrare a unui casetofon (reportofon) cu impedanţa de 330Ω.

Semnalul CE, de selecţie a interfeţei PPI 8255, este generat la terminalul Q0 al circuitului

MMN 8205, ce este un decodor 1 din 8, cât timp A6=A7=0 şi IORQ=0. Terminalul CE este

protejat la perturbaţii prin conectare la Vcc=+5V cu un rezistor de 10kΩ.

Page 49: Aplicatii ASM

12-2

Fig.1 Conectare tastatură şi afişare la sistemul de dezvoltare

6 x 10k Rsp=100Ω

PA1

PA7

Rp=10k

PC5

8 x 220 Ω

Vcc=+5V

Q2

PC7 C 10nF

D+ SN 5407

Ci 10nF

Q1

LED

Ri=330Ω

D-

8 x 10k

D0 .. D7

PA0

Rp=10k

Vcc=+5V USER KEY

A0

Rled 520Ω

SPEAKER 8Ω

T=BC178

C 10nF

Cp3=470pF

PIO

Q7

PA5

RD

A0

RD

D0 .. D7

SN 5407

WR

A1

WR

CE Q0

A0

IORQ

IN

+5V

E1 A2

A6

E2

A1

SN 5405

Vcc=+5V OUT

R 10k

Re 330Ω

MMN 8205

E3

A7

CTC

PC0

PC1

BREAK SN 5407

A1

PC6

PB (SEG7)

PC (DIGIT)

PA (KIN)

Vcc=+5V

PPI 8255

8 × COMMAND BITS

×××× 6 = 4 ×××× ADDRESS + + 2 ×××× DATA

RESET RESET

PA6

6×6 KEYS …

Vcc=+5V

5 … 1 0 6 × CEL ENABLE BITS

R 10k

Ra=

10k

Vcc=+5V

Page 50: Aplicatii ASM

12-3

Prin conectarea fiecărei linii a magistralei de date, la Vcc=+5V, prin câte un rezistor de 10kΩ, se face protecţia la perturbaţii a biţilor de intrare din circuitul de destinaţie al unui transfer realizat prin magistrala de date.

Dimensionarea rezistorului de protecţie la perturbaţii a unui bit de intrare se face pentru a asigura bitului de ieşire la care este conectat o încărcare totală de maxim o sarcină TTL standard (=1,6 mA), având în vedere că fiecare circuit CMOS, aflat în starea logică „1” sau în starea de înaltă impedanţă „Z”, încarcă cu circa 40 µA bitul de ieşire la care-i conectat.

Schema electrică de salvare pe bandă magnetică este dată în fig.2, unde sursa de semnal gu

generează semnale rectangulare de 1kHz şi 2 kHz de circa 5V amplitudine, iar tensiuneaoutu de la ieşirea filtrului trece bandă este sinusoidală cu amplirudinea de circa 5mV.

Fig.2 Schema electrică a filtrului trece bandă

Funcţia de transfer şi caracteristicile filtrului trece bandă se determină astfel:

out g 2 2 2

1R

j C1

Rj RCj C

u u1 1 R C j3 RCR

1j CR

1 j CRj C

⋅ω

+ωω= ⋅ = =

− ω + ω⋅ω + +

ω+ω

j RC; 0

1 j3 RCω ω →

+ ω ⇒

1;

3 j RC− ω → ∞

+ ω

⇒ min3 RC 1ω = ⇒ min 4 8

1 1f 500Hz

2 3RC 2 3 10 10 F−= = ≅

π ⋅ π ⋅ ⋅ Ω ⋅

maxRC 3ω = max 4 8

1 3f 3000Hz

2 RC 2 10 10 F−= = ≅

π ⋅ π ⋅ Ω ⋅

c

c c

j RC 1| | | | ( )1 j3 RC 3 j

0,3 4RC

1ω −= =

+ ω + ω c 4 8

1 1f 1500Hz

2 RC 2 10 10 F−= = ≅

π π ⋅ Ω ⋅

Organigrama aplicaţiei şi programul în limbajul de asamblare al microprocesorului Zilog

Z80 sunt prezentate mai jos.

C 10nF

C 10nF

OUT

R 10k

Re 330Ω

R 10k

gPC7 u→ outu Zi 330Ω

Casetofon

Page 51: Aplicatii ASM

12-4

Fig.3 Organigrama aplicaţiei

START

EXX EXX AF,AF’ CY←1, C←0 E←C1H, H←6

(DIGIT)←A←E (SEG7) ←A←(IX) B←COLDEL

STOP

B←B-1

(SEG7)←A⊕A

(DIGIT)←E +C0H B←6/col, D←(KIN)

B←C=cod tastă CY’↔CY=1

C←C+1

IX←IX+1 A←E+3FH RLC E←A+C0H H←H-1

IX←IX-6 EXX, EXX AF,AF’ RET

RR D

SCAN1:

KCOL:

NOKEY:

$:

KROW:

Salvare registre Iniţializare registre

Validare şi comandă a celulei din E

Afi şare 1,5 msec pe celula validată

Stingere cellule Baleere coloană şi citire cuvânt stare linii.

Testare taste din coloana baleată.

Salvare cod tastă apăsată în A’ şi CY’=0 (=fanion tastatură)

Pregătire etapă următoare: - (IX+1)=cod comandă următor - E=cod validare celulă următoare Numărare etapă de baleere.

Iniţializare IX. Refacere register Revenire în programul apelant.

Z=0?

CY=1?

Z=0?

Z=0?

=0

=0

=0

=1

=1

=0

=1

=1

Page 52: Aplicatii ASM

12-5

Adresă Cod Etichetă : Simbolizare ; Comentariu 00.DE MAIN : ;

; ; ;

Scanează displayul şi tastatura, detectează tasta apăsată, emite semnal sonor BEEP şi efectuează sarcina.

00.DE 31.AF.1F LD SP,SYSSTK ; Iniţializare stivă sistem. 00.E1 CD.FE.05 CALL SCAN ;

; Scanează displayul şi tastatura şi când revine A=cod tastă apăsată.

00.E4 CD.CB.06 CALL BEEP ; ; ;

La tastă apăsată emite semnal sonor BEEP şi efectuează sarcina tastei apăsate.

00.E7 18.F5 JR MAIN ; Reia scanarea. 05.FE SCAN : ;

; ; ;

Scanează tastatura şi afişajul. Tabela de afişare: (IX)... (IX+15). La ieşire: CY’=0=există tastă apăsată şi A=cod tastă apăsată .

05.FE 06.00 06.03 06.05 06.07

DD.E5 21.E6.1F CB.7E 28.04 DD.21.A5.07

PUSH IX ; LD HL,TEST ; BIT 7,(HL) ; JR Z,SCPRE ; LD IX,BLANK ;

Dacă s-a apăsat o tastă greşită

7(TEST) 1= , stinge afişajul pe

durata apăsării.

06.0B SCPRE : ; ;

Aşteaptă 40 msec, până ce tastele sunt eliberate .

06.0B 06.04 LD B,4 ; Iniţializează B=4 . 06.0D SCNX : ; 06.0D 06.10

CD.24.06 30.F9

CALL SCAN1 ; JR NC,SCPRE ; ;

Scanează tastatura şi afişajul şi dacă există tastă apăsată reia ciclul de 40 msec.

06.12 10.F9 DJNZ SCNX ; Continuă măsurarea. 06.14 06.16

CB.BE DD.E1

RES 7,(HL) ; POP IX ;

Ştergere indicator eroare şi refacere IX.

06.18 SCLOP : ; Scanează până la tastă apăsată. 06.18 CD.24.06 CALL SCAN1 ; 06.1D KEYMAP: ;

; Când există tastă apăsată (CY=0), genereaza codul intern al tastei.

06.1D 06.20 06.21 06.22 06.23

21.7B.07 85 6F 7E C9

LD HL,KEYTAB; ADD A,L ; LD L,A ; LD A,(HL) ; RET ;

Codul intern al tastei apăsate se obţine în A, din tabelul KEYTAB.

06.24 SCAN1 : ; ; ; ;

Realizează un ciclu de scanare a tastaturii şi displayului, de 10 msec, C7=0 indică tastă apăsată şi A=codul tastei (la ieşire din subrutină).

06.24 06.25 06.26

37 08 D9

SCF ; EX AF,AF’; EXX ;

Salvare registre şi CY’=1=lipsă tastă apăstă (CY’=fanion claviatură).

06.27 06.29 06.2B

0E.00 1E.C1 26.06

LD C,O ; LD E,OC1H ; LD H,6 ;

Iniţializare registre: C=0=cod primă tastă, E=C1H=cod validare primă celulă, H=6=numărător a 6 etape.

Page 53: Aplicatii ASM

12-6

Adresă Cod Etichetă : Simbolizare ; Comentariu 06.2D KCOL : ; 06.2D 06.2E

7B D3.02

LD A,E ; OUT (DIGIT),A ;

Validează celula indicată în E.

06.30 06.33

DD.7E.00 D3.01

LD A,(IX) ; OUT (SEG7),A ;

Cod caracter de afişat pe celulele cu 7 segmente.

06.35 06.37

06.C9 10.FE

$ :

LD B,COLDEL ; DJ NZ,$ ;

Menţine afişarea timp de 1,5 msec; $= -2=FEH (complement faţă de 2)

06.39 06.3A

AF D3.01

XOR A ; OUT (SEG7),A ;

Stinge afişajul.

06.3C 06.3D 06.3E 06.40

7B 2F F6.C0 D3.02

LD A,E ; CPL ; OR OCOH ; OUT (DIGIT),A ;

Formare din codul de validare din registrul E a codului de baleere şi baleere coloană aferentă.

06.42 06.06 LD B,6 ; ;

Iniţializare B=6=număr taste de pe o coloană.

06.44 06.46

DB.00 57

IN A, (KIN) ; LD D,A ;

Cuvânt stare linii preluat în D şi A.

06.47 KROW : ; ;

Pe coloana baleată testează fiecare tastă şi generează codul ei.

06.47 06.49

CB.1A 38.02

RR D ; JR C,NOKEY ;

Pentru tastă neapăsată (CY=1) salt la adresa NOKEY; NOKEY=+2=02H.

06.4B 06.4C

79 08

LD A,C ; EX AF,AF’; ;

La tastă apasată în A’=codul tastei şi în CY’(=fanion ce indică tastă apăsată)=0.

06.4D NOKEY: ; 06.4D 0C INC C ; Generare cod tastă următoare. 06.4E 10.F7 DJ NZ,KROW ;

; Verifică toate cele şase taste din coloana baleată; KROW= -9=F7H

06.50 06.52 06.53 06.55 06.57 06.59

DD.23 7B E6.3F CB.07 F6.C0 57

INC IX ; LD A,E ; AND 3F ; RLC A ; OR OCOH ; LD E,A ;

Pregătire etapă următoare: în IX adresa codului următorului caracter de afişat şi în E octetul de validare a celulei următoare.

06.5A 06.5B

25 20.D0

DEC H ; JR NZ,KCOL ; ;

Numără etapa consumată şi continuă până la încheiere ciclu. KCOL= -49=D0H

06.5D 06.60 06.62 06.63 06.64

11.FA.FF DD.19 D9 08 C9

LD DE,-6 ; ADD IX,DE ; EXX ; EX AF,AF’; RET ;

La sfârşit de ciclu reiniţializeaza IX pentru un nou ciclu şi A=cod tastă apăsată dacă CY=0 , apoi se revine în programul apelant. -6=FAH (complement faţă de 2)

07.A5 07.A6 07.A7 07.A8

00 00 00 00

BLANK: DEFB 00H ; DEFB 00H ; DEFB 00H ; DEFB 00H ;

07.A9 07.AA

00 00

-ERR : DEFB 00H ; DEFB 00H ;

Octeţi de comandă a stingerii afişajului când s-a apăsat o tastă greşită, ultimii doi octeţi de comandă fiind apelaţi şi la afişarea mesajului -ERR.

07.AB 03 DEFB 03H ; „R”

Page 54: Aplicatii ASM

12-7

Adresă Cod Etichetă : Simbolizare ; Comentariu DEFB 03H ; DEFB 8FH ;

07.AC 07.AD 07.AE

03 8F 02 DEFB 02H ;

„R” „E” „-”

07.7B KEYTAB : ; Tabela codurilor interne ale tastelor. 07.7B 03 K00 : DEFB 03H ; HEX_3 07.7C 07 K01 : DEFB 07H ; HEX_7 07.7D 0B K02 : DEFB 0BH ; HEX_B 07.7E 0F K03 : DEFB 0FH ; HEX_F 07.7F 20 K04 : DEFB 20H ; 07.80 21 K05 : DEFB 21H ; 07.81 02 K06 : DEFB 02H ; HEX_2 07.82 06 K07 : DEFB 06H ; HEX_6 07.83 0A K08 : DEFB 0AH ; HEX_A 07.84 0E K09 : DEFB 0EH ; HEX_E 07.85 22 K0A : DEFB 22H ; 07.86 23 K0B : DEFB 23H ; 07.87 01 K0C : DEFB 01H ; HEX_1 07.88 05 K0D : DEFB 05H ; HEX_5 07.89 09 K0E : DEFB 09H ; HEX_9 07.8A 0D K0F : DEFB 0DH ; HEX_D 07.8B 13 K10 : DEFB 13H ; STEP 07.8C 1F K11 : DEFB 1FH ; RDTAPE 07.8D 00 K12 : DEFB 004 ; HEX_0 07.8E 04 K13 : DEFB 044 ; HEX_4 07.8F 08 K14 : DEFB 08H ; HEX_8 07.90 0C K15 : DEFB 0CH ; HEX_C 07.91 12 K16 : DEFB 12H ; GO 07.92 1E K17 : DEFB 1EH ; WRTAPE 07.93 1A K18 : DEFB 1AH ; CBR 07.94 18 K19 : DEFB 18H ; PC 07.95 1B K1A : DEFB 1BH ; REG 07.96 19 K1B : DEFB 19H ; ADDR 07.97 17 K1C : DEFB 17H ; DEL 07.98 1D K1D : DEFB 1DH ; RELA 07.99 15 K1E : DEFB 15H ; SBR 07.9A 11 K1F : DEFB 11H ; - 07.9B 14 K20 : DEFB 14H ; DATA 07.9C 10 K21 : DEFB 10H ; + 07.9D 16 K22 : DEFB 16H ; INS 07.9E 1C K23 : DEFB 1CH ; MOVE

Teme 1. Pentru instrucţiunea de la adresa hexazecimală 06.5D să se determine modul de

reprezentare a operandului -6 . 2. Să se determine frecvenţa tactului sistemului ştiind că timpul de afişare pe o celulă este de

1,5 msec. 3. Să se determine timpul de efectuare a programului „SCAN1”, cuprins în câmpul de

adrese hexazecimale 0624 .. 0664 .

Page 55: Aplicatii ASM

13-1

TRANSFERUL DE DATE CU BANDA MAGNETICĂ

Pe bandă biţii unui octet vor fi înregistraţi succesiv între un bit de START şi unul de STOP, printr-un transfer serial, începând cu bitul de pondere minimă, fiecare stare logică fiind înregistrată ca o combinaţie ce începe cu un număr de perioade de 1kHz şi sfârşind cu un număr de perioade de 2kHz. Alegerea frecvenţelor de 1kHz şi 2kHz, s-a făcut avându-se în vedere că aceste frecvenţe sunt suficient de distanţate între ele şi sunt situate în banda de trecere a oricărui tip de casetofon.

Astfel, în cele ce urmează, s-a convenit ca, folosind frecvenţele de 2kHz şi 1kHz, stările logice „0” şi „1” să fie marcate pe bandă în forma:

2kHz 1kHz"0" 8 T 2 T= ⋅ + ⋅

2kHz 1kHz"1" 4 T 4 T= ⋅ + ⋅ .

Printr-un proces de numărare folosind registrul E şi realizat cu subrutina PERIOD, o perioadă de 2kHz sau de 1kHz va fi detectată prin numărul 28 şi respective 56, iar printr-o comparare a rezultatului numărării cu numărul N:

28 56N 42 2AH

2

+= = = ,

o perioadă citită, de 2kHz sau 1kHz, va fi identificată prin starea logică „0” şi respectiv „1”, a bistabilului de transport CY.

Obţinerea din înregistrarea de pe bandă a stării logice corecte, se realizează cu subrutina GETBIT, prin bitul de semn al registrului L, care, după iniţializare în 00H, va fi incrementat cu 1 pentru fiecare perioadă de 2kHz detectată şi decrementat cu 2 la fiecare perioadă de 1kHz detectată. Astfel, în registrul L, la citirea stării logice „0” se va obţine numărul:

0 0N 8 1 2 2 4 0, cu sgn N 0= ⋅ − ⋅ = > = ,

în timp ce la detectarea stării logice „1” va rezulta numărul:

1 1N 4 1 4 2 4 0, cu sgn N 1= ⋅ − ⋅ = − < = .

Bitul de semn al registrului L, care indică starea logică citită de pe bandă, va fi transferată la sfârşitul subrutinei în bistabilul de transport CY.

Dacă în procesul numărării cu subrutina PERIOD a rezultat un număr mai mare ca 255, atunci prin subrutina TERR se va indica comiterea unei erori prin punerea în starea logică „1” a bistabilului de transport auxiliar CY’, cu rol de fanion de eroare.

Asamblarea în octeţi a biţilor citi ţi cu subrutina GETBIT, se face în registrul E, cu subrutina GETBYTE, care elimină biţii de START şi de STOP ce încadrează fiecere octet.

Preluarea în memoria sistemului a unui întreg program de pe bandă se realizează cu subrutina TAPEIN, care necesită ca date de intrare adresa de început a zonei de memorie în care se va prelua programul citit şi numărul octeţilor din componenţa înregistrării. Citirea de pe bandă magnetică a unui program reprezintă un exemplu de ierarhizare a sarcinilor realizate cu subrutinele TAPEIN, GETBYTE, GETBIT, TERR, PERIOD, indicate în ordinea apelării lor.

Similar, salvarea unui program pe bandă magnetică se realizează cu subrutinele TAPEOUT, OUTBYTE, OUTBIT, TONE, indicate în ordinea apelării lor. Adresă COD ETICHETĂ: SIMBOLIZARE; COMENTARIU 053A GETPTR:

Ia parametrii din locaţiile STEPBF+2,…, STEPBF+5 : (STEPBF+2) şi (STEPBF+3) reprezintă adresa de start, iar (STEPBF+4) şi (STEPBF+5) pe cea de stop pentru programul de salvat. HL=adresă de start; BC=lungimea în octeţi a programului de salvat; CY=0 dacă

Page 56: Aplicatii ASM

13-2

Adresă COD ETICHETĂ: SIMBOLIZARE; COMENTARIU

BC pozitiv şi CY=1 dacă BC negativ. Afectează: AF, BC, DE, HL.

053A 21B11F LD HL,STEPBF+2; 053D GETP : 053D 053E 053F

5E 23 56

LD E,HL; INC HL; LD D,(HL);

Extrage în DE adresa de start.

0540 0541 0542 0543 0544

23 4E 23 66 69

INC HL; LD C,(HL); INC HL; LD H,(HL); LD L,C

Extrage în HL adresa de stop.

0545 0546 0548 0549 054A

B7 ED52 4D 44 03

OR A; SBC HL,DE; LD C,L; LD B,H; INC BC;

CY=0. Formează în BC lungimea în octeţi a programului de salvat.

054B EB EX DE,HL; Reface în HL adresa de start. 054C C9 RET 054D TAPEIN :

Încarcă un bloc de memorie de pe bandă. Intrări : HL=adresa de start a blocului; BC=mărimea în octeţi a blocului. Ieşire: CY=1 dacă este eroare la citire. Afectează registrele: AF, BC, DE, HL, AF’, BC’, DE’, HL’.

054D 054E

AF 08

XOR A; EX AF,AF’;

Se porneşte cu lipsa erorii de citire.

054F TLOOP : 054F 0553

CD5A05 73

CALL GETBYTE; LD (HL),E;

Citeşte un octet şi îl preia în memorie, octet furnizat în E de subrutina GETBYTE.

0553 0555

EDA1 EA4F05

CPI; JP PE,TLOOP;

Genereză în HL adresa pentru un nou octet, numără octetul citit şi continuă până BC=0.

0558 08 EX AF,AF’; CY←CY’; CY’= fanion de eroare 0559 C9 RET 055A GETBYTE:

Citeşte un octet de pe bandă. Ieşire: E=octetul citit; CY’=0 la eroare de citire. Afectează registrele: AF, DE, AF’, BC’, DE’, HL’. Pe bandă un octet are formatul:

BIT START =0 BIT O BIT 1 ……

Page 57: Aplicatii ASM

13-3

Adresă COD ETICHETĂ: SIMBOLIZARE; COMENTARIU BIT 7 BIT STOP =1

055A CD6B05 CALL GETBIT; Citeşte bitul de START cu subrutina GETBIT.

055D LD D,08H ; Iniţializează D ca numărător de biţi ai octetului de citit.

055F 0562

CD6B05 CB13

BLOOP :

CALL GETBIT ; RR E ;

Bitul citit, furnizat de GETBIT în CY, este asamblat în E.

0564 0565

15 20F8

DEC D ; JR NZ,BLOOP ;

Numără etapa şi citeşte cei 8 biţi ai octetului; BLOOP=0F8H=-8

0567 CD6B05 CALL GETBIT ; Citeşte şi neglijează bitul de STOP. 056A C9 RET 056B GETBIT : Citeşte un singur bit de pe bandă.

Ieşiri : CY=bitul citit; CY’=1 la eroare de citire. Afectează registrele: AF, AF’, BC’, DE’, HL’. Formatul unui bit este

2kHz 1kHz"0" 8 T 2 T= ⋅ + ⋅ şi

2kHz 1kHz"1" 4 T 4 T= ⋅ + ⋅ .

Starea unui bit citit este bitul de semn al registrului L iniţializat în 00H şi apoi incrementat cu 1 la fiecare 2kHzT şi decrementat cu 2

la fiecare 1kHzT . Prin bitul H0=0 se

indică 2kHzT , iar prin H0=1 se

indică 1kHzT .

056B D9 EXX Salvare registre. 056C 210000 LD HL,0 L=0 şi H0=0=detectare perioadă

2kHzT .

056F CD8C05 COUNT : CALL PERIOD ; PERIOD indică prin CY=1 2kHzT

şi cu CY=0 1kHzT şi E=mărime

perioadei. 0572 0573 0574

14 15 2011

INC D ; DEC D ; JR NZ,TERR ;

La eroare, când D≠0, salt la subrutina TERR ; TERR = +17 = =11H).

0576 3806 JR C,SHORTP ; La 2kHzT detectată salt la

SHORTP (=06H= +6). 0578 0579 057A 057C

2D 2D CBC4 18F1

DEC L ; DEC L ; SET 0,H ; JR COUNT ;

La fiecare 1kHzT detectată, se

decrementează L cu 2; COUNT= =0ECH= -20

057E 2C SHORTP : INC L ; La fiecare 2kHzT detectată, se

incrementează L cu 1. 057F 0581

CB44 28EC

BIT 0,H ; JR Z,COUNT ;

H0=1 la sfârşitul secvenţei unui bit (reapare frecvenţa de 2 kHz). COUNT=0ECH= -20

Page 58: Aplicatii ASM

13-4

Adresă COD ETICHETĂ: SIMBOLIZARE; COMENTARIU RL L ; Starea bitului citit apare ca signum

L şi este transferată în CY. 0585 0586

D9 C9

EXX RET

Refacere registre şi revenire în programul apelant.

0587 TERR : La eroare de citire când D≠0 realizează CY’=1. Ieşire: CY’=1 la eroare.

0587 0588 0589 058A 058B

08 37 08 D9 C9

EX AF,AF’ ; SCF ; EX AF,AF’ ; EXX ; RET

058C PERIOD : Măsoară cu DE o perioadă de semnal detectat; DE=28 pentru

2kHzT şi DE=56 pentru 1kHzT .

Ieşiri : D≠0 la eroare, CY=1 la

2kHzT şi CY=0 la 1kHzT .

Afectează: AF, DE. 058C 110000 LD DE,0 ; Anulare numărător. 058F DB00 LOOPH : IN A,(KIN) ; Citeşte port KIN cu bit de rang 7

pentru citire. 0591 13 INC DE ; O incrementare în numărare. 0592 0593

17 38FA

RL A ; JR C,LOOPH ;

Măsoară intreaga alternanţă pozitivă; LOOPH=0FAH= -6

0595 0597

3EFF D302

LD A,0FFH ; OUT (DIGIT),A ;

Generează alternanţa pozitivă pentru semnalul de control sonor.

0599 059B 059C 059D

DB00 13 17 30FA

LOOPL : IN A,(KIN) ; INC DE ; RL A ; JR NC,LOOPL ;

Continuă măsurătoarea cu DE şi a alternanţei negative. LOOPL=0FAH= -6

059F 05A1

3E7F D302

LD A,7FH ; OUT (DIGIT),A ;

Generează alternanţa negativă pentru semnalul de control sonor.

05A3 05A4

7B EE2A

LD A,E ; CP MPERIOD ;

CY=1 la 2kHzT şi CY=0 la 1kHzT .

05A6 C9 RET 05A7 TAPEOUT : Salvează un program pe bandă.

Intrări : HL= adresa de start program BC=mărime în octeţi a programului Afectează: AF, BC, DE, HL, BC’, DE’, HL’.

05A7 5E LD E,(HL) ; Data de salvat e transferată în registrul E.

05A8 CDB105 CALL OUTBYTE ; Salvează pe bandă octetul din E. 05AB 05AD

CPI ; CALL PE,TAPEOUT;

Numără transferul făcut, generează în HL adresa următorului octet de salvat şi continuă până BC=0.

05B0 C9 RET 05B1 OUTBYTE: Salvează un octet pe bandă în

Page 59: Aplicatii ASM

13-5

Adresă COD ETICHETĂ: SIMBOLIZARE; COMENTARIU formatul: BIT START=0 BIT 0 BIT 1 ... BIT 7 BIT STOP=1. Intrare: E=octetul de salvat. Afectează: AF, BC’, DE’, HL’.

05B1 1608 LD D,8 ; D=numărător de biţi ai octetului de salvat.

05B3 05B4

B7 CDC405

OR A CALL OUTBIT ;

Salvează bitul START=0.

05B7 05B9

CB1B CDC405

OLOOP : RR E ; CALL OUTBIT ;

Salvează un bit util.

05BC 05BD

15 20F8

DEC D ; JR NZ,OLOOP ;

Salvează toţi cei 8 biţi ai octetului. OLOOP=0F8H= -8

05BF 05C0

37 CDC405

SCF : CALL OUTBIT ;

Salveaza bitul STOP = 1.

05C3 C9 RET ; 05C4 OUTBIT : Salvează un bit pe bandă.

Intrare: CY=starea logică de salvat Distruge: AF, BC’, DE’, HL’.

05C4 D9 EXX ; Salvare registre. 05C5 2600 LD H,0 ; Anulează octet maxim din registrul

HL. 05C7 3809 JR C,OUT1 ; Salvează starea „1” de la adresa

OUT1 (=+9). 05C9 05CB

2E08 CDE205

OUT0 : LD L,8 ; CALL TONE2K ;

Generează 8⋅ 2kHzT cu subrutina

TONE2K. 05CE 05D0

2E02 1807

LD L,2 ; JR BITEND ;

Generează 2⋅ 1kHzT cu subrutina

TONE1K; BITEND=+7=07H 05D2 05D4

2E04 CDE205

OUT1 : LD L,4 ; CALL TONE2K ;

Pentru starea „1” generează 4⋅ 2kHzT .

05D7 05D9

2E04 CDDE05

BITEND :

LD L,4 ; CALL TONE1K ;

Generează pentru starea „1” 4⋅ 1kHzT .

05DC 05DD

D9 C9

EXX RET

05DE TONE1K : Generează semnal dreptunghiular Intrare: C=determină perioadă semnal cu relaţia: Perioadă semnal=2·(44+13·C) stări, HL conţinând numărul de perioade. Distruge: AF, BC, DE, HL.

05DE 05E0 05E2

0E41 1802 0E1F

TONE1K :

TONE2K :

LD C,F1K ; JR TONE ; LD C,F2K ;

Iniţializare C pentru generare

1kHzT sau 2kHzT ; TONE=+2=02H;

(7+12+7 stări) 05E4 05E5

29 110100

TONE : ADD HL,HL ; LD DE,1 ;

2×HL=număr semiperioade Iniţializare DE în 1 pentru

Page 60: Aplicatii ASM

13-6

Adresă COD ETICHETĂ: SIMBOLIZARE; COMENTARIU decrementare; (14+10 stări)

05E8 05EA

3EFF D302

SQWAVE :

LD A,0FFH ; OUT (DIGIT),A;

Generează alternanţa indicată cu A7; (7+11 stări)

05EC 05ED

41 10FE

$ :

LD B,C ; DJ NZ,$ ;

Temporizare după C. $= -2=FEH; (4+13 stări)

05EF EE80 XOR 80H ; Indică alternanţa complementară:

A7 ←A7; (7 stări) 05F1 05F3

ED52 20F5

SBC HL,DE ; JR NZ,SQWAVE ;

Numără alternanţa generată şi continuă până la terminarea secvenţei; SQWAVE= -11=F5H ; (15+7 stări)

05F5 C9 RET; (10 stări)

Observaţii 1. Durata unei stări logice de pe banda magnetică se determină cu relaţiile:

- bit 0 2kHz 1kHz 1kHzT 8 T 2 T 6 T 6msec= ⋅ + ⋅ = ⋅ =

- bit1 2kHz 1kHz 1kHzT 4 T 4 T 6 T 6msec= ⋅ + ⋅ = ⋅ =

2. Durata unui octet de pe bandă este byte bitT 10 T 10 6msec 60msec= ⋅ = ⋅ =

3. Din subrutina TONE, perioadele de 1kHz şi de 2 kHz se generează astfel: - 1kHzT 2 (44 13 F1k)stãri 2 (44 13 65)stãri 1778stãri= ⋅ + ⋅ = ⋅ + ⋅ =

- 2kHzT 2 (44 13 F2k)stãri 2 (44 13 31)stãri 894stãri= ⋅ + ⋅ = ⋅ + ⋅ =

Temă

1. Să se realizeze organigramele următoarelor subrutine: TAPEIN, GETBYTE, GETBIT, TERR, PERIOD, TAPEOUT, OUTBYTE, OUTBIT, TONE.

2. Să se determine timpul de execuţie al fiecărei subrutine, dacă tactul sistemului are frecvenţa de 2 MHz.

3. Cum se operează în adresarea relativă a unui operand ?

Page 61: Aplicatii ASM

14-1

INTERFAŢĂ DE PROGRAMAT MEMORII EPROM

Fig.1 Schema electrică interfaţă de programat memorii EPROM

28 pin EPROM 24 pin EPROM__________ 2764(= 8KB) 27128(=16KB) 27256(=32KB) 2716(=2KB) 2732(=4KB)

R4 4k7

Ai R1 R2 Ai R1 R2

Vcc A14 A13.............Vcc......... Vcc A8 A9 A11.............Vpp OE .......................... OE /Vpp A10 CS D7 D6 D5 D4 D3

0

D2

A B C D

28 7 6 5 4 3 2 1 20 9 8 7 6 15

OE CE A12 A13 A14 +5V Vpp

A B C D

Vcc

0

Vpp = 12..23V R3

22k

Vpp

A12 A7 A6 A5 A4 A3 A2 A1 A0 D0 D1 D2 GND

D1

0

0

1

2 3 4 5 6 7 8 9 10 1 2

A0 ............ A11

R1 4k7

R6 4k7

EPROM

T1

A5

A6

A7

Ø

PIO Z80

D0.. D7

B / A

C / D

PB0

PB1

PB4

PB7

PB6

PB5

PB3

PB2

+5V

PA

CE CLK

M1

RD

IORQ

24 3 2 21 20 19 8 7 6 5 4 13

EPROM Socket (Top View)

D0. .D7 R2 2k2

T3

R5 4k7

A B C D

1 2 3 4 5 6 7 8 9 10 11 12

T2

3×××× CDB493 Ai R1 R2

0

D0..D7

Dpp

3 14

PB

Vcc

M1

RD

IORQ

Page 62: Aplicatii ASM

14-2

Cu această interfaţă se pot programa memorii EPROM cu o capacitate între 2 Kocteţi şi 32 Kocteţi, controlul sarcinilor facându-se cu un sistem cu microprocesor la al cărui conector de extensie este conectată interfaţa de programat memorii EPROM.

În realizarea programelor s-au folosit următoarele notaţii: - PA, PB = adresele portului circuitului PIO Z80; - CPA, CPB = adresele registrelor de comandă asociate porturilor PA şi PB din circuitul PIO Z80; - ERROR = adresa ce conţine octetul de pondere minimă al numărului erorilor comise într-o sarcină, adresă iniţializată în registrul index 1X; octetul maxim de eroare se formează la adresa ERROR+1 (=IX+1);

- IX02 (notată şi IX+2) = adresa la care se păstrează octetul de comandă EPROM, ce are următoarea structură:

PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0

A14 A13 A12 Vpp CS OE Reset Pulse

(IX02)=(IX+2)=octet comandă EPROM

- LENGTH = IX+3 = adresa octetului în care printr-un singur bit în stare logică „1” se indică tipul memoriei EPROM de prelucrat astfel:

D7 D6 D5 D4 D3 D2 D1 D0

27128 2764 2732 2716 0 0 0 27256

(27128H) (LENGTH)=(IX+3)=octetul tipului de EPROM

În programarea sarcinilor se folosesc subrutinele: INCRE (de incrementare), INIT (de

iniţializare), REPEAT (de repetare a sarcinii pe un nou octet) şi END (de sfârşit de sarcină). Capacitatea memoriei EPROM de prelucrat se exprimã ca multiplu de 2 kocteţi, factorul de

multiplicare fiind pãstrat în registrul A’ şi generat prin rotirea cu patru poziţii la dreapta a octetului tipului de EPROM de la adresa LENGTH.

A’7 A’6 A’5 A’4 A’3 A’2 A’1 A’0

0 0 0 27256

(27128H) 27128 2764 2732 2716

A’ =factorul de multiplicare ADRESĂ ETICHETĂ: SIMBOLIZARE; COMENTARII

INCRE : Incrementeazã numărătorul extern şi registrul HL în care se obţine adresa din memorie implicată în următorul transfer.

INCRE : LD A,(IX02) ; INC A ; OUT (PB),A ; DEC A ; OUT (PB),A ;

Incrementează numãrătorul extern cu un impuls la PB0 având durata ultimelor două instrucţiuni.

INC HL ; RET ;

INIT : Iniţializeazã: IX=ERROR, HL=8000H, (ERROR)=(ERROR+1)=00H, BC=0800H=

Page 63: Aplicatii ASM

14-3

ADRESĂ ETICHETĂ: SIMBOLIZARE; COMENTARII =numãrãtor de 2 kiloocteţi, A’=factor de multiplicare şi A=octetul din locaţia adresatã din EPROM.

INIT : DI ; Protejare programare EPROM la întreruperi ulterioare.

LD IX,ERROR ; LD HL,8000H ; LD (IX),0 ; LD (IX+1),0 ; LD (IX+2),12H ;

Iniţializare:HL=8000H; (ERROR)=00H; (ERROR+1)=00H; în octetul de comandă Vpp=Reset=1.

LD A,(LENGTH); AND 0FEH ; JR NZ,STD ; LD A,80H ;

EPROM 27256 este prelucrat de 2 ori ca EPROM 27128 şi de aceea octetul (LENGTH) este înlocuit pentru 27256H (ultimii 16 Kocteţi) cu octetul pentru EPROM 27128.

STD : RRC A ; RRC A ; RRC A ; RRC A ; EX AF,AF’ ;

Din octetul tipului de EPROM aflat în A, se formeazã în A’ factorul de multiplicare .

LD A,1CH ; OUT (PB),A ; LD A,1EH ; OUT (PB),A ;

Se comandã memoria EPROM cu semnalele

OE CS Vpp 1= = = şi se resetează numãrãtorul extern cu un impuls având durata ultimelor douã instucţiuni.

LD A,(LENGTH); AND 0C1H ; JR Z,SKIP ; SET 7,(IX+2) ;

Pentru EPROM 27256H, 27128 şi 2764, ce sunt memorii cu 28 pini, se face A14=1.

SKIP : LD A,(IX+2) ; OUT (PB),A ;

Se comandă memoria EPROM cu

OE CS 0;Vpp 1= = = .

LEXT : EX AF,AF’ ; EX AF,AF’ ;

Aceste 2 instrucţiuni sunt fãrã efect în INIT, cea cu eticheta LEXT fiind necesara într-o ramificare din REPEAT.

LD BC,0800 H ; Iniţializare BC ca numărător de 2 kiloocteţi. LINT : IN A,(PA) ;

RET ; Transferã în A octetul locaţiei adresate din memoria EPROM.

REPEAT : Pregãteşte repetarea sarcinii pentru urmãtorul octet şi numãrã octetul prelucrat.

COA6H REPEAT : DEC SP ; DEC SP ;

Pregãtirea revenirii în programul sarcinii imediat după instrucţiunea CALL INIT.

CALL INCRE ; Incrementarea numãrãtorului extern şi a adresei din HL.

DEC BC ; LD A,B ; OR C ;

Numãrare octet prelucrat şi la 2 kiloocteţi prelucraţi afectare Z=1 prin anulare BC.

JR NZ,LINT ; Dacã BC≠0 se continuă de la LINT cu prelucrarea unui nou octet.

EX AF,AF’ ; DEC A ;

La fiecare 2 kiloocteţi prelucraţi se decrementeazã factorul de multiplicare din A’.

JR Z,END ; La sfârşit de sarcinã (când factorul de multiplicare este nul) se efectueazã subrutina END.

Page 64: Aplicatii ASM

14-4

ADRESĂ ETICHETĂ: SIMBOLIZARE; COMENTARII BIT 0,A ;

JR NZ,LEXT ; Bitul minim în starea 0 din factorul de multiplicare indicã prelucrarea unui multiplu de 4 kiloocteţi, continuându-se de la LEXT pânã la prelucrarea unui multiplu de 4 kiloocteţi.

EX AF,AF’ ; LD A,(IX+2) ; ADD A,20H ; LD (IX+2),A ; OUT (PB),A ;

La fiecare 4 kiloocteţi prelucraţi se incrementeazã cu 1 numãrul A14 A13 A12 din octetul de comandã, noile stãri A14, A13, A12 fiind aplicate EPROM-ului .

EX AF,AF’ ; JP LEXT ;

Continuă de la LEXT cu prelucrarea urmãtorilor 2 kiloocteţi.

END : La sfârşitul unei sarcini realizeazã: inhibare numărător extern, transferul în BC a numărului erorilor comise, valideazã întreruperile.

END : INC SP ; INC SP ;

La sfârşit de sarcinã ignorã revenirea în subrutina sarcinii.

LD A,1CH ; OUT (PB),A ;

Comandã EPROM cu OE CS Vpp 1= = = şi generare prin Reset=0 a impulsului de resetare a numãrãtorului extern.

LD A,(LENGTH); AND 0C1H ;

Afectare Z=1 pentru EPROM 2764, 27128, 27256H , ce sunt memorii cu 28 pini.

LD A,1EH ; Formeazã în A cuvânt comandã EPROM cu

OE CS Vpp Reset 1= = = = . JR Z,PASS ;

SET 7,A ; Realizează A14=1 pentru EPROM 27256H, 27128, 2764, ce sunt memorii cu 28 pini.

PASS : OUT (PB),A ; Comandă EPROM cu :

OE CS Vpp Reset 1= = = = ; sfârşit impuls reset numărător extern.

LD C,(IX) ; LD B,(IX+1) ;

Tranferă în BC numărul erorilor comise pentru că registrul BC este afişat la sfârşit de sarcină.

EI ; RET ;

COPY : Transferă conţinutul memoriei EPROM în memoria sistemului de la adresa HL = =80000H.

COE6H COPY : CALL INIT ; Iniţializare cu INIT, conţinutul primei locaţii din EPROM apărând în A.

LD (HL),A ; Conţinutul locaţiei adresate din EPROM şi aflat în A , este preluat în memorie.

JP REPEAT ; Repetă sarcina de copiere pentru un nou octet. CTRL :

Controlează ştergere EPROM de înscris şi numără ca erori locaţiile incorect şterse . CO2DH CTRL : CALL INIT ; Iniţializare cu INIT, conţinutul primei locaţii

din EPROM apărând în A . INC A ;

JR Z,CLEAN ; Afecteză Z=1 pentru locaţie corect ştearsă, al cărei conţinut FF hexa generează prin incrementare rezultat nul.

INC (IX); Pentru fiecare locaţie incorect ştearsă se

Page 65: Aplicatii ASM

14-5

ADRESĂ ETICHETĂ: SIMBOLIZARE; COMENTARII JR NZ,CLEAN ; INC (IX+1) ;

incrementează numărul de eroare.

CLEAN : JP REPEAT ; Continuă cu verificarea următoarei locaţii din EPROM

VERIFY : Verifică înscrierea unui EPROM prin comparare cu datele înscrise şi aflate în memoria sistemului de la adresa HL=8000H.

C15EH VERIFY : CALL INIT ; Iniţializare cu INIT, octetul primei locaţii din EPROM apărând în A.

CP (HL) ; JR Z,OK ;

Afectează Z=1 dacă octetul locaţiei adresate din EPROM şi aflat în A este cel corect .

INC (IX) ; JR NZ,OK ; INC (IX+1) ;

Incrementează numărul de eroare din 16 biţi pentru fiecare eroare detectată.

OK : JP REPEAT ; Continuă cu verificarea următorului octet din EPROM.

PROG : Înscrie în locaţia adresată din EPROM octetul aflat în memoria sistemul la adresa din HL , şi în loc de eroare numără locaţiile înscrise din EPROM.

COFEH PROG : CALL INIT ; Iniţializare a programului cu subrutina INIT . CP (HL) ;

JR Z,NONEED ; Dacă locaţia de înscris conţine deja data, continuă cu următoarele locaţii (este util la repetarea înscrierii).

PULSE : LD A,(IX+2) ; SET 2,A ; OUT (PB),A ;

Comandă memoria EPROM cu octetul:

A14 / A13 / A12 / Vpp / CS / OE / Reset /A14 / A13 / A12 / 1 / 0 / 1

Pulse/ 1 / 0

LD A,0FFH ; OUT (CPA),A ; LD A,00H ; OUT (CPA),A ;

Programare port PA.

LD A,(HL) ; OUT (PA),A ;

Aplică memoriei EPROM data de înscris.

LD A,(LENGTH); AND 0D0H ; LD A,(IX+2) ; JR Z,T256 ;

Salt la T256 pentru EPROM 27256H şi 2732 (≠2716, 2764, 27128) şi transferă octetul de comandă în A; LENGTH = IX + 3.

BIT 4,(LENGTH); JR NZ,T2716 ; RES 7,A ; JR T256 ;

Pentru memorii EPROM diferite de 2716 şi 27256H realizează A14=0.

T2716 : SET 3,A ; Pentru EPROM 2716 se face CS=1. T256 : SET 2,A ;

RES 4,A ; OUT (PB),A ;

Comandă memoria EPROM:

A14/A13/A12/Vpp/CS / OE/Reset/Pulse A14/A13/A12/ 0 / 1 / 1 / 1 / 0 (2716) A14/A13/A12/ 0 / 0 / 1 / 1 / 0 (2732; 27256H) 0 /A13/A12/ 0 / 0 / 1 / 1 / 0 (restul)

LD DE,TAB ; EX DE,HL ;

Se identifică şi se extrage în DE valoarea constantei de temporizare la programare,

Page 66: Aplicatii ASM

14-6

ADRESĂ ETICHETĂ: SIMBOLIZARE; COMENTARII LD A,(TIME) ; ADD A,A ; ADD A,L ; LD L,A ; LD A,(HL) ; INC HL ; LD H,(HL) ; LD L,A ; EX DE,HL ;

folosind variabila (TIME) ce indică poziţia în tabel a constantei din doi octeţi, asociată memoriei EPROM; TAB=prima adresa a tabelei constantelor de temporizare.

LOOP : DEC DE ; LD A,D ; OR E ; JR NZ,LOOP ;

Temporizare pentru menţinerea supratensiuni Vpp pe memoria EPROM.

LD A,(IX+2) ; SET 2,A ; OUT (PB),A ;

La sfârşit temporizare comandă EPROM

OE Reset Vpp 1= = = .

LD A,0FFH ; OUT (CPA),A ; OUT (CPA),A ;

Programare pentru PA.

INC (IX) ; JR NZ,NONEED ; INC (IX+1) ;

Numără ca eroare locaţia programată.

NONEED : JP REPEAT ; Continuă cu locaţia următoare. C005H CONST : DEFW 0217H ;

DEFW 053EH; DEFW 0A80H; DEFW 1A47H ;

Tabela constantelor de temporizare: 1702H= =4 msec, 3E05H=10 msec, 800AH=20 msec şi 471AH=50 msec. Poziţia în tabelă a constantei de temporizare se face cu variabila (TIME) = 0, 1, 2, 3.

END Temă 1. Să se completeze rubrica adrese, iar pentru fiecare instrucţiune din program să se facă

descrierea sintetică. 2. Să se calculeze timpul de efectuare a fiecărei subrutine din aplicaţia de programare a

memoriilor EPROM. 3. Pentru fiecare subrutină să se facă organigrama aferentă.

Page 67: Aplicatii ASM

15-1

BIBLIOGRAFIE Ioan DANCEA: MICROPROCESOARE. ARHITECTURĂ INTERNĂ. PROGRAMARE. APLICAŢII. Editura DACIA, Cluj-Napoca, 1979.

GRANINO A. KORN: “Microprocesoare, minicalculatoare, microcalculatoare”. Editura TEHNICĂ, Bucureşti, 1981.

T. MUREŞAN: MICROPROCESORUL 8080 ÎN APLICAŢII . Editura FACLA, Timişoara, 1981.

MULTITECH INDUSTRIAL CORP.: “MPF-1. EXPERIMENT MANUAL (SOFTWARE / HARDWARE)”. TAIPEI, 1981.

MULTITECH INDUSTRIAL CORP.: “MPF-1. MONITOR PROGRAM, SOURCE LISTING.”, TAIPEI, 1981.

MULTITECH INDUSTRIAL CORP.: “MPF-1. USER’S MANUAL.”, TAIPEI, 1981.

A. PETRESCU : “MICROCALCULATOARELE FELIX M18, M18B, M118”. Editura TEHNICĂ, Bucureşti, 1984.

Gheorghe TOACŞE: “INTRODUCERE ÎN MICROPROCESOARE”. Editura ŞTIINŢIFICĂ ŞI ENCICLOPEDICĂ, Bucureşti, 1985.

Horia DUMITRAŞCU: “SĂ ÎNVĂŢĂM BASIC”, Editura ALBATROS, Bucureşti, 1987.

INSTITUTUL DE CERCETARE ŞTIINŢIFICĂ ŞI INGINERIE TEHNOLOGICĂ PENTRU TEHNICĂ DE CALCUL ŞI INFORMATICĂ. SECTOR TEHNICĂ DE CALCUL: “COBRA BASIC. MANUAL DE UTILIZARE” , Braşov, 1988.

A. PATRUBANY: “TOTUL DESPRE MICROPROCESORUL Z80”. Editura TEHNICĂ, Bucureşti, 1989.

Florian MORARU, Mihai ATODIROAEI: “PROGRAMAREA MICROCALCULATOARELOR ÎN SISTEMUL DE OPERARE CP/M”. Editura ŞTIINŢIFICĂ ŞI ENCICLOPEDICĂ, Bucureşti, 1989.

R. FONTENAY: “NUMERIQUE-ANALOGIQUE.CONVERTISSEURS.ANALOGIQUE- NUMERIQUE. LES MEILLEURS SCHEMAS D’APPLICATIONS”. Editions RADIO, Paris.

Irina ATHANASIU: “MICROPROCESOARELE 8086, 286, 386”. Editura TEHNICĂ, Bucureşti, 1992.

James HOLLIDGE: „Introduction to Z80 Assembler”, MHTML Document (Windows Explorer)

Mostek: „Z80 PROCESSOR” (z80-mostek.pdf)

Zilog : „Z80 DATA BOOK” (Z80_DataBook.pdf)

Page 68: Aplicatii ASM

15-2

CUPRINS

1. Limbaje de programare. 1.1

2. Asambloare: tipuri, caracteristici. 2.1

3. Pseudoinstrucţiuni. Macroinstrucţiuni. 3.1

4. Adunarea a două numere din 16 cifre zecimale. 4.1

5. Înmulţirea a două numere de 8 biţi. 5.1

6. Împărţirea a două numere de 8 biţi. 6.1

7. Transfer handshaking. 7.1

8. Convertor analog-numeric pe 8 biţi, cu registru cu aproximaţii succesive. 8.1

9. Controlul unei tastaturi: metoda baleerii. 9.1

10. Controlul unei tastaturi: metoda inversării, tastaturi codate. 10.1

11. Afişarea pe celule cu 7 segmente. 11.1

12. Baleere tastatură şi control afişare. 12.1

13. Transferul de date cu banda magnetică. 13.1

14. Interfaţă de programat memorii EPROM. 14.1

15. Bibliografie 15.1