Sistemul de control ISP1000
Sistemul de control ISP-1000, dezvoltat in jurul microcontroller-ului DS89C420, ofera o gama larga de accesorii indispensabile in controlul proceselor industriale sau in diferite aplicatii de complexitate medie. Procesorul lui DS89C420 este compatibil cu seria 8051 de microcontrollere, dar cu o arhitectura mult mai avansata fata de predecesoarele sale, lucru ce ii c 636e43g onfera o viteza de executie a instructiunilor de 12 ori mai mare decat a sistemului original, la aceeasi frecventa de ceas. Frecventa de ceas maxima ce poate fi aplicata acestui procesor este de 33MHz, adica poate prelucra 33 de milioane de instructiuni pe secunda.
Astfel microprocesorul DS89C420, integrat in sistemul de control ISP-1000, se preteaza foarte bine aplicatiilor industriale din ziua de azi, in care viteza de executie a algoritmilor de conducere este o necesitate.
Schema bloc a sistemului este prezentata in figura urmatoare:
Fig. 2.1. Schema bloc a sistemului ISP-1000.
Sistemul ISP-1000 prezinta urmatoarele caracteristici:
CPU - Microcontroller Dalas Semiconductor DS89C420 cu 16Kbytes de memorie flash si 128 bytes de memorie RAM;
Frecventa tact - 11,0592 MHz;
Memorie externa - RAM de 8 Kbytes;
Porturi - Port de iesire pe 24 de biti;
Port de intrare iesire pe 12 biti;
Port pentru intreruperi pe 3 biti;
Port LCD;
Port matriceal 3x8;
Port pentru tastatura de 4x8Key.
RS232 - circuitul DS275;
RS485 - circuitul IC 75176;
Reset si verificare baterie - circuitul DS1707;
Convertor AD DA - circuitul PCF8591 (convertor pe 8 biti, 4 intrari si 1 iesire analogica);
Tensiune de alimentare - 5 volti;
2.3.1 Introducere
Microcontrollerul DS89C420 face parte din familia de microcontrollere 8051 avand performante foarte bune la frecvente de lucru inalte si un consum de putere redus fata de versiunea originala 8051,pastreaza acelasi set de instructiuni in cod masina, fiind comparabil cu 8051 si realizeaza aceleasi operatii intr-un numar mai mic de cicli de timp.In consecinta ,face posibila utilizarea mult mai eficienta a aceluiasi cristal de cuart. Ca o alternativa putem rula un program la o viteza redusa, rezultatul fiind un consum mai mic de energie. Printr-o proiectare eficienta cu un cuart de viteza mica putem obtine aceleasi rezultate ca si cum am utiliza un 8051 original, dar cu un consum energetic redus.
Inovatia principala la acest microcontroller ne permite executarea unui ciclu de instructiuni pe un singur impuls de timp, fata de 12 impulsuri cate erau necesare la circuitul original 8051. Acest rezultat duce la cresterea performantelor de 12 ori comparative cu 8051 si de 4 ori in raport cu alte microcontrollere de mare viteza realizate de firma Dallas Semiconductor's. Aplicatiile propuse au dus la aparitia unei familii de microcontrollere de tip 80C32 prin alipirea unor echipamente periferice. Acestea cuprind: memorii rapide de 16kB/32kB/64kB, memorii tip RAM de 1 kB,pentru porturi de I/O pe 8 biti, trei contoare de timp pe 16 biti, doua pe cip UARTS, cu marcare simultana de date si un cip de supravechere cu cinci prioritati la intrerupere si un cuart cu multiplicare. Se intentioneaza furnizarea a 256 biti de RAM utilizabili pentru variabile si constante: 128 biti pot fi apelati prin adresare directa sau indirecta, sau numai folosind adrese indirecte.
Circuitul poate opera la o frecventa maxima de 33MHz. Tinand cont de multiplicare cu 12 a vitezei de lucru putem ajunge la performanta de prelucrare a 33 de milioane de instructiuni pe sec (MIPs). Acest nivel este comparabil cu marea majoritate a procesoarelor pe 16 biti fara extensii si fara interfete implementate.
Din proiectare a fost inclus un sistem de gestionare a puterii consumate, care permite variatia vitezei de operare de la un impuls pe ciclu la 1024 impulsuri pe ciclu. Deoarece puterea
consumata este direct proportionala cu viteza de procesare, programul poate reduce frecventa de operare pe perioda micilor comutari inverse, rezultand o reducere semnificativa a consumului energetic. Conexiunile inverse permit programului sa se intoarca rapid la modul de operare in mare viteza la interceptarea unei inactivitati sau sesizarea unei activitati la unul din porturile seriale, programul putand raspunde la orice eveniment extern in modul de lucru gestionare de putere.
Fig. 2.2 Schema bloc a microcontrollerului DS89C420
Descrierea semnalelor la pini
Fig. 2.3 DS89C420
Tabel 2.1.
Pin |
Semnificatie |
P3.0 |
RXD-intrare seriala a porului pentru receptie |
P3.1 |
TXD-iesire seriala a portului pentru emisie |
P3.2 |
/INT0-intrerupere externa pentru Timer 0 |
P3.3 |
/INT1-intrerupere externa pentru Timer 1 |
P3.4 |
T0-intrare externa in Timer 0 |
P3.5 |
T1-intrare externa in Timer 1 |
P3.6 |
/WR-strob pentru scrierea memoriei de date externa |
P3.7 |
/RD-strob pentru citirea memoriei de date externa |
Structura microcontrollerului DS89C420
Structura circuitului are la baza circuitul standard 87C52 cu respectarea setului standard de instructiuni pentru 8051. Inima circuitului este o structura de memorare, care foloseste registri interni pentru stocarea de date, si unitati periferice. Acest subcapitol face o descriere a fiecarei parti componente din structura circuitului.
CPU-Unitatea centrala de prelucrare
Unitatea centrala de prelucrare este compusa din unitatea aritmetica si logica (ALU) si din unitatea de control (UC).
Unitatea aritmetica si logica ALU se ocupa cu functiile matematice, compararile si deciziile generale. ALU nu apare ca utilizare explicita in soft. Decodorul de instructiuni pregateste ALU si transmite catre acesta datele primare. ALU foloseste doi registri speciali de functii (SFRs) ca sursa si destinatie a tuturor operatiilor. Acestia sunt memoria si registrul tip B. ALU furnizeaza de asemenea informatii de baza in registrul de programare de baza.
2.3.3.2 Registri de functii speciale SFRs
Toti operatorii si perifericele care nu sunt controlate in mod explicit prin instructiunile circuitului sunt controlate prin SFRs. Cei mai utilizati registri care sunt componente de baza ale structurii circuitului sunt prezentati in continuare.
a) Acumulatorul
Acumulatorul este atat sursa cat si destinatie pentru marea majoritate a operatiilor matematice, transfer de date si decizii. Datorita faptului ca majoritatea instructiunilor sunt realizate in viteza mare este necesar sa se utilizeze acumulator de tip (A sau ACC).
b) Registrul B
Registrul B pe 8 biti, este utilizat ca a doua optiune in multiplicarea sau demultiplicarea operatiilor. Cand nu este utilizat in acest scop registrul poate fi folosit ca registru cu caracter general.
c) Cuvantul de stare al programului
Cuvantul de stare al programului contine o succesiune de biti de marcare care cuprind: indicatori de transport, indicatori auxiliari de transport, indicatori cu caracter general, registrii de capat, indicatori de supraplin si indicatori de paritate.
Indicator de date
Indicatorul de date este utilizat pentru asocierea unei adrese de memorie la instructiunile MOVX. Aceasta adresa poate denumi o locatie de memorie, alta decat cea interna sau externa a cipului, sau o memorie desemnata dintre perifericele existente. Cand transferam date dintr-o zona de memorie in alta sau din registrul de memorie intr-o memorie externa periferica avem nevoie de doi indicatori unul pentru sursa si unul pentru destinatie. Utilizatorul poate selecta indicatorul activ dintr-un bit SFR (Sel DPS.0), sau poate activa o bucla automata pentru a alterna indicatorii selectati (TSL DPS.5). Se activeaza automat o bucla care genereaza cresterea si descresterea automata a indicatorului curent DPTR.
Stack Pointer (SP-Indicatorul de stiva)
Stack Pointer-ul marcheaza cea mai de sus locatie ocupata, care este practic ultima valoare folosita. Utilizatorul poate plasa stiva oriunde in memoria RAM prin setare indicatorului de stiva cu locatia dorita, oricum bitii de dedesupt fiind utilizati in registri de lucru.
Porturile de I/O
Sunt disponibile patru porturi de intrare/iesire pe 8 biti. Fiecare port ii este atribuita o locatie SFR, putand fi folosite atat pentru scriere cat si pentru citire. Fiecare port de I/O are un cod fixat prin programare. In general softul permite citirea starii pinilor externi simultan cu citirea informatiei.
Timer-ul/Numaratorul
Sunt disponibile trei timere fiecare pe 16 biti. Fiecare timer are doua locatii de adresa SFR care pot fi citite si inscrise prin programare. Timerele sunt controlate prin registri speciali de functii SFRs descrisi mai sus.
Unitatea UARTs
Cele doua unitati UARTs sunt controlate si apelate de SFRs. Fiecare unitate de UART are o adresa utilizata pentru a putea inscriptiona si citi unitatea UART. Aceeasi adresa este
utilizata pentru ambele operatii de inscriptionare si citire, diferenta constand in comenzi. Fiecarei unitati UARTs i se asociaza propriul registru de control SFRs.
Registrii de memorie scratchpad (RAM)
Centrul de inalta viteza utilizeaza 256 biti de memorie RAM scratchpad in general,pentru date si marimi variabile. Primii 128 biti sunt destinati aplicatiilor de tip soft, urmatorii 128 biti sunt destinati operarilor indirecte. Se poate selecta si zona de memorie cu alte destinatii.
Stack-ul (Stiva)
Stack-ul este o zona de RAM care stocheaza adresele de intoarcere pe durata transmiterilor si a intreruperilor de date. Utilizatorul poate folosi stiva si pentru plasarea variabilelor cand este necesara aceasta operatie. Indicatorul de stiva desemneaza locatia de RAM care se afla in zona cea mai de sus a acestuia. Aceasta se face in functie de valoarea indicatorului de stiva si poate fi plasat oriunde intre cei 256 biti ai RAM-ului. De obicei locatia se afla in zona de inceput a primilor 128 biti daca aceasta locatie este accesibila numai prin adresare indirecta.
Registrii de lucru
Primii 32 de biti ai RAM-ului scratchpad pot fi folositi ca patru pachete de 8 biti de registrii de lucru pentru miscarile datelor la mare viteza. Utilizand patru pachete de biti soft-ul poate schimba rapid contextul modificand unul din pachete. Ca o completare a acumulatorului, registri de lucru sunt folositi uzual ca sursa de date sau de adrese. O parte din registrii de lucru pot fi folositi si ca indicatori pentru alte locatii de RAM.
2.3.3.10 Numaratorul de program (PC)
Numaratorul de program este o valoare reprezentata prin 16 biti care desemneaza urmatoarea adresa care trebuie incarcata. In cip incrementarea numaratorului de program se face automat ca si saltul la locatia de memorie urmatoare.
2.3.3.11 Magistrala de adrese si date
Dispozitivul adreseaza un spatiu de memorie de 64Kb pentru program si 64 Kb pentru date ,care se gaseste in memoria interna si externa. Cand se acceseaza memoria externa, sunt utilizate porturile 0 si 2 ca magistrala de date si adrese prin multiplexare. Suporta maximum trei structuri de magistrala externa de memorie. Modul non page genereaza la portul 2 adresa MSB si permite transferul la portul 0 de adrese LSB si date prin multiplexare. Modul page 1 foloseste portul 0 exclusiv pentru date si portul 2 pentru adresele MSB si LSB prin multiplexare. Modul page 2 foloseste portul 0 exclusiv pentru adrese LSB si portul 2 pentru adrese MSB si date prin multiplexare.
2.3.3.12 Watchdogul
Watchdogul ("cainele de paza") genereaza functia de supraveghere pentru aplicatiile ce nu au voie sa ruleze fara control. Este programat sa ruleze singur. Pentru a preveni stergerea
softului este necesara programarea cu atentie a timpului watchdog, pentru a preantampina finalizarea acestuia in timpul rularii altor softuri.
2.3.3.13 Monitorizarea consumului
Pentru supravegherea consumului sunt incorporate date de referinta si un circuit analogic specializat. Cand sursa de c.c (VCC) iese din parametri, circuitul de monitorizare genereaza un avertisment de intrerupere . Daca avaria nu dispare circuitul solicita resetarea in vederea inchiderii. Daca sursa revine in parametri normali avertizarea inceteaza. Circuitul de monitorizare retine microprogramatorul inactiv pana la revenirea la normal a sursei de alimentare.
2.3.3.14 Intreruperi
Programul este capabil sa evalueze 13 surse de intrerupere simultan. Fiecarei intreruperi i se asociaza un vector, stegulet, prioritate si activare. Aceste intreruperi pot fi urmarite in general prin activarea sau inactivarea lor.
2.3.3.15 Semnalul de tact
Microprogramatorul contine un circuit oscilator cu cuart extern care genereaza impulsurile de tact. Acest circuit poate fi ocolit introducand impulsurile externe de tact la pinul XTAL1. Impulsurile de tact sunt folosite pentru comanda ciclilor masina. Sunt generate 4 impulsuri diferite de tact, si anume, ALE, PSEN, tactul watchdog si un tact serial. In complectare poate fi folosit si un circuit sonerie pentru o frecventa de 10 MHz. Este inclus si un multiplicator de frecventa ce poate fi activat cu ajutorul SFRs-ului pentru multiplicare cu 2 sau cu 4 a tactului principal. Acestea fac posibila operarea cu cristale la frecvente reduse (cu costuri reduse) mai sus de limita maxima de 33MHz.
2.3.3.16 Memoria Flash
Memoria flash este o memorie programabila. Se alimenteaza la 5 Vcc, se programeaza prin conectare la un port serial folosind un soft de incarcare , sau cu ajutorul unei memorii standard, sau cu un programator de EPROM. Toate cele trei metode de programare folosesc o unitate de management a programarii (MMU) si console de programare. MMU controleaza programul si datele si genereaza secvente si timpi de control al programului pe cipul de memorie. Exista de asemenea o secventa de securitate pe trei nivele de blocare si alte optiuni. Nivelul de umplere al memoriei este sesizat automat de procesor. Rutinele de reset si toti vectorii de intrerupere sunt localizati in cei mai de jos 128 biti ai zonei de memorie.
Modul de programare
Acesta furnizeaza informatii programatorului despre inima microcontrolerului de ultra inalta viteza. Contine informatii despre schema de memorare, RAM-ul inclus, SFRs-urile si setul de instructiuni. Modul de programare este asemanator cu cel al circuitului standard 80C52.
Schema de memorare este identica. Foloseste acelasi set de instructiuni, cu timpi pentru executia unei instructiuni inbunatatite.Sau adaugat cateva noi functii SFRs.
Organizarea memoriei
Microcontrolerul de ultra inalta viteza, ca si 8052, foloseste anumite zone de memorie. Aceste zone contin registri, memoria de program, si memoria de date. Registrii au rolul de a controla perifericele cipului si RAM-ul. Registri (din RAM) sunt separati de memoria de date. Registrii sunt de trei feluri: registri de accesare directa a RAM-ului din cip, de accesare indirecta si registri SFR. Zona memoriei de program si de date apare explicita in capitolul harta memoriei. Informatii despre registri se dau in capitolul destinat acestora.
a) Harta de memorie
Microcontrolerul de ultra inalta viteza foloseste o schema de memorare care separa memoria de program , de memoria de date. Fiecare zona are 64KB incepand de la adresa 0000h si sfarsind cu FFFFh, dupa cum apare in fig 2.3. Segmentele de program si de date se pot suprapune atata timp cat sunt accesate pe cai diferite.Memoria de program este generat automat de microcontroller. Aceste adrese nu vor fi inscrise niciodata cu ajutorul soft-ului. De fapt nu exista instructiuni care sa permita inscriptionarea acestora. Exista o singura instructiune MOVC care este utilizata in mod explicit pentru citirea acestei zone de program. Zona de date poate fi accesata utilizand instructiunea MOVX. Aceasta instructiune ne permite sa ajungem la adresa dorita pe mai multe cai. Se poate folosi pentru a accesa cei 64KB de memorie de date. Daca adresele si datele depasesc spatiul de 64KB in interiorul cipului sunt accesate memoriile externe de la porturile 0 si 2.
Fig. 2.3. Harta de memorie
b) Harta registrilor
Harta registrilor este prezentata in figura 2.4. Este total separata de memoria de program si de memoria de date prezentata anterior. O alta categorie de instructiuni este utilizata pentru accesul la registri. Real exista 256 de locatii de potentiali registri. Practic microcontrolerul de ultra inalta viteza foloseste 256 de biti de memorie SCRATCHPAD si mai mult de 128 biti de registri de functii speciale SFRs-uri. Acest lucru este posibil in conditiile in care cei 128 biti SCRATCHPAD RAM de sus sunt accesati indirect.Acestia contin registri de lucru (R0 sau R1) sau indicatorii de stiva . Adresele inferioare (0h - 7Fh) acceseaza RAM-ul SCRATCHPAD, iar adresele superioare (80h - FFh) acceseaza SFRs-urile. Prin apelare indirecta pot fi accesate toate adresele din RAM-ul SCRATCHPAD in ordine (0h - FFh).
RAM-ul SCRATCHPAD este disponibil pentru orice date cu caracter general. Cand numarul de date este redus se poate folosi si ca memorie RAM de intrerupere. Daca este necesara
o astfel de memorie RAM-ul SCRATCHPAD este cea mai indicata solutie datorita vitezei mari de lucru.
Fig. 2.4 Harta registrilor
Suplimentar pe langa registrii cu accesare directa exista si registri cu accesare indirecta. Registrii cu accesare indirecta se gasesc atat in RAM cat si in zona SFR-urilor. In RAM-ul SCRATCHPAD zona cuprinsa intre 20h si 2Fh contine biti adresabili individual. Aici se gasesc 128 biti (16 x 8) individuali destinati aplicatiilor software.Un bit individual se deosebeste de un registru de acces prin tipul instructiunii. In zona SFRs-urilor orice locatie de registru care se termina in 0 sau 8 este adresabila pe bit.
c) Registrii de lucru
In zona de jos a celor 128 de biti de RAM exista patru grupuri de 8 biti de registri de lucru. Registrii de lucru sunt locatii cu caracter general adresabile prin comenzi speciale. Ei se afla intre R0 si R7. Din moment ce sunt 4 grupari, gruparea selectata este folosita cu orice instructiune care contine R0 - R7. Continutul softului poate fi schimbat prin simpla schimbare a grupului. Registrii de lucru permit de asemenea ca, continutul lor sa fie folosit pentru adresarea bitilor superiori din RAM-ul de 128 de biti. Cu o simpla instructiune se poate selecta valoarea din R0 pentru a accesa partea superioara a RAM-ului. Valoarea poate fi un rezultat intermediar.
d) Stiva
Pentru programarea stivei se foloseste o alta zona din scratchpad. Aceasta zona este selectata cu ajutorul unui indicator de stiva din cadrul SFRs-ului (SP,81h).
Cand apare un apel sau o intrerupere, adresa de intoarcere este plasata in stiva si este disponibila ca variabila de program. Deoarece stack-urile (stiva) isi schimba permanent pozitia ele pot ocupa orice loc in RAM. Utilizatorul poate muta stack-urile dupa nevoie. O zona de pozitionare convenabila ar fi mai sus de zona de RAM >7Fh, deoarece este apelabila indirect. SP
indica catre ultima valoare folosita. Urmatoarea valoare se plaseaza mereu la SP*1. Orice comanda PUSH sau CALL incrementeaza indicatorul SP, iar orice comanda POP sau RET scade SP.
2.3.4.2 Modalitati de adresare
DS89C420 foloseste setul standard de instructiuni pentru 8051 care are aplicatie la un domeniu larg de subansamble. DS89C420 foloseste trei zone de memorie. Acestea sunt memoria de program, memoria de date si registrii. Zonele de program si date au fiecare 64KB, intre adresele 0000h si FFFFh. Registrii ocupa spatiul dintre adresele 00h si FFh si nu se amesteca cu celelalte zone, deoarece microcontrolerul de ultra-inalta viteza foloseste modalitati de adresare diferite pentru fiecare zona.Aceste modalitati sunt descrise in continuare.
Memoria de program este o zona de la care toate instructiunile sunt aduse ,este utilizata ca zona read-only.Aceasta pentru ca setul de instructiuni 8051 nu ofera instructiuni de scriere in aceasta zona. Zonele de date si cea a registrilor pot fi citite/scrise (read/write).Nu este necesara nici o actiune speciala pentru a scoate din memoria de program .Fiecare instructiune scoasa este prelucrata automat de CPU.Pentru adresarea datelor si a registrilor se folosesc adrese explicite. Aceasta modalitate permite adresarea datelor si a registrilor ori de cate ori este necesara.
Microcontrolerul de ultra-inalta viteza suporta si alte modalitati de adresare:
Adresare de registru;
Adresare directa;
Adresare indirecta a unui registru;
Adresare imediata;
Adresare indirecta a unui registru cu deplasare;
Adresare relativa;
Adresare de pagina;
Adresare extinsa;
a) Adresare de registru:
Adresa de registru este folosita de operanzi care sunt localizati in unu din cei 8 registri de lucru (R0-R7). Registrii de lucru pot fi localizati in unu sau patru grupuri asezate in zona de jos a celor 32 biti de SCRATCHPAD RAM. Un grup de registri poate fi selectat folosind doi biti din cuvantul de stare al programului (PSW, D0h). Acest mod de adresare este puternic, daca se selecteaza grupul activ fara a fi necesara cunoasterea acestuia. O instructiune poate avea utilizari diferite prin simpla schimbare a bancului.
Adresarea registrului este o instructiune de mare viteza, necesitand un singur ciclu masina. Dam exemplu de doua adrese.
ADD A,R4 - Adauga registrul R4 la Acumulator
INC R2 - Creste valoarea din registrul R2 cu o unitate
b) Adresare directa:
Este modalitatea de accesare a tuturor celor 128 de biti situati in zona de jos a RAM-ului SCRATCHPAD si in zona SFRs. Se foloseste pentru mutarea unei valori dintr-un registru in altul.
MOV 72h, 74h Muta valoarea din registrul 74 in registrul 72
MOV 90h, 20h Muta valoarea din registrul 20 SFR la 90h (port 1)
Nu
exista diferente intre instructiunile de accesare a RAM-ului si SFRs-ului.
Registrii SFRs sunt inainte de 7Fh. Adresarea directa se poate extinde si
asupra bitilor individuali, printr-un grup de instructiuni ce utilizeaza
exclusiv biti. Registrii intre 20h si 2Fh contin biti adresabili
individual. SFRs-urile cu terminatie in 0 sau 8 sunt de asemenea biti adresabili.
SETB 00h Selecteaza bitul 00 in RAM
MOV C, 0B7h Muta continutul bitului B7 spre steguletul de transport.
c) Adresare indirecta a unui registru:
Acest mod este utilizat pentru accesarea RAM-ului SCRATCHPAD cu locatia inainte de adresa 7Fh. Este de asemenea utilizat pentru a ajunge la zonelor joase de memorie RAM (0h - 7Fh) daca e nevoie. Adresa este furnizata de continutul registrului de lucru specificat in instructiune, totusi o singura instructiune poate fi folosita pentru aflarea mai multor valori prin alternarea continutului registrilor de lucru desemnati.In general doar R0 si R1 pot fi folositi ca pointers.
ANL A, @R0 SI logic intre Acumulator si valoarea registrului marcat in apropierea valorii stocate in R0
Acest mod este utilizat pentru lucrul cu stiva (stack-uri). Deoarece toate referintele din stack-uri sunt directionate de valoarea din registrul indicatorului de stiva. Un bun exemplu sunt instructiunile PUSH si POP
PUSH A Salveaza continutul acumulatorului in stack
Un alt exemplu este folosirea instructiunii MOVX
MOVX R0,A Scrie valoarea din Acumulator la adresa marcata in apropierea lui R0 in pagina apropiata de P2
MOVX DPTR,A Scrie valoarea in Acumulator cu adresa in apropierea datei selectate de marker.
d) Adresare imediata:
Adresarea imediata este utilizata cand unul din operanzi este prestabilit si codat prin soft.
Acest mod se utilizeaza pentru initializarea SFRs-urilor si pentru a masca simplii biti fara ai
afecta pe altii.
ORL A , 40h Sau logic intre Acumulator si 40h
e) Adresarea indirecta a unui registru cu deplasare:
Se utilizeaza pentru a accesa date din zona superioara tabelului in spatiul destinat memoriei de program. Locatia se creeaza folosind o adresa de baza si un index. Adresa de baza poate fi oricare alta decat PC sau DPTR. Indexul este acumulatorul. Rezultatul se stocheaza in acumulator.
MOVC A, A + DPTR Incarca acumulatorul cu continutul memoriei de program
indicat de continutul DPTR adunat cu valoarea din acumulator.
f) Adresare relativa:
Se foloseste pentru determinarea unei destinatii de adresa pentru o ramura conditionala. Fiecare instructiune contine o valoare din 8 biti care are o adresa complementara adaugata PC-ului pentru determinarea destinatiei finale. Destinatia se fixeaza cand se verifica conditia. Daca conditia nu se verifica se trece la urmatoare instructiune.
JZ $-20 Ataseaza locatiei (PC+2)-20 daca continutul acumulatorului este 0
g) Adresare de pagina:
Este utilizata de instructiunile de adresare pentru a specifica o adresa de destinatie din acelasi pachet de 2KB ca instructiune urmatoare.Adresa de 16 biti este calculata prin luarea celor mai semnificativi 5 biti din instructiunea urmatoare (PC+2) si concatenandu-i cu cei mai putini semnificativi 11 biti din instructiunea curenta.
0870h ACALL 100h Apeleaza subrutina de la adresa 100h si adauga adresa paginii curente.
In acest exemplu adresa paginii curente este 800h, deci adresa de destinatie este 900h.
h) Adresare extinsa:
Este utilizata de instructiunile de agatare pentru a specifica o destinatie de adresa pe 16 biti cu 64KB spatiu de adrese. Adresa de destinatie este impusa de soft ca o valoare absoluta.
LJMP 0F732h Sari la adresa 0F732h
Generatorul de tact pentru UCP
Tactul pentru microcontrolerul de ultra inalta viteza este cel mai indepartat de seria originala 8051. Urmeaza descrierea comparativa a generatoruluzi de tact.
Microcontrolerul este construit cu un circuit oscilant incorporat,care poate fi condus de un oscilator extern cu cuart sau de la o sursa de clock tip TTL. Oscilatorul genereaza impulsurile necesare pentru CPU si circuitele de I/O. In fig. 2.5. se dau detalii constructive pentru schema circuitului oscilant.
Fig. 2.5. Schema circuitului oscilant
XTAL1
Pin de intrare pentru un inversor de putere sau pentru un circuit oscilator extern, caz in care XTAL2 ramane neconectat.
XTAL2
Pin de iesire a impulsurilor circuitului oscilat cu amplificare. Serveste la distribuirea impulsului de tact catre alte unitati incorporate.
Caracteristicile oscilatorului:
Microcontrolerul a fost conceput sa lucreze cu un cuart conectat paralel tip AT. Cuartul trebuie sa oscileze la frecventa dorita. Iesirea se conecteaza la un amplificator care ofera un semnal uniform de inalta frecventa foarte curat.
Selectarea cuartzului:
Circuitul a fost conceput sa ofere un semnal foarte stabil cu utilizarea unui cuart simplu.
Sistemul de divizare a tactului:
Microcontrolerul a fost proiectat sa poata multiplica sau demultiplica frecventa de lucru a unitatii CPU. Coeficientii de multiplicare si demultiplicare sunt 0,25 sau x4, 0,5 sau x2, 1, sau 1024 (regim de control al consumului) si este controlat prin CD1:0 bitii (PMR.7 , PMR:6).
Pentru functionarea in regimul de multiplicare x4 sau x2 circuitul trebuie sa fie protejat la supraincalzire. Coeficientul de multiplicare este definit de bitul 4X/2X, starea acestuia se poate modifica doar daca coeficientul devine 1 (defect) sau CMT 0 (cristal dezactivat). Se reconfigureaza multiplicarea dorita 4X/2X, setand bitul CMT (PMR:4), initializandu-se durata de protectie la supraincalzire. Bitul CMT isi poate modifica starea doar cand bitii CD 1:0 sunt setati pe l si bitul RGMD devine 0. Pe perioada de protectie la supraincalzire bitul CKRY ramane sters si bitii CD 1:0 nu pot fi setati la 00b. Cand multiplicatorul s-a racit si este gata de utilizare, bitul CKRY (EXIF:3) se seteaza in 1 logic. In acest moment, bitii CD1:0 pot fi modificati in vederea selectarii regimului de multiplicare. Pentru a face multiplicarea frecventei se urmeaza pasii:
l. Se asigura ca modul curent este setat pe divizare cu 1 (CD1:0 =10b) si RGMD
(EXIF. 2) =0
2.Sterge bitul CTM
3.Fixeaza bitul 4X/ 2X in pozitia dorita
4.Seteaza bitul CTM
5.Ai grija ca bitul CKRY (EXEF.3) sa fie l.Este nevoie de 65536 impulsuri de tact.
6.Seteaza bitii CD1:0 = 00b.Din acest moment circuitul de multiplicare este activ
Fiecare instructiune necesita un numar minim de cicli de memorie, pentru executia in timp a acesteia fiind necesari mai mult de 10 cicli de memorie (numai pentru DIV AB). Un ciclu de memorie reprezinta unitatea de timp pentru microcontrolerul de ultra inalta viteza. Numarul de perioade pe ciclul de memorie este in functie de cum a configurat utilizatorul sistemul. Toate instructiunile sunt codate in campuri de 8 biti, dar exista instructiuni si de un singur bit.
Accesul la memorie
Microcontrolerul de ultra inalta viteza are aceeasi interfata de memorie ca si circuitul standard 80C51, la care se adauga doua memorii tip pagina necesare pentru a suporta operatiile externe circuitului.
Zonele de memorie de program si de date se pot realiza: numai in cip, numai in exterior sau atat in interior cat si in exterior. Cand nu optam sa folosim memoria interna sau cand se depaseste valoarea maxima a memoriei de program si de date prevazute in chip dispozitivul necesita o accesare a memoriei externe folosind port 0 si 2 . Cand porturile 0 si 2 sunt folosite
ca un bus de memorie nu pot functiona si ca porturi de I/O. Semnalele RD si WR sunt activate cand acceseaza date din memoria SRAM:
Executia programului incepe din vectorul reset cu adresa 0000h. Daca memoria de program este validata executia programului incepe de la locatia interna 0000h altfel este folosita memoria externa de program. Orice resetare aduce programul la acest punct de inceput.
2.3.6.1 Memoria interna de tip Flash:
Microcontrolerul de ultra inalta viteza contine cinci blocuri distincte de memorii flash. Doua blocuri largite au fiecare cate jumatate din capacitatea memoriei program. Un bloc de siguranta de 64 biti a fost incorporat pentru a permite verificari asupra programului memorat.
Un alt bloc de memorie a fost implementat cu trei nivele de siguranta pentru a preintampina accesul in programul sistemului. Acest bloc contine trei biti de blocare (LB1,LB2,LB3) fiecare dintre ei asigurand un inalt nivel de supraveghere si un cod sigur de protectie. Al cincilea bloc este un registru de control optional, care contine un bit pentru activarea si dezactivarea watchdogului (EWT = WDCON .1)
Cele doua blocuri de memorie program formeaza o succesiune de ranguri de adrese incepand cu 0000h pana la maximul de memorie program existenta in cip. Decodarea rangurilor adreselor este controlata prin pinul EA din punct de vedere hardware si din punct de vedere software prin ROMSIZE.Prin activarea sau dezactivarea pinului EA controlam accesul la programul intern si simultan prin soft orice configuratie a bitilor. Starea logica a pinului EA se poate schimba numai la resetarea microprogramatorului. Pinul EA plasat la fiecare iesire in starea de reset determina care dintre programme este potrivit pentro operare in functie de structura sistemului. Cand nivelul pinului este 0, toate codurile se potrivesc pentru un sistem cu magistrala externa. Cand nivelul logic al pinului este 1 sistemul se initiaza dupa programul din memoria interna. Maximul de adrese decodate in cip se face cu soft-ul ROMSIZE.
Utilizand ROMSIZE se poate simula rularea programului cu utilizarea unui minim de memorie din cip. Ocuparea maxima a memoriei este o marime variabila. Totusi o parte a memoriei poate fi inlocuita din schema de memorie prin accesarea unui cip extern de memorie si reconstituirea acesteia in memoria interna. De fapt toata memoria interna poate fi inlocuita dintr-o schema de memorie, permitind accesul la intreaga capacitate de 64KB a acesteia..
ROMSIZE se remarca prin doua utilizari importante. In primul rand poate inlocui o memorie flash sau o memorie nonvolatila tip SRAM(NVSRAM). Memoria interna se poate reprograma sa functioneze impreuna cu locatia externa noua, in al doilea rand aceasta metoda se poate folosi pentru marirea spatiului disponibil de memorie de la 64KB la 80KB. Majorarea memoriei interne se selecteaza prin configurarea marimii ROM-ului , selectand registrii de biti RMS2, RMS1, RMS0(ROMSIZE2.0). Conditia de reset ofera acces la maximum la programul memorat in cip.
Modificari in registrii speciali de functii ai ROMSIZE-ului (C2h) necesita un timp de acces si trebuiesc urmate de doi cicli de masina de intarziere, ca si cand am executa doua instructiuni NOP, inainte de a sari la adresa urmatoare. Intreruperile trebuie sa fie inactive pe durata intregii operatii, altfel pot aparea erori. Pentru a modifica dimensiunea memoriei interne de program soft-ul trebuie sa inlocuiasca bitii RMS2-RMS0 dupa cum urmeaza :
Sari intr-o locatie de memorie libera
Dezactiveaza intreruperile stergand bitul EA(IE.7)
Scrie in registrul de acces temporar AAh (TA ; C7h)
Scrie in registrul de acces temporar 55h (TA ; C7h)
Modifica marimea bitilor selectati din ROM
Aplica o intarziere de doua cicluri masina (2 NOP)
Activeaza intreruperile setand bitul EA (IE.7)
Este obligatorie verificarea programului de executie. De exemplu asigurarea ca cei 16KB din DS89C430 executa instructiunile programate in memoria interna, mai putin limita de 12KB (aprox. 3000h) si ca registrul ROMSIZE este configurat pe defect intern de memorie. Daca softul reconfigurat de ROMSIZE modifica maximum 4KB (0000h - 0FFFh), spatiul intern (RMS2-0 ESTE 011h), si programul acceseaza imediat programul extern memorat. Se are in vedere cand se asambleaza sau verifica programul, ca toate modulele sa fie la locul lor si la adresa de strict corecta, inclusiv vectorii de intrerupere.
2.3.6.2 Interfata memoriei de program - Modul nonpage (fara pagina)
Microcontrolerul poate functiona in modul nonpage folosind o interfata externa de memorie. Schema de interconectare este redata in fig. 2.6.
Fig. 2.6. Schema de interconectare
Acest exemplu utilizeaza un cip DS89C430 si o memorie externa de 64K x 8. Programul memorat genereaza un semnal de activare (PSEN) folosit sa genereze o iesire de activare a memoriei. Poate fi folosit si pentru activarea unui cip, dar intr-un timp mai indelungat. Adresele LSB si datele sunt multiplexate la portul 0, iar adresele MSB sunt furnizate la portul 2. O legatura externa, in diagrama fiind 74F373, este folosita pentru a conecta bitii de jos ai adreselor la memoria externa. Semnalul de activare a legaturii la adresele (ALE) controleaza durata activa a legaturii, astfel incat operatia sa se efecteze in conditii bune. Semnalele si timpii pentru programul de acces sunt prezentate in fig. 2.7.
Fig. 2.7. Diagrama de semnal |
Cand se implementeaza o interfata de memorie de mare viteza se utilizeaza un cip din seria F. DS89C420 furnizeaza o interfata de mare viteza cu memoria externa
In fig. 2.7 se observa corelatiile temporare cand CD1:0 este 10b. Programul genereza 4 tacturi, pe cand programul intern genereza unul singur.
Managmentul consumului
Microcontrolerul de ultra inalta viteza foloseste mai multe solutii pentru optimizarea si managementul consumurilor. Realizeaza o combinatie intre controlul operatiilor si variatia puterii in functie de aplicatie, reduce consumul in circuitele anexe folosind si bateria anexa. Managementul consumului:
Monitorizarea cu precizie a tensiunilor
Avertizarea timpurie la intreruperile de alimentare Caderea tensiunii/revenirea tensiunii
Selectarea benzii libere
Stare de veghe (watchdog wake-up)
Reducerea consumului
Controlul divizorului de tact
Mod economic
Mod oprit
Avertizare la revenire din oprire
Mod de gestionare a consumului
Urmeaza o prezentare sumara a bitilor de gestionare a consumului, acestia fiind localizati in registrii: WDCON; D8h, EIE, E8hEXIF, 91 h, PCON, 87h.
WDCON:6 POR: (Power-on reset) Alimentare activa, reset. Hardul seteaza bitii in starea de functionare. Soft-ul ii citeste, iar stergerile se fac manual. Acesti biti stabilesc si conditiile de reset.
WDCON.5 EPFI: Activeaza regimul de avarie si intrerupere. Setarea bitilor in 1 activeaza regimurile de avarie si intrerupere. Aceasta se intampla cand Vcc ajunge la 4,375V si vectorii de proces sunt la 33h. Setarea in 0 duce la oprirea sursei.
WDCON.4 PFI: Stegulet pentru sursa in avarie intrerupta. Hardul seteaza acest bit in 1 cand exista conditia de defect. Prin soft se realizeaza shimbarea manuala a starii acestuia. Trecerea fortata in 1 duce la intreruperea sursei, daca este activata.
WDCON.3 WDIF: Stegulet la intrerupere watchdog. Daca watchdog-ul este activ, hardul seteaza bitul pentru a indica ca procesul este in desfasurare. Daca watchdog-ul este inactiv, hardul indica expirarea timpului alocat. Daca resetul watchdogului este activat (WDCON. 1), utilizatorul are 512 cicluri sistemice de tact pentru a interveni. Orice resetare sau comanda din soft poate sterge acest steag.
WDCON.2 WTRF: Stegulet de reset watchdog. Hardul seteaza acest bit cand acesta cauzeaza o resetare. Soft-ul il poate citi, stergerea se face manual. O resetare din defect a sursei poate sterge acest bit.Cu ajutorul acestui bit se poate determina cauza unui reset. Daca EWT este 0 bitul ramane neschimbat.
WDCON.1: EWT: Resetul watchdog-ului activate. Setarea porneste functia de resetare. O intrerupere nu are efect, numai daca EWDI in registrul EIE este active. Resetarea se realizeaza cu bitii WDl si WDO din registrul CKCON. Setarea lor in 0 dezactiveaza resetul dar lasa timpul curgand.
WDCON.0 RWT: Resetarea tactului watchdog. Pe perioada inactiva a timpului soft-ul seteaza bitul RWT daca watchdog-ul este active. Esecul setarii bitului duce la resetare dupa expirarea timpului.
EIE.4: EWDI: Activarea intreruperii watchdog-ului. Watchdog-ul se intrerupe la activarea acestui bit din soft.
EXIF.0 BGS: Selectarea benzii libere. Setarea acestui bit in 1 permite utilizare tensiunii din banda libera ca referinta in modul oprit. Atata timp cat aceasta functie foloseste cel mult 75uA, banda libera este optionala in modul oprit. Setarea bitului in 0 opreste banda libera in modul oprit. Cand BGS este 0, in modul oprit nu este activa nici intreruperea si defectul sursei nici defectul si resetul sursei.
PCON.1 STOP: Cand este setat programul se opreste din executie, tacturile se opresc iar CPU se deconecteaza de la sursa.
PCON.0 IDLE: Executia programului se opreste, raman in functiune tacturile, porturile seriale si temporizarile.
EXIF.2 RGMD: Mod de oscilator sonerie. Hardul seteaza acest bit cand sursa tactului este oscilatorul sonerie. Hardul seteaza bitul in 0 cand sursa tactului este cuartul. Referire la RGSL se face numai cand se opereaza cu oscilatorul sonerie.
EXIF.l, RGSL: Selectarea oscilatorului sonerie. La setarea in 1 din soft, microprogramatorul utilizeaza oscilatorul cu sonerie pentru a iesi din modul oprit fara a astepta pornirea oscilatorului cu cuart. Aceasta permite o pornire rapida din modul oprit. Este utila cand este necesara o comanda scurta pentru soft cu revenire la modul oprit. Este de semenea utila cand softul este nevoit sa raspunda rapid la un eveniment extern. Dupa ce cuartul efectueaza 65,536 cicli comutarea se face automat cu ajutorul hardului. Bitul RGMD raporteaza aceasta schimbare. Cand RGMD este 0 microprogrametorul intarzie executia soft-ului pana la efectuarea schimbarii pe oscilatorul cu cuart. RGSL se poate sterge numai la resetarea sursei si nu este influentat de alte forme de reset.
Conditii de resetare
Conditiile care fac ca microcontrolerului sa mearga la adresa 0000h este resetul. Cauzele pot fi interne sau externe cipului. Conditia de reset pune microcontrolerul intr-o noua stare urmarind un curs al evenimentelor care nu au fost anticipate de proiectant. Se pot produce avarii in sursa sau modificari ale codurilor.
2.3.8.1 Cauze de resetare:
Reset de la watchdog timer.
Reset la detectia caderii oscilatorului.
Resetari din interiorul sistemului.
Resetari externe
Starea de resetare se manifesta la fel indiferent de cauza care a produs-o. La resetare oscilatorul ramane in functiune, dar nu se executa nici un program. Cand sursa resetarii este externa, utilizatorul trebuie sa inlature cauza care a produs resetarea si sa continue operatiile de repornire. Cand se face realimentarea cauza este inlaturata automat, datorita intarzierii la pornire.
2.3.8.2 Reset la power-on/power-fail
Microcontrolerul este echipat cu sursa de rezerva, pentru a asigura functionarea dispozitivului la caderea de tensiune sau cand Vcc depaseste valorile normale.Odata ce Vcc depaseste pragul de sensibilitate dispozitivul reporneste oscilatorul cu cuart extern care numara 65,536 cicli de tact inainte ca executia programului sa porneasca de la adresa 0000h . Daca sursa de c.c scade sub valoarea prestabilita se solicita resetarea sistemului pana cand sursa atinge valoarea minima admisa. Acest mecanism permite o oprire si o pornire controlata a sistemului. Soft-ul poate determina cauza resetarii prin verificarea steguletului (POR) in registrul WDCON. Soft-ul poate sterge starea steguletului dupa ce l-a citit.
Reset de la watchdog timer
Microcontrolerul incorporeaza o caracteristica de siguranta pentru a impiedica un soft corupt sa controleze CPU . Aceasta operatie poarta denumirea de watchdog timer. Este un free-running timer cu un interval programabil.Watchdog-ul supravegheaza activitatea procesorului solicitand softului sa stearga timerul inaintea aparitiei unui overflow. Daca timerul este activat softul nu o poate sterge inainte de expirarea duratei acesteia, microcontrolerul fiind intr-o stare de reset care se mentine pe durata a 13 cicli de tact. Odata ce resetarea e anulata, procesorul porneste din adresa 0000h. Softul poate determina daca cauza resetului a fost watchdog-ul controland s steguletului(WTRF) in registrul WDCON.
Resetare la detectia caderii oscilatorului
Circuitul de detectie monitorizeaza permanent starea de functionare a oscilatorului intern. Cand este activate acesta produce o resetare daca frecventa oscilatorului scade sub 20KHz, si tine cipul in reset pana la revenirea frecventei. Circuitul este active prin setarea in 1 a bitului OFDE (PCON.4). Bitul OFDE poate fi sters de soft sau accidental de o cadere de tensiune. O resetare din cauza defectarii oscilatorului face ca bitul OFDF(PCON.5) sa devina 1. Daca circuitul nu invoca resetarea la defect, softul invoca modul oprit.
Resetarea externa:
Daca intrarea RST este in 1 se forteaza intrarea in stare de reset. O resetare externa apare cand pinul RST este tinut in 1 mai mult de 4 cicli masina, cu oscilatorul functionand. Daca pinul RST revine, procesorul porneste in mai putin de 4 cicli masina de la adresa 0000h. Resetul permite circuitului oscilant sa porneasca. Daca comanda pe RST se aplica in strea oprit, aceasta forteaza pornirea oscilatorului si a programului din 0000h. Pinul RST este un port bidirectional I/O. Daca resetarea este produsa de caderea sursei prin resetare, watchdog reset, defect al oscilatorului, sau un defect intern al sistemului pinul RST devine pozitiv. Conectarea unui condensator la pinul RST nu influenteaza functionarea.
Intreruperi
Microcontrolerul are aceeasi arhitectura cu 8051 si are aceleasi cinci prioritati la intrerupere sistemului. Cele cinci nivele de prioritate, de la mare la mic, sunt:4,3,2,l si 0. Intreruperea sau defectarea sursei cand este activata, are cea mai mare prioritate (nivel 4), pe cand alte intreruperi ale sursei sunt cotate de nivele 3,2,1,0. Fiecare sursa are biiti de prioritate diferita. Sistemul de intreruperi este identic cu cel al cipului 8051.
O intrerupere permite softului sa reactioneze in mod necontrolabil. La aparitia unei intreruperi CPU se asteapta sa intervina pentru solutionarea ei. Aceasta interventie i-a forma unei rutine de intrerupere (ISR). ISR are o adresa predeterminata. Cand apare intreruperea CPU acceseaza vectorul acestei adrese si ruleaza rutina de interventie. CPU ramane in stare de interventie pana cand se intoarce instructiunea (RET1) dupa executarea completa a ISR. Daca interventia a reusit procesorul isi reia activitatea de unde a ramas la intrerupere.
Cand apare o intrerupere procesorul o sesizeaza prin marcarea unui bit de steag. Acest bit nu poate produce intrerupere si este setat vizibil cand intreruperea este activata. Steguletele IEO, IEI, TFO, TF1 se reseteaza automat la disparitia intreruperii.
Porturile de I/O
Microcontrolerul de ultra inalta viteza are porturi I/O pe 8 biti. Fiecare port apare ca un registru special de functii (SFR), ce poate fi adresat ca un bit sau 8 locatii individuale de biti. In general registri si pinii porturilor au valori identice, iar a scrie sau a citi la un port este ca si cand ai scrie si citi SFR-ul portului. Driverul functional al porturilor ca si caracteristicile electrice sunt similare cu cele utilizate la DS87C520, cu respectarea individuala pinilor si a porturilor.Portul 0 si 2 sunt porturi paralele si pot fi folosite si pentru extinderea bus-ului de memorie. Porturile 1 si 3 sunt paralele cu functii speciale asociate fiecarui pin. Functia speciala a pinului poate fi activata si dezactivata rapid si automat in functie de aplicatia rulata.
Fiecare port I/O poate fi folosit in scopuri generale, bidirectional si paralel. Cand portul se afla in 0 , portul este conectat la masa, cand este in 1 , pinii sunt adusi in starea 1.
2.3.11 Timere programabile
Microcontrolerul de viteza mare contine 3 timere pe 16 biti si un Watchdog Timer pentru care se poate programa intervalul de timp. Pentru ca Watchdog Timerul este diferit de celelalte timere el este descris separat. Cele 3 timere pe 16 biti vor fi referite ca timere.
Cele 3 timere ofera aceleasi metode de control si functii I/O care erau disponibile si la 80C32. Modul de contorizare a timpului de catre aceste functii poate fi aleas de catre utilizator incat sa fie compatibile cu ciclul de instructiune al familiei 8051 de generatie mai veche (12 tacturi pe tic) sau cu cele din noua generatie (un tact pe tic). Modul de contorizare a timpului pentru cele 3 timere poate fi setat independent si modificat dinamic.
In majoritatea cazurilor, timerele pot fi folosite ca si numaratoare de evenimente externe sau ca timere. In functionarea ca numaratoare, tranzitiile de la 1 la 0 pe un pin al unui port sunt monitorizate si contorizate. Cand functioneaza ca timere, ele numara tacturi ale ceasului sistemului sau ale oscilatorului. Baza de timp pentru functia timerului este detaliata in paragrafele viitoare. Pentru ca un puls al ceasului la intrare trebuie esantionat 2 perioade pe 1 logic si 2 pe 0 logic pentru a fi recunoscut, astfel se obtine frecventa maxima de esantionare pentru o intrare de timer la o patrime din frecventa maxima de ceas a sistemului.
Timerele microcontrolerului de viteza ridicata au o varietate de caracteristici, insumate in urmatorul tabel:
Tabel 2.2.
Timer 0 |
Timer1 |
Timer2 |
Timer/numarator pe 13-biti (13-bit timer/counter) |
Timer/numarator pe 13-biti (13-biti timer/counter) |
Timer/numarator pe 16-biti (16-biti timer/counter) |
Timer/numarator pe 16-biti (16-biti timer/counter) |
Timer/numarator pe 16-biti (16-biti timer/counter) |
Timer/numarator pe 16-biti (16-biti timer cu captura) |
8-biti timer w/autoreload |
8-biti timer w/autoreload 1 |
6-biti autoreload timer/counter |
8-biti timer/counters |
Impuls de comanda extern timer/counter |
16 biti up/down autoreload |
Impuls de comanda extern timer/counter |
Generator de Baud-rate |
Timer/numarator (Timer/counter) |
Generator de Baud-rate |
Timerele 0 si 1 sunt aproape identice. Timerul 2 are o serie de caracteristici precum: alegerea directiei numararii, captura si un pin optional de iesire care il diferentiaza de celelalte. Urmatorul tabel contine bitii SFR care controleaza functionarea timerelor 0. Dupa tabel este descris timerul 0.
Tabel 2.3
Numele bitilor |
Descrierea |
Locatia registrilor |
Pozitia bitilor |
|
GATE |
Poarta de control activa pentru pinul INT0 |
TMOD-89h |
TMOD.3 |
|
C/T |
Counter/timer selectat |
TMOD-89h |
TMOD.2 |
|
M1,M0 |
Biti de selectie a modului timerului |
TMOD-89h |
TMOD.1,0 |
|
TIMER0 |
TF0 |
Indicatorul de depasire al timer-ului 0 (timer overflow flag) |
TCON-88h |
TCON.5 |
TR0 |
Bit de control pornire (timer run control) |
TCON-88h |
TCON.4 |
|
TOM |
Selectia frecventei de ceas |
CKCON-8Eh |
CKCON.3 |
|
TOMH |
Selectia frecventei de ceas la mare viteza |
CKMOD-96h |
CKMOD.3 |
|
Byte-ul cel mai putin semnificativ (timer LSB ) |
TL0-8Ah | |||
Byte-ul cel mai semnificativ (timer MSB) |
TH0-8Ch |
Timerele 0 si 1 au 3 moduri comune de operare: timer/counter de 13 biti, timer/counter de 16 biti si timer/counter de 13 biti cu autoreincarcare. Timerul 0 poate fi configurat ca sa functioneze ca doua timere pe 8 biti. Aceste moduri de operare, controlate de registrul TMOD sunt descrise mai jos.
Modul 0:
Modul 0 configureaza timerul 0 sau timerul 1 ca timer/counter de 13 biti. Setarea bitilor M0 si M1 = 00b alege acest mod de operare fie pentru timer 0, fie pentru timer 1.
Cand este utilizat timerul 0, TL0 foloseste doar bitii de la 0 pana la 4. Acesti biti servesc ca cei mai putin semnificativi 5 biti ai timerului de 13 biti. TH0 contine cei mai semnificativi 8 biti ai timerului de 13 biti. Bitul 4 al TL0 este folosit sa moduleze bitul 0 din TH0, astfel sarindu-se peste bitii 5 - 7 ai TL0. In momentul in care timerul este pornit prin folosirea activarii timerului TR0 (TCON,4), el numara atata timp cat GATE (TMOD,3) este 0 sau cat GATE este 1 si pinul INT0 (activ pe 0 logic) este 1. Numara tacturi ale ceasului de sistem sau oscilatorului daca C/T (TMOD,2) este setat pe 0 logic si tranzitii de la 1 la 0 pe T0 (P3,4) daca T/C este setat pe 1. Cand counterul pe 13 biti ajunge la valoarea 1FFFh, urmatoarea numarare il face sa revina la 0000h. Flagul TF0 (TCON,5) este setat si are loc o intrerupere daca acest lucru este setat. Cei mai semnificativi 3 biti ai TL0 nu au importanta.
De remarcat ca atunci cand se foloseste ca timer, alegerea ceasului de intrare poate fi afectata de bitii de divizare a ceasului de intrare (PMR, 7-6), bitul TxM (din registrul CKCON) si bitul TxMH (din registrul CKMOD).
Modul 0 este identic si pentru timerul 1. Aceeasi informatie apare si la TL1 si TH1 care formeaza registrul de 13 biti. TR1 (TCON,6), INT1 (P3,3), T1 (P3,5) si bitii importanti C/T (TMOD,6) si GATE (TMOD,7) au aceleasi functii.
Modul 1:
Modul 1 configureaza timerul pentru operare pe 16 biti atat ca contor cat si ca timer. Pentru timerul n, toti registri TLn si THn sunt folositi. De exemplu, daca timerul 1 este folosit in modul 1, atunci in TL1 se afla cel mai putin semnificativ bit iar in TH1 cel mai semnificativ. Revenirea la 0 are loc cand timerul ajunge la valoarea FFFFh. Are loc o intrerupere daca acest lucru este a fost selectat si se seteaza flagul TFn. Alegerea bazei de timp, a timer counterului si functia GATE opereaza similar modului 0.
Modul 2:
Acest mod configureaza timerul ca un timer/counter pe 8 biti cu reincarcarea automata a valorii de start. Aceasta configuratie are loc cand bitii M1 si M0 din registrul TCON sunt 1 si 0. In modul 2, TLn este folosit la numarare si THn la memorarea valorii de reincarcare. Din software trebuie initializati TLn si THn cu aceeasi valoare pentru ca prima contorizare sa fie corecta. Cand TLn ajunge la FFh este automat incarcat cu valoarea THn. Valoarea THn ramane neschimbata atata timp cat nu se modifica din software. Modul 2 este folosit de obicei la generarea de baud rate deoarece functioneaza fara interventie din partea software. Ca si modurile 0 si 1, modul 2 permite numararea atat a ciclurilor de ceas cat si a pulsurilor pe pinul Tn (C/T=1) cand contorizarea este activata de TRn si cind bitii GATE si INTn sunt setati corespunzator.
Modul 3:
Acest mod ofera un timer pe 8 biti si un al doilea timer pe 8 biti. In modul 3 TL0 este un timer pe 8 biti controlat de bitii normali ai timerului 0 (TR0 TCON.4 si TF0 TCON.5). TL0 poate fi folosit la numararea de cicluri de ceas sau a tranzitiilor de pe 1 pe 0 pe pinul T0. Ca si in celelalte moduri, GATE poate folosi INT0 ca sa ofere controlul timerului catre un semnal extern.
TH0 devine un timer independent in modul 3, cu toate acestea el nu poate numara decat cicluri de ceas. In acest mod, sunt folosite cateva din semnalele timerului 1 pentru a manipula TH0. Astfel, TR1 (TCON.6) si TF1 (TCON.7) devin bitii de control si flag asociati timerului TH0.
Semnificatia bitilor din registrul special TCON este:
Tabel 2.4
SFR88h
TR1 |
TF0 |
TR0 |
TF1 |
IE1 |
IT1 |
IE0 |
IT0 |
TF0. TF1 - indicatorul de depasire al timer-ului 0. respectiv 1. Este setat la depasire ca numarator sau teporizator si este resetat cand se apeleaza rutina de intrerupere a timerului corespunzator;
TR0, TR1-este setat sau resetat pentru a porni sau pentru a opri numaratoarele/ temporizatoarele:
IE0. IE1 - indicator de activare a intreruperii pe front;
IT0, IT1 - controlul activarii intreruperii (pe nivel IT=0, sau pe front IT=l).
Semnificatia bitilor din registrul special TMOD este:
Tabel 2.5
SFR89h
GATE |
C/T |
M1 |
M0 |
GATE |
C/T |
M1 |
M0 |
GATE - Bit de activare/dezactivare a abilitatii timerului 1 de a se incrementa.
C/T - Bit de selectie a numaratorului.Cand acesta este 0 Timer 1 este incrementat de clock-ul intern, iar cand acesta este 1 Timer 1 este incrementat de un puls din T1 cand TR1 (TCON.6) este 1.
M1,M2(4,5) - Bitii de selectie a modului de operare a timerului 1.
Tabel 2.6
M0 |
M1 |
MODUL |
Modul 0: 8 biti |
||
Modul 1: 16-biti |
||
Modul 2: 8-biti cu auto-reancarcare |
||
Modul 3: Timer 1 este oprit dar tine numaratoarea |
GATE - Bit de activare/dezactivare a abilitatii timerului 0 de a se incrementa..
C/T - Bit de selectie a numaratorului.Cand acesta este 0 Timer 0 este incrementat de clock-ul intern, iar cand acesta este 1 Timer 0 este incrementat de un puls din T0 cand TR0 (TCON.4) este 1.
M1,M0 (1,0)- Bitii de selectie a modului de operare a timerului 0.Cand Timer 0 este in modul 3, TL0 este pornit/oprit de TR0 si TH0 este pornit/oprit de TR1.
Porturile seriale de I/O
Microcontrolerul de ultra inalta frecventa este dotat cu doua porturi seriale total independente (UARTs) cu detectare a erorilor si recunoasterea automata a adreselor. Cele doua porturi pot opera simultan in modalitati diferite sau identice si viteze diferite.
Fiecare port poate opera atat sincron cat si asincron. In modul sincron microcontrolerul genereza tactul si opereaza cu portul in modul jumatate duplex. In modul asincron este valabila operarea full duplex. Datele receptionate sunt stocate intr-un registru tampon. Aceasta ii permite portului sa citeasca mai multe date decat poate procesa softul aplicatiei. Fiecarui port ii este asociat un registru de control (SCON0, SCON1) si fiecare are un registru de transmisie/receptie (SBUFO, SBUF1). Locatia SFR este SCON0, 98h; SBUF0, 99h; SCON1, C0h; SBUF1, C1h; Locatia SBUF permite accesul si la registrii receptionati si la cei transmisi. Citirea se face direct din buferul de receptie iar scrierea direct din buferul de transmisie in mod automat.
Fiecare port are patru moduri de operare. Acestea au protocoale diferite de comunicatie si rate diferite de lucru.
2.3.12.1. Moduri de operare
Modul 0:
Modul 0 presupune comunicatie sincrona cu sursele externe. Folosit uzual la comunicatiile cu periferice seriale. Transferul serial se face la pinii RXD. Schimbarea impulsului se face la pinul TXD. Impulsul este generat intotdeauna de microcontoler, care este acceptat in acest mod de fiecare port ca master. Viteza de transfer a datelor poate scadea pana la frecventa tactului.
Cand nu utilizam modul de mangement al consumului, rata de transfer in modul 0 este frecventa sistemului divizata optional cu 12 sau 4 in functie de starea pinului SM2 si registrul asociat UART. La setarea in 0 portul serial ruleaza divizat cu 12 iar la setarea 1 ruleaza divizat cu 4. Bitul SM2 este asociat portului serial 0 in registrul SCON0,5 si portului serial 1 in registrul SCONl,5. Modul de operare 0 este identic la cipul 80C32.
Modu 1:
Acest mod furnizeaza standardul full-duplex al comunicatiei asincrone. Un total de 10 biti sunt tranzmisi incluzand un bit de start ,8 biti de date ,si un bit de stop. Bitu de stop receptionat este stocat in bitul RB8 din registru SCON.
In modul 1, baud rate este o functie a overflowului timerului. Aceasta face ca baud rate sa fie programabila de utilizator. O diferenta care exista intre doua UARTs,care respecta modul 1 de configurare,este aceea ca portul serial 1 poate folosi doar timerul 1,pe cand portul serial 0 poate folosi ori timerul 1 ori 2 pentru a genera baud rates. Daca ambele porturi seriale folosesc acelasi timer , acestea functioneaza la aceelsi baud rate, sau unu poate functiona de doua ori mai repede decat celalalt (cand bitii PCON.7 si WDCON.7 sunt configurati diferiti). Daca cele doua UARTs folosesc timere diferite ,configurarea baud rate in relatie una cu alta nu sunt restrictionate. Modul 1de operare este identic cu standardul 80C32 cand timerul 1 si 2 folosesc oscilatorul implicit divizat cu 12 ca o intrare de clock .
Modul 2:
Acest mod este un mod asincron care tranzmite un total de 11 biti. Acestia includ un bit de start , 9 biti de date (acest mod este programabil), si un bit de stop. Al noulea bit este determinat pentru tranzmisie cu valoarea in TB8 (SCON0.3 sau SCON1.3). Cand al noulea bit este receptionat el este stocat in RB8 (SCON0.2 sau SCON1.2). Al noulea bit poate fi un bit de paritate prin mutarea bitului P (PSW.0) din TB8.
Cand nu folosim modul de management al puteri , baud rate pentru modul 2 este o functie doar pentru oscilatorul de frecventa. Bitu SMOD_0 baud rate pentru portul serial 0 este situat in PCON.7 si bitu SMOD_1 baud rate pentru portul serial 1 este situat in WDCON.7. Modul 2 opereaza identic cu standardul 80C32.
Modul 3:
Acest mod are aceeasi functionalitate ca si modul 2, dar genereaza baud rate ca modul 1. De aceea acest mod tranzmite 11 biti dar genereaza baud rate prin timere . Ca si modul 1 unul dintre timerele 1 sau 2 folosesc oscilatorul implicit divizat cu 12 ca intrare de clock.
Registrul de control al portului serial SCON (din registrele SFR):
Tabel 2.7
SFR98h
| |||||||
SMO |
SM1 |
SM2 |
REN |
TB8 |
RB8 |
TI |
RI |
SMO,SM1 programeaza modul de lucru al portului serial .
Tabel 2.8
SMO |
SM1 |
Mod |
Mod 0 |
||
Mod 1 |
||
Mod 2 |
||
Mod 3 |
SM2 - activeaza posibilitatea de lucru multiprocesor in modurile 2 si 3. prin transmisia bitului special 9;
REN - activare/ dezactivare receptia:
TB8 - al 9-lea bit ce se transmite in modurile 2 si 3;
RB8 - al 9-lea bit ce se receptioneaza in modurile 2 si 3;
TI - indicator de intrerupere a transmisiei;
RI - indicator de intrerupere a receptiei.
2.3.12.2 Initializarea portului serial
Pentru a folosi functia UARTs portul serial trebuie sa fie initializat. Aceasta operatie consta in selectarea modului si bazei de timp, urmata de initializarea ratei de transfer, daca este nevoie. Porturile seriale devin active. Din moment ce rata de transfer a fost setata UART poate receptiona date. In modul 0 microconntrolerul genereaza frecventa de tact. Receptia seriala este initializata la setarea bitului RI in 0 si RET in 1. Impulsul de tact este transmis la pinul TXD si se schimba starea celor 8 biti de intrare. Setarea bitului REN in 1 permite receptia seriala dar echipamentul extern asteapta bitul de start. In orice mod initializarea transmisiei seriale se face prin inscriptionarea locatiilor SBUFO sau SBUF1.Controlul portului serial se face cu registrii SCON0 si SCON1.
Incarcarea programului
Microcontrolerul de ultra inalta viteza intra in operare normala(nu incarca) fara interventie hard din exterior. Modul de incarcare ROM poate fi folosit in orice moment. Odata ce programarea a fost finalizata, sistemul incepe initializarea prin resetare si incepe derularea programului. Operatia este identica cu o resetare exterioara, exceptand faptul ca pe parcursul incarcarii ROM-ul poate modifica locatii din scratchpad-ul ROM-ului in ordinea executiei. Zonele garantate in RAM-ul scratchpad sunt zone care nu se modifica la incarcarea programului din ROM. Zonele nedeterminate contin nivele de variabile si bufere utilizate de incarcator, bitii putand suferi modificari pana la terminarea incarcarii programului.Utilizatorul nu poate retine nici un fel de date in aceasta zona. Deasemenea la incarcare bitul EWT din (WDCON1) este sters pentru a preveni o resetare interna din partea watchdog-ului.
2.3.13.1 Intrarea in modul de programare ROM
Inceperea modului de programare ROM se face prin aplicarea simultana a starii logice 1 la bitul RST, 0 la pinul EA si aducerea pinului PSEN in 0 logic. Cand se intra in regimul de incarcare ROM sistemul astapta o comanda <CR> la portul serial 0 si o rata de schimb trebuie sa fie activata la acest port. Activitatea la portul 1 este ignorata la acest moment. Dupa detectarea ratei de transmisie ROM-ul transmite un semnal de instalare a modului de incarcare. Sistemul asteapta acum urmatoarea comanda.
2.3.13.2 Iesirea din incarcare
Pentru a iesi din modul de incarcare ROM, in primul rand este necesara receptionarea semnalului PSEN urmata de trecerea pinului RST la nivel minim. Pinul RST este adus fortat la nivel jos. Semnalul PSEN este o iesire care se seteaza singura la nivel ridicat. Procesorul porneste o resetare hard din locatia 0000h. Ambele conditii trebuie sa se realizeze altfel incarcarea a esuat.
2.3.13.3 Operatia de incarcare a programului la portul serial
Incarcarea pe la un port serial este o operatie frecventa folosita pentru incarcare memoriilor flash sau a celor externe. Incarcarea se face respectand procedura de comunicatii a portului in regim asincron fosind un program cu terminatia 8-N-l( 8 biti de date, fara paritate, 1 bit de stop). In mod uzual se foloseste o interfata de programare tip RS 232.
Sistemul se configureaza pentru incarcare de program serial conform diagramei din
fig-2.8.
Fig. 2.8. Schema de interconectare
2.3.13.4 Detectarea automata a ratei de transfer
Programul ROM poate detecta automat rata externa de transfer, configurandu-se pentru aceasta rata. Incarcarea se face dupa verificarea portului 0 in modul 1 (asincron, 1 bit start, 8 biti de date, fara paritate, 1 bit de stop, full duplex), folosind temporizarea 1 autoincarcare pe 8 biti pe portul 0 bitul PCON7 setat. Pentru aceste setari este posibila stabilirea unei ecuatii din care sa rezulte rata de transfer
Comanda linie sintaxe:
Numai caracterele scrierii ASCII sunt recunoscute ca comenzi pentru incarcatorul de programe. Ca argumente sunt reprezentarile in hexazecimal ale numerelor. Un numar hexazecimal este orice combinatie de caractere hexazecimale. Un caracter hexazecimal poate fi un digit: 0 la 9 sau o litera A la F. O adresa este compusa in general din patru digiti, combinatie de numere si litere.
Comenzile C, CX, D, DX permit intrarea anumitor adrese. Sintaxa (inceput de adresa, sfarsit de adresa) este utilizata pentru:
Fara argumente: inceput adresa 0 si sfarsit adresa setare pe rang.
Un argument: inceput adresa setat pe argument si sfarsit adresa setat pe rang.
Doua argumente:inceput adresa setat pe primul argument si sfarsit adresa setat pe al doilea argument. A doua adresa nu trebuie sa coincida cu valoarea specifica a rangului.
La cazul intai si trei poate apare un mesaj de eroare cand sfarsitul adresei este mai mic decat inceputul adresei. Mesajul de eroare se transmite imediat ce a fost detectata eroarea. Toate mesajele sunt urmate de doua caractere E: urmate de o descriere .
O alta comanda nu este procesata daca nu este inscrisa ca linie completa avand la inceput si sfarsit <CR>. Nici o linie de comanda nu are voie sa depaseasca 17 biti. In editare se poate folosi comanda <delete>. Orice linie mai mare de 17 biti determina aparitia mesajului de eroare.
Numai anumite caractere sunt acceptate de consola de incarcare. Acestea sunt:
0123456789, <:>, <space>, ABCDEFGHIJKLMNOPRSTUVWXZY., si <DELETE> Caracterul <DELETE> este executat ca <BS> < SPACE> < BS> iar <CR> ca <CR>< LF>.
Sistemul ISP-1000 este comandat de catre procesorul incorporat cu ajutorul unor semnale de comanda menite sa gestioneze datele existente pe porturile de intrare/iesire, cat si comunicatia seriala, accesul la memoria externa, display-ul LCD, matricea de led-uri, tastatura.
Microcontroller-ul DS89C420 trebuie sa fie inglobat in sistem intr-un mod in care sa poata efectua urmatoarele operatii:
Semnalele generate de procesor sunt expuse in figura urmatoare:
Fig. 2.9 Semnalele de comanda generate de procesor.
Porturile P0 si P1 ale microcontroller-ului sunt destinate semnalelor de adresare a memoriei externe si a registrilor de iesire pentru variabilele gestionate de porturile PA, PB si PC. Cu ajutorul celor 14 linii AD0÷AD14 se poate adresa o zona de memorie de maximum 32 de Kbytes. De asemenea pentru citirea si scrierea datelor se folosesc si semnalele RD si WR, semnale ce sunt active pe nivelul 0 logic.
Semnalul SEL este folosit pentru activarea sau inhibarea accesului la memoria externa sau a multiplexorului ce gestioneaza porturile de iesire.
Semnalele RX si TX sunt necesare pentru receptia, respectiv transmisia, caracterelor ASCII pe interfata seriala RS-232 sau RS-458, acest lucru fiind dependent de modul de configurare a comunicatiei in interiorul procesorului.
Semnalele SCL si SDA sunt foarte importante pentru functionarea sistemului de control, deoarece numai prin aceste doua semnale se poate citi sau scrie portul de intrare/iesire de 12 biti, cat si convertorul digital/analogic PCF8591. Pentru a efectua aceste operatii este nevoie de implementarea software a unui protocol de comunicatie serial care sa acceseze registrii de I/O ale circuitelor PCF8574, respectiv PCF8591, protocol ce va fi discutat intr-un capitol urmator.
RST este destinat resetarii microcontroller-ului la starea sa initiala. Este folosit la repornirea manuala a programului de control atunci cand a intervenit o eroare.
Semnalul 374EN, activ pe nivelul 0 logic, este folosit, impreuna cu semnalele de control generate de multiplexorul existent in sistem, pentru a selecta diferiti registrii de tip 74HC374 necesari trimiterii datelor pe porturile PA, PB si PC.
INT0 si INT1 sunt semnalele de intrerupere venite din exterior.
Semnalele RTCSCL si RTCSDA sunt folosite la acesarea datei calendaristice si timpului real generate de circuitul DS1307.
SOUND genereaza un semnal sonor la activarea sa.
LOWBATT este activ atunci cand bateria este descarcata.
X1 si X2 sunt semnalele venite de la generatorul de frecventa realizat dintr-un cristal de quartz de 11,0592 MHz si doua condensatoare avand valoarea de 10pF.
Header-ul ce descrie in limbajul de programare C aceste semnale, astfel ele putand fi folosite la implementarea programelor ce vor gestiona sistemul, este prezentat in Anexa 3:
Prin listing-ul prezentat in anexa 3 se pot accesa, intr-un mediu de programare bazat pe limbajul C, bitii microcontroller-ului ce ii genereaza, urmand a fi utilizati in construirea functiilor de gestionare a nucleul sistemului.
Pentru accesarea datelor de intrare/iesire, se folosesc doua metode:
Pentru iesire se foloseste un port pe 24 de biti format din PA, PB si PC;
Pentru intrari se foloseste un port pe 12 biti implementat prin doua circuite PCF8574. Acest port poate fi folosit si ca port de iesire.
Portul de iesire pe 24 de biti
Transmiterea datelor pe acest port se face cu ajutorul liniilor de adrese AD0÷AD7 semnalelor de tact provenite de la multiplexor si cu semnalul de activare /374EN. Schema portului este prezentata in figura urmatoare:
Fig. 2.10. Portul de iesire pe 24 de biti.
Fiecare din porturile PA, PB si PC sunt implementate prin registrii de tipul 74HC374. Semnalul 374EN este folosit la activarea, respectiv inhibarea, iesirilor registrilor. Pe frontul crescator al semnalelor /CS3, /CS4 si /CS5 datele existente pe liniile de adrese AD0÷AD7 sunt transferate in registrele 74HC374.
Structura de selectie a tactelor CS3, CS4 si CS5 este prezentata in figura urmatoare:
Fig. 2.11. Multiplexarea liniilor de adrese.
Liniile de adrese A12, A13 si A14 sunt folosite ca semnale de selectie pentru demultiplexorul de 8 biti 74138. De asemenea sunt folosite si semnalele RD si WR pentru activarea/inhibarea demultiplexorului.
Se folosesc urmatoarele functii pentru scrierea datelor in registrii 74HC374:
void clock(void)
// selectie PORTA
void select_port_a(void)
// selectie PORTB
void select_port_b(void)
// selectie PORTC
void select_port_c(void)
void set_pa0(void)
void reset_pa0(void)
Prin procesele de setare si resetare descrise mai sus se pot transfera foarte usor datele catre registrii de iesire ai sistemului, dupa care liniile de adresare pot fi folosite pentru alte functii.
Portul de intrare iesire pe 12 biti
Schema electronica a portului de intrare iesire pe 12 biti este prezentata in figura 5.
Fig. 2.12. Cuplarea circuitelor PCF8574 la microcontroller.
Pentru a putea achizitiona date trebuie implementat un protocol serial de acces la circuitele PCF8574.
PCF8574 este un circuit integrat CMOS destinat extinderii liniilor de I/O in sistemele bazate pe microcontrollere cu ajutorul a doua linii de control bidirectionale (-bus). Dispozitivul contine 8 linii bidirectionale si o interfata . El detine, de asemenea, o linie de intrerupere ce poate fi conectata la semnalul de intrerupere al microcontroller-ului. Trimitand un semnal pe aceasta linie circuitul anunta procesorul de aparitia unor noi date la intrarea sa. Astfel, circuitul PCF8574 poate fi descris ca un dispozitiv slave atasat unui microcontroller. Schema bloc a circuitului este prezentata in figura 2.13.
Fig. 2.13. Schema bloc a circuitului PCF8574.
Interfata este implementata prin 2 linii bidirectionale de comunicatie. Cele doua linii sunt:
linia de date SDA;
linia semnalului de tact SCL.
Transferul datelor poate fi efectuat numai atunci cand magistrala este libera. Un singur bit de date este transferat in timpul unui semnal de tact. Linia SDA trebuie sa fie stabila pe durata frontului crescator al semnalului SCL, deoarece daca SDA variaza circuitul poate interpreta schimbarea nivelului de tensiune ca pe un semnal de control. Datele de pe linia SDA trebuie sa arate ca in figura 2.14:
Fig. 2.14. Transferul datelor pe interfata -bus
Functiile C pentru controlul celor doua nivele de tensiune a semnalelor SDA si SCL sunt:
void i2c_high_sda(void)
void i2c_low_sda(void)
void i2c_high_scl(void)
void i2c_low_scl(void)
Transferul datelor prin cele doua linii seriale necesita existenta unor conditii de START si de STOP pentru diferentierea semnalelor de I/O de cele de control. Conditia de START este realizata printr-o tranzitie din nivelul 1 logic la nivelul 0 logic a liniei SDA in timp ce linia SCL este pe nivelul 1 logic. Similar conditia de STOP este indeplinita printr-o tranzitie din 0 in 1 logic a liniei SDA cand SCL este 1. Aceste conditii sunt reprezentate in figura 2.15.
Fig. 2.15. Conditiile de START si de STOP.
Functiile necesare generarii acestor semnale sunt:
void i2c_start(void)
void i2c_stop(void)
Numarul de biti transferati intre doua conditii START si STOP nu sunt limitati. Cu toate acestea la receptia unui octet de date trebuie emis de catre dispozitivul master (microcontroller-ul) un semnal de receptie a datelor (ACK). In caz ca nu este transmis acest semnal nu vor mai fi emise alte date. Bitul ACK este un semnal 1 logic pus pe linia de date SDA in timpul unui semnal de tact ce urmeaza celor 8 biti receptionati. Diagrama de semnale este prezentata in figura 2.16:
Fig. 2.16. Semnalul ACK pe o interfata -bus
Cele doua functii ce implementeaza receptia sau lipsa receptiei semnalului ACK sunt urmatoarele:
void i2c_nack(void)Intr-un sistem complex cu microcontroller pot exista mai multe circuite de tip PCF8574. Un procesor poate accesa maxim 8 astfel de circuite, ele fiind adresate prin cele 3 linii A0, A1 si A2 ce sunt setate de utilizator la construirea sistemului de control.
Inaintea transferului de date intre dispozitivul master si dispozitivele slave, master-ul trebuie se selecteze circuitul ce va fi accesat. Acest lucru se face trimitand pe linia de date SDA un octet ce contine adresa dispozitivului cat si operatia ce urmeaza sa fie efectuata (citire sau scriere). Structura unui astfel de octet este prezentata in figura 10:
Fig. 10. Adresarea unui circuit PCF8574A.
Bitul RW specifica operatia ce va fi efectuata: citire sau scriere.
Adresele celor doua circuite PCF8574 din sistem sunt definite astfel:
unsigned char PCF0_W = 0x70; // scriere
unsigned char PCF0_R = 0x71; // citire
unsigned char PCF1_W = 0x72; // scriere
unsigned char PCF1_R = 0x73; // citire
Scrierea datelor se va face utilizandu-se urmatoarele doua functii:
void i2c_write (unsigned char output_data)
index = SDA;
i2c_high_scl();
i2c_low_scl();
Citirea datelor de pe aceste dispozitive se face similar, utilizandu-se de asemenea doua functii C:
unsigned char read_pcf8574(unsigned char addr)
unsigned char i2c_read (void)
return input_data; }
Datorita vitezei mari de lucru a microcontroller-ului trebuiesc create intarzieri necesare propagarii semnalelor SDA si SCL:
void delay_10us(unsigned int t)
while(t > 0);
Sistemul ISP-1000 este echipat cu o memorie externa RAM de 8 Kbytes, adresabila cu ajutorul liniilor A0÷A14 (porturile P0 si P1 ale microcontroller-ului), ce poate fi folosita pentru stocarea variabilelor in timpul functionarii programului aplicatie. Schema bloc a interfetei este prezentata in figura 2.18.
Fig. 2.18. Interfata cu memoria externa.
Spatiul de adresare al memoriei externe este cuprins intre 0x0000 si 0x3FFF.
|