Sunteți pe pagina 1din 73

Microprocesoare & Microcontrolere

CURS
Conf. dr. ing. Tiberiu Coroescu Autor: tefan Amaximoaie 2011/2012

Arhitectura sistemelor cu microprocesoare


1. Schema bloc a sistemelor cu microprocesor
Microprocesoarele sunt destinate realizarii sistemelor de calcul. Pentru sisteme de comanda, in functie de tipul microprocesorului, rezulta si complexitatea sistemului precum si puterea de procesare. Pe langa sistemul de calcul, microprocesoarele sunt destinate implementarii unor sisteme de conducere automata a unor sisteme industriale denumite sisteme cu microprocesor sau microsisteme. Aparitia sistemelor cu microprocesor a determinat inlocuirea logicii cablate cu logica programabila. Din punct de vedere functional, sistemul cu microprocesor este un sistem programabil de prelucrare a informatiei ce contine doua componente fundamentale: hardware si software. Schema bloc a unui sistem cu micrprocesor are aspectul:
M

MD

(D) Date

UCP (CPU)

MA

(A) Adrese

MC

(C) Comenzi

Port I/E Pi

Port I/E Pd
Process

Subsisteme: UCP: unitatea centrala de procesare (central processing unit); M: memoria; Port I/E: porturi intrare iesire; Pi: periferice informatice; Pd: periferice dedicate; MD, MA, MC: magistralele de date, adrese si comenzi. Page

UCP gestioneaza functionarea sistemului, magistralele si asigura comunicarea cu celelalte subsisteme.

Magistrala are trei componente: - Magistrala de date (MD) bidirectionala prin care se furnizeaza date spre celelalte subsisteme sau invers (4, 8, 16, 32 si 64 biti); - Magistrala de adrese (MA) unidirectionala prin care sunt identificate porturile I/E si memoria M; - Magistrala de comenzi (MC) bidirectionala. O parte din liniile ei reprezinta iesiri de transmitere a unor comenzi de citire/scriere, iar alta parte din linii sunt intrari cu rol de sincronizare a unitatii UCP cu celelalte sisteme. Memoria (M) este destinata stocarii programelor si datelor din sistem. La sisteme cu complexitate mica si medie, memoria este memorie program si memorie date. Memoria program gestioneaza functionarea sistemului de tip ROM, PROM, EPROM. Memoria de date e realizata din memorie de tip RAM. La sisteme de complex mare, memoria se imparte in memorie principala interna (ROM sau RAM) si memorie auxiliara sau externa realizata pe suporturi magnetice (floppy disc, hard disc) sau optice de tip CD-ROM. Porturile I/E au rolul de-a realiza comunicarea sistemelor cu exteriorul. Asigura conectarea celor doua subsisteme de periferice informatice si periferice dedicate. Porturile informatice (Pi) sunt reprezentate prin tastatura, display (cu tub catodic, celule cu afisaj numeric, LED, LCD), imprimante, cititoare de banda, etc. Porturile dedicate (Pd) sunt destinate conectarii la proces. Sunt reprezentate prin interfete de intrare si interfete de iesire ce pot fi analogice sau numerice. Softul este definit de sistemul de operare cu programe de baza ce permit accesul la resursele sistemului si programelor de utilizator ce asigura functionarea sistemului conform unui algoritm prestabilit.

Page

Unitatea centrala a sistemelor cu microprocesor


2. Structura unitatii centrale (UC)
Unitatea centrala de prelucrare si procesare a sistemelor cu microprocesor gestioneaza functionarea intregului sistem. Elementul de baza este microprocesorul. Unitatea centrala mai contine, pe langa microprocesor, si o serie de circuite auxiliare care asigura initializarea (CR circuit reset, amplificarea magistralelor, etc.) si de sincronizare a functionarii (semnal de ceas (clock)). Schema bloc a CPU (central processing unit): Q cristal de cuart BD
CLK

BDA ABD

P
BCON

BA ABA

BAA

BC BR
CR

BCA ABC

Microprocesorul genereaza magistrala unica cu BD, BA si BC, iesirile acestuia pot comanda o singura sarcina a TTL. In cazul in care structura sistemului cu microprocesor este realizata astfel incat apar mai multe sarcini TTL, este necesar ca magistralele semnalelor sa fie amplificate. Amplificatoarele trebuie sa fie cu trei stari: - Conductie; - Blocare; - Impedanta ridicata. La magistralele de date se utilizeaza un amplificator bidirectional, iar pentru amplificatoarele magistralelor de comenzi si adrese se folosesc amplificatoare unidirectionale. Initializarea va fi realizata de circuitul de reset (CR), care asigura si initializarea automata la conectarea circuitului de alimentare. Butonul de reset (BR) asigura reinitializarea prin operatorul uman. Sincronizarea are loc prin semnalul de ceas (clk), care genereaza un semnal periodic, foarte stabil datorita cristalului de cuart (Q).

Page

3. Operatii de intrare iesire sincron


Tehnicile de sincronizare a microprocesorului cu echipamentele periferice se numesc operatii de intrare iesire si pot fi de doua tipuri: sincrone si asincrone. Operatiile sincrone au la baza metoda de interogare continua (pelling): - Se caracterizeaza prin faptul ca transferul de informatie dintre microprocesor si periferice se face la initiativa microprocesorului; - Metoda este sincrona deoarece este realizata prin program. Reprezentarea intuitiva a metodei pelling apare un urmatoare schema: M CPU
bus unic

P I/E1

P I/E2

P I/En

P1

P2

Pn

Microprocesorul din CPU interogheaza periodic porturile de intrare iesire P I/E1 P I/En, care asigura conectarea perifericelor P1 Pn din cadrul sistemului. Interogarile periodice sunt sugerate prin liniile sageata. Daca portul este disponibil are loc schimbul de informatii. Linia sageata pune in evidenta faptul ca legatura intre microprocesor si porturi este informationala, nu fizica. Schimbul fizic de informatii se realizeaza prin intermediul magistralei bus unic. Aceasta tehnica are avantajul ca orice schimb de informatii se realizeaza sincron cu programul prin instructiunile de program. Se indica numai unde apar solicitari rare si de durata mare sau unde nu pot aparea evenimente a caror evolutie nesesizata sa aiba efecte negative. Nu implica hard suplimentar. Dezavantaje majore: - Consuma din timpul de prelucrare al procesorului; - Apare posibilitatea unor desfasurari de evenimente rapide ce nu vor fi sesizate.

Page

4. Operatii de intrare iesire asincrone


Din aceasta categorie fac parte transferul prin intreruperi si transferul prin DMA. Transferul prin intreruperi se realizeaza la solicitarea perifericelor si este prezentat in schema urmatoare: M CPU INT
P I/E1 P I/E2 P I/En bus unic

P1

P2

Pn

In momentul in care unul dintre perifericele P1 Pn solicita un transfer de date, portul aferent acestui periferic va genera un semnal ce va fi transmis microprocesorului pe una din liniile de intrerupere INT. Aceste linii de intrerupere sunt esantionate permanent de catre microprocesor la sfarsitul fiecarei instructiuni. Ca urmare a sesizarii solicitarii microprocesorului din CPU, va parasi programul in curs de executie si va stabili un schimb de informatii cu perifericul prin intermediul portului prin care s-a transmis cererea de intrerupere. Intreruperile microprocesorului sunt: - Mascabile; - Nemascabile: au prevazuta o intrare separata a microprocesorului notata NMI (nonmascable interrupt). Denumirea acestei intreruperi se datoreaza celor doua caracteristici definitorii: o Nu poate fi inhibata prin program; o Rutina de deservire are o adresa bine definita de fabricant. Intrarile de intrerupere nemascabila sunt alocate unor evenimente de intrerupere precum ceasul de timp real sau disparitia tensiunii. Intreruperile mascabile reprezinta categoria cea mai raspandita. Caracteristica intreruperilor mascabile este ca pot fi validate sau invalidate prin program. Terminalul microprocesorului destinat intreruperilor mascabile se noteaza INT.

Page

Transferul DMA (direct memory access) reprezinta un transfer cu acces direct la memorie. Realizarea acestui tip de transfer presupune un hard suplimentar si are urmatoarea configuratie: M CPU BUSRQ
P I/E1 Controler DMA
(BUS Request) - Cerere de acces la magistrala

P I/E2

P I/En

P1

P2

Pn

Pentru realizarea transferului DMA se realizeaza un controler DMA, care este un circuit electronic complex capabil sa preia controlul magistralelor sistemului. Cand apare necesitatea unui transfer cu DMA se emite un semnal BUSRQ, semnal ce poate fi considerat un semnal de intrerupere special. In momentul cand CPU sesizeaza semnalul, se opreste, trecandu-si busul unic in cea de a treia stare (impedanta ridicata). Controlul magistralelor este acum preluat de controlerul DMA, care asigura transferul informatiei dintre memorie si perifericul care a solicitat intreruperea. In acest caz, viteza de transfer este foarte mare, mult mai mare decat in cazul transferului gestionat de microprocesor.

Page

5. Structura microprocesoarelor. Schema bloc


Avand in vedere diversitatea microprocesoarelor, structura lor este foarte diferita, insa tinand cont de functiile realizate pot fi realizate o serie de blocuri functionale comune ce difera doar intern ca mod de implementare. Din punct de vedere arhitectural, microprocesoarele difera in functie de firma producatoare. Din punct de vedere structural se evidenteaza urmatoarea reprezentare comuna: Date
Buffer Date (BD)

Magistrala interna

Ri

UAL MUX RM

ROM Di BLCC RAM RA

Control

Buffer Adrese (BA)

Adrese BLCC bloc logic de comanda si control; Blocurile principale comunica intre ele prin intermediul magistralei interne. Comunicatia intre magistrala interna si cea de date se realizeaza prin intermediul bufferului de date (memorie tampon). Bufferul de date este bidirectional si are trei stari (conductie, blocare, impedanta ridicata). Dimensiunile bufferului de date sunt date de dimensiunea magistralei de date externe (8, 16, 32, 64). Comunicatia intre magistrala interna si magistrala de adrese se realizeaza prin registrul de adrese RA, ce transmite adresa spre exterior pe magistrala de adrese printr-un buffer de adrese, care este unidirectional cu trei stari. Numarul liniilor de adrese stabileste si capacitatea de memorie ce poate fi selectata fizic direct. Astfel avand a linii de adresa, memoria adresabila direct este 2a cuvinte. UAL este unitatea aritmetica si logica. Consta dintr-un circuit combinational ce realizeaza mai multe functii standard precum operatii aritmetice si logice.

Page

RM reprezinta registrii interni ai microprocesorului destinati stocarii temporare a unor date, reprezentand locatia RAM. Registrii interni se impart in doua categorii: generali si speciali. Accesul fizic la registrii RM se face prin MUX, conectate la magistrala interna. Registrul de instructiuni Ri preia instructiunile citite din memorie si retransmite la decodificatorul de intructiuni Di, ce face parte din BLCC. Microprocesorul poate avea incluse pe cip si celule de memorie de tip ROM sau RAM. Memoria ROM contine sistemul de operare. Memoria RAM este memorie de lucru al carui continut dispare la disparitia tensiunii. Sincronizarea functionarii partii componente se face printr-un semnal de clock si stabileste si viteza de lucru a microprocesorului prin frecventa impulsurilor respective din tactul de ceas.

Page

6. Structura microprocesorului. Transferuri de date, cicluri si stari


Prin transfer de date se intelege deplasarea de operanzi sau de rezultate in microprocesor, adica deplasarea informatiei intre microprocesor si celelalte subsisteme. Din punct de vedere al transferului de date, microprocesoarele de uz general se impart in: - Microprocesoare de categoria A, caracterizate prin faptul ca toate transferurile de date se fac numai prin acumulator, indiferent ca transferul trebuie facut intre registrii, memorie sau porturi; - Microprocesoare de caterogia B, permit schimburi de date intre registrii generali, memorie si porturi; - Microprocesoare de categoria C, apare schimbul intre locatiile de memorie; - Microprocesoare de categoria D, apar transferuri directe intre mai multe locatii directe de memorie consecutive (blocuri de date). Schema bloc pentru tranferul de blocuri de date din memorie:
START

I <- 1 J <- 11

Mi <- Mj

i <- i+1 j <- j+1 NU i, j > n DA STOP

Functionarea microprocesorului este sincronizata printr-un semnal de ceas sau clock. Este un semnal periodic, dreptunghiular a carui frecventa stabileste si frecventa de lucru a microprocesorului. Semnalul este generat de un circuit de clock pilotat cu un cristal de cuart, pentru ca frecventa semnalului sa ramana stabila in timp. Forma de unda a semnalului de ceas este:

Page

T Ciclu, stare

Ciclul masina reprezinta durata executiei unei operatii elementare. Un ciclu masina poate avea 4 6 stari. Aceste cicluri pot fi prelungite prin inserarea unor stari de asteptare (wait) a caror perioada se noteaza Tw si care se insereaza doar atunci cand se impune sincronizarea vitezei microprocesorului cu periferice mai lente.
T1 T2 T3 T4 T1 T2 Tw T3 T4

Ciclul M1: 4 stari

Ciclul M2: 4 stari + Tw

Prima operatie care intervine la inceputul fiecarui instructiuni este cea de fletch (de extragere a codului instructiunii). Diagrama ciclului fetch este urmatoarea:
T1 T2 T3 T4 T1

A0 A1

Adresa cod

Adresa refresh

MEM

RD

D0 D1

DiN

RFSH

La inceputul ciclului, microprocesorul tranfera pe magistrala de adrese adresa locatiei de memorie la care se afla codul instructiunii (adresa cod). Dupa aproximativ jumatate de stare este activat un semnal al magistralei de comenzi (MEM), care informeaza ca magistrala de adrese contine o adresa care se refera la memorie. Impreuna cu acest semnal se activeaza si semnalul de citire RD si comanda de citire a memoriei. Pe durata ultimelor doua stari se realizeaza, in paralel, doua operatii: decodificarea continutului extras prin DiN si reimprospatarea memoriei dinamice care se face prin semnalul RFSH.

Page

10

7. Structura microprocesoarelor de adresare


Tehnicile de adresare se refera la modalitatea de a specifica in formatul unei instructiuni urmatoarele: - Adresa unui operand ce urmeaza a fi prelucrat; - Rezultatul unei operatii; - Codul altei instructiuni daca aceasta nu se gaseste in memorie imediat dupa instructiunea curenta. Se foloseste ca adresare: - Adresarea imediata; - Adresarea imediata extinsa; - Adresarea directa in pagina ZERO; - Adresarea relativa; - Adresarea extinsa; - Adresarea indexata; - Adresarea la registru; - Adresarea implicita; - Adresarea indirecta cu registri; - Adresarea pe bit. 1) Adresarea imediata Se refera la instructiunile ce au minim 2 3 octeti dispusi in memorie in ordinea: cod operatie (1 2 octeti), operand (1 octet). LD r,n r: A, B, C, D, E, H, L ADD A,n 2) Adresarea imediata extinsa Contine instructiuni pe 3 4 octeti: Cod Operatie Operand Operand LD dd, nn 1 2 octeti 2 octeti 2 octeti

n: B, C, DE, HL

Page

3) Adresarea directa in pagina ZERO Contine instructiuni de 1 octet, care cuprind toate informatiile si se refera atat al codul operatie cat si adresa operatiei din pagina ZERO, la care va fi redirectionat programul. Adresa este data de bitii B5, B4 si B3, iar B6, B7, B2, B1 si B0 reprezinta codul instructiunii. 00h 0 0 0 rst 0 0&h 0 0 1 rst 1 ------------------------38h 1 1 1 rst 7

11

4) Adresa relativa Este formata din 2 octeti, unul codul operatiei si un octet deplasamentul. Deplasamentul reprezinta un complement fata de 2 care se aduna algebric la adresa la care este instructiunea urmatoare, ceea ce permite numarul de salturi inainte sau dupa in limita (-128, 127). Adresa de date este formata din PC + deplasament. Instructiuni de salt relativ: JR, cc, E cc (vectori de conditie): Z, C, nZ 5) Adresa extinsa Primii 1 2 octeti reprezinta codul operatiei. Urmatorii doi, adresa de salt, adresa unui operand. In cele mai multe cazuri, dupa codul operatiei este dispus LSB, iar urmatorul operand va fi octetul cel mai semnificativ MSB.

Page

12

8. Microprocesoare de uz general de 8 biti


a) Registri
Microprocesoarele de 8 biti specifice sunt I8080 si Z80. Registrii microprocesoarelor de 8 biti se impart in 3 categorii: - registri generali; - registri speciali; - registri de intrerupere. Registrii generali sunt destinati pastrarii unor operanzi si a rezultatelor unor operatii. Pentru exemplificare, prezentam registrii generali specifici microprocesorului Z80, cel mai performant dintre procesoare de 8 biti. Acesti registrii generali sunt reprezentati prin doua seturi. Setul principal si setul secundar (cu prim). Fiecare registru este dublat. Schimbul de informatie intre cele doua seturi se face prin instructiuni de schimb intre registri de tip EX (exchange). A B D H F C E L A B D H F C E L EX AF, AF AF <-> AF EX X BC <-> BC, DE <-> DE, HL <-> HL Registrul A, respectiv A este numit acumulator. F, F conditie sau flag. Celule de memorie, bistabili.

16 biti

Registru secundar

Structura registrilor flag de conditie pentru Z80 este urmatoarea: B7 S B6 Z B5 B4 H B3 B2 P/V B1 N B0 C

Page

13

Flagul S de la SIGN (semn) este numit si indicatorul de semn. El ia valoarea 1 daca rezultatul executiei unei instructiuni este negativ si ia valoarea 0 in caz contrar. Flagul Z (zero) este indicatorul de zero. El ia valoarea 1 daca rezultatul operatiilor aritmetice si logice este 0. Ia valoarea 0 daca rezultatul este diferit de 0. Flagul H (half carry) este indicatorul de transport de la bitul 3 la bitul 4 al acumulatorului. El nu este accesibil programatorului, fiind testat doar de unitatea ALU. Flagul P/V (parity over flow) este un indicator multifunctional ce indeplineste 3 functii: - indicator de paritate P;

Acest indicator se pozitioneaza in 1 daca in urma unor operatii de transfer, acumulatorul contine un numar par de biti cu valoarea logica 1. P = 0 daca acumulatorul contine numar impar de biti. - indicator de depasire V, in cadrul unei operatii aritmetice de adunare, scadere samd. V ia valoarea 1 daca exista o depasire si 0 in caz contrar; - detector de 0, pentru registrul BC. P/V ia valoarea 1 daca BC diferit de 0. Flagul N (negativ) este indicatorul de minus. Daca N = 1, atunci ultima operatie efectuata a fost o adunare. Daca N = 0, ultima operatie a fost o scadere. Flagul C (carry) este indicatorul de transport. C = 1 daca dupa o adunare a unor numere fara semn se obtine o valoare mai mare decat 255. Registri speciali sunt destinati unor functii specializate. Pentru Z80 exista 6 registri speciali, dintre care patru sunt de 16 biti si doi de 8 biti. 16 biti IX registru index IY registru index PC contor programare SP indicator stiva I registru intrerupere R registru refresh
8 biti 8 biti

Registrii index IX si IY sunt pentru pastrarea adreselor de baza. Registrul PC (program counter) este un contor de program. El contine adresa de 16 biti a instructiunii ce se va extrage din memorie. Registrul indicator de stiva SP (stack pointer) pastreaza adresa de 16 biti a varfului stivei, astfel incat aceasta stiva sa poata fi organizata oriunde in memoria RAM a sistemului. La Z80 e organizata pe principiul LIFO (last in first out). Registrul I de intreruperi (interrupt) este destinat functionarii intreruperii. Acesta contine octetul cel mai semnificativ al adresei de intrerupere. Registrul R (refresh) este tot de 8 biti. Se incrementeaza automat dupa fiecare extragere a unei instructiuni. Regsitrii de intrerupere, sunt folositi la functionarea intreruperii a microprocesoarelor. Exista doi registrii de intrerupere: IFF1 si IFF2 sunt registrii de 1 bit (bistabili) IFF1
0 invalid 1 - valid

IFF2
Memoreaza starea lui IFF1

Page

14

IMFa 0 0 1 1

IMFb 0 1 0 1

Mod 0 Neutilizat Mod 1 Mod 2

Registrul IFF1 este testat cand se solicita o intrerupere mascabila (care poate fi activata sau dezactivata prin program). Daca IFF1 = 0 intreruperea nu este validata, iar daca IFF1 = 1 intreruperea este onorata imediat. Registrul IFF2 este tot un bistabil care memoreaza starea lui IFF1 pe durata functionarii microprocesorului intr-o rutina de intrerupere nemascabila (ce nu poate fi dezactivata prin program). Al doilea grup de registrii de intreruperi IMFa si IMFb, stabileste combinatiile corespunzatoare modurilor de functionare in intrerupere a microprocesorului, adica 0, 1 si 2.

b) Semnale specifice
Consideram tot microprocesorul Z80 care este introdus intr-o capsula cu 40 de pini din care 2 sunt alocati alimentarii cu tensiune, iar restul de 38 sunt alocati magistralei unice cu cele trei componente: date, adrese si comenzi. - Opt pini sunt alocati magistralei bidirectionale de date; - Saisprezece pini sunt alocati magistralei unidirectionale de adrese (de la A0 la A15); - Restul sunt semanle de comanda si control. Numarul de celule de memorie ce pot fi adresate este: n = 2 ^16 = 65536 = 64 kB. Pentru selectarea porturilor de iesire se folosesc 8 biti din magitrala de adrese (A0 la A6), numarul de biti va fi np = 2^8 = 256 porturi. Magistrala de comanda si control va avea 16 semnale: 8 intrari si 8 iesiri.

Page

15

Semnale de iesire: - M1, semnal activ in logic 0, care indica, atunci cand este activ, faptul ca este primul ciclu al unei instructiuni; - MREQ (memory request) este un semnal cu 3 stari, care indica faptul ca adresa transmisa prin magistrala de adrese se refera la memorie. Este o cerere de acces la memorie; - IORQ (I/O request) este un semnal cu trei stari logice care indica faptul ca este o cere de acces de la un port de intrare sau iesire; - RD (read) cu trei stari logice. Indica faptul ca operatia executata de microprocesor este de citire din memorie, dar numai daca este in tandem cu MREQ sau IORQ. Pentru a putea citi natura semnalului la care se refera operatia, se pot utiliza porti SAU, precum in urmatoarea schema simpla:

WR (write) cu trei stari. Cand este activ (in 0 logic), indica faptul ca are loc o operatie de scriere in memorie. Pentru a putea diferentia semnalul de scriere in raporturi se foloseste schema:

Page

16

RFSH (refresh) e un semnal de comanda folosit pentru reimprospatarea memoriilor dinamice; HALT (semnal de iesire) indica faptul ca microprocesorul este blocat, oprind executia programului. BUSAK (bus acknowledge) este un semnal care apare informand asupra faptului ca microprocesorul a cedat controlul magistralei.

Semnale de intrare: - (semnal de clock) este un semnal periodic, dreptunghiular a carui frecventa depinde de frecventa de lucru a microprocesorului. Pentru Z80 este intre 4 si 6 MHz. Are rolul de a sincroniza functionarea unitatii centrale UCP si de a stabili precis timpul de executie a intructiunilor. - WAIT (semnal de asteptare) are rolul de a sincroniza unitatea centrala cu perifericele mai lente. - INT (interrupt) si NMI (non mascable interrupt) sunt semnale pentru cereri de intrerupere. INT este intrerupere mascabila, se poate activa sau dezactiva prin program. NMI este intrerupere nemascabila ce nu poate fi dezactivata prin program. - RESET (semnal de stergere) adica realizeaza initializarea unitatii centrale si deci a sistemului. Pentru a obtine resetarea sistemului trebuie ca semnalul reset sa fie activ pe durata a cel putin trei perioade de tact. La activarea sa, magistralele trec in cea de a treia stare, contorul programei PC este adus la 0 si microprocesorul incepe executia de la adresa 0000h. - BUSRQ (bus request) semnal de cerere a accesului la magistrala. Daca se acorda accesul se emite semnalul BUSAK.

Page

17

9. Microprocesoare de uz general de 16 biti

a) Structura
Microprocesoarele de 16 biti specifice sunt: I8086, Z8000 si MC68000. Schema bloc generala a uP de 16 biti este urmatoarea:
Magistrala unica

BCI
BIU

BI

BE
EU

BCUE

Schema evidentiaza doua unitati specializate ce lucreaza in paralel: unitatea de executie EU si unitates de interfata cu magistrala BIU. Fiecare din cele doua unitati realizeaza sarcini bine stabilite prin blocurile lor specifice (BI si BE), fiecare cu bloc de comanda propriu: BCI - bloc de comanda interfata, BCUE - bloc de comanda unitate de executie: - BI: bloc de interfata; - BE: bloc de executie. Arhitectura microprocesorului I8086, conform schemei bloc generale, este:
UCA

Registrii Generali

Registrii Structura Logica A MEM

MUX

MUX

BCI

Magistrala interna

RD(A)

ALU

P0

P1

P2

P3

P4

Page

FLAG

BCUE

18

Unitate de executie (EU) are in structura urmatoarle blocuri: - Registrii proprii (registrii generali); - UAL (unitatea aritmetica si logica), ce poate avea unul sau mai multi registrii acumulatori; blocul BCUE de comanda a EU; - registrul indicatorilor de conditie sau FLAG. Unitatea de interfata a magistralei (BIU) contine si ea blocuri specifice si anume: - Registri specifici de structurare logica a memoriei; - blocul de calcul al adresei UK; - bloc de comanda a interfetei BCI; - registrii de date si adrese RD(A); - registrii de instructiuni in care vor fi depuse instructiunile in ordinea extrgerii din memorie (P0 pana la P4). Microprocesoarele evoluate de 16 biti, cum ar fi I80286, introduc conceptul de memorie virtuala. Acest concept include toate resursele posibile de memorie, atat interna cat si externa. Exista doua unitati suplimentare ce implementeaza noul concept si anume: - Unitatea de gestiune a memoriei UGM ce permite o memorie virtuala de 1GB desi memoria fizica, direct adresabila, este doar de 16 MB; - Unitatea de tratare a instructiunilor UTI ce contine un decodificator de instructiuni, mentinand in permanenta o coada de 3 instructiuni decodificate, pregatite pentru executie.

b) Registrii
Registrii microprocesorului I8086 se impart in 5 categorii: - registrii de date; - registrii de acces; - registrii de stare; - registrii de acces; - registrii indicatori de adresa.
15 - 0 15 0

AH BH CH DH EU
15 - 0

AL BL CL DL

AX BX CX DX

BIU

CS SS DS ES IP

Page

SP BP SI DI

19

Registrii de date sunt denumiti si registrii generali. Sunt reprezentati printr-un set de registrii de 16 biti ce apartin unitatii de executie EU, notati cu Ax, Bx, Cx, Dx. Pentru acesti registrii pot fi accesate si jumatatile lor respectiv Ah, Dh, Al si Dl. Registrul Ax este un registru acumulator utilizat pentru operatia de intrare iesire pe cuvant si registru implicit pentru operatii de inmultire si impartire. Registrul Bx este folosit pentru adresarea indirecta in operatiile cu memoria. Registrul Cx reprezinta un numarator si este utilizat drept contor in operatii cu siruri, deplasari si rotiri. Registrul Dx este registrul de date destinat operatiilor de intrare iesire cu adresare indirecta si pentru inmultiri si impartiri pe 16 biti. Registrii pentru accesul in interiorul unui segment. Sunt reprezentati printr-un set de 4 registrii de 16 octeti, si anume: - SP indicatorul curent de stiva, utilizat in toate operatiile care folosesc date din stiva; - BP indicatorul al bazei stivei; - SI un registru index utilizat in operatii cu siruri de date de tip sursa; - DI este un registru index pentru operatii speciale de siruri de date de tip destinatie. Registrul de stare (flag) contine indicatorii de conditie ai microprocesorului. Este un registru de 16biti in care sunt utilizati doar 9 biti. 15 14 13 12 11 O 10 D 9 I 8 T 7 S 6 Z 5 4 A 3 2 P 1 0 C

T: Tact, este folosit pentru a utiliza functionarea pas cu pas a microprocesorului; I: Indicatorul pentru validare interuperi; D: Indicator de directie; O: Overflow.

Page

20

Registrii segment sunt reprezentati prin registrii CS , SS, DS, si ES din unitatea BIU. Fiecare contribuie la formarea unui segment. Sunt destinati pentru a crea subdiviziuni logice in memoria sistemului, denumite segmente care au o dimensiune de 64kB. - Registrul CS (registru segment de coduri), indica portiunea de 64kB din memorie in care se gaseste programul curent. - Registrul SS se numeste segment de stiva, adica segmentul in care se afla stiva curenta. - DS (registrul segment de date) segmentul de memorie in care se afla operanzii si rezultatul operatiilor curente. - Registrul ES este registrul suplimentar de date , cu acelasi rol ca si DS, dar punand la dispozitia programatorului 64kB de date suplimentare. - Registrul IP (registrul indicator de adresa, registrul indicator de instructiuni), are o functie asemanatoare controlului de programe PC intalnit la procesoarele de 8 biti.

Circuite de intrare iesire

10. Circuitul I8255. Structura si moduri de functionare


Face parte din circuitele de transfer programat care preiau si transmit informatia in mod paralel (PIO - Paralell Input Output). Din aceasta categorie face parte si ciruitul Z80PIO. Structura circuitului respecta structura generala a circuitelor de intrare iesire, prezentata in urmatoarea schema:

BD0 BD7

B U F I/E

PA

PA0 PA7

Reset
RD WR A0 A1 CS

B L C C

I8255

PC

PC0 PC7 PC0 PC3 PC4 PC7

PB

PB0 PB7

+5V

GND

Page

Circuitul contine trei porturi paralele de cate 8 biti fiecare (PA,PB,PC), a caror functionare se stabileste in functie de cuvantul de comanda transmis portului de comanda de catre unitatea centrala. Ca urmare circuitul este vazut de catre unitatea centrala ca avand 4 porturi dintre care 3 pentru comunicatie si unul pentru comanda (va fi portul BD0-BD7 pentru comanda). Blocul logic de comanda si control (BLCC) va gestiona functionarea intregului circuit , in functie de cuvantul de comanda si semnalele externe specifice. Comunicatia cu unitatea centrala se realizeaza prin bufferul de intrare iesire cu trei stari notata BUF I/E. Circuitul este introdus intr-o capsula de 40 pini , din care 24 pini alocati pentru cele 3 porturi, 8 pini pentru comunicatia cu unitatea centrala prin busul de date BD0-BD7, 6 pini pentru comunicatia cu celelalte doua magistrale de adrese si de control de comanda: BA si BC. Ultimii doi pini pentru alimentare. Semnalul Reset are rolul de a initializa circuitul.La activarea acestui semnal este sters inclusiv cuvantul de comanda, astfel incat circuitul va trebui reprogramat. Semnalul RD, de citire, atunci cand este activ in logic 0 realizeaza citirea portului adresat, iar semnalul WR realizeaza scrierea acestuia.

21

Semnalele conectate la magistrala de adrese BA, adica CS A1 sau A0 au rolul de selectie, fie a circuitului, fie a porturilor aferente circuitului. Selectia se face pe baza urmatorului tabel: CS A1 0 0 1 1 X A0 0 1 0 1 X Port selectat PA I/E PB I/E PC I/E P COM Circuit neselectat

0 1

Modurile de functionare ale acestui circuit se stabilesc prin transmiterea de catre unitatea centrala in portul de comanda a unui cuvant de comanda, iar in raport cu structura cuvantului de comanda transmis pot fi stabilite trei moduri de selectare: Mod0, Mod1 si Mod2. Modul 0 este modul in care pot fi programate toate cele trei porturi ale circuitului (PA, PB, PC), atat ca intrari cat si ca iesiri.

MOD 0

PB0 PB7

PC4 PC7

PC0 PC3

PA0 PA7

In acest mod circuitul poate fi privit ca un circuit cu doua porturi de 8 biti, PA si PB, plus doua porturi de 4 biti. Cele doua porturi de 4 biti se obtin prin impartirea in doua sectiuni a portului PC, avem PC0-PC3 si PC4-PC7. Aceste doua sectiuni ale lui PC pot fi programate sa fie folosite fie ca iesire, fie ca intrare. Modul 1: Poate fi folosit doar pentru porturile PA si PB, deoarece o parte din liniile portului C sunt utilizate la realizarea protocolului de comunicatie a primelor doua porturi. Fiecare din cele doua porturi PA si PB pot functiona in modul 1, fie ca porturi de intrare, fie ca porturi de iesire. Avem cazul cand programam porturile PA si PB ca intrari, deci modul 1 IN:

C0 C1 C2 C3 C4 C5

INTRB IBUFB STBB (negat) INTRA STBA (negat) IBUFA

MOD 1 IN
C0 C1 C2 C3 C4 C5 C6 C7

Page

PB0 PB7

PA0 PA7

22

Se observa ca liniile C0, C1 si C2 sunt utilizate ca semnale de protocol pentru portul B, iar C3, C4, C5 pentru portul A. Liniile C6 si C7 nu sunt utilizate ca protocol si se pot programa fie ca intrari, fie ca iesiri. Functionarea modul 1 OUT este descrisa de urmatoarea schema: C0 C1 C2 C3 C4 C5 INTRB OBUFB (negat) ACKB (negat) INTRA ACKA (negat) OBUFA (negat)
PB0 PB7

MOD 1 OUT
C0 C1 C2 C3 C4 C5 C6 C7

PA0 PA7

Se vede ca liniile C4 si C5 din portul 0 pot fi configurate independent ca intrari si iesiri. Celelalte linii ale portului PC sunt semnale de protocol pentru porturile PA si PB. Modul 2 este posibil doar pentru portul PA , in acest caz portul PB putand fi programat fie in modul 0, fie in modul 1, atat ca intrare cat si ca iesire. Cinci dintre liniile portului PC sunt utilizate ca semnale de protocol pentru portul PA (C3 - C7), celelalte linii depind de modul de programare a portului PB.

MOD 2
C0 C1 C2 C3 C4 C5 C6 C7

PB0 PB7

PA0 PA7

Page

23

11. Programarea circuitului I8255


Din structura si functionarea circuitului I8255 am constatat ca pot fi prezente 3 moduri de functionare. Stabilirea modurilor de functionare, ca si pozitionarea bitilor portului PC, se realizeaza prin transmiterea unui anumit cuvant de comanda. Structura cuvantului de comanda si semnificatia bitilor acestuia este prezentata in urmatorul tabel: Grup port PA B7 B6 0 0 1 B5 0 M0 1 M1 X M2 B4 0 out PA 1 in PA PC4 PC7 B3 0 out PC 1 in PC B2 0 M0 1 M1 Grup port PB B1 0 out PB 1 in PB PC0 PC3 B0 0 out PC 1 in PC

Bitii B3 B6 sunt utilizati pentru stabilirea modului de functionare aferent grupului portului PA ce include portul PA si bitii PC4 PC7 din portul PC. Bitii B0 B2 sunt utilizati pentru stabilirea modului de functionare aferent grupului portului PB si include portul PB si bitii PC0 PC3 din portul PC. Pentru a exemplifica modul de programare se va considera ca porturile circuitului I8255 au urmatoarele adrese simbolice: - Portul PA adresa PADAT; - Portul PB adresa PBDAT; - Portul PC adresa PCDAT; - Portul de comenzi adresa PCOM. Exemplul 1: Sa se programeze circuitul I8255 astfel: Portul PA: mod 0 iesire; Portul PB: mod 1 intrare; Portul PC: bitii PC0 PC3 iesire si bitii PC4 PC7 intrare. Cuvantul de comanda va avea urmatoarea structura: B7 1 B6 0 B5 0 B4 0 B3 1 B2 1 B1 1 B0 0

Cuvantul in hexadecimal este 8E. Transmiterea acestui cuvant de comanda spre portul de comanda PCOM se face prin urmatoarea secventa de program LD A,8Eh OUT (PCOM),A

Page

24

Exemplul 2: Sa se programeze circuitul I8255 astfel: Portul PA: mod 1 intrare; Portul PB: mod 1 iesire; Portul PC: bitii PC0 PC3 iesire si bitii PC4 PC7 iesire.

Cuvantul de comanda va avea urmatoarea structura: B7 1 B6 1 B5 1 B4 1 B3 0 B2 0 B1 0 B0 0

Cuvantul in hexadecimal este F0. Transmiterea acestui cuvant de comanda spre portul de comanda PCOM se face prin urmatoarea secventa de program LD A,F0h OUT (PCOM),A

Page

25

12. Circuitul I8251. Structura si semnale specifice


Face parte din circuitele de transfer programat care preiau informatia si o transmit in mod serial SIO (serial input output). Din aceeasi categorie mai face parte si circuitul Z80 SIO. Semnalel de intrare iesire sunt urmatoarele:

D0 D7

B U F I/E

TxD

TxC TxRDY TxE RxD

BCC

Reset
RD WR CS C/D

BA

B L C C

I8251

RxC RxRDY

M O D E M

SYNDET DTR DSR CTS RTS

+5V

GND

Page

Blocurile functionale sunt organizate in jurul unei magistrale interne de 8 biti. Circuitul este introdus intr-o capsula de 28 de pini. Comunicatia cu unitatea centrala se face printr-o memorie tampon de intrare iesire (buffer) BUF I/E, care are trei stari. Blocul de emisie (E) are rolul de a prelua informatia paralela de la unitatea centrala si de a o transmite in mod serial spre periferice prin linia TxD. Acest bloc contine doi registri TA si TB (T transmisie). TA este preluarea informatiei de la unitatea centrala, iar TB este registrul in care se transfera informatia de la TA. De la TB se transmite apoi informatia spre periferic. Transferul informatiei din TA in TB activeaza semnalul de iesire TxRDY. Viteza de transmitere este stabilita prin semnalul TxC (C clock). Semnalul TxE (E empty) arata faptul ca blocul de transmisie este gol. Blocul de receptie (R) asigura receptionarea informatiei seriale transmisa de un periferic pe linia RxD. Aceasta informatie este preluata in registrul de intrare RA, unde se separa informatia utila de informatia suport cadru, dupa care este transmisa in registrul RB cand se activeaza linia RxRDY. Receptia este sincronizata prin semnalul RxC. Semnalele TxRDY si RxRDY sunt anulate dupa operatiile de scriere si citire. Semnalul SYNDET este un semnal de fortare sau de detectie sincrona. Circuitul mai contine si blocul modem, care este un bloc de control, pentru cazul cand transferul se face la mare distanta. Intreaga functionare a circuitului este gestionata de blocul logic de comanda si control BLCC.

26

Semnalele de comunicatie cu unitatea centrala sunt: - Reset: semnal de reinitializare sau stergere; - : semnal de ceas cu o frecventa maxima de 2.5 MHz; Semnalele aferente magistralei de comenzi: - RD: pentru citire; - WR: pentru scriere. Semnalele aferente magistralei de adrese: - CS: selectie circuit; - C/D: pentru comenzi si date. Operatiile realizate de circuit sunt descrise in urmatorul tabel: CS 0 C/D 0 0 1 1 X RD 0 1 0 1 X WR 1 0 0 0 X Operatie realizata Citire date Scriere date Citire stare Scriere comenzi Circuit neoperational

Page

27

13. Moduri de functionare si programare a circuitului I8251


Din punct de vedere al utilizatorului, circuitul SIO de tip I8251 poate fi privit ca avand doua porturi: un port de date bidirectional si un port de stare. Prin portul de date se transmit datele intre unitatea centrala si periferic. Prin citirea portului de stare se furnizeaza cuvantul de stare, care indica starea transmisiei. Structura cuvantului de stare, obtinuta prin citirea portului de stare, este urmatoarea: 7 DSR 6 SYNDET 5 EDBS 4 ER 3 EBP 2 TxE 1 RxRDY 0 TxRDY

Bit 0: TxRDY = 1, circuitul este gata pentru a transmite date spre periferic. Bit 1: RxRDY = 1, circuitul este gata pentru a receptiona date de la periferic. Bit 2: TxE = 1, transmitatorul este gol, unitatea centrala trebuie sa ii transmita date. Bit 3: EBP = 1, eroare a bitului de paritate la transmisie. Bit 4: ER = 1, eroare de citire, adica neconcordanta intre viteza emitatorului si receptorului. Bit 5: EDBS = 1, eroare la detectare biti de stop. Bit 6: SYNDET = 1, detectare a transmisiei sincrone. Bit 7: DSR = 1, folosit in cazul utilizarii modemului, arata ca echipamentul de date este selectat. Circuitul I8251 functioneaza in doua moduri: asicron si sincron. Functionarea in mod asincron presupune atasarea la cuvantul de date transmis a unei informatii cadru. Aceasta consta dintr-un bit de START, bitul de paritate si bitii de STOP. Bitul de START are rolul de a sincroniza emitatorul cu receptorul. El este urmat apoi de bitii de date in numar de 5 pana la 8. Dupa bitii de date se ataseaza bitul de paritate cu rol de a permite verificarea corectitudinii transmisiei. Formatul transmisiei se finalizeaza prin bitii de STOP care au rolul de reinitializare a receptorului. Bitii de STOP pot fi 1, sau 2 biti. Viteza de transmisie este standardizata si se da in bit/secunda sau baud. Valorile standard sunt 300, 600, 1200, 2400, 4800, 9600 si 19200 baud. Functionarea in mod asincron presupune transmiterea catre circuitul I8251 a unui cuvant de comanda de 1 octet.

Page

28

Semnificatia bitilor cuvantului de comanda este urmatoarea: 7 6 Numar biti STOP Bitii de stop: 0 0 neutilizat; 0 1 1 bit stop; 1 0 1 biti stop; 1 1 2 biti stop. Control paritate: X 0 facut control paritate; 0 0 paritate para; 1 1 paritate impara. Numar biti de date: 0 0 5 biti de date; 0 1 6 biti de date; 1 0 7 biti de date; 1 1 8 biti de date. Factor divizare: 0 0 neutilizat; 0 1 factor divizare frecventa 1; 1 0 factor divizare frecventa 1/16; 1 1 factor divizare frecventa 1/64. Inaintea cuvantului de stare propriu-zis se realizeaza o initializare a circuitului, care se obtine printr-un reset soft (prin program). Pentru a ii simplifica modul de programare a circuitului, vom considera adresele simbolice, aferente celor doua porturi, COMSIO (adresa simbolica pentru portul de stare) si DATSIO (adresa simbolica pentru portul de date). Subrutina de initializare este numita INITSIO. Ea realizeaza operatia de resetare soft si stabilirea modului asincron. INITSIO: LD A, 00 // incarca in acumulator 00h; OUT (COMSIO), A // initializare circuit prin resetare port COMSIO. A trece in portul COMSIO, iar COMSIO va fi egal cu 00h. LD A, 40h // resetare propriu-zisa cu stabilirea modului de lucru sincron. OUT (COMSIO), A // Cuvantul de comanda este 40h (0100 0000). Al doilea bit este B6 = 1 (SYNDET = 1) si avem detectarea transmisiei sincrone. Vom avea COMSIO = 40h. 5 4 Control paritate 3 2 Numar biti date 1 0 Factor divizare

Page

29

Pentru emisie si receptie se folosesc doua subrutine: - EMCAR: subrutina de emisie; - RXCAR: subrutina de receptie. Structura emisie: EMCAR: INA, (COMSIO) //in acumulator se incarca continutul din adresa COMSIO AND 01 // in acumulator se incarca A si 01. 01 = 00000001 B0 = 1 TxRDY = 1 JR2, EMCAR // salt relativ ca instructiune EMCAR daca B0 diferit de 1 si ofera o iteratie LD A, (HL) // continutul de la HL se incarca in acumulator OUT (DATSIO), A //acumulatorul este transmis la adresa DATSIO RET // iesire din subrutina (return)

Structura receptie: RxCAR: IN A, (COMSIO) // continutul de la portul COMSIO se transmite la acumulator AND 02 //acumulatorul si 02 se introduc in acumulator. 02 = 00000010 B1 = 1 RxRDY = 1 JR2, RxCAR // salt relativ la RxCAR daca B1 e diferit de 1 pana obtine B1 = 1 IN A, (DATSIO) // continutul date de la DATSIO se transmite la acumulator RET // iesire din subrutina

Page

30

14. Circuitul I8253. Structura si semnale specifice


Circuitul I8253 face parte din circuitele de temporizare cu interval programabil PIT (pogrammable internal timer). Sunt destinate temporizarilor reglabile, contorizarii unor evenimente, realizarii ceasului de timp real si realizarii bazei de timp pentru circuitele SIO. Din aceeasi categorie face parte si Z80 CTC. Schema bloc a circuitului evidenteaza blocurile componente si semnalele:
D0 D7

B U F I/E
CS

Clock 0

E I8253 Magistrala interna (8 biti)

Gate 0 Out 0

AB

A0
A1

CB

RD WR

B L C C

Clock 1 Gate 1 Out 1

M O D E M

Clock 2 Gate 2 Out 2

+5V

GND

Circuitul I8253 este realizat intr-o capsula cu 24 pini si consta, in esenta, din trei contoare program de 16 biti, notate C0, C1, C2. Contoarele pot fi programate in binar sau in binar zecimal BCD. Continutul contorului se decrementeaza cu o unitate pe frontul descrescator al semnalului aplicat pe intrarea de ceas aferenta (clk). Pe aceste intrari de ceas se aplica semnale periodice sub forma de impulsuri dreptunghiulare cu frecventa de pana la 3 MHz. Intrarea GATE este utilizata pentru comanda unor operatii specifice precum: - Declansarea decrementarii; - Blocarea decrementarii. Iesirea OUT se pozitioneaza intre o valoare logica, in functie de starea numaratorului. Deobicei semnalizeaza ajungerea la 0 a numaratorului. Comunicarea circuitului cu unitatea centrala se face printr-un buffer de date bidirectional cu 3 stari, notat BUF I/E. Intreaga functionare a circuitului este asigurata de BLCC (bloc logic de comanda si control). Semnalele externe furnizate acestui bloc provin din magistrala de adrese AB, si anume CS, A0, A1, respectiv din magistrala de comanda si control CB, si anume RD si WR.

Page

31

Operatiile realizate de circuit sunt conform urmatorului tabel: CS RD 1 1 1 1 0 0 0 0 1 X WR 0 0 0 0 1 1 1 1 1 X A1 0 0 1 1 0 0 1 1 X X A0 0 1 0 1 0 1 0 1 X X Operatie realizata Scriere C0 Scriere C1 Scriere C2 Scriere cuvant comanda Citire C0 Citire C1 Citire C2 Neoperational Neoperational

15. Modul de functionare si programare a circuitului I8253


Circuitul I8253 are 6 moduri de functionare, de la MOD0 la MOD5. Modurile se stabilesc printr-un cuvant de comanda si are urmatoarea structura: 7 0 0 1 1
Sel contor

6 0 1 0 1

5
Contor

4 0 1 0 1

Cuvant de comanda 3 2
Operatie Sel mod

1
Mod

0
Tip cod intern

Sel operatie

C0 C1 C2 C3

0 0 1 1

Citire Ci, i = 1, 2, 3 Citire/Inscriere octet LOW Octet HIGH = 0 Citire/Inscriere octet HIGH Octet LOW = 0 Citire/Inscriere octet LOW Apoi octet HIGH

0 0 X X 1 1

0 0 1 1 0 0

0 1 0 1 0 1

Mod 0 Mod 2 Mod 3 Mod 4 Mod 5

Binar

BCD

Modul 0 este definit ca o intrerupere la terminarea numararii. Modul 1 este definit ca monostabil programabil. In acest mod, iesirea circuitului ramane la nivel LOW un numar de perioade N egal cu valoarea numarului inscris in contor. Modul 2 este mod de functionare ca generator de impulsuri, divizate cu N fata de ceasul numaratorului: 1 = Modul 3 este definit ca divizor de impulsuri programabile, divizate cu N, cu deosebirea, fata de modul 2, ca impulsurile sunt simetrice. Divizarea incepe la primul front negativ al ceasului dupa inscriere numarului N. Modul 4 se defineste ca STROBE comandat prin software. Dupa transmiterea valorii N, primul tact descrescator incepe decrementarea controlului, iar dupa N impulsuri (tact) iesirea controlului devine 0, pe durata T a perioadei ceasului. Modul 5 defineste un mod de functionare ca semnal de STROBE de iesire comandat prin hardware. In acest caz, decrementarea controlului incepe la primul front negativ al ceasului care urmeza dupa tranzitia din 0 in 1 a semnalului de pe intrarea GATE.

Page

32

16. Circuitul I8259 pentru controlul vehicularii informatiei de magistrala


Studiul sistemelor cu microprocesor pune in evidenta posibilitatea de control a transferului informatiei de pe magistrala in 3 moduri: - Programat; - Prin intreruperi; - Prin transfer DMA (Direct Memory Access). Transferul programat se realizeaza la initiativa unitatii centrale, celelalte doua tipuri de transfer fiind determinate de cauze externe. Transferul prin intreruperi este utilizat, in special, la sistemele destinate conducerii proceselor industriale. Transferul DMA este necesar atunci cand se face transferul unui bloc de date, deci a unui volum mare de date, care necesita un timp mare, desi se impune reducerea timpului de transfer. In acest caz, se utilizeaza circuite specializate DMA cu viteze de transfer de ordinul sutelor de Mbps. Circuitul I8259 este introdus intr-o capsula de 28 de pini la care se leaga semnalele specifice. Blocurile functionale sunt organizate in jurul unei magistrale interne ca si la celelalte circuite de intrare iesire. Schema bloc a acestui circuit este urmatoarea:
+5V GND

D0 D7

B U F I/E
CS

C R P

IR0 IR1

A0
WR RD INT INTA

B L C C

I8259 Magistrala interna

R C I T

R C I

R M I

IR7

BCC

SP

CS0

CS1

CS2

Page

33

Comunicarea cu magistrala de date a sistemului se face printr-un buffer (memorie tampon) de intrare iesire BUFF I/E cu trei stari.

Functionarea circuitului este gestionata printr-un bloc logic de comanda si control BLCC. Acesta genereaza semnalele interne in functi de cuvintele de comanda primite si de semnalele externe. - Semnalul CS (chip select): este un semnal de selectie al circuitului. Ca si semnalul A0, serveste pentru selectia unor registri interni; - Semnalele WR si RD: realizeaza scrierea, respectiv citirea; Circuitul poate controla 8 nivele de intreruperi, de la IR0 la IR7. Prioritatea intreruperilor se rezolva prin circuitul CRP (circuit de rezolvare a prioritatilor). Intrarile de intreruperi se aplica unui registru de control al intreruperilor RCI, format din bistabili ce se vor pozitiona in 1 la intrarea de intrerupere aferenta. De exemplu, daca apare necesitatea unei intreruperi pe IR1, atunci semnalul IR1 trece din 0 in 1. Pentru realizarea unei intreruperi, prin pozitionarea IR0 pana la IR7 in 1 logic, circuitul I8259 genereaza pe linia INT o cerere de intrerupere spre unitatea centrala. Acceptarea cererii de intrerupere de catre unitatea centrala este semnalizata circuitului prin semnalul de pe intrarea INTA (interrupt acknowledge). RCIT este registrul cererilor de intreruperi tratate. RMI este registrul de mascare a intreruperilor. Blocul BCC este un bloc de control al cascadei, acesta permite interconectarea intre ele in cascada de pana la 8 circuite I8259. Se permite, astfel, extinderea numarului de intreruperi la 64. Din cele 8 circuite legate in cascada, unul este in regim de MASTER. Selectia regimului de functionare se face prin semnalul SP (select priority). Daca SP = 1, circuitul respectiv este MASTER, in caz contrar este SLAVE. Liniile CS0, CS1 si CS2, sunt bidirectionale si au rol de adresa, astfel in cazul in care circuitul functioneaza ca MASTER, aceste semnale sunt iesiri si reprezinta adresele pentru selectia celorlalte circuite ce vor functiona in regim de SLAVE.

Page

34

17. Selectia circuitelor de intrare iesire


Pentru ca unitatea centrala sa poata comunica cu un circuit de intrare iesire, este necesar sa se faca selectia circuitului respectiv. Avand in vedere ca magistrala de date este unica, pentru a evita un conflict de magistrala, la un moment dat, doar un singur circuit trebuie sa aiba acces la magistrala de date. Realizarea acestui fapt se face prin selectia circuitului ce poate fi liniara sau decodificata. Selectia liniara se utilizeaza atunci cand numarul de circuite de intrare iesire este redus. In acest caz, pentru selectia in circuit se poate utiliza una din cele 8 adrese, ale magistralei de adrese AB de la A7 la A0. De exemplu, pentru un sistem ce necesita 3 circuite I8255 vom folosi urmatoarea schema: A1 A0

8255 C1
A5 CS1 A7 CS2

8255 C2
A3 CS3

8255 C3

RD WR Adresele circuitelor de intrare iesire se transmit doar pe bitii LSB, adica A0 si A1. Adresele mai semnificative se folosesc pentru selectia circuitelor, si anume A7 pentru C2, A5 pentru C1 si A3 pentru C3. Deci existand 8 adrese se pot selecta 28 porturi, adica 256 porturi. Selectia circuitelor si adresele porturilor aferente se obtin conform tabelului urmator: Circuit C1 CS A5 A7 0 0 0 0 1 1 1 1 0 0 0 0 A6 X X X X X X X X X X X X A5 1 1 1 1 0 0 0 0 0 0 0 0 A4 X X X X X X X X X X X X A3 0 0 0 0 0 0 0 0 1 1 1 1 A2 X X X X X X X X X X X X A1 0 0 1 1 0 0 1 1 0 0 1 1 A0 0 1 0 1 0 1 0 1 0 1 0 1 Porturi I8255 PA PB PC PCOM PA PB PC PCOM PA PB PC PCOM Adresa port 20h 21h 22h 23h 80h 81h 82h 83h 48h 49h 4Ah 4Bh

C2

A7

Page

35

C3

A3

Selectia decodificata se impune cand numarul circuitelor este mai ridicat. Decodificarea in raport cu numarul de circuite poate fi incompleta sau completa. Cea incompleta se utilizeaza cand numar de circuite este redus, dar suficient de mare pentru a nu permite selectia liniara. Daca se pune problema de decodificare incompleta pentru circuitul anterior, ea s-ar putea face folosind un singur decodificator BCD pe intrarile caruia s-ar utiliza adresele A7, A6 si A5, precum in schema urmatoare:
IORQ D 0 A7 C 1 B CS3 2 A5 A CS1

CS2

A6

PA PB PC PCOM

C1 1C 1D 1E 1F

C2 3C 3D 3E 3F

C3 5C 5D 5E 5F

Page

36

Microcontrolere de 4 biti si 8 biti


18. Arhitectura microcontrolerului de 4 biti HD44780
Microcontrolerele de 4 biti si 8 biti au fost cele mai raspandite dispozitive inteligente, in principal, datorita simplitatii. Desi au o structura relativ simpla, aceste microcontrolere sunt capabile sa controleze diverse dispozitive incepand de la masinile de spalat si aparatele video pana la automatele programabile. In tabelul urmator prezentam cele mai populare microcontrolere de 4 biti si 8 biti. Din cele 6 tipuri prezentate, microcontrolerul HD44780, produs de firma japoneza Hitachi, este destinat special ca driver de afisaj LCD. Nr. 1 2 3 4 5 6 Tip TMS1000 NEC7500 HD44780 80C552 68H15 TMS370 Producator Texas Instruments Nippon Electronics Hitachi Philips Motorola Texas Instruments Biti 4 4 4 8 8 8 Caracteristici
4kB ROM, 128x4biti RAM, 16 linii de iesire, 8biti ADC, 12 grupuri de instructiuni, uz general 6kB ROM, 256x4biti RAM, 35 linii de intrare iesire individuale, 4 canale ADC de 8biti, 8 porturi serial I/O de 8biti, doua grupuri de instructiuni, uz general 1,2kB ROM, 80x8biti display RAM, 64x8biti RAM generator de caractere, 40 linii de segment, 16 linii uzuale, 7 grupuri de instructiuni, driver afisaj LCD 8kB ROM, 256x8biti RAM, 6 porturi de 8biti, 8 canale ADC, UART, 5 grupuri de instructiuni, uz general 12kB ROM, 0,5kB EEPROM, 1kB RAM, 6 porturi de 8biti, 1 port de 6biti, 8 canale ADC, UART, 5 grupuri de instructiuni, uz general 16kB ROM, 0,5kB EEPROM, 0,5kB RAM, 5 porturi I/O de 4biti, 4 porturi de 3biti, 3 canale ADC, UART, 14 moduri de adresare, uz general

HD44780 este un microcontroler modern, produs de firma japoneza Hitachi, destinat comenzii afisajelor cu cristale lichide LCD (Liquid Cristal Display). Permite afisarea caracterelor alfanumerice din codul japonez Kata Kana. Poate fi configurat pentru a comanda un asfisaj LCD fie sub controlul unui cuvant de 4 biti, fie pentru doua cuvinte de 4 biti. Cu toate ca magistralele interne sunt de 8 biti, datorita faptului ca in exterior lucreaza cu unul sau doua cuvinte de 4 biti, el este considerat un microcontroler de 4 biti. Alimentarea se face de la o tensiune scazuta, intre 2.7 V si 5.5 V, ceea ce arata ca este un dispozitiv portabil, alimentat cu baterie.

Page

37

Caracteristici specifice: - Posibilitatea afisarii fonturilor ca puncte, 5x8 si 5x10 puncte; - Compatibilitatea de interfatare cu magistralele de viteza mare de 2 MHz; - Posibilitatea de interfatare, atat pe 4biti cat si pe 8biti; - RAM Display de 80x8 (permite maximum 80 de caractere stocate); - ROM generator de caractere de 9920biti, pentru un total de 240 de fonturi; - RAM generator de caractere de 64x8biti; - Driver de display LCD cu 16 linii comune si 40 linii segment. Permite 7 functii pentru instructiuni: o Sterge display; o Aduce cursorul in pozitie home; o Display on/off; o Cursos on/off; o Clipire caracter afisat; o Tranzitie cursor; o Tranzitie display. - Circuit de reset automat ce initializeaza controlerul dupa punerea sa sub tensiune; - Are un oscilator intern cu rezistor extern. Circuitul HD47780 are doi registri de 8biti. Registrul de instructiuni IR si registrul de date DR. Registrul IR stocheaza codurile instructiunilor, precum: - Sterge display sau tranzatie cursos; - Informatiile de adresare pentru memoria RAM de date display (DDRAM); - Informatii de adresare pentru RAM generator de caractere (CGRAM); o IR poate fi doar inscris, nu si citit extern. Registrul DR, stocheaza temporar date ce vor fi inscrise DDRAM sau CGRAM. Registrii DR si IR, se selecteaza prin semnalul de selectie al registrului RS, conform urmatorului tabel: RS 0 0 1 1 WR 0 1 0 1 Operatie Scrie IR prin operatie interna Citeste BF(DB7) si AD(DB0 DB7) Scrie DR prin operatie interna Citeste DR prin operatie interna

Page

38

19. Arhitectura microcontrolerului de 8 biti 80C552


Este un microcontroler modern, produs de firma Philips, cu capacitati extinse, hardware si software. Are o arhitectura de tip CISC, set complet de instructiuni, si este compatibil, la nivelul setului de instructiuni, cu produsul Intel I8051. Exista trei versiuni ale microcontrolerului 80C552: - 83C552: cu o memorie ROM de 8kB, programabil o singura data (memorie PROM); - 80C552: versiunea fara memorie ROM; - 87C552: cu memorie EPROM de 8kB. Microcontrolerul 87C552 contine: - o memorie nevolatila reprogramabila EPROM, de 8Kx8biti; - o memorie volatila de date de 256biti; - 5 porturi I/O de 8biti; - un port de intrare de 8biti; - doua numaratoare temporizatoare de 16biti; - o structura de intrerupere cu doua nivele de prioritate; - un ADC cu 8 intrari; - o interfata PWM pentru DAC, duala; - doua interfete seriale; - un watchdog; - un oscilator integrat si circuite de temporizare. In plus fata de alte circuite are doua moduri selectabile prin soft pentru reducerea consumului: - portul Idle: permite inghetarea unitatii centrale, dar permite si functionarea timerelor porturilor seriale si sistemelor de intrerupere; - portul power down: salveaza continutul memoriei RAM, dar ingheata oscilatorul si dezactiveaza toate celelalte functii ale circuitului. Setul de instructiuni consta din 118 instructiuni, 49 pe un octet, 45 pe doi octeti si 17 pe trei octeti. Caracteristici specifice: - unitate centrala de procesare de tip 80C51; - o memorie ROM de 8Kx8biti, expandabila extern la 64kB; - numarator timerde 16 biti, conectat la 4 registri de capsula si 3 de comparatie; - doua numaratoare timere standard de 16biti; - memorie RAM de 256x8 biti expandabila extern la 64kB; - poate produce 8 iesiri sincronizate, temporizate; - are un convertor ADC de 10biti, cu 8 intrari analogice, multiplexate; - are doua iesiri PWM cu rezolutie de 8biti; - are 5 porturi I/O de 8biti plus un port de intrare analogic de 8biti; - UART pentru transmisie pe linie; - Watchdog integrat; - Domeniul de frecventa: 16MHz sau 24MHz.

Page

39

20. Exemplu de aplicatie al microcontrolerului 80C552


Vom comanda o actionare cu motor de inductie si un LCD care afiseaza starea curenta a sistemului (functiile STOP, LEFT, RIGHT). Logica de comanda a microcontrolerului consta din: - Doi biti de comanda: AX0 si AX1 de la o cupla de iesire. Pentru a trimite date de 8 biti catre cupla este utilizata adresa 120h. Selectia comenzii se face conform tabelului urmator: Nr. 0 1 2 3 AX0 0 0 1 1 AX1 0 1 0 1 Functie STOP LEFT RIGHT STOP

Interfata dintre operatorul uman si kit-ul de dezvoltare se realizeaza prin 3 butoane, doua normal deschise si unul normal inchis. Butoanele sunt: - LB: normal deschis; - RB: normal deschis; - SB: normal inchis. Butoanele sunt conectate pe primii trei biti ai cuplei de intrare: - IX0 SB; - IX1 RB; - IX2 LB. Pentru conectarea afisajului LCD la acest kit se utilizeaza o cupla speciala, care are toate semnalele de control necesare (4 semnale) impreuna cu magistrala de date de la D0 la D7. Adresele magistralei de date sunt: - 100h adresa celula; - 101h trimite date catre celula.

Page

40

Schema bloc este urmatoarea:

7 8 . . . 14 5 4 6 1

D0 D1 . . . D7
A1 A0

D0 D1 . . . D7

7 8 . . . 14
80 87 C0 C7

E GND

5 3 1 16 AX1 AX2 GND

IX2 IX1 IX0 GND

LB RB SB

Optocuplor

Motor

Page

41

Partea soft a aplicatiei consta in programul scris in limbajul de asamblare a microcontrolerului 80C552 care contine 9 subrutine. Cele 9 subrutine ale programului, cu adresele si functiile lor, sunt: - Org 8000h o Mili5 temporizare 5ms; - Org 8100h o Init initializare LCD; - Org 8300h o Af STOP afisare STOP; - Org 8400h o Af Stg afisare deplasare stanga; - Org 8500h o Af Drp afisare deplasare dreapta; - Org 8600h o Led OFF stinge ledurile; - Org 8650h o Led1 ON aprinde LED 1; - Org 8700h o Led2 ON aprinde LED 2; - Org 9000h o Start program principal. Detalierea programelor: - Org 8000h mili5: mov r6, #0Fh; temporizare 5ms y: mov r7, #0FFh z: djnz r7,z djnz r6,y ret

Page

42

Microcontrolere de 16biti si 32biti


21. Arhitectura microcontrolerului de 16biti C167
Cele mai populare de 16biti si 32biti sunt prezentate in tabelul urmator: Nr. 1 2 3 4 5 6 Tip XA-G3 C167 80C126 TriCore 80C960 AM29050 Producator Philips Siemens Intel Siemens Intel AMD Biti 16 16 16 32 32 32 Caracteristici
7 moduri de adresare, 13 grupuri de instructiuni 3 moduri de adresare, 12 grupuri de instructiuni 6 moduri de adresare, 4 grupuri de instructiuni 6 moduri de adresare, 16 grupuri de instructiuni 9 moduri de adresare, 11 grupuri de instructiuni CPU RISC, 10 grupuri de instructiuni

C167 este un exemplar al familiei de microcontrolere Siemens, fiind defapt un microcontroler realizat in tehnologie CMOS, care combina performantele ridicate ale CPU (pana la 10 milioane de instructiuni pe secunda) cu functionalitate foarte buna a perifericelor si capacitati imbunatatite de intrare-iesire. Schema bloc interna a C167 este urmatoarea:

Page

43

Spatiul de memorie al C167 are arhitectura von Neumann, adica memoria program, memoria de date, registrii si porturile I/O sunt organizate pe acelasi spatiu de memorie de 16MB. C167 contine: - 8KB memorie ROM folosita pentru programe, folosind segmentele 0 si 1; - 2KB de memorie RAM integrata sunt folositi pentru stocarea variabilelor definite de utilizator, stiva sistem, pentru registrii de uz general GPR si pentru ceas; - XRAM reprezinta blocul de memorie RAM extinsa; - Controlerul integrat al magistralei externe EBC face legatura cu memoria externa. Acesta are 4 moduri de accesare a memoriei externe; - Unitatea CPU este de 16biti, nucleul sau de baza fiind realizat pe 4 nivele de inalta performanta. C167 poate reactiona rapid atunci cand apar evenimente externe cu un timp de raspuns la intreruperi intre 250ns si 600ns; - Controlerul de intreruperi IC realizeaza cererile de intreruperi impreuna cu controlerul de evenimente periferice PEC; - Blocurile CAPCOM sunt folosite pentru sarcini de intrare-iesire de mare viteza precum generarea de impulsuri si anumite forme de unda, modularea pulsurilor in latime PWM si conversia digital-analogica. Unitatea CAPCOM consta din doua module, acestea avand doi registri timer de 16biti fiecare. Acestea asigura baze independente de timp; - Modulul PWM poate genera pana la 4 semnale PWM, domeniul de frecventa fiind cuprins intre 4.8Hz si 78.1kHz pentru un semnal de ceas de 20MHz; - GPT este un timer de uz general care contine 5 timere de 16biti organizate in doua module separate; - Convertorul analog-digital de 10biti ADC este folosit pentru masurarea semnalelor analogice. Are 16 canale de intrare multiplexate si un circuit de esantionare si memorare; - 111 linii de I/O organizate in 4 porturi I/O de 16biti (P0, P1, P2, P3), 4 porturi I/O de 8biti (P4, P6; P7, P8) si un port de intrare de 16biti (P5); - Comunicarea seriala cu alte microcontrolere se asigura prin doua interfete seriale si anume un canal asincron ASC si un canal sincron SSC; - Pentru transmisia pe linie se folosesc registrii tampon (buffer) BRG; - Watchdog-ul este un timer (temporizator) cu rol de mecanism de siguranta introdus pentru a preveni functionarea eronata a microcontrolerului. Daca din cauza erorilor hard sau soft programul nu lucreaza bine se supraincarca blocul watchdog si genereaza un semnal de reset RSTOUT ce permite resetarea componentelor externe hardware.

Page

44

C167 este realizat intr-o capsula de 144 pini de tip MQFP, precum in figura urmatoare:

Page

45

22. Arhitectura microcontrolerului de 32biti TriCore TC-1775


Este un microcontroler de 32biti produs de Siemens ce contine 3 grupuri digitale, un nucleu unificat de microcontroler si un procesor de semnale digitale DSP de 32biti. Mai contine o memorie de date si program (RAM, ROM, etc.) si logica specifica aplicatiei numita ASIC. Nucleul comun asigura multiprocesarea virtuala ceea ce elimina necesitatea unor controlere si DSP-uri multiple. Structura TriCore este urmatoarea:

Page

46

TriCore a fost optimizat pentru aplicatiile specializate cum ar fi perifericele computerilor, automate programabile performante, controlerele trenurilor de viteza, comunicatii celulare wireless, sisteme dinamice ale automobilelor, etc. Varianta de TriCore TC-1775 a firmei Siemens are urmatoarele caracteristici: - CPU de 32biti cu magistrala pe 4 nivele si ciclu de instructiuni de 50ns la frecventa de 50MHz; - Implementare super-scalara; - Sistem flexibil de intreruperi; - Timp de raspuns foarte rapid la intreruperi; - RAM intregrat SRAM de 72KB; - Procesor de control al perifericelor independent; - 11 porturi digitale I/O de 16biti si doua porturi analogice de 16biti; - Suport pentru depanare integrat; - Sistem de management al consumului de putere. Schema bloc simplificata este urmatoarea:

Page

47

Microcontrolerul TriCore al firmei Siemens contine 32 de registri GPR dintre care 16 pentru date si 16 pentru adrese. Mai contine 2 registri de 32biti pentru informatiile de stare si un registru de 32biti ca si control de program. Structura registrilor GPR este urmatoarea:

Registrii din sistem sunt registrii nucleu de functii speciale. PCXI si PSW contin flagurile de stare, informatiile privind executia instructiunii precedente si informatii de protectie.

Page

48

Microcontrolere de tip RISC din clasa PIC


23. Arhitectura microcontrolerului PIC16F84
Denumirea PIC provinde de la Peripheral Interface Controller, adica un controler pentru interfatarea perifericelor. Aceste microcontrolere sunt realizate in tehnologice CMOS avand arhitectura de tip Harvard si RISC. Arhitectura Harvard impune comunicatia intre unitatea de control si memorie sa se faca prin doua magistrale distincte. Firma producatoare: MicroChip. Cel mai semnificativ reprezentant al familiei PIC este PIC16X84. PIC16C84 are memorie EEPROM, iar PIC16F84 are memorie FLASH. PIC16F84 este un microcontroler CMOS de 8biti, cost scazut, performante ridicate si complet static. Are arhitectura RISC avansata, memorie RAM de 68Bytes, memorie de date EPROM. Este incapsulat intr-o capsula cu 18 pini. Are disponibil si un numarator (counter). PIC16F84 este incapsulat intr-o capsula DIP (dual in package) de 18 pini precum in figura urmatoare:

Page

49

Cei 18 pini sunt folositi astfel: - Doi pini pentru alimentare cu tensiune +5V fata de masa (VSS si VDD); - 2 pini pentru alimentare cu impulsuri de ceas OSC1 si OSC2; - Un pin pentru reset MCLR; - 5 pini pentru portul bidirectional RA (RA0 RA4); - 8 pini pentru portul bidirectional RB (RB0 RB7); - Pinii RA4 si RB0 au o a doua functie selectata prin program, respectiv TOKI (impulsuri de ceas pentru timerul intern) si INT (intrerupere din exterior); Am aratat ca performanta ridicata a microcontrolerului PIC16F84 se datoreaza arhitecturii Harvard si setului de instructiuni de tip RISC, el avand o memorie FLASH de 1Kx14biti. Toate instructiunile se executa intr-un singur ciclu la 400ns pentru 10MHz. Schema bloc a microcontrolerului este urmatoarea:

Page

50

Microprocesorul are memorie de date de tip static SRAM de 68x8 si EEPROM de 64x8. ALU este pe 8biti si capabila sa realizeze operatiile aritmetice si logice. Registrul W este registrul de lucru de 8biti utilizat in operatiile unitatii ALU, el insa nu este adresabil extern.

24. Programarea microcontrolerului PIC16F84


Fiecare intructiune PIC16F84 este un cuvant pe 14biti impartit in codul operatiei si unul sau mai multi operanti. Codul operatiei (operation code) specifica tipul instructiunii. Setul de instructiuni al acestui microcontroler contine un numar de 35 de instructiuni risc orientate pe octet (18 instructiuni), pe bit (4 instructiuni) si instructiuni de control si literale (13 instructiuni). Setul de instructiuni este dat de urmatorul tabel:

La instructiunile orientate pe obiect: f reprezinta registrul fisier; d destinatia unde va fi depus rezultatul operatiei. Daca d = 0 rezultatul se depune in W, iar daca d = 1, rezultatul se depunde in registrul fisier specificat; Fiecare ciclu de instructiuni consta din patru perioade de tact. La o frecventa de 4MHz timpul normal de executie a unei instructiuni este de 1s.

Page

51

25. Dezvoltarea structurii hardware a unei aplicatii cu PIC16F84


Schema bloc a sistemului de dezvoltare pentru structura hardware este urmatoarea: CC

OSC

CI

IN

PIC16F84

OUT
VDD

CO

MCLR

CR Structura hardware contine urmatoarele blocuri: - SA sursa de alimentare; - CR circuit de reset; - CC circuit de clock; - CI circuit de intrare; - CO circuit de iesire.

SA

CI si CO realizeaza circuitele de interfata input-output. Sursa de alimentare (SA) Microcontrolerul de alimenteaza cu o tensiune de +5V stabilizata si un curent de 0.5A, fiind necesara o putere de aproximativ 3W. Schema de principiu a sursei de alimentare va contine un transformator 220/9V, o punte redresoare 1PM05, un tsabilizator integrat LM7805, doi condensatori de filtrare C1, C2 si un led de semnalizare. Schema este urmatoarea:

Page

52

Circuitul de clock (CC) are urmatoarea schema:

Pe intrarea OSC1 se poate aduce un semnal de clock de la un oscilator extern. Solutia cea mai utilizata este conectarea pe intrarea OSC1, OSC2 a unui cristal de cuart XT cu frecventa de rezonanta de 4MHz si doi condensatori de filtrare C0 de circa 50pF. Circuitul de reset (CR) Are rolul de a initializa sistemul si are urmatoarea schema bloc:

Page

53

Memoria de programe are adresa initiala 000h. Daca pe intrarea MCLR se aplica un semnal logic 0 ce dureaza peste 10ms, microcontrolerul este resetat, iar contorul de programe se aduce la valoarea 000h, deci la adresa de inceput a memoriei de program. Aducerea in reset a microcontrolerului se face la punerea sub tensiune prin circuitul RC sau, ori de cate ori este nevoie, prin apasarea butonului PB (push button). In serie cu intrarea de reset MCLR se pune, deobicei, un rezistor cu o rezistenta cuprinsa intre 50 - 100. Circuitul de reset este un circuit pasiv RC ce functioneaza aproape in gol, deoarece curentul ce se injecteaza in pinul MCLR este sub 1mA, deci neglijabil. Circuitele de interfata I/O sunt circuitul CI si CO Folosesc pentru interfatarea microcontrolerului cu procesul extern. Interfata asigura izolarea galvanica a microcontrolerului fata de marimile electrice din proces ce au, deobicei, valori foarte diferite de cele admise. Pentru adaptarea marimilor la cele admise de catre microcontroler, se indica folosirea optocuploarelor si microreleelor. Schema circuitului de interfata I/O este urmatoarea:

Ca solutie standard se utilizeaza ca intrare un optocuplor OC conectat la portul RB1 si ca iesire un microreleu 1R conectat la portul RA1. In momentul in care intrarile 1 si 2 sunt suntate, dioda LD se va aprinde activand fototranzistorul FT, iar la iesirea optocuplorului, pe RB1 se va obtine logic 0. Cand circuitul de intrare este deschis, fototranzistorul este blocat, iar iesirea optocuplorului este logic 1.

Page

54

26. Dezvoltarea structurii software a unei aplicatii cu PIC16F84


Dezvoltarea structurii software se face prin parcurgerea urmatoarelor trei etape: - Configurarea microcontrolerului, selectarea bank-urilor de memorie si configurarea porturilor; - Alegerea modului de adresare a memorie, simularea intructiunilor PUSH si POP si selectarea lucrului in interuperi; - Utilizarea timer-ului si accesarea memoriei de date EEPROM. Procesul de dezvoltare se incheie prin finalizarea colectiei de macro-uri, subrutine si rutine specifice. Verificarea functionarii se face folosind subrutina microC. Configurarea microcontrolerului Se face utilizand registrul de optiuni OPTION care permite sa se aleaga constanta de divizare a frecventei de clock prin setarea bitilor PS0, PS1, PS2 ce asigura lucrul cu timer-ul TMR0 si WDT. Dac bitul PSA = 0, atunci se lucreaza cu timer-ul TMR0. Daca bitul PSA = 1, atunci se lucreaza cu timer-ul WDT.

Daca TOSE = 0, atunci TMR0 va fi incrementat pe frontul pozitiv al impusului de clock. Daca TOSE = 1, atunci TMR0 va fi incrementat pe frontul negativ al impulsului de clock. Daca TOCS = 0, atunci se selecteaza clock-ul intern. Pentru a incrementa timer-ul TMR0: avem fosc/4 Daca TOCS = 1, selecteaza clock-ul extern conectat pe pinul RA4. Daca bitul INTEDG = 0, intreruperea este declansata de semnalul extern, adica de pinul RB0 la frontul negativ. Daca bitul INTEDG = 1, declansarea se face pe front pozitiv. Daca RBPU = 0, asigura conectarea portului RB intern prin rezistenta pinilor. Daca RBPU = 1, inseamna ca pinii sunt in gol.

Page

55

Selectarea bank-ului de memorie Se face folosind registrul de STATUS. Memoria microcontrolerelor PIC sunt impartite in 4 zone sau banc-uri de memorie notate: BANK0 BANK3. Selectarea lor se face din registrul STATUS de 8biti prin ultimii trei biti ai registrului:

Cei 5biti de inceput asigura starea microcontrolerului: - C carry; - DC digit carry; - Z zero; - TO timer overflow; - PD power down; Intrucat microcontrolerul PIC16F84 are doar doua bank-uri de memorie, se foloseste doar bitul RP0, ceilalti doi biti fiind fortati in 0 logic. Daca RP0 = 0, se selecteaza bank-ul 0. Daca RP0 = 1, se selecteaza bank-ul 1. Configurarea porturilor RA si RB Se face stiind ca fiecare dintre cei 13 pini, 5 ai portului RA si 8 ai portului RB, pot fi programati fie ca intrari, fie ca iesiri. Portul RA are un registru TRISA, iar portul RB are un registru TRISB. Daca in registrii TRISA sau TRISB se pune un bit pe zero, atunci pinul corespunzator din portul RA sau RB va fi programat ca iesire. Daca se pune un bit in unu, atunci pinul este programat ca intrare. Alegerea modului de adresare a memoriei Adresarea memoriei RAM se poate face in doua moduri: direst sau indirect. Adresarea directa se face selectand bank-ul de memorie si apoi folosind instructiuni de tip MOVE. Adresarea indirecta foloseste registrul FSR si buffer-ul INDF. In registrul FSR se depune adresa din RAM, iar prin INDF citim valoarea din RAM, de la adresa respectiva.

Page

56

Simularea instructiunilor PUSH si POP Microcontrolerul PIC16F84 dispune de o stiva cu 8 nivele de cate 13 biti in care sunt depuse automat adresele contorului de programe (PC). Instructiunea PUSH se foloseste pentru salvarea in stiva a continutului registrului W_STATUS (starea acumulatorului) inainte de realizarea unei subrutine. Refacerea din stiva registrelor se face prin instructiunea POP. PUSH si POP sunt macroinstructiuni. Instructiunea PUSH: - Testarea registrului curent; - Stocarea registrului; - Stocarea registrului in bank0. Instructiunea POP: - Refacerea registrului status; - Refacerea registrului W.

Page

57

Selectarea lucrului in intreruperi Intreruperile sunt un mecanism al microcontrolerului ce ii permit sa raspunda in timp real la solicitarile ce apar, indiferent de realizarile ce apar in program in acel moment. Registrul de control al intreruperii se numeste INTCON (08h), iar rolul sau este sa activeze/dezactiveze intreruperile. Contine 8biti in urmatoarea structura:

Page

58

RBIF (RB interrupt flag) este un bit ce informeaza despre modificarile de pe pinii 4,5,6 si 7 ai portului RB; INTF (interrupt external flag) este un bit ce informeaza despre aparitia unei intreruperi externe; TOIF (TMR0 overflow interrupt flag) informeaza despre aparitia unei depasiri de capacitate pe contorul TMR0; RBIE (RB port interrupt flag) este bitul ce activeaza intreruperea la aparitia modificarilor pe pinii 4,5,6 si 7 ai portului RB; INTE () activeaza intreruperea externa pe bitul respectiv; TOIE (TMR0 interrupt enable) activeaza intreruperea la depasirea de capacitate a contorului TMR0; EEIE memoria EEPROM; activeaza intreruperea la sfarsitul unei rutine de scriere in EEPROM; GIE (global interrupt enable) activeaza/dezactiveaza toate intreruperile. Accesarea, citirea si scrierea in memoria EEPROM Microcontrolerul are 64octeti de memorie EEPROM localizati de la 00h la 63h, memorie ce poate fi atat citita cat si scrisa. Cea mai importanta caracteristica este ca nu isi pierde continutul la deconectarea tensiunii de alimentare. Producatorii sustin ca datele pot fi retinute in EEPROM, fara tensiune de alimentare, pana la 40 de ani si pot fi realizate pana la 10 milioane cicluri de scriere. Memoria EEPROM poate fi accesata prin 4 registri speciali: - EEDATA, adresa 08h, contine datele; - EEADR, adresa 09h, contine adresa locatiei de EEPROM accesata; - EECON1, adresa 88h, contine bitii de control; - EECON2, adresa 89h, rol de protejare a EEPROM-ului impotriva scrierilor accidentale.

Page

59

27. Echipamente de dezvoltare software pentru microcontrolerul PIC16, PIC17


In vederea utilizarii microcontrolerelor de tip PIC exista o multitudine de echipamente de dezvoltare a aplicatiilor cu ajutorul carora se poate realiza scrierea programelor, programarea si depanarea acestora. Microcontrolerele PIC16, PIC17 au uneltele de dezvoltare hardware si software prezentate in urmatoarea schema bloc:
In circuit si in timp real PIC Master PIC Master CE EMULATOARE De cost scazut ICE PIC 16CSx ICE PIC 16CXXX Universal Pro Mate II PROGRAMATOARE De prototipare PIC Start Plus

PICDEM1

Echipamente de dezvoltare PIC16/17

PLACI DE DEMONSTRATIE DE COST SCAZUT

PICDEM2

PICDEM3

ASAMBLOARE

Macroasamblorul Univ MP-ASM

SIMULATOARE SOFTWARE

MPLAB-SIM

COMPILATOARE

Compilatorul C MPLAB-C Logica Fuzzy Fuzzy TEch-MP

SISTEME DE DEZVOLTARE

Page

60

Dintre acestea se remarca: - PIC START Plus; - MP-ASM. Programatorul PIC START Plus este un programator usor de utilizat si de cost scazut. Se conecteaza la PC prin portul serial COM RS232. Softul sau, numit MPLAB-IDE (integrated development environment), face utilizarea programatorului simpla si eficienta. PIC START Plus nu este recomandat pentru productia de serie. Acest echipament permite programarea microcontrolerelor de tip PIC12C5XX, PIC14000, PIC16C5X, PIC16CXXX, PIC17CXXX, el avand pana la 40 de pini. Dispozitivele cu un numar mai mare de pini, precum PIC16C923 si PIC16C924, se pot utiliza folosind un soclu de adaptare. Softul MPLAB-IDE permite o mare usurinta in dezvoltare de soft pentru microcontrolerele de 8biti. MPLAB-IDE este o aplicatie windows si contine: - Un editor complet; - Trei moduri de functionare (editor, emulator si simulator); - Un manager de proiecte; - Bara cu instrumente adaptabila cu posiblitatea maparii tastelor; - O bara de stare cu informatii privind proiectul; - Help online complex. MPLAB-IDE permite urmatoarele functiuni: - Editarea fisierelor sursa (fie in limbaj de asamblare, fie in C); - Asamblarea sau compilarea si descarcarea completa in microcontrolerele PIC16, PIC17; - Depanarea utilizand fisiere sursa si fisiere lista; - Transferul dinamic al datelor prin OLE; - Rularea pe acelasi PC a pana la 4 emulatoare. Macroasamblorul universal MP-ASM, este un asamblor simbolic pentru calculatoarele PC. El permite programarea familiilor de microcontrolere PIC12CXX, PIC14000, PIC16C5X, PIC16CXXX si PIC17CXXX. MP-ASM ofera: - Posibilitatea utilizarii macrourilor; - Asamblari conditionate; - Cateva formate de fisiere sursa si lista. El genereaza diferite formate de cod obiect care sunt insa compatibile cu uneltele de dezvoltare micro-chip, si cu al altor programatori, si mai permite o depanare completa.

Page

61

MP-ASM are caracteristici performante in privinta suportului la dezvoltarea de soft pentru aplicatii specifice si anume: - Asigurarea asamblarii codului sursa, cod obiect; - Capacitate de asamblare macro; - Produce toate fisierele necesare (obiect, lista, simbol si speciale); - Suporta formate lista si sursa hex (implicit), dar poate fi si zecimal si octal; - Asigura un limbaj bogat de directive ce permit realizarea unui cod sursa mai scurt si usor de intretinut.

Page

62

28. Conducerea unei actionari polimotoare printr-un microcontroler PIC16F84


Exista masini actionate cu mai multe motoare, precum transportoarele industriale. Aceste benzi transportoare trebuie pornite secvential, una dupa alta, cu o temporizare intre porniri de ordinul secundelor. Pornirea se face in sens invers fluxului si este secventiala pentru a se evita socul de curent la pornirea simultana a mai multor motoare. Consideram cazul unui transportor cu 4 motoare, caz in care algoritmul de comanda este urmatorul: - Pornirea incepe la prima apasare a butonului ON/OFF si se opreste la a doua apasare a aceluiasi buton; - Dupa pornirea primului motor, se asteapta doua secunde, apoi se comanda cel de al doilea si asa mai departe; - Pornirea reusita a unui motor este transmisa ca informatie pentru PIC; - Daca un motor din cele 4 s-a oprit, se vor opri toate motoarele; - Inaintea pornirii unui motor se semnalizeaza acustic doua trei secunde; - O avarie venita din proces declanseaza oprirea motoarelor; - Se vor semnaliza secventele de pornire si avaria; - Inainte de pornire se testeaza integritatea echipamentului; Schema automatului de pornire este urmatoarea: PIC PLC U1 U2 U3 U4 1R 2R 3R 4R 5R Buton 0 Buton 1 ON/OFF 6R BZ M1 M1 M1 M1 M1 M1 M1

Page

In schema s-au realizat legaturi de feedback intre iesiri si intrari, pentru controlul functionarii tuturor motoarelor. Daca functionarea este corecta se emita semnalul RDY (ready) care este anulat de o avarie simulata de butonul EMR (emergency).

63

Exista si iesirea NXT (next) pentru transmiterea unor comenzi spre alt automat si claxonul de semnalizare acustica CRX. Notatiile: - M1 M4: comenzi de pornire pentru cele patru motoare ale actionarii; - NXT: comanda urmatorul automat la sfarsitul pornirii; - RDY: semnal a carui prezenta indica functionarea normala, lipsa sa indicand defect de integritate, iar semnal intermitent indicand aparitia unei avarii de functionare; - CLX: semnal acustic de avertizare preventiza inainte de pornire; - EMR: buton de simulare a opririi de urgenta sau avarie; - ON/OFF: buton de pornire, oprire normala. Schema logica a algoritmului de comanda este data de figura:
START: Configurare PIC, Programare I/O, Intrerupere RB0, Declaratii, etc.

ALARMA (ALM) Relee in reapus Stinge LED-uri Aprinde LED rosu Suna Buzzer 5sec Asteapta RESET

Test Integritate

INIT: Relee in repaus Stinge LED-ul rosu Stinge LED-ul verde

Test Buton 1 = ON In bucla

Suna Buzzer 2sec Inchide REL1

Suna Buzzer 2sec Inchide REL2

Page

64

Test REL1 inchis RA0 = 0

Test REL2 inchis RA1 = 0

Suna Buzzer 2sec Inchide REL3

Test REL3 inchis RA2 = 0

Suna Buzzer 2sec Inchide REL4

Test REL4 inchis RA3 = 0

Temporizare 1sec Aprinde LED verde Suna Buzzer 2sec

Floop Test RA0+RA1+RA2+RA3 = 1

ISR: Declansata de buton 0 (AVR) = 0 Se face salt la ALM

Page

Test Buton 1 = ON Scanata

65

Subrutina ALM este: MOVLW 0X3E; LED ROSU APRINS 0011 1110 MOVWF PORTB CALL BUZ5

29. Arhitectura microcontrolerului PIC16F877A


Este realizat intr-o capsula DIP cu 40 pini, prezentata in figura urmatoare:

Page

Semnificatia pinilor: - Pin 1: MCLR (memory/master clear) intrare de stergere (RESET) de tip master pentru circuit, activ in logic 0; o VPP (voltage port programming) intrare pentru tensiune de programare; o THV (test high voltage) testare la tensiuni mari; - Pin 2 7: RA0 RA5 sase componente bidirectionale pentru portul A; o AN0 AN4 (analog input) intrari analogice; o Vref tensiune de referinta analogica pozitiva, respectiv negativa; o T0CKI (timer 0 lcok input) intrare de clock pentru timerul 0; o SS (slave select) selectia slave la portul serial sincron; - Pin 8 10: RE0 RE2 cele trei componente bidirectionale de intrare iesire ale portului E; o RD, WR, CS controlul citirii, scrierii si controlul selectiei; o AN5 AN7 (analog input) intrari analogice;

66

Pin 11 12, 31 32: VDD intrare pentru tensiunea de alimentare pozitiva; o VSS intrare pentru tensiunea de referinta de masa; Pin 13 14: OSC1, OSC2 intrare iesire pentru oscilatorul cu cristal intern la care frecventa OSC2 este din OSC1; o CLKin, CLKout intrare iesire pentru sursa de clock externa; Pin 15 18, 23 26: RC0 RC7 cele opt componente bidirectionale intrare iesire ale portului C; o T1OSI, T1OSO intrare iesire pentru oscilatorul de la timerul 1; o T1CKI intrarea de clock de la timerul 1; o CCP1, CCP2 intrarea pentru captura 1, captura 2, respectiv iesirea pentru comparatorul 1, comparatorul 2; o SCK, SCL intrare bidirectionala pentru clock-ul serial sincron; o SDI, SDA, SDO intrari date pentru modul SPI; intrare de date bidirectionala pentru modul SPI; iesire date pentru modul SPI; o TX, RX transmisie, receptie asincron de tip USART; o CK, DT pentru clock, respectiv, date sincrone; Pin 19 -22, 27 30: RD0 RD7 cele opt componente bidirectionale ale portului D; o PSP0 PSP7 cele opt componente ale portului paralel de tip slave. Se folosesc la interfatarea cu magistrala procesorului; Pin 33 40: RB0 RB7 cele opt componente bidirectionale ale portului B; o INT (interrupt) activ in logic 1; o PGM, PGC, PGD intrari de programare a tensiunii; PGM joasa; PGC programare seriala clock; PGD programare seriala date;

Page

67

Organizarea memoriei program a acestui microcontroler este prezentata in figura urmatoare:


PC 12 <12:0>
CALL, RETURN, RetFIE, RetLW

Stiva nivel 1
Stiva (8 nivele)

Stiva nivel 2 Stiva nivel 8

Vector RESET

Vectori

Vector INTR Pagina 0

Memoria program integrata pe chip

Pagina 1 Pagina 2 Pagina 3

Vectori: 0000h 0004h Pagina 0: 0005h 07FFh Pagina 1: 0800h 0FFFh Pagina 2: 1000h 1FFFh Pagina 3: 1800h 1FFFh

Circuitul are un numarator de programe notat PC (pogram counter) de 13 biti, marcati de la 0 la 12. El este capabil sa adreseze un spatiu de memorie FLASH de 213 = 23 * 210 = 8k * 14 cuvinte. Memoria program este organizata in 4 pagini de memorie, de la 0 la3, fiecare pagina avand 2k memorie. Dintre vectori se remarca vectorul RESET 0001h si vectorul de INTRERUPERE 0004h. Stiva este organizata pe nivele de memorie, de la 1 la 8. Subrutine: - Call: subrutina de apelare a unei subrutine; - Return: subrutina de revenire; - RetFIe(return from interrupt): revenire dintr-o subrutina de intrerupere; - RetLW (return with literal in W): revenire dintr-o subrutina de intrerupere cu incarcarea unei valori literale in acumulatorul W.

Page

68

30. Aplicatie privind programarea microcontrolerului PIC16F877


Pentru a realiza programarea acestui circuit vom folosi un instrument soft care sa ne ajute sa ne gandim la logica de realizare a programului inainte ca programul sa fie realizat (a priori). Acest instrument soft, care nu este propriu-zis un limbaj de programare, fiind scris intr-un format neimpus, simplu, se numeste limbaj de descriere a programului PDL (program description language). Orice program descriptiv PDL trebuie sa inceapa cu o declaratie START si sa se termine cu o alta declaratie numita END. Acestea trebuie sa fie evidentiate prin ingrosare pentru a face codul mai clar. De asemenea, este o practica obisnuita ca instructiunile programului PDL dintre declaratii sa fie scrise deplasate spre dreapta (indent) pentru a creste claritatea codului. Secventele normale ale programului contin instructiunile scrise ca texte scurte in engleza care sa descrie functionarea. EX: START Turn on the LED / Aprinde LED-ul Wait 1 second / Asteapta o secunda Turn off the LED / Stinge LED-ul END Pentru a descrie fluxul de control dintr-un program se folosesc declaratiile de tip IF, THEN, ELSE, ENDIF. EX: IF switch = 1 THEN/Daca comutatorul este in 1 atunci Turn on LED1 /Aprinde LED1 ELSE Turn on LED2 /Aprinde LED2 Start the motor / Porneste motorul ENDIF

Page

69

Pentru a realiza iteratii in codul PDL se folosesc declaratiile DO (executa) si ENDDO (termina executia). EX: bucla conditionala folosind DO si ENDDO Turn on LED DO 10-timer /executa de 10 ori Set clock for 1 / Setare clock in 1 Wait for 10ms / Asteapta 10ms Set clock for 0 / Setare clock in 0 ENDDO O varianta a declaratiile DO, ENDO consta in folosirea altor declaratii de tip DOFOREVER (executa al nesfarsit), DOUNTIL (executa pana la). EX: bucla conditionala folosind DOUNTIL Turn off buzzer IF switch = 1 THEN DOUNTIL Port1 = 1 Turn on LED Wait for 10ms Read Port1 ENDDO ENDIF EX: bucla infinita folosind DOFOREVER DOFOREVER Read data from Port1 Send data for Port2 Wait for 1 second ENDDO

Page

70

Pentru a realiza intarzieri, pana cand un element de comutatie ia o anumita valoare (un comutator = 1, se foloseste declaratia REPET-UNTIL. EX: REPEAT Turn on buzzer Read switch value UNTIL switch = 1

Aplicatia pe care dorim sa o realizam se numeste lumina dinamica si contine 8 leduri conectate la portul PORTC al microcontrolerului PIC16F877 care opereaza la o frecventa de 4MHz obtinuta de la un rezonator. La conectarea sub tensiune sau la resetarea microcontrolerului cele 8 leduri se aprind alternativ in sens trigonometric, astfel incat, in orice moment, doar un singur led este aprins. Exista o intarziere de o secunda intre iesirile portului PORTC, astfel incat aprinderea si stingerea ledurilor sa poata fi observata. Structura hardware a aplicatiei este prezentata in figura urmatoare:

Page

71

Program PDL: START Configure PORTC pins as output Initialise J = 1 DOFOREVER Set PORTC = J Shift left J by 1 digit IF J = 0 THEN J=1 ENDIF Wait 1 second ENDDO END

Programul in limbaj C al aplicatiei realizat pe baza programului descriptiv PDL se poate compila folosind mikroC, are numele LED1.C si este urmatorul: Void main() { Unsigned char J = 1; // initializare J = 1 TRISC = 0 // configurare pini PORTC ca iesiri For(jj) // bucla fara sfarsit { PORTC = J; // trimite J la PORTC Delay_ms(1000); // intarziere o secunda J = J << 1; // deplasare J spre stanga If (J == 0) J = 1; // daca s-a ajuns la ultimul LED, ne intoarcem la primul LED si aprindere } }

Se va obtine un fisier .HEX care va fi incarcat in mikroC folosind fie un debugger fie un dispozitiv de programare. Lumina se va deplasa in sens orar, modificand deplasarea lui J inspre dreapta.

Page

72