Explorați Cărți electronice
Categorii
Explorați Cărți audio
Categorii
Explorați Reviste
Categorii
Explorați Documente
Categorii
CURS
Conf. dr. ing. Tiberiu Coroescu Autor: tefan Amaximoaie 2011/2012
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
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
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
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
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
Magistrala interna
Ri
UAL MUX RM
Control
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
I <- 1 J <- 11
Mi <- Mj
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
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
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
16 biti
Registru secundar
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
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
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
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.
BD0 BD7
B U F I/E
PA
PA0 PA7
Reset
RD WR A0 A1 CS
B L C C
I8255
PC
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
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
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 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
D0 D7
B U F I/E
TxD
BCC
Reset
RD WR CS C/D
BA
B L C C
I8251
RxC RxRDY
M O D E M
+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
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
B U F I/E
CS
Clock 0
Gate 0 Out 0
AB
A0
A1
CB
RD WR
B L C C
M O D E M
+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
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
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
D0 D7
B U F I/E
CS
C R P
IR0 IR1
A0
WR RD INT INTA
B L C C
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
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
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
Page
39
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
7 8 . . . 14 5 4 6 1
D0 D1 . . . D7
A1 A0
D0 D1 . . . D7
7 8 . . . 14
80 87 C0 C7
E 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
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
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
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.
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
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
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
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
PICDEM1
PICDEM2
PICDEM3
ASAMBLOARE
SIMULATOARE SOFTWARE
MPLAB-SIM
COMPILATOARE
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
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
Page
64
Page
65
Subrutina ALM este: MOVLW 0X3E; LED ROSU APRINS 0011 1110 MOVWF PORTB CALL BUZ5
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
Stiva nivel 1
Stiva (8 nivele)
Vector RESET
Vectori
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
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