Sunteți pe pagina 1din 23

MICROPROCESOARE

Prezentarea general a structurii unui microcalculator


Procesorul reprezint realizarea cu cel mai mare impact asupra evoluiei ulterioare a societilor industrializate. Uurina implementarii diverselor aplicaii, flexibilitatea privind conducerea proceselor, modularizarea aplicaiilor, fiabilitatea ridicat, au contribuit la o utilizare pe scar larg a microprocesoarelor i implicit la o scdere a preului de cost a aplicaiilor respective. n acest context microprocesorul este dispozitivul electronic care nsoete aproape orice echipament de calcul sau instalaie tehnologic. Rafinarea microprocesoarelor a aparut ca o necesitatea obiectiv datorit faptului c cerinele impuse sistemelor de calcul au evoluat i ele de asemenea ntr-o manier natural. O scurt trecere n revist a procesoarelor dezvluie dinamica evoluiei acestora i creativitatea specialitilor n acest domeniu. Reorganizarea modului de procesare mpreun cu implementarea diferitelor mecanisme de calcul paralel au contribuit la creterea puterii de prelucrare a procesoarelor. Piaa structurilor de calcul cunoate o mare diversitate i pune n eviden faptul c specialitii din acest domeniu sunt ntr-o continu cutare de noi soluii care s rspund provocrilor prezentului i viitorului. Schema bloc a unui microcalculator realizata in jurul unui microprocesor este dat n cele ce urmeaz.

U. C. P. este componenta care guverneaz activitatea ntregului sistem executnd programe care se afl n memoria program (ROM, PROM, EPROM, EEPROM). Prin execuia programului aflat n memoria program U.C.P.-ul proceseaz date cu scopul ndeplinirii unor cerine impuse ntr-un anumit domeniu de activitate. Memoria program este utilizat de regul pentru stocarea programelor care sunt executate de ctre U.C.P. n cazul PC-urilor, memoria program (EPROM) conine un program ce 1

permite ncrcarea unui alt program care la rndul su ncarc sistemul de operare. Memoriile program au evoluat de la memorii ROM care sunt scrise de ctre fabricant o singura dat, pn la memorii EEPROM ce permit tergerea i programarea lor de mai multe ori pe cale electric de ctre utilizator. Memoria de date permite stocarea datelor care se pot modifica n timpul execuiei programului. Memoria de date este de doua tipuri: memoria RAM static care nu necesit refrearea informaiei stocate i memorii RAM dinamice care necesit refrearea informaiei la un interval de aproximativ de 2ms. Interfeele pentru cuplarea perifericelor permit conectarea dispozitivelor externe la U.C.P. n vederea comunicrii cu operatorul uman i respectiv a editrii unor documente privind anumite mrimi din proces. Interfaa de proces este utilizat pentru conectarea procesului la microcalculator. Magistralele microsistemului permit transferul de informaii ntre dispozitivele electronice ale microcalculatorului.

Unitatea central i de prelucrare a microprocesorului Z80


Microprocesorul Z80 reprezint unul dintre cele mai performante procesoare organizate pe 8 bii, fiind realizat ntr-o structur unitar i dispunnd de un set de instruciuni evoluat, comparativ cu celelalte procesoare pe 8 bii. Structura intern este dat n figura de mai jos.

Circuitele pentru decodificarea instruciunilor reprezint componenta de baz a unui microprocesor avnd rolul de a interpreta (decodifica) instruciunile reinute n registrul de instruciuni i de a genera acele semnale de comand (interne i externe) care permit rezolvarea cerinei specificat de ctre instruciunea care se execut la momentul curent. Registrul de instruciuni menine, un timp bine precizat, codul instruciunii n curs de execuie la intrrile circuitului pentru decodificarea instruciunilor. Registrele unitii centrale sunt memorii rapide care au rolul de a mri viteza de execuie a instruciunilor i de a crete flexibilitatea n ceea ce privete implementarea algoritmilor. Registrele unitii centrale mai conin i informaii cum ar fi adresa de refreshare (registrul R), adresa memoriei stiv (registrul SP), partea high a adresei tabelei unde se afl adresele rutinelor de tratare a ntreruperilor (registrul I), etc. Registrele tampon de date i adrese au rolul de a menine adresele i datele pe magistralele de adrese i date un interval de timp bine definit. Unitatea aritmetico-logic (U.A.L.) reprezint o alt component important a microprocesorului care are rolul de a executa operaii aritmetice i logice ntre operanzi ce se pot afla n registrele unitii centrale sau n memoria sistemului.

Descrierea conexiunilor externe ale microprocesorului Z80

M 1 - indic extragerea unui cod de operaie numit i OPCOD sau aa cum este cunoscut si sub denumirea de ciclul FETCH. Obs.: M 1 + IOREQ indic un ciclu de achitare a unei ntreruperi

MREQ - este activ pe zero logic i indic lucrul cu memoria. Semnalizeaz faptul c pe magistrala de adrese se afl o adres de citire sau scriere din/n memoria extern. IOREQ - permite lucrul cu dispozitivele de intrare/ieire. Indic plasarea pe octetul mai puin semnificativ al magistralei de adrese a unei adrese care va fi utilizat ntr-o operaie de citire sau scriere la dispozitivele de I-E.

RD - un semnal cu ajutorul cruia se realizeaz citirea informaiei din memorie sau de la un periferic. Se utilizeaz acest semnal pentru a valida cu ajutorul lui plasarea datelor pe magistrala de date. WR - permite scrierea informaiei n memorie sau la un periferic de ieire. Semnaleaz faptul c pe magistrala de date se gsesc datele ce trebuiesc scrise n memoria extern sau la dispozitivul periferic adresat. RFSH - semnal cu ajutorul cruia se realizeaz refresharea memoriei RAM dinamice. Pe perioada cnd RFSH este activ se activeaz i MREQ, iar pe liniile A0 A6 se afl adresa de remprosptare a memoriei RAM dinamic. HALT - indic oprirea U.C.P., timp n care se ateapt de regul o ntrerupere nemascabil sau una mascabil, dar validat n prealabil, pentru a putea iei din starea HALT. Obs.: n timpul opririi se execut instruciuni de tip NOP (No operation) cu scopul de a se refresha RAM-ul dinamic. WAIT - semnal prin care se poate realiza dialogul cu perifericele mai lente prin introducerea unor stri de ateptare. n timpul strilor de ateptare nu se genereaz semnale de refresh. INT - cerere de ntrerupere mascabil care este validat numai dac se execut instruciunea EI (Enable Interrupt). Cererea poate fi invalidat executnd instruciunea DI (Disable Interrupt). NMI - permite ntreruperea activitii microprocesorului n orice moment de timp (ntrerupere nemascabil). n momentul apariiei unei ntreruperi nemascabile se suspend execuia programului i se face saltul la adresa 0066H, unde se afl rutina de tratare a ntreruperii nemascabile. RESET - este un semnal de resetare a microprocesorului care trebuie inut pe zero logic cel puin 3 perioade de ceas pentru a reseta toate elementele componente ale microprocesorului. Dup reset avem urmtoarea stare: PC (Program Counter) = 0000H ; IF1=0, IF2=0;I=00H, R=00H; modul de ntrerupere setat este modul zero. BUSRQ - este un semnal de cerere de magistral trimis de o alt unitate de procesare care este tratat la sfritul fiecrui ciclu main. BUSAK - este un semnal prin care microprocesorul anun unitatea de calcul care a cerut magistralele faptul c acestea pot fi preluate. - clock-ul U.C.P.-ului care permite desfurarea operaiilor executate de microprocesor. Domeniul clock-ului este [210] MHz. Magistralele de adrese i de date permit adresarea i transferul de informaii de la i ctre dispozitivele microsistemului.

Descrierea registrelor U.C.P.


Unitatea Central de Prelucrare cu Z80 conine registre organizate pe 8 sau 16 bii ce permit creterea flexibilitii U.C.P.-ului i a vitezei de lucru a microprocesorului Z80.

A - registrul acumulator, este un registru des utilizat de ctre U.A.L. Informaia coninut n acesta poate fi att surs ct i destinaie n cadrul operaiilor executate de ctre microprocesor. BC, DE, HL sunt regitre de cte 16 bii, care pot fi utilizai i ca registre de 8 bii (B, C, D, E, H, L). Aceste regitre sunt folosite att n operaiile logice i aritmetice, ct i n operaiile prin care se realizeaz transfer de informaie. de la memorie la microprocesor i invers. Ix, Iy - registre de index, care permit memorarea adresei de baz n cazul unor instruciuni care folosesc adresarea relativ. SP - indicator de stiv, care este de fapt un registru pe 16 bii ce permite lucrul cu memoria de tip stiv, memorie utilizat n cazul instruciunilor de tip CALL sau n cazul tratrii ntreruperilor. Spaiul rezervat memoriei de tip stiv nu trebuie modificat de ctre programele n curs de execuie. PC - contor de program, este un registru pe 16 bii care memoreaz adresa instruciunii n curs de execuie. I - registru pe 8 bii care conine cei mai semnificativi 8 bii ai adresei tabelei cu adresele rutinelor de tratare a ntreruperilor. F - registru care memoreaz indicatorii de condiie rezultai n urma efecturii operaiilor. Registrul F are urmtoarea structur:

unde: 5

S - indicator de semn (S = 1 dac rezultatul operaiei executate este negativ); Z - indicator de zero (Z = 1 dac rezultatul unei operaii este zero); C - indicator de transport care se seteaz cu 1 dac operaia a produs un transport la cel mai semnificativ bit al operandului sau rezultatului; P/V - indicator de paritate/depire (pentru operaii logice avem paritate, iar pentru operaii aritmetice avem depire). n cazul paritii, dac P/V=1, atunci rezultatul are un numr par de bii, iar n cazul depirii, dac P/V=1, atunci rezultatul a depit limitele intervalului [-128, 127]; H - indicator de transport auxiliar, fiind utilizat numai de ctre instruciunile de ajustare zecimal; N - indicator de adunare sau scdere care este utilizat de asemenea de ctre instruciunile de ajustare zecimal; IF1, IF2 bistabile care permit lucrul cu ntreruperile mascabile i nemascabile; IMFa, IMFb - bistabile care memoreaz unul dintre cele 3 moduri de tratare a ntreruperilor.

Descrierea ciclurilor main


Ciclul instruciune reprezint timpul de execuie a unei instruciuni i este format la rndul su din cicluri main. Un ciclu main este o succesiune de mai multe stri T (T1, T2, Tn), unde o stare reprezint perioada de ceas a microsistemului. Structura general a unui ciclu instruciune este dat n figura urmtoare:

Ciclul instruciune prezentat corespunde instruciunii LD A,(8020H) i conine patru cicluri main. Primul ciclu este un ciclu FETCH (extragere cod operaie), urmat de dou cicluri main necesare extragerii adresei de memorie de unde se va face transferul. Ultimul ciclu corespunde executrii propriu-zise a instruciunii de transfer a datei din memorie n registrul A. Microprocesorul Z80 dispune de cicluri de citire din memorie (extragere cod operaie, citire operand, citire date din memorie) i cicluri de scriere n memorie, care se refer la transferul informaiei de la microprocesor n memoria RAM static sau dinamic a microsistemului. De asemenea Z80 dispune de cicluri de citire/scriere din/n porturi de intrare/ieire, care sunt similare ciclurilor de citire/scriere din/n memorie. n cadrul acestor cicluri se activeaz IOREQ n loc de MREQ . n cazul comunicrii cu dispozitivele mai lente se utilizeaz tehnica de WAIT necesar transferului de date ntre perifericile cu timp de acces mai mare i microprocesor.

Ciclul de extragere a codului operaie. Pentru extragerea codului operaie se plaseaz pe magistrala de adrese continutul registrului PC, corespunztor instruciunii n curs de execuie i se activeaz semnalul M1 , deoarece se extrage un cod de operaie. Dup activarea lui M1 se activeaz MREQ i RD i se reine informaia pe frontul cresctor al perioadei T3. Dup extragerea codului operaie urmeaz refresharea memoriei RAM dinamic pe durata perioadelor de ceas T3 i T4 prin plasarea adresei de refreshare pe magistrala de adrese i activarea semnalelor MREQ i RFSH .

Cicluri de scriere/citire n/din memorie sau port de ieire/intrare cu stari WAIT

Pe frontul cztor al perioadei T2 se testeaz WAIT, iar n cazul n care este gsit pe 0 logic se mai introduce nc o stare de ateptare Tw. Pe frontul cztor al lui Tw se testeaz din nou WAIT pn cnd acesta este pe 1 logic. Dup ce se trece WAIT pe 1 logic se continu desfurarea normal a ciclului main. Transferul datelor are loc pe frontul cztor al perioadei T3, moment n care se realizeaz tranziia semnalelor de citire/scriere din 0 n 1 logic. n funcie de semnalul care se activeaz ( MREQ , IOREQ , RD , WR ) microprocesorul execut una dintre operaiile date n tabelul urmtor.
MREQ 0 0 1 1 IOREQ 1 1 0 0 RD 0 1 0 1 WR 1 0 1 0

Operaia Citire memorie Scriere memorie Citire port Scriere port

Modurile de adresare ale microprocesorului Z80


Microprocesorul Z80 dispune de un set de instruciuni mult mai performant dect celelalte microprocesoare de 8 bii. Are n total 158 tipuri de instruciuni care includ i cele 78 de instruciuni ale microprocesorului INTEL 8080 la nivel de cod obiect. Dintre instruciunile puternice ale microprocesorului Z80 se pot reaminti i urmtoarele: transfer i comparare la nivel de blocuri de date i prelucrare la nivel de bit. Instruciunile microprocesorului se grupeaz n urmtoarele tipuri de instruciuni: 8

instruciuni de transfer pe 8 bii; instruciuni de transfer pe 16 bii; instruciuni de transfer pe blocuri i cutri n interiorul blocurilor de memorie; instruciuni specifice operaiilor aritmetice i logice pe 8 bii; instruciuni corespunztoare operaiilor de comand a U.C.P.; instruciuni de rotaie i deplasare; instruciuni de salt; instruciuni apel de subrutine i revenire n programul principal; instruciuni specifice operaiilor de intrare/ieire.

Observaie: Toate aceste tipuri de instruciuni se prezint, n detaliu, n cadrul laboratorului aferent acestei discipline. Modurile de adresare ale microprocesorului Z80 permit un transfer eficient ntre registre, memoria extern i dispozitivele periferice. n cele ce urmeaz se prezint modurile de adresare ale microprocesorului Z80. Adresare imediat Structura instruciunii

Exemplu:

LD A, 05 ADD A, 30

efect A05H efect AA+30H

Adresare imediat extins Structura instruciunii:

Exemplu:

LD HL, nn

efect HL nn

Adresare relativ Structura instruciunii:

Exemplu:

JR Z, e

efect: dac Z = 0, atunci continu : dac Z = 1, atunci (PC + d) PC

Adresare extins Structura instruciunii:

Exemplu:

JP nn LD (nn),A

efect: salt la adresa nn efect: transfer data din registrul A n locaia de memorie de la adresa nn;

Adresare indexat Structura instruciunii:

Exemplu:

LD (Ix+d),n

efect: OM(Ix+d) n

Adresare la registru Structura instruciunii:

Exemplu:

LD B,C

efect B C

10

Adresare implicit Structura instruciunii:

Exemplu:

XOR A

efect A AA

Adresare indirect cu registre Structura instruciunii:

Exemplu:

ADD A,(HL)

efect A A+DM(HL)

Adresare pe bit Structura instruciunii:

Exemplu:

BIT 6,D

efect testeaza bitul 6 al registrului D si modifica in mod corespunzator flagul Z

Programarea n limbajul de asamblare al processorului Z80


Programarea ntr-un anumit limbaj de asamblare este strns corelat cu modul de operare al unitaii de procesare utilizat, necesitnd n unele situaii i cunotine privind hard-ul microsistemului. Limbajul de asamblare presupune o gestionare riguroas a resurselor procesorului, comparativ cu majoritatea limbajelor de nivel care nu au acces direct la resursele hard ale platformei de calcul. Diferenele care exist ntre un limbaj de asamblare i un limbaj de nivel nalt se pot concretiza att n avantaje ct i n dezavantaje i anume:

11

limbajul de asamblare permite accesul la toate resursele unui microprocesor, dnd posibilitatea utilizatorului s realizeze aplicaii care s fie performante att din punct vedere al spaiului de memorie folosit, ct i din punct de vedere al vitezei de execuie; programarea necesit o organizare riguroas, deoarece manipularea variabilelor de lucru presupune i cunoaterea locaiei de memorie la care se afl acele variabile. Un alt aspect care trebuie subliniat se refer la faptul c, dac n cazul unui limbaj de nivel nalt adresarea unui element dintr-un vector se face prin nume i indice, n cazul limbajului de asamblare se face printr-o adresare relativ care presupune i operaii prin care se determin adresa respetiv. Registrele prin care se adreseaz respectivul element nu trebuiesc folosite i de alte instruciuni sau dac sunt folosite trebuie salvate la acel moment ca apoi s se refac. Toate aceste operaii necesit o abordare riguroas i coerent n ceea ce privete realizarea programelor ntr-un limbaj de asamblare. Abordare impune ca programatorul s cunoasc starea tuturor resurselor procesorului (registrele acestuia, alocarea memoriei, sistemul de ntrerupere etc) i implicaiile modificrii acestor resurse asupra bunei funcionri a ntregului microsistem. Realizarea i rularea unui program n asamblare presupune parcurgerea urmtoarelor etape: conceperea algoritmului; scrierea programului n limbajul de asamblare corespunztor procesorului Z80; translarea fiierului text care conine programul surs, n fiiere obiect relocabile utiliznd un assembler; linke-ditarea fiierelor obiect ntr-un singur fiier obiect executabil, prin reevaluarea att a legturilor interne ct i a legturilor externe. Aceasta etap de lucru se realizeaz cu ajutorul unui program denumit linkeditor; ncrcarea programului n memoria de lucru a microsistemului; rularea programului ncrcat n memorie i evident verificarea rezultatului obinut. n cele ce urmeaz se ilustreaz etapele menionate mai sus, considernd un exemplu simplu de calcul al sumei unei constante la un vector i apoi memorarea acelui vector la o anumit zon de memorie. Programul realizat i editat cu un editor de fiiere text este dat mai jos i este nsoit de comentarii, astfel c nu mai necesit i alte explicaii suplimentare.

EXEMPLU DE PROGRAM REALIZAT IN ASAMBLARE Z80


Fisierul Prog . asm ; Ex. de pr. in asamblare Z80 ; Se seteaza indicatorul de stiva LD SP,0020H JP ST ; Se stabileste adresa unde ; se plaseaza codul programului .ORG 0020H ST: JP LP1 ; Se definesc datele de intrare LD1: .DB 04H .DB 03H Fisierul Prog . lst 0001 0000 ; Ex. de pr. in asamblare Z80 0002 0000 ; Se seteaza indicatorul de stiva 0003 0000 31 20 00 LD SP, 0020H 0004 0003 C3 20 00 JP ST 0005 0006 0007 0008 0006 ; Se stabileste adresa unde 0006 ; se plaseaza codul programului 0020 .ORG 0020H 0020 C3 29 00 ST: JP LP1 ; Se definesc datele de intrare LD1: .DB 04H .DB 03H Fisierul Prog . obj 0000 31 20 00 0003 C3 20 00 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F 0010 0011 00 00 00 00 00 00 00 00 00 00 00 00

0009 0023 0010 0023 04 0011 0024 03

12

.DB

02H

0012 0025 02 0013 0014 0015 0016 0017 0018 0019 0020 0021 0022 0023 0024 0025 0026 0026 00 0027 00 0028 00

.DB

02H

; Se defineste spatiul destinatie SD1: .DB 00H .DB 00H .DB 00H ; Se seteaza constanta CT1 CT1 .EQU 14H LP1: LD BC,LD1 LD HL,SD1 LD D,03H; LP2: CALL R1 DEC D JP NZ,LP2 HALT

; Se defineste spatiul destinatie SD1: .DB 00H .DB 00H .DB 00H

0012 0013 0014 0015 0016 0017 0018 0019 001A 001B 001C 001D 001E 001F

00 00 00 00 00 00 00 00 00 00 00 00 00 00

0029 ; Se seteaza constanta CT1 0029 CT1 .EQU 14H 0029 01 23 00 LP1: LD BC,LD1 002C 21 26 00 LD HL,SD1 002F 16 03 LD D,03H; 0031 CD 39 00 LP2: CALL R1 0034 15 DEC D 0035 C2 31 00 JP NZ,LP2 0038 76 HALT

0020 C3 29 00 0023 0024 0025 0026 0027 0028 0029 002C 002F 0031 0034 0035 0038 04 03 02 00 00 00 01 23 00 21 26 00 16 03 CD 39 00 15 C2 31 00 76

; Rutina care aduna la data ; din memorie de la adresa (BC) ; contanta CT1si o depune ; la adresa de memorie (HL) R1: LD A,(BC) ADD A,CT1 LD (HL),A INC BC INC HL RET .END

0026 0027 0028 0029 0030 0031 0032 0033 0034 0035 0036

0039 0039 0039 0039 0039 003A 003C 003D 003E 003F 0040

; Rutina care aduna la data ; din memorie de la adresa (BC) ; contanta CT1si o depune ; la adresa de memorie (HL) 0A C6 14 77 03 23 C9 R1: LD ADD LD INC INC RET .END A,(BC) A,CT1 (HL),A BC HL

0039 0A 003A C6 14 003C 77 003D 03 003E 23 003F C9

Spatiul de memorie necesar executiei programului, inaintea rularii acestuia

13

Spatiul de memorie necesar executiei programului, dupa rularea acestuia

n cadrul programului s-au utilizat pe lang instruciunile specifice microprocesorului Z80 si directive specifice limbajului de asamblare. Directivele sunt elemente ale limbajului de programare prin care se stabilesc seciunile de date i de program i elementele prin care se definesc constantele i variabilele de lucru. Aceste directive ofer un cadru riguros i comod n ceea ce privete programarea ntr-un limbaj de asamblare i sunt necesare iniializrii variabilelor i rezervrii unor zone de memorie. Directivele utilizate n cadrul exemplului de mai sus sunt: Directiva .ORG prin care se stabileste adresa unde se plaseaza codul programului Directiva .DB prin care se definesc datele de intrare sau se rezerv spaiu de lucru Directiva .EQU prin care se seteaz valoarea unei anumite constante

STUDIUL CERERILOR DE MAGISTRAL, A NTRERUPERILOR I A STARII HALT

Aceste moduri de lucru ale microprocesorului contribuie la creterea flexibilitii microprocesorului deoarece cererile de magistral i ntreruperile permit comunicarea ntrun mod asincron cu alte dispozitive i la iniiativa acestora. Prin utilizarea acestor faciliti se degreveaz microprocesorul de anumite operaii care trebuie fcute ciclic i la intervale de timp relativ mici. Avnd n vedere faptul c att cererile de magistral ct i ntreruperile sunt generate de ctre dispozitivele externe, microprocesorul le trateaz ntr-o ordine bine stabilit. Organigrama prin care se ilustreaz modul de tratare a acestor evenimente este dat n figura urmtoare. 14

Cererile de magistral sunt prioritare i se trateaz la sfritul ciclurilor main. ntreruperile nemascabile sunt preluate n orice moment i se trateaz la sfritul instruciunii n curs de execuie, iar ntreruperile mascabile au prioritatea cea mai mic i sunt preluate i tratate la sfritul instruciunii n curs de execuie, numai dac acestea (ntreruperile nemascabile) au fost activate n prealabil (IF1=1).

NTRERUPERILE MICROPROCESORULUI Z80


ntreruperile nemascabile sunt prioritare fa de ntreruperile mascabile i mai puin prioritare fa de o cerere de magistral. La apariia unei ntreruperi, microprocesorul salveaz PC-ul instruciunii imediat urmtoare n memoria de tip stiv i trece la tratarea 15

ntreruperii nemascabile prin execuia rutinei de tratare a ntreruperii care se afl la adresa 0066H. Modul de conectare a unui periferic care genereaz o intrerupere nemascabil i tratarea acesteia sunt ilustrate n figurile urmtoare

Daca nu exista o cerere de cedare de magistrala, dupa terminarea instructiunii in curs de executie, microprocesorul incepe executia unui ciclu masina special (Non-Maskable Interrupt Request Cycle), in cadrul caruia executa urmatoarele operatii: 1. 2. 3. 4. 5. 6. copiaza in IFF2 continutul lui IFF1 dezactiveaza intreruperile mascabile (IFF1=0) Salveaza continutul registrului PC in stiva Incarca contorul de program cu valoarea 0066h ruleaza rutina de tratare a intreruperii, dispusa la adresa mentionata mai sus revine din rutina de intrerupere nemascabila, cu instructiunea RETN (RETurn fron Non-maskable interrupt), care are doua efecte: reface PC si transfera continutul lui IFF2 in IFF1 16

Rutina de tratare a inreruperii poate fi organizata astfel: Pentru inceput, sa ne reamintim cum se salveaza in memoria de tip stiva continutul registrilor implicati in diferite calcule si cum se va reface continutul registrilor din stiva in cazul instructiunilor de salt si apel de subrutina, precum si in cazul aparitiei unei intreruperi mascabile sau ne-mascabile.

CALL nn

RET

PUSH qq POP qq

SPSP-1 , (SP) PCH SPSP-1 , (SP) PCL PCnn PCL(SP) SPSP+1 , PCH(SP) SPSP+1 SPSP-1 , (SP) qqH SPSP-1 , (SP) qqL qqL(SP) SPSP+1 , qqH(SP) SPSP+1

qq: BC, DE, HL, AF


; UTILIZARE STIVEI EXTERNE nmistk: PUSH AF ; Salvarea registrelor pe stiva PUSH BC PUSH DE PUSH HL ;................................................. ; Tratare intrerupere nemascabila .................................................... .................................................... POP HL ; Refacerea registrelor de pe stiva POP DE POP BC POP AF RETN ; Revenirea din rutina NMI ; UTILIZAREA REGISTRELOR SECUNDARE nmireg: EX AF,AF ; Salvarea registrelor in stiva interna EXX ;................................................. ; Tratare intrerupere nemascabila .................................................... 17

.................................................... EX AF,AF EXX RETN ; Refacerea registrelor din stiva interna ; Revenire din rutina NMI

Observatie: Cererea de ntrerupere nemascabil este reinut n orice moment, chiar i n situaia n care microprocesorul are cedate magistralele, dar se trateaz numai la sfritul instruciunii n curs de execuie. ntreruperile mascabile sunt preluate i tratate la sfritul execuiei instruciunii curente numai dac acestea au fost activate n prealabil. Microprocesorul Z80 are trei moduri de tratare a ntreruperilor nemascabile, moduri care se stabilesc cu ajutorul urmtoarelor instruciuni: IM0, IM1, IM2. Modul zero (IM0) este compatibil cu modul de tratare a intreruperii corespunztor microprocesorului I8080. Modul unu (IM1) poate fi utilizat de perifericele care nu aparin familiei Z80. Modul doi (IM2) este specific familiei de periferice Z80. Se menioneaz faptul c activarea ntreruperilor se face cu instruciunea EI, iar dezactivarea acestora cu instruciunea DI. Observaie: La resetarea microprocesorului ntreruperile mascabile sunt dezactivate, iar modul setat este modul zero.

Modul 0 de intrerupere
Modul zero este compatibil cu modul de ntrerupere al microprocesorului 8080. Perifericul care genereaz o ntrerupere plaseaz pe magistrala de date codul instruciunii RST p (RESTART p), unde p = 00H, 08H, 10H, 18H, ,38H , sau codul unei instruciuni CALL adr.. n cazul plasrii instruciunii RST p se salveaz PC-ul instruciuni imediat urmtoare i se trece la execuia instruciunilor de la adresa 0000H sau 0008H 0038H, n funcie de valoarea lui p. Dac programul permite tratarea ntreruperii n spaiul de adres de 8 octei, atunci la adresa respectiv nu este necesar o instruciune de salt necondiionat la o alt adres unde se gsete adevrata rutin de tratare a ntreruperilor generat de perifericul respectiv. n cazul utilizrii controlerelor de ntrerupere, cum ar fi circuitul integrat 8259, acestea genereaz a instruciune CALL, deci permite plasarea rutinelor de tratare a ntreruperilor oriunde n memoria microsistemului. Modul de generare i tratare a unei ntreruperi n cazul n care perifericul plaseaz instruciunea RST p este ilustrat n figura urmtoare.

18

n momentul generrii unei ntreruperi de ctre cel puin un periferic, circuitul specializat genereaz o ntrerupere ctre microprocesor, iar acesta rspunde prin semnalul INTA = M 1 + IOREQ , moment n care circuitul specializat pune pe magistrala de date instruciunea RST p corespunztoare perifericului cu cea mai mare prioritate. Microprocesorul trateaz ntreruperea prin rularea programului corespunztor perifericului care a generat respectiva ntrerupere. Un circuit specializat care rezolv att problema prioritilor, ct i a generrii codului instruciunii RST p este circuitul I8214. Dac se utilizeaz controlerul de ntrerupere CI 8259, atunci rutinele de tratare a ntreruperilor pot fi plasate oriunde n memoria microsistemului, deoarece acestea sunt memorate ntr-o tabel, iar accesul la adresa rutinei se face prin intermediul a doi octei generai de controler.

Modul 1 de intrerupere
Dac ntreruperile sunt validate, iar la sfritul instruciunii n curs de executie pinul INT se afla la 0 logic, atunci microprocesorul salveaza PC-ul instructiunii imediat urmatoare si trece la tratarea intreruperii executand programul care se afla la adresa 0038H. ntreruperea mascabil-modul 1 este similara ntreruperii nemascabile cu exceptia faptului ca aceasta (intreruperea nemascabil) se trateaza cu ajutorul unui program aflat la adresa 0066H. Acest mod de intrerupere se poate utiliza i n cazul cnd exist mai multe periferice care genereaz o ntrerupere, urmnd ca prioritatea s se stabileasc prin interogare. Schema de principiu n cazul modului 1 de ntrerupere prin care se trateaz ntreruperi de la 8 periferice este dat n figura urmtoare.

19

Dialogul se desfasoara dupa protocolul urmtor: un periferic trimite pe linia INT i o cerere de ntrerupere care are drept efect generarea unui semnal egal cu unu logic i plasarea acestuia pe una din intrrile portului 74LS373. Dac cel puin unul din semnalele INT i este unu logic, atunci semnalul INT devine zero logic, moment n care se anun procesorul c cel puin un periferic a generat o intrerupere. microprocesorul ia cunostin de ntrerupere i salveaz contorul program corespunztor nstruciunii imediat urmtoare, trecnd apoi la execuia programului de la adresa 0038H. n cadrul acestui program se citete data de la perifericul de intrare i se trece la tratarea intreruperii perifericului cu prioritate maxim, ca apoi sa se revin n programul principal sau sa se trateze ntreruperea imedia urmatoare in ordinea prioritatilor. Achitarea intreruperii trebuie sa o faca rutina de tratare a intreruperilor prin resetarea cererii (INT i =0). Programul prin care se realizeaza tratarea intreruperilor este dat mai jos.

20

n cadrul acestui mod de ntrerupere se simplific hardul n ceea ce privete stabilirea prioritilor, dar crete durata privind determinarea perifericului care a generat ntreruperea, deoarece aceasta (stabilirea prioritilor) se face prin program.

Modul 2 de intrerupere
Acest mod de intrerupere este specific perifericelor din familia microprocesorului Z80 si anume PIO-Z80; SIO-Z80 ; CTC-Z80 . Se poate lucra n acest mod numai dup execuia instruciunilor EI , IM2. n cadrul acestui mod se pot deservi pn la 128 de periferice a cror prioritate se stabilete prin poziionarea lor ntr-o ordine care corespunde prioritilor stabilite aprioric. 21

Modul de conectare a perifericelor din familia Z80 care utilizeaza modul 2 de intrerupere este dat n figura de mai jos.

Fiecare periferic poate genera o ntrerupere dac sunt ndeplineste urmatoarele conditii : a fost programat s lucreze n modul de ntrerupere corespunztor modului 2 oferit de micriprocesorul Z80. intrarea IEI (intrare de activare a intreruperilor) este la 1 logic. registrul care conine octetul inferior al adresei de memorie unde se afla adresa rutinei de tratare a ntreruperilor a fost ncrcat cu valorile corespunztoare ; Dac sunt ndeplinite condiiile menionate mai sus, n cazul apariiei unei ntreruperi se parcurg urmtoarele etape: se citete vectorul de ntrerupere corespunztor perifericului care a generat ntreruperea, activandu-se semnalele M 1 i IOREQ ; se salveaza PC-ul instructiunii imediat urmatoare n memoria de tip stiv i se extrage din tabela cu adrese adresa rutinei de tratare a intreruperii asociat perifericului ; se trece la execuia rutinei de tratare a ntreruperii si apoi se revine n programul aflat n curs de execuie. Fiecare periferic din familia lui Z80 dispune de o iesire de inhibare a celorlalte periferice (IEO). De fapt prin acest mecanism se stabilete prioritatea n cazul apariiei mai multor cereri de intrerupere. Cnd un periferic a generat o ntrerupere acesta genereaza un semnal 0 logic la iesirea IEO, semnal care inhib toate perifericele plasate fizic dup acesta. Modul de tratare a ntreruperii este ilustrat n figura urmtoare.

22

Prin utilizarea acestui mod de intrerupere, att tabela ct i rutinele de tratare a intreruperilor pot fi plasate oriunde n memorie.

Starea HALT
Starea HALT reprezint starea n care intr microprocesorul Z80 n urma execuiei instruciunii HALT care are codul 76. Trebuie specificat faptul c pe durata instructiunii HALT se execut instructiuni NOP. Scoaterea microprocesorului din aceast stare se poate face prin resetarea lui, sau printr-o ntrerupere nemascabil sau mascabil. ntreruperea mascabil are efect numai dac inainte de intrarea microprocesorului n stare HALT, ntreruperile mascabile au fost activate.

23

S-ar putea să vă placă și