Microcontroler
Microcontrolere contra Microprocesoare
Microcontrolerul diferă de un microprocesor în multe feluri. În primul rând
şi cel mai important este funcţionalitatea sa. Pentru a putea fi folosit, unui
microprocesor trebuie să i se adauge alte componente ca memorie, sau componente
pentru primirea şi trimiterea de date. Pe scurt, aceasta înseamnă că
microprocesorul este inima calculatorului. Pe de altă parte, microcontrolerul este
proiectat să fie toate acestea într-unul singur. Nu sunt necesare alte componente
externe pentru aplicarea sa pentru că toate perifericele necesare sunt deja incluse în
el. Astfel economisim timpul şi spaţiul necesare pentru construirea de aparate.
Ce este un microcontroler?
Un microcontroler este un "calculator pe un cip" Micro sugerează
mărimea redusă a dispozitivului iar “controler” ne spune ca dispozitivul
poate fi folosit pentru a controla obiecte, procese, sau evenimente.
Microcontrolerele pot fi găsite în componenta oricărui tip de aparate.
Orice aparat care măsoară, stochează, comanda, calculează sau afişează
informaţii este o potenţială gazdă pentru un microcontroler. De exemplu
orice automobil fabricat astăzi este echipat cu cel puţin un microcontroler care
comanda motorul maşinii şi adesea chiar cu mai multe pentru comanda
sistemelor adiţionale din automobil. În calculatoarele de birou (PC)
se pot găsii microcontrolere în tastatura, modemuri, imprimante şi alte
periferice. In echipamentele de testare fac posibila adăugarea unor facilităţi
ca de exemplu memorarea rezultatelor măsurării, afişarea mesajelor şi
formelor de unda. Produsele de larg consum care includ microcontrolere sunt
camerele video, video recorderele, compact-disk playere, şi altele.
Un microcontroler este similar unui microprocesor. Ambele conţin o
unitate centrala de prelucrare sau CPU (central processing unit). CPU
executa instrucţiuni care îndeplinesc operaţiile de baza logice, matematice, şi
de mişcare (rotire) a informaţiei.
Pentru a construi un calculator complet microprocesorul necesita memorie
pentru păstrarea datelor şi programelor şi interfeţe de intrare ieşire (I/O)
pentru conectarea dispozitivelor externe cum ar fi tastatura şi monitorul.
Spre diferenţă de microprocesor, microcontrolerul este un calculator pe un
cip deoarece el conţine şi memorie şi interfeţe de intrare ieşire pe lângă
CPU. Deoarece mărimea memoriei şi interfeţele care încap pe un cip sunt
limitate, microcontrolerele tind sa fie utilizate în sisteme mai mici care necesita
doar un microcontroler şi câteva elemente adiţionale. Celor mai populare
microcontrolere sunt 8051 produsa prima data de firma Intel şi 68HC11 a
firmei Motorola.
Scrierea programului
Există mai multe opţiuni pentru scrierea programului de control a
1
aplicaţiei şi anume cod maşina, limbaj de asamblare, sau limbaje de nivel
înalt, în funcţie de viteza de execuţie dorita lungimea programului buget
disponibil etc.
Forma de program fundamentală este codul maşină, adică instrucţiuni
binare care determina CPU să execute operaţiile dorite de utilizator.
Limbajul de asamblare. Un pas în faţă de la limbajul în cod
maşina este limbajul de asamblare care utilizează abreviaţiile numite
mnemonici. Mnemonicile sunt mai uşor de reţinut decât codul maşina pe care
îl înlocuiesc. De exemplu CLR C înseamnă şterge bitul de transport şi este mai
uşor de memorat decât codul binar 11000011. Deoarece codul maşina este
limbajul pe care CPU îl înţelege este nevoie de o cale de a traduce din
limbaj de asamblare în cod maşina. Pentru programe scurte se poate face
manual. O alta opţiune este folosirea unui asamblor care este un soft ce
rulează pe calculatorul de birou şi traduce mnemonicile în cod maşina.
Limbaje de nivel înalt. Un dezavantaj al limbajului de asamblare este
faptul ca fiecare dispozitiv are setul lui de mnemonici deci utilizatorul
trebuie sa înveţe un nou set de mnemonici pentru fiecare familie cu care
lucrează. Pentru a evita aceasta problema limbajele de nivel înalt ca C,
Pasca, Fortran, Forth, şi BASIC urmează o sintaxa standard deci
programele scrise pentru un dispozitiv pot fi trecute pe un altul. Ideea
este că făcând schimbări minore se poate utiliza un limbaj ca BASIC pentru a
scrie programe pentru diferite dispozitive. In realitate fiecare limbaj tinde sa
dezvolte multe dialecte diferite în funcţie de cip şi de preferinţele celui care
creează limbajul, deci trecerea unui program de la un dispozitiv la altul nu este
întotdeauna lipsita de efort. Dar exista multe asemănări între dialectele aceleaşi
limbi deci un dialect nou este mai uşor de învăţat ca un limbaj nou. Limbajele
de nivel înalt de asemenea simplifica programarea permiţând scrierea intr-un
rând sau în câteva rânduri a ceea ce ar necesita multe linii în de program limbaj
de asamblare.
Familia de microcontrolere 8051
La baza familiei 8051 stă microcontrolerul 8051 introdus de firma Intel
Corporation în 1980. De atunci microcontrolerele familiei 8051 au fost folosite
ca element de baza a mii de produse. Multe alte companii printre care
Philips, Siemens, Dallas Semiconductors, OKI, Fujitsu si Harris-Matra produc
acum componentele familiei 8051. Unele companii au extins aria de
componente a familiei 8051 adăugând componente cu însuşiri suplimentare.
2
Tabelul 1
80C51, 80C52, 80C31, şi aşa mai departe sunt variantele CMOS a celor de
mai sus.
80C51FA/B/C au timere mai versatile şi canale seriale dezvoltate.
8052-BASIC are limbajul BASIC-52 în ROM.
Capsulele sunt DIP de 40 pini, 40-lead PLCC, şi QFP 44 pini.
Tabelul 1 prezintă diferenţele dintre componentele familiei 8051. De
exemplu 8052 este un 8051 mai dezvoltat cu un extra timer şi cu mai mult ROM
şi RAM. Microcontrolerele 8031 si 8032 sunt identice cu 8051 şi 8052 exceptând
faptul ca aria de ROM este neutilizată şi programul trebuie păstrat într-o
memorie externă EPROM sau de alt tip. De asemenea MCU sunt disponibile in
varianta NMOS şi CMOS.
Figura 7. Configuraţia pinilor pentru 8051 în capsulă DIP
3
Elementele principale ale microcontrolerului 8051.
Microcontrolerul 8051 este un circuit integrat MOS care cuprinde în
structura sa, figura 2 componentele tipice ale unui sistem cu microprocesor:
- unitate aritmetică şi logică, UAL, de 8 biţi, care poate executa
operaţii de adunare, scădere, înmulţire, împărţire, incrementare,
decrementare, ŞI, SAU, SAU-EXCLUSIV, completare şi rotire;
- memorie de program de tip ROM, 4 Kocteţi;
- memorie de date de tip RAM, 128 octeţi;
- patru porturi paralele de intrare/ieşire P0 – P3 de câte 8 biţi;
- un port serial duplex;
- două circuite numărătoare/temporizatoare N/T0, N/T1 de câte 16 biţi;
- logică de control întreruperi cu cinci surse;
- generator de tact, 12 MHz.
Microcontrolerul 8051 are posibilitatea de adresare a unei memorii externe
de program şi a unei memorii externe de date, ambele având capacitatea maximă
de 64 Kocteţi.
Adresarea memoriilor externe se realizează prin amplificatoarele de
magistrală ale porturilor P0 şi P2, iar transferul datelor prin amplificatorul de
magistrală al portului P0. Portul P3 poate fi programat astfel încât liniile
amplificatorului de magistrală al portului P3 să poată fi utilizate pentru:
comunicaţie serială RXD, TXD; cereri de întrerupere externe /INTO, /INT1;
intrări de numărare T0,T1; ieşiri de control /WR şi /RD.
Figura 8
CPU sau Central Processing Unit, (UCP sau unitatea centrală de
prelucrare), execută instrucţiunile programului. Tipurile de instrucţiuni sunt:
aritmetice (adunare, scădere), logice (SI, SAU, NU), transfer de date (move) şi
salturi în program (program branching). Un cristal extern furnizează o referinţă
4
de timp pentru ceasul CPU.
Memoria
Microcontrolerul 8051 are următoarele tipuri de memorie: memoria
internă (On-Chip Memory), memoria externă de program (External Code
Memory) şi memoria externă de date (External RAM), cum se vede în figura 9.
Figura 9
Memoria internă (On-Chip Memory) reprezintă totalitatea memoriilor
care există în mod fizic pe cipul microcontrolerului şi ea poate fi de mai multe
feluri: memorie de program (code), memorie de date (RAM), şi registre cu
funcţii speciale (SFR).
Memoria externa de program (External Code Memory) este
memoria de program care se găseşte in afara cipului şi ea este de obicei de tip
EPROM.
Memoria de date externă (External RAM) este memoria RAM
externă de date şi poate fi un RAM static obişnuit sau un flash RAM.
Deoarece memoria este plasată în afara cipului, nu este atât de flexibilă din
punct de vedere al accesibilităţii şi de asemenea este mai lentă. De exemplu
pentru incrementarea cu unu a locaţiei de memorie, o memorie internă
necesită o instrucţie şi un ciclu de instrucţie, în timp ce o memorie externă
necesită 4 instrucţii şi 7 cicluri de instrucţie deci este de 7 ori mai lentă. Dar ceea
ce memoria RAM externă pierde în viteză şi flexibilitate câştigă în mărime. În
timp ce o memorie RAM internă este limitată la 128 bytes (256 pentru 8052) cea
externă poate fi până la 64K.
Porturi de intrare/ieşire (I/E sau I/O) permit scrierea sau citirea în memoriile
externe şi alte componente. 8051 are patru porturi I/E de câte 8 biţi (P0-P3).
După cum le spune şi numele porturile pot fi citite şi se poate scrie în ele.
Mulţi dintre biţii porturilor au funcţii opţionale alternative legate de accesarea
memoriei externe, utilizarea blocului timer/counter de pe cip, determinarea
întreruperilor externe, şi controlul comunicaţiei seriale.
Temporizatoare şi numărătoare. Microcontrolerul 8051 are
5
două numărătoare/temporizatoare de 16 biţi iar 8052 trei, care permit
generarea uşoară a unor semnale periodice sau numărarea (contorizarea)
tranziţiilor unui semnal.
Timerul 0 comandă un ceas de timp real care se incrementează la fiecare
5 milisecunde. Se poate folosi acest ceas pentru a măsura evenimente sau ca
bază pentru un ceas sau calendar. Timerul 1 are multiple întrebuinţări în
BASIC-52 printre care controlul unei ieşiri PWM (pulse width modulation),
scrierea la o imprimantă serie sau alte periferice seriale(LPT ?) şi generarea de
impulsuri pentru programarea EPROM-ului (/PGM PULSE). Timerul 2
foloseşte la comunicaţia seriala.
Dacă nu se utilizează funcţiile opţionale ale timerelor ele se pot programa pentru
alte aplicaţii.
În completare la funcţiile de temporizare la care timerele
incrementează la momente date (predefinite) se pot utiliza si pentru
măsurarea duratei evenimentelor când timerul incrementează la un semnal
extern de declanşare şi măsurarea timpului dintre semnalele de declanşare.
Dacă se folosesc timerele pentru măsurarea duratei evenimentelor, T2,
T2(EX), T0 şi T1 detectează tranziţiile care trebuiesc măsurate.
Portul serial. Portul serial se ocupă de multe din detaliile ale comunicaţiei serie.
Pe partea de transmisie portul serial transformă octeţii pentru a fi transmişi in
mod serie adăugând biţii de start şi stop şi scriind datele într-o secvenţă
6
(timed sequence) la SER OUT. Pe partea de recepţie portul de recepţie
acceptă date serie la intrarea SER IN şi setează un flag pentru a indica că un
octet a fost recepţionat.
Întreruperi externe. /INT0 şi /INT1 sunt intrări de întreruperi externe, care
detectează nivele logice sau tranziţii care întrerup CPU şi provoacă saltul la o
locaţie de program prestabilită. BASIC-52 foloseşte /INT0 pentru funcţia lui
opţională de acces direct la memorie (DMA). Intrări de control suplimentare.
Trebuiesc menţionate două intrări de control suplimentare: RESET a cărei stare
unu logic determina resetarea cipului şi începerea execuţiei programului de la 0
în memoria de program. /EA (external memory access) determină care dintre cele
două memorii de program cea internă sau cea externă va fi accesată.
Conexiunile de alimentare. Există doi pini de alimentare unul la +5 volţi
(VCC) şi altul la masă (VSS).
Figura 10. Structura detailată a microcontrolerului 8051
Organizarea memoriei
Familia de microcontrolere 8051 are spaţii de adresă diferite pentru
memoria de date şi de program, aşa cum se poate vedea şi din figurile 5 şi 7.
Figura 11. Organizarea memoriei
Separarea logică a memoriei
de date şi de program permite accesarea
memoriei de date cu adrese de 8 biţi, care pot fi uşor păstrate şi manipulate de
un CPU de 8 biţi, dar există şi posibilitatea generării de adrese de 16 biţi prin
intermediul registrului DPTR.
Pentru a înţelege modul de operare a semnalelor de control este important
de ştiut câte ceva despre modul cum 8051 face distincţia dintre cele două tipuri
de memorie: de date şi de program. Folosind semnale de control diferite
pentru fiecare tip de memorie 8051 poate accesa doua arii de memorie
separate de câte 64K, fiecare cu adresa de la 0000h la FFFFh şi fiecare utilizând
aceleaşi linii de date şi de adrese.
8051 accesează memoria de program când execută un program în limbaj
asamblor sau o subrutină. Memoria de program este de tipul numai citire.
Singurele instrucţiuni care accesează memoria de program sunt cele de citire.
Memoria de program este destinată pentru programe sau subrutine care au
fost în prealabil programate în ROM sau EPROM. 8051 foloseşte semnalul
/PSEN când accesează memoria de cod (program) externă. Accesarea
memoriei de program interne nu utilizează semnalul /PSEN sau alt semnal de
control extern.
Memoria de date este de tipul citire/scriere, de obicei RAM. Instrucţiunile
care citesc memoria folosesc /RD iar instrucţiunile care scriu date în memorie
folosesc /WR. Termenul memorie de date poate fi înţeles greşit deoarece ea
poate să păstreze orice informaţie care este accesată cu instrucţiuni care folosesc
/RD sau /WR.
Memoria de program (Code memory) este memoria care păstrează
programul care trebuie executat. Această memorie este limitată la 64K şi este de
diferite tipuri şi mărimi:
- Memorie de program internă sau on-chip care poate fi ROM sau
EPROM,
- Memorie de program externă sau off-chip, tot de tipul ROM sau mai
des EPROM, eventual flash RAM.
Există multe combinaţii ale acestor tipuri de memorie de exemplu o
combinaţie posibilă este de a avea o memorie de program internă de 4K şi o
memorie de program externă de 64K.
Când programul este păstrat în memoria internă capacitatea maximă
de 64K este redusă de obicei la 4k, 8k sau 16k în funcţie de cipul folosit. De
obicei memoria de program este implementată ca o memorie externă de
tipul EPROM mai ales în cazul sistemelor de dezvoltare de cost scăzut.
Figura 12 prezintă harta adreselor inferioare a memoriei de program.