Documente Academic
Documente Profesional
Documente Cultură
Microprocesoare i microcontrolere
Cuprins
CAPITOLUL 1..........................................................................................................................................................1
INTRODUCERE.......................................................................................................................................................1
Evoluia microprocesoarelor.....................................................................................................................................1
Microcontrolere vs microprocesoare.........................................................................................................................3
1.1 Unitatea de memorie...........................................................................................................................................3
1.2 Unitatea de procesare central............................................................................................................................4
1.3 Bus-ul..................................................................................................................................................................5
1.4 Unitatea intrare-ieire..........................................................................................................................................6
1.5 Comunicaia serial.............................................................................................................................................6
1.6 Unitatea timer......................................................................................................................................................7
1.7 Watchdog-ul........................................................................................................................................................8
1.8 Convertorul Analog-Digital................................................................................................................................8
1.9 Programul..........................................................................................................................................................10
CAPITOLUL 2........................................................................................................................................................13
MICROCONTROLERUL PIC16F84.....................................................................................................................13
2.1 Introducere........................................................................................................................................................13
2.2 CISC, RISC.......................................................................................................................................................14
2.3 Aplicaii ale microcontrolerului........................................................................................................................15
2.4 Generator de ceas oscilator............................................................................................................................18
2.5 Reset-ul.............................................................................................................................................................20
2.6 Unitatea de Procesare Central.........................................................................................................................22
2.7 Porturi................................................................................................................................................................28
2.5 Organizarea memoriei.......................................................................................................................................30
2.6 ntreruperi..........................................................................................................................................................35
2.8 Memoria de date EEPROM..............................................................................................................................40
CAPITOLUL 3........................................................................................................................................................41
PROGRAMARE N LIMBAJ DE ASAMBLARE................................................................................................41
ROMNU IONU CRISTIAN
3.1 Introducere........................................................................................................................................................41
3.2 Limbaj de Asamblare........................................................................................................................................42
3.3 Instruciuni........................................................................................................................................................43
UNIVERSITATEA SUCEAVA
CAPITOLUL 4........................................................................................................................................................55
PROGRAMUL MPLAB.........................................................................................................................................55
F.I.M.M.M.
4.1 Introducere........................................................................................................................................................55
4.2 Instalarea programului -MPLAB......................................................................................................................55
4.3 Alegerea modului2014-2015
de dezvoltare........................................................................................................................62
4.4 Conceperea unui proiect....................................................................................................................................63
4.5 Conceperea unui nou fiier asamblor(scrierea un program nou)......................................................................66
4.6 Scrierea unui program.......................................................................................................................................68
4.7 Simulatorul MPSIM..........................................................................................................................................69
4.8 Toolbar..............................................................................................................................................................71
CAPITOLUL 5........................................................................................................................................................75
APLICAII.............................................................................................................................................................75
5.1 Introducere........................................................................................................................................................75
5.2 Alimentarea microcontrolerului........................................................................................................................75
5.3 Tastatura............................................................................................................................................................78
5.4 Optocuplor.........................................................................................................................................................82
Rezumat:
5.5 Generarea sunetelor..........................................................................................................................................86
n acesta lucrare se prezinta o serie de elemente
5.6 Regitrii de deplasare........................................................................................................................................90
introductive necesare pregatirii teoretice a studentilor
5.7 Afiaj cu 7 segmente (multiplexare).................................................................................................................97
5.8 Afiaj LCD......................................................................................................................................................101
de la specializarea Mecatronica si Robotica, precum
5.9 Convertor analog digital de 12 bii...............................................................................................................110
si a tinerilor ingineri. Lucrarea este o sinteza a
5.10 Comunicaia serial.......................................................................................................................................115
MICROPROCESOARE I
MICROPROCESOARE I
MICROCONTROLERE
(Curs)
Microprocesoare i microcontrolere
Microprocesoare i microcontrolere
CAPITOLUL 1
INTRODUCERE
Evoluia microprocesoarelor
Domeniul microcontrolerelor i-au avut nceputurile n dezvoltarea tehnologiei circuitelor integrate.
Aceast dezvoltare a fcut posibil nmagazinarea a sute de mii de tranzistoare ntr-un singur cip. Aceasta a fost
o premiz pentru producia de microprocesoare, i primele calculatoare au fost fcute prin adugarea
perifericelor ca memorie, linii intrare-ieire, timer-i i altele. Urmtoarea cretere a volumului capsulei a dus la
crearea circuitelor integrate. Aceste circuite integrate conin att procesorul ct i perifericele. Aa s-a ntmplat
cum primul cip coninnd un microcalculator, sau ce va deveni cunoscut mai trziu ca microcontroler a luat
fiin.
In anul 1969 o echip de ingineri japonezi de la compania BUSICOM sosesc n Statele Unite cu cererea
ca unele circuite integrate pentru calculatoare s fie fcute folosind proiectele lor. Propunerea a fost fcut ctre
INTEL, iar Marcian Hoff a fost desemnat responsabil cu acest proiect. Pentru c el era cel ce avea experien n
lucrul cu un calculator (PC) PDP8, i-a venit s sugereze o soluie diferit fundamental n locul construciei
propuse. Aceast soluie presupunea c funcionarea circuitului integrat este determinat de un program memorat
n el. Aceasta a nsemnat c configuraia ar fi fost mult mai simpl, dar aceasta ar fi cerut mult mai mult
memorie dect ar fi cerut proiectul propus de inginerii japonezi. Dup un timp, cu toate c inginerii japonezi au
ncercat s caute o soluie mai simpl, ideea lui Marcian a ctigat, i a luat natere primul microprocesor. n
transformarea unei idei ntr-un produs finit, Frederico Faggin a fost de un ajutor major pentru INTEL. El s-a
transferat la INTEL, i doar n 9 luni a reuit s scoat un produs din prima sa concepie. INTEL a obinut
drepturile de a vinde acest bloc integral n 1971. n primul rnd ei au cumprat licena de la compania
BUSICOM care nu au avut idee ce comoar avuseser. n timpul acelui an a aprut pe pia un microprocesor
numit 4004. Acela a fost primul microprocesor de 4 bii cu vitez 6000 operaii pe secund. Nu mult dup aceea,
compania american CTC a cerut de la INTEL i de la Texas Instruments s fac un microprocesor pe 8 bii
pentru folosin n terminale. Cu toate c CTC a renunat la aceast idee pn la sfrit, INTEL i Texas
Instruments au continuat s lucreze la microprocesor i n aprilie 1972 a aprut pe pia primul microprocesor de
8 bii sub numele de 8008. Putea s adreseze 16Kb de memorie i avea 45 de instruciuni i viteza de 300.000 de
operaii pe secund. Acel microprocesor a fost predecesorul tuturor microprocesoarelor de astzi. INTEL au
continuat dezvoltrile lor pn n aprilie 1974 i au lansat pe pia microprocesorul de 8 bii sub numele de 8080
ce putea adresa 64Kb de memorie i avea 75 de instruciuni, iar preul ncepuse de la 360$.
ntr-o alt companie american Motorola, i-au dat seama repede ce se ntmpla, aa c au lansat pe
pia un microprocesor de 8 bii 6800. Constructor ef era Chuck Peddle i pe lng microprocesorul propriu-zis,
Motorola a fost prima companie care s fac alte periferice ca 6820 i 6850. La acel timp multe companii au
recunoscut marea importan a microprocesoarelor i au nceput propriile lor dezvoltri. Chuck Peddle prsete
Motorola pentru a se muta la MOS Technology i continu s lucreze intensiv la dezvoltarea microprocesoarelor.
La expoziia WESCON din Statele Unite din 1975 a avut loc un eveniment critic n istoria
microprocesoarelor. MOS Technology a anunat c produce microprocesoarele 6501 i 6502 la 25$ bucata pe
-0-
Microprocesoare i microcontrolere
care cumprtorii le puteau cumpra imediat. Aceasta a fost att de senzaional nct au crezut c este un fel de
nelciune, gndind c competitorii vindeau 8080 i 6800 la 179$. Ca un rspuns la competitorii lor att INTEL
ct i Motorola au sczut preurile lor n prima zi a expoziiei pn la 69.95$ pe microprocesor. Motorola
intenteaz repede proces contra lui MOS Technology i contra lui Chuck Peddle pentru copierea protejatului
6800. MOS Technology nceteaz de a mai produce 6501 dar continu s produc 6502. 6502 este un
microcontroler pe 8 bii cu 56 de instruciuni i o capabilitate de adresare direct de 64Kb de memorie. Datorit
costului sczut, 6502 devine foarte popular, aa c este instalat n calculatoare ca :KIM-1, Apple I, Apple II,
Atari, Comodore, Acorn, Oric, Galeb, Orao, Ultra i multe altele. Curnd apar civa productori de 6502
(Rockwell, Sznertek, GTE, NCR, Ricoh i Comodore preiau MOS Technology) ce era n momentul prosperitii
sale vndut la o rat de 15 milioane de microprocesoare pe an. Federico Faggin prsete INTEL, i i pornete
propria sa companie Zilog Inc.
n 1976 Zilog anun Z80. n timpul crerii acestui microprocesor, Faggin ia o decizie crucial. tiind
c un mare numr de programe fuseser dezvoltate pentru 8080, Faggin i d seama c muli vor rmne fideli
acelui microprocesor din cauza marii cheltuieli care ar rezulta n urma refacerii tuturor programelor. Astfel el
decide c un nou microprocesor trebuie s fie compatibil cu 8080, sau c trebuie s fie capabil s execute toate
programele care deja fusese scrise pentru 8080. n afar acestor caracteristici, multe altele noi au fost adugate,
aa c Z80 a fost un microprocesor foarte puternic la vremea lui. Putea adresa direct 64Kb de memorie, avea 176
instruciuni, un numr mare de registre, o opiune incorporat pentru remprosptarea memoriei RAM dinamice,
o singur surs, vitez de lucru mult mai mare etc. Z80 a fost un succes mare i toat lumea a fcut conversia de
8080 la Z80. Se poate spune c Z80 comercial, a fost fr nici o ndoial, cel mai de succes micropocesor de 8
bii a acelui timp. n afar de Zilog, ali noi productori apar de asemenea ca: Mostek, NEC, SHARP i SGS.
Z80 a fost inima a multor calculatoare ca: Spectrum, Partner, TRS703, Z-3.
n 1976, INTEL iese pe pia cu o versiune mbuntit de microprocesor pe 8 bii numit 8085. Totui,
Z80 era cu mult mai bun nct INTEL curnd a pierdut btlia. Chiar dac au aprut pe pia nc cteva
microprocesoare (6809, 2650, SC/MP etc.), totul fusese de fapt deja hotrt. Nu mai erau de fcut mbuntiri
importante ca s-i fac pe productori s se converteasc spre ceva nou, aa c 6502 i Z80 mpreun cu 6800 au
rmas ca cei mai reprezentativi ai microprocesoarelor de 8 bii ai acelui timp.
Microcontrolere vs microprocesoare
Microcontrolerul difer de un microprocesor n multe feluri. n primul rnd i cel mai important este
funcionalitatea sa. Pentru a 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 spaiul necesare pentru construirea de aparate.
1.1 Unitatea de memorie
Memoria este o parte a microcontrolerului a crei funcie este de a nmagazina date. Cel mai uor mod
de a explica este de a-l descrie ca un dulap mare cu multe sertare. Dac presupunem c am marcat sertarele ntr-
-2-
Microprocesoare i microcontrolere
un asemenea fel nct s nu fie confundate, oricare din coninutul lor va fi atunci uor accesibil. Este suficient s
se tie desemnarea sertarului i astfel coninutul lui ne va fi cunoscut n mod sigur.
-4-
Microprocesoare i microcontrolere
-6-
Microprocesoare i microcontrolere
Aceste locaii ce tocmai le-am adugat sunt numite "porturi". Sunt diferite tipuri de porturi: intrare,
ieire sau porturi pe dou-ci. Cnd se lucreaz cu porturi, mai nti de toate este necesar s se aleag cu ce port
urmeaz s se lucreze, i apoi s se trimit date la, sau s se ia date de la port.
-8-
Microprocesoare i microcontrolere
- 10 -
Microprocesoare i microcontrolere
Figura 7. Watchdog
Bineneles, cnd aceasta se ntmpl cu un calculator, l resetm pur i simplu i va continua s lucreze.
Totui, nu exist buton de resetare pe care s-l apsm n cazul microcontrolerului care s rezolve astfel
problema noastr. Pentru a depi acest obstacol, avem nevoie de a introduce nc un bloc numit watchdogcinele de paz. Acest bloc este de fapt un alt contor liber (free-run) unde programul nostru trebuie s scrie un
zero ori de cte ori se execut corect. n caz c programul se "nepenete", nu se va mai scrie zero, iar contorul
se va reseta singur la atingerea valorii sale maxime. Aceasta va duce la rularea programului din nou, i corect de
aceast dat pe toat durata. Acesta este un element important al fiecrui program ce trebuie s fie fiabil fr
supravegherea omului.
1.8 Convertorul Analog-Digital
Pentru c semnalele de la periferice sunt substanial diferite de cele pe care le poate nelege
microcontrolerul (zero i unu), ele trebuie convertite ntr-un mod care s fie neles de microcontroler. Aceast
sarcin este ndeplinit de un bloc pentru conversia analog-digital sau de un convertor AD. Acest bloc este
responsabil pentru convertirea unei informaii despre o anumit valoare analogic ntr-un numr binar i pentru a
o urmri pe tot parcursul la un bloc CPU aa ca blocul CPU s o poat procesa.
- 12 -
Microprocesoare i microcontrolere
- 14 -
Microprocesoare i microcontrolere
Figura 10
Pentru o aplicaie real, un microcontroler singur nu este de ajuns. n afar de microcontroler, avem
nevoie de un program pe care s-l execute, i alte cteva elemente ce constituie o interfa logic ctre
elementele de stabilizare (ce se va discuta n capitolele urmtoare).
1.9 Programul
Scrierea programului este un domeniu special de lucru al microcontolerului i este denumit
"programare". S ncercm s scriem un mic program ce l vom crea singuri i pe care oricine va fi n stare s-l
neleag.
START
REGISTER1=MEMORY LOCATION_A
REGISTER2=MEMORY LOCATION_B
- 16 -
Microprocesoare i microcontrolere
PORTA=REGISTER1 + REGISTER2
END
Programul adun coninutul a dou locaii de memorie, i vede suma lor la portul A. Prima linie a
programului este pentru mutarea coninutul locaiei de memorie "A" ntr-unul din regitri unitii de procesare
centrale. Pentru c avem nevoie i de celelalte date de asemenea, le vom muta de asemenea n cellalt registru al
unitii de procesare centrale. Urmtoarea instruciune instruiete unitatea de procesare central s adune
coninutul celor doi regitri s trimit rezultatul obinut la portul A, nct suma acestei adunri s fie vizibil
pentru toat lumea de afar. Pentru o problem mai complex, programul care s lucreze la rezolvarea ei va fi
mai mare.
Programarea poate fi fcut n cteva limbaje ca Assembler, C i Basic care sunt cele mai folosite
limbaje. Assembler aparine limbajelor de nivel sczut ce sunt programate lent, dar folosesc cel mai mic spaiu n
memorie i d cele mai bune rezultate cnd se are n vedere viteza de execuie a programului. Pentru c este cel
mai folosit limbaj n programarea microcontrolerelor va fi discutat ntr-un capitol ulterior. Programele n
limbajul C sunt mai uor de scris, mai uor de neles, dar sunt mai lente n executare dect programele n
Assembler. Basic este cel mai uor de nvat, i instruciunile sale sunt cele mai aproape de modul de gndire a
omului, dar ca i limbajul de programare C este de asemenea mai lent dect Assembler-ul. n orice caz, nainte
de a v hotr n privina unuia din aceste limbaje trebuie s studiai cu atenie cerinele privind viteza de
execuie, mrimea memoriei i timpul disponibil pentru asamblarea sa.
Dup ce este scris programul, trebuie s instalm microcontrolerul ntr-un aparat i s-l lsm s
lucreze. Pentru a face aceasta trebuie s adugm cteva componente externe necesare pentru funcionarea sa.
Mai nti trebuie s dm via microcontrolerului prin conectarea sa la o surs (tensiune necesar pentru operarea
tuturor instrumentelor electronice) i oscilatorului al crui rol este similar inimii din corpul uman. Bazat pe
ceasul su microcontrolerul execut instruciunile programului. ndat ce este alimentat microcontrolerul va
executa un scurt control asupra sa, se va uita la nceputul programului i va ncepe s-l execute. Cum va lucra
aparatul depinde de muli parametri, cel mai important fiind priceperea dezvoltatorului de hardware, i de
experiena programatorului n obinerea maximului din aparat cu programul su.
- 18 -
Microprocesoare i microcontrolere
CAPITOLUL 2
MICROCONTROLERUL PIC16F84
2.1 Introducere
PIC16F84 aparine unei clase de microcontrolere de 8 bii cu arhitectur RISC. Structura lui general
este artat n schia urmtoare reprezentnd blocurile de baz.
Memoria program (FLASH)-pentru memorarea unui program scris. Pentru c memoria ce este fcut n
tehnologia FLASH poate fi programat i tears mai mult dect odat, aceasta face microcontrolerul potrivit
pentru dezvoltarea de component.
EEPROM-memorie de date ce trebuie s fie salvate cnd nu mai este alimentare.
Este n mod uzual folosit pentru memorarea de date importante ce nu trebuie pierdute dac sursa de alimentare
se ntrerupe dintr-o dat. De exemplu, o astfel de dat este o temperatur prestabilit n regulatoarele de
temperatur. Dac n timpul ntreruperii alimentrii aceast dat se pierde, va trebui s facem ajustarea nc o
dat la revenirea alimentrii. Astfel componenta noastr pierde n privina auto-meninerii.
RAM-memorie de date folosit de un program n timpul executrii sale. n RAM sunt memorate toate
rezultatele intermediare sau datele temporare ce nu sunt cruciale la ntreruperea sursei de alimentare.
PORTUL A i PORTUL B sunt conexiuni fizice ntre microcontroler i lumea de afar. Portul A are 5
pini, iar portul B are 8 pini.
TIMER-UL LIBER (FREE-RUN) este un registru de 8 bii n interiorul microcontrolerului ce lucreaz
independent de program. La fiecare al patrulea impuls de ceas al oscilatorului i ncrementeaz valoarea lui pn
ce atinge maximul (255), i apoi ncepe s numere tot din nou de la zero. Dup cum tim timpul exact dintre
fiecare dou incrementri ale coninutului timer-ului, poate fi folosit pentru msurarea timpului ce este foarte util
la unele componente.
UNITATEA DE PROCESARE CENTRAL are rolul unui element de conectivitate ntre celelalte
blocuri ale microcontrolerului. Coordoneaz lucrul altor blocuri i execut programul utilizatorului.
- 20 -
Microprocesoare i microcontrolere
Figura 1. Schita microcontrolerului PIC16F84
- 22 -
Microprocesoare i microcontrolere
microcontrolerele nu au fost prevzute nainte (exemple: funcii de timer, nlocuirea interfeei n sistemele mari,
aplicaiile coprocesor, etc.).
Programabilitatea sistemului acestui cip (mpreun cu folosirea a doar doi pini n transferul de date)
face posibil flexibilitatea produsului, dup ce asamblarea i testarea au fost terminate. Aceast capabilitate poate
fi folosit pentru a crea producie pe linie de asamblare, de a nmagazina date de calibrare disponibile doar dup
testarea final, sau poate fi folosit pentru a mbunti programele la produsele finite.
Clock-ul /ciclul instruciune
Clock-ul sau ceasul este starter-ul principal al microcontrolerului, i este obinut dintr-o component de
memorie extern numit "oscilator". Dac ar fi s comparm un microcontroler cu un ceas de timp, "clock-ul"
nostru ar fi un ticit pe care l-am auzi de la ceasul de timp. n acest caz, oscilatorul ar putea fi comparat cu arcul
ce este rsucit astfel ca ceasul de timp s mearg. De asemenea, fora folosit pentru a ntoarce ceasul poate fi
comparat cu o surs electric.
Clock-ul de la oscilator intr ntr-un microcontroler prin pinul OSC1 unde circuitul intern al
microcontrolerului divide clock-ul n 4 clock-uri egale Q1, Q2, Q3 i Q4 ce nu se suprapun. Aceste 4 clock-uri
constituie un ciclu de o singur instruciune (numit de asemenea ciclu main) n timpul creia instruciunea este
executat.
Executarea instruciunii ncepe prin apelarea unei instruciuni care este urmtoarea n linie.
Instruciunea este apelat din memoria program la fiecare Q1 i este scris n registrul de instruciuni la Q4.
Decodarea i executarea instruciunii sunt fcute ntre urmtoarele cicluri Q1 i Q4. n urmtoarea diagram
putem vedea relaia dintre ciclul instruciunii i clock-ul oscilatorului (OSC1) ca i aceea a clock-urilor interne
Q1-Q4. Contorul de program (PC) reine informaia despre adresa urmtoarei instruciuni.
Pipelining
Ciclul instruciune const din ciclurile Q1, Q2, Q3 i Q4. Ciclurile de instruciuni de apelare i
executare sunt conectate ntr-un aa fel nct pentru a face o apelare, este necesar un ciclu cu o instruciune, i
mai este nevoie de nc unul pentru decodare i executare. Totui, datorit pipelining-ului (folosirea unei
- 24 -
Microprocesoare i microcontrolere
pipeline-conduct, i este aducerea unei instruciuni din memorie n timp ce se execut alta), fiecare instruciune
este executat efectiv ntr-un singur ciclu. Dac instruciunea cauzeaz o schimbare n contorul programului, i
PC-ul nu direcioneaz spre urmtoarea ci spre alte adrese (poate fi cazul cu subprogramele jumps sau calling), 2
cicluri sunt necesare pentru executarea unei instruciuni. Aceasta este pentru c instruciunea trebuie procesat
din nou, dar de data aceasta de la adresa corect. Ciclul ncepe cu clock-ul Q1, prin scrierea n registrul
instruction register (IR). Decodarea i executarea ncepe cu clock-urile Q2, Q3 i Q4.
- 26 -
Microprocesoare i microcontrolere
- 28 -
Microprocesoare i microcontrolere
Oscilatorul RC
n aplicaiile unde nu este nevoie de o mare precizie de timp, oscilatorul RC permite economii
adiionale la cumprare. Fecvena de rezonan a oscilatorului RC depinde de valoarea tensiunii de alimentare,
rezistorul R, condensatorul C i temperatura de lucru. Trebuie de menionat c frecvena de rezonan este de
asemenea influenat de variaiile normale ale parametrilor de proces, de tolerana extern a componentelor R i
C, etc.
Figura 6. Oscilator RC
Diagrama de mai sus arat cum este conectat oscilatorul RC la PIC16F84. La valoarea rezistorului mai
mic 2.2k, oscilatorul poate deveni instabil, sau oscilaia se poate chiar opri. La valori mari a lui R (ex.1M)
oscilatorul devine foarte sensibil la zgomot i umezeal. Se recomand ca valoarea rezistorului R s fie ntre 3 i
100k. Chiar dac oscilatorul va lucra fr un condensator extern (C=0pF), trebuie totui folosit un condensator
de peste 20pF pentru zgomot i stabilitate. Indiferent de ce oscilator este folosit, pentru a obine un ceas la care
s funcioneze microcontrolerul, ceasul trebuie divizat la 4. Un ceas al oscilatorului divizat cu 4 se poate obine
la pinul OSC2/CLKOUT, i poate fi folosit pentru testarea sau sincronizarea altor circuite logice.
- 30 -
Microprocesoare i microcontrolere
- 32 -
Microprocesoare i microcontrolere
Pentru a preveni ajungerea unui zero logic la pinul MCLR accidental (linia de deasupra nseamn c resetul este
activat de un zero logic), MCLR trebuie s fie conectat printr-un rezistor la polul pozitiv al sursei de alimentare.
Rezistorul trebuie s fie ntre 5 i 10k. Acest rezistor a crui funcie este de a menine o anumit linie la starea logic
unu ca o prevenire, se numete o scoatere-pull up.
Microcontrolerul PIC16F84 are cteva surse de reset:a) Reset la alimentare, POR (Power-On Reset); b)
Reset n timpul lucrului obinuit prin aducerea unui zero logic la pinul MCLR al microcontrolerului. c) Reset n
timpul regimului SLEEP d) Reset la depirea timer-ului watchdog (WDT) e) Reset n timpul depirii WDT n
timpul regimului SLEEP.
Cele mai importante resurse de reset sunt a) i b). Prima are loc de fiecare dat cnd este alimentat
microcontrolerul i servete la aducerea toturor regitrilor la starea iniial a poziiei de start. A doua este pentru a
aduce un zero logic la pinul MCLR n timpul operaiei normale a microcontrolerului. Este des folosit n
dezvoltarea de programe.
n timpul unui reset, locaiile de memorie RAM nu sunt resetate. Ele sunt necunoscute la alimentare i
nu sunt schimbate la nici un reset. Spre deosebire de acestea, regitrii SFR sunt resetai la o stare iniial a
poziiei de st
art. Unul din cele mai importante efecte ale resetului este setarea contorului de program (PC) la zero
(0000h), ceea ce permite programului s nceap executarea de la prima instruciune scris.
Resetul la scderea tensiunii de alimentare dincolo de limita permisibil (Brown-out Reset) Impulsul
pentru resetare n timpul creterii tensiunii este generat de microcontrolerul nsui cnd detecteaz o cretere n
tensiunea Vdd (n domeniul de la 1.2V la 1.8V). Acest impuls dureaz 72 ms ceea ce este un timp suficient
pentru oscilator ca s se stabilizeze. Aceste 72 ms sunt asigurate de un timer intern PWRT care are oscilatorul lui
RC. Microcontrolerul este n modul reset ct timp PWRT este activ. Totui, cnd montajul funcioneaz,
probleme apar cnd sursa nu scade la zero ci cnd scade mai jos de limita ce garanteaz funcionarea corect a
microcontrolerului. Acesta este un caz real din practic, n special n mediile industriale unde perturbaiile i
instabilitile sursei de alimentare sunt ceva foarte curent. Pentru a rezolva aceast problem trebuie s ne
asigurm c microcontrolerul este ntr-o stare de reset de fiecare dat cnd tensiunea sursei scade sub limita
admis.
- 34 -
Microprocesoare i microcontrolere
- 36 -
Microprocesoare i microcontrolere
Figura 11. Schita a unitatii de procesare centrale
Unitatea de procesare central conecteaz toate prile microcontrolerului ntr-un ntreg. Desigur,
funcia sa cea mai important este s decodeze instruciunile de program. Cnd programatorul scrie un program,
instruciunile au o form clar ca MOVLW 0x20. Totui, pentru ca microcontrolerul s neleag aceasta, aceast
form de 'scrisoare' a unei instruciuni trebuie tradus ntr-o serie de zero-uri i unu-uri ce se numete 'opcode'.
Aceast tranziie de la o scrisoare la o form binar este fcut de translatori ca translatorul assembler (cunoscut
ca i assembler sau asamblor). Instruciunea astfel adus-fetched din memoria programului trebuie s fie
decodat de unitatea de procesare central. Putem apoi selecta din tabela tuturor instruciunilor un set de aciuni
ce execut o sarcin desemnat definit de instruciune. Pentru c instruciunile pot s conin n ele asignri ce
cer diferite transferuri de date dintr-o memorie n alta, din memorie la porturi, sau alte calcule, CPU trebuie s
fie conectat cu toate prile microcontrolerului. Aceasta este posibil printr-un bus de date i un bus de adrese.
Unitatea de Logic Aritmetic (ALU)
Unitatea de logic aritmetic este responsabil de executarea operaiilor ca adunarea, scderea, mutarea
(la stnga sau la dreapta ntr-un registru) i de operaiile logice. Mutarea datelor ntr-un registru se mai numete
'shifting'- transferare. PIC16F84 conine o unitate logic aritmetic de 8 bii i regitri de lucru de 8 bii.
- 38 -
Microprocesoare i microcontrolere
- 40 -
Microprocesoare i microcontrolere
- 42 -
Microprocesoare i microcontrolere
01= primul banc
00= bancul zero
bit 7 IRP (Register Bank Select bit-Bit de Selectare a Bancului de Regitri)
Bit al crui rol este de a fi al optulea bit la adresarea indirect a RAM-ului intern.
1= bancul 2 i 3
0= bancul 0 i 1 (de la 00h la FFh)
Registrul STATUS conine starea aritmetic ALU (C, DC, Z), starea RESET (TO, PD) i biii pentru
selectarea bancului de memorie (IRP, RP1, RP0). Considernd c selecia bancului de memorie este controlat
prin acest registru, el trebuie s fie prezent n fiecare banc. Bancul de memorie se va discuta mai n detaliu n
capitolul Organizarea memoriei. Registrul STATUS poate fi o destinaie pentru orice instruciune, cu oricare alt
registru. Dac registrul STATUS este o destinaie pentru instruciunile ce afecteaz biii Z, DC or C, atunci
scrierea n aceti trei bii nu este posibil.
Registrul OPTION
- 44 -
Microprocesoare i microcontrolere
Dac ntreruperea este activat este posibil ca acest bit s determine frontul la care o ntrerupere va fi
activat la pinul RB0/INT.
1= front cresctor
0= front descresctor
bit 7 RBPU (PORTB Pull-up Enable bit-Bit Enable-Activare Pull-up PORTB)
Acest bit pornete i oprete rezistorii interni 'pull-up'-scoatere la portul B.
1= Rezistori oprire "pull-up"
0= Rezistori pornire "pull-up"
2.7 Porturi
Portul se refer la un grup de pini ai unui microcontroler ce pot fi accesai simultan, sau la care putem
seta combinaia dorit de zero-uri i unu-uri, sau de la care putem citi o stare existent. Fizic, portul este un
registru n interiorul unui microcontroler ce este conectat cu fire la pinii microcontrolerului. Porturile reprezint
conexiunea fizic a Unitii de Procesare Central cu lumea exterioar. Microcontrolerul le folosete pentru a
monitoriza sau controla alte componente sau aparate. Datorit funcionalitii, unii pini au rol dublu ca
RA4/TOCKI de exemplu, care este simultan al patrulea bit la portul A i o intrare extern pentru contorul liber
(free-run). Selecia uneia din aceste dou funcii ale pinului se face n unul din regitrii configuraionali. O
ilustraie a acesteia este al cincilea bit T0CS n registrul OPTION. Selectnd una din funcii cealalt este
dezactivat.
- 46 -
Microprocesoare i microcontrolere
PORTB
PORTB are 8 pini legai la el. Registrul adecvat pentru direcia datelor este TRISB la adresa 86h.
Setarea unui bit n registrul TRISB definete pinul portului corespunztor ca pin de intrare, i resetarea unui bit
n registrul TRISB, definete pinul portului corespunztor ca pin de ieire. Fiecare pin la PORTB are un rezistor
slab intern pull-up (scoatere) (rezistor care definete o linie la unu logic) care poate fi activat prin resetarea celui
de-al aptelea bit RBPU n registrul OPTION. Aceti rezistori 'pull-up' se nchid automat cnd pinul portului este
configurat ca o ieire. Cnd pornete microcontrolerul, 'pull-up'-ii sunt dezactivai.
Patru pini ai portului PORTB, RB7:RB4 pot cauza o ntrerupere, care se ntmpl cnd starea lor se
schimb de la unu logic la zero logic i invers. Numai pinii configurai ca intrare pot cauza aceast ntrerupere s
se ntmple (dac fiecare pin RB7:RB4 este configurat ca o ieire, nu va fi generat o ntrerupere la schimbarea
strii). Aceast opiune de ntrerupere cu rezistorii 'pull-up' fac mai uoar rezolvarea problemelor din practic,
ca de exemplu o tastatur matriceal. Dac rndurile tastaturii sunt conectate la aceti pini, fiecare apsare a unei
clape va cauza o ntrerupere. Microcontrolerul va determina care clap este apsat n timp ce se proceseaz o
ntrerupere. Nu se recomand s apelai la portul B n timp ce se proceseaz ntreruperea.
- 48 -
Microprocesoare i microcontrolere
2.5 Organizarea memoriei
PIC16F84 are dou blocuri separate de memorie, unul pentru date i cellalt pentru programe. Memoria
EEPROM i regitrii GPR n memoria RAM constituie un bloc, i memoria FLASH constituie un bloc de
programe.
Memoria program
Memoria program a fost realizat n tehnologia FLASH ceea ce face posibil de a programa un
microcontroler de mai multe ori nainte de a fi instalat ntr-un montaj, i chiar dup instalarea sa dac se ntmpl
unele schimbri n program sau parametri de proces. Mrimea memoriei program este de 1024 locaii cu lime
de 14 bii unde locaiile zero i patru sunt rezervate pentru reset i pentru vectorul ntrerupere.
Memoria de date
Memoria de date const din memoriile EEPROM i RAM. Memoria EEPROM const din 64 de locaii
de opt bii a cror coninut nu este pierdut n timpul opririi sursei de alimentare. EEPROM-ul nu este direct
adresabil, dar este accesat indirect prin regitrii EEADR i EEDATA. Pentru c memoria EEPROM este folosit
curent la memorarea unor parametri importani (de exemplu, o temperatur dat n regulatoarele de temperatur),
exist o procedur strict de scriere n EEPROM ce trebuie urmat pentru a preveni scrierea accidental.
Memoria RAM pentru date ocup un spaiu ntr-o hart a memoriei de la locaia 0x0C la 0x4F ceea ce nseamn
68 de locaii. Locaiile memoriei RAM sunt de asemenea denumite regitri GPR care este o abreviere General
Purpose Registers-Regitri cu Scop General. Regitrii GPR pot fi accesai indiferent de ce banc este selectat la
un moment.
Regitri SFR
Regitri ce ocup primele 12 locaii n bancurile 0 i 1 i sunt regitri ai funciei specializate asignat cu
unele blocuri ale microcontrolerului. Acetia sunt numii Special Function Registers-Regitri ai Funciei
Speciale.
- 50 -
Microprocesoare i microcontrolere
- 52 -
Microprocesoare i microcontrolere
Instruciunea BSF seteaz bitul RPO (RP0=1) n registrul STATUS i astfel seteaz bancul 1.
Uzual, grupurile de instruciuni care sunt adesea n uz, sunt conectate ntr-o singur unitate ce poate fi
uor apelat ntr-un program, i a crei nume are o semnificaie clar, aa-numitul Macros-macrocomand. Cu
ajutorul lor, selecia dintre dou bancuri devine mai clar i programul mult mai elegibil.
BANK0 macro
Bcf STATUS, RP0 ;Select memory bank 0
Endm
BANK1 macro
Bsf STATUS, RP0 ;Select memory bank 1
Endm
Locaiile 0Ch - 4Fh sunt regitri cu scop general (GPR) ce sunt folosii ca memorie RAM. Cnd sunt
accesate locaiile 8Ch - CFh n Bancul 1, accesm de fapt exact aceleai locaii n Bancul 0. Cu alte cuvinte, cnd
dorii s accesai unul din regitrii GPR, nu trebuie s v ngrijorai c nu tii n ce banc suntei!
Contorul de Program
Contorul de program (PC) este un registru de 13 bii ce conine adresa instruciunii ce se execut. Prin
incrementarea sau schimbarea sa (ex. n caz de salturi) microcontrolerul execut instruciunile de program pascu-pas.
Stiva
PIC16F84 are o stiv de 13 bii cu 8 nivele, sau cu alte cuvinte, un grup de 8 locaii de memorie de 13
bii lime cu funcii speciale. Rolul su de baz este de a pstra valoarea contorului de program dup un salt din
programul principal la o adres a unui subprogram. Pentru ca un program s tie cum s se ntoarc la punctul de
unde a pornit, trebuie s napoieze valoarea contorului programului din stiv. Cnd se mut dintr-un program
ntr-un subprogram, contorul programului este mpins n stiv (un exemplu de acesta este instruciunea CALL).
Cnd se execut instruciuni ca RETURN, RETLW sau RETFIE ce au fost executate la sfritul unui
subprogram, contorul programului a fost luat dintr-o stiv, aa ca programul s poat continua de unde a fost
oprit nainte de a fi ntrerupt. Aceste operaii de plasare ntr-o i luare dintr-o stiv de contor de program sunt
numite PUSH i POP, i sunt numite conform cu instruciunile similare ale unor microcontrolere mai mari.
Programarea n Sistem
Pentru a programa o memorie de program, microcontrolerul trebuie s fie setat pentru un mod de lucru
special prin aducerea pinului MCLR la 13.5V, iar sursa de tensiune Vdd trebuie s fie stabilizat ntre 4.5V i
5.5V. Memoria program poate fi programat serial folosind doi pini 'data/clock' ce trebuie s fie mai nti
separai de liniile montajului, aa ca s nu apar erori n timpul programrii.
Moduri de adresare
Locaiile de memorie RAM pot fi accesate direct sau indirect.
Adresarea Direct
Adresarea Direct se face printr-o adres de 9 bii. Aceast adres este obinut prin conectarea celui deal aptelea bit al adresei directe a unei instruciuni cu doi bii (RP1, RP0) din registrul STATUS dup cum se
arat n figura urmtoarea. Orice acces la regitrii SFR poate fi un exemplu de adresare direct.
Bsf STATUS, RP0 ;Bankl
movlw 0xFF ;w=0xFF
- 54 -
Microprocesoare i microcontrolere
movwf TRISA ;address of TRISA register is taken from
instruction movwf
- 56 -
Microprocesoare i microcontrolere
Un asemenea exemplu poate trimite un set de date prin comunicaia serial, lucrnd cu bufere i
indicatoare (ce vor fi discutate n continuare ntr-un capitol cu exemple), sau s tearg o parte a memoriei RAM
(16 locaii) ca n urmtorul exemplu.
Citind datele din registrul INDF cnd coninutul registrului FSR este egal cu zero, ntoarce valoarea
zero, i scrie n el rezultatul n operaia NOP (no operation- nu opereaz).
2.6 ntreruperi
ntreruperile sunt un mecanism a unui microcontroler ce i permit s rspund la unele evenimente la
momentul cnd se ntmpl, indiferent de ce face atunci microcontrolerul. Aceasta este o parte foarte important,
pentru c permite conexiunea microcontrolerului cu lumea de afar. n general, fiecare ntrerupere schimb
debitul programului, l ntrerupe i dup executarea unui subprogram (rutine de ntrerupere), continu din acelai
punct.
- 58 -
Microprocesoare i microcontrolere
bit 0 RBIF (RB Port Change Interrupt Flag bit-bit Stegule de ntrerupere a Schimbrii Portului RB) Bit
ce informeaz despre schimbrile de la pinii 4, 5, 6 i 7 ai portului B.
1=cel puin un pin i-a schimbat starea
0=nu s-a ntmplat nici o schimbare la vreun pin
bit 1 INTF (INT External Interrupt Flag bit-bit Stegule de ntrerupere Extern INT) A avut loc o
ntrerupere extern.
1=a avut loc o ntrerupere
0=nu a avut loc o ntrerupere
Dac s-a detectat un front cresctor sau descresctor la pinul RB0/INT, (ce este definit cu bitul
INTEDG n registrul OPTION), bitul INTF este setat. Bitul trebuie s fie ters n subprogramul ntrerupere
pentru a detecta urmtoarea ntrerupere.
bit 2 T0IF (TMR0 Overflow Interrupt Flag bit-bit Stegule Depire ntrerupere TMRO) Depirea
contorului TMRO.
1=contorul i-a schimbat starea de la FFh la 00h.
0=depirea nu a avut loc
Bitul trebuie s fie ters n program pentru ca o ntrerupere s fie detectat.
bit 3 RBIE (RB port change Interrupt Enable bit-bit Permite ntreruperea schimbrii portului RB)
Permite s aib loc ntreruperi la schimbarea strii pinilor 4, 5, 6, i 7 ai portului B.
1=permite ntreruperi la schimbarea strii
0=ntreruperi interzise la schimbarea strii
Dac RBIE i RBIF au fost simultan setate, va avea loc o ntrerupere.
bit 4 INTE (INT External Interrupt Enable bit-bit Permite ntrerupere extern INT) Bit ce permite
ntreruperea extern de la pinul RB0/INT.
1=ntrerupere extern permis
0=ntrerupere extern interzis
Dac INTE i INTF au fost setate simultan, va avea loc o ntrerupere.
bit 5 T0IE (TMR0 Overflow Interrupt Enable bit-bit Permite Depire ntrerupere TMRO) Bit ce
permite ntreruperile n timpul depirii contorului TMRO.
1=ntrerupere permis
0=ntrerupere interzis
Dac T0IE i T0IF au fost simultan setate, va avea loc ntreruperea.
Bit 6 EEIE (EEPROM Write Complete Interrupt Enable bit-bit Permite ntrerupere Complet a Scrierii
EEPROM) Bit ce permite o ntrerupere la sfritul unei rutine de scriere n EEPROM
- 60 -
Microprocesoare i microcontrolere
1= ntrerupere permis
0= ntrerupere interzis
Dac EEIE i EEIF (ce este n registrul EECON1) au fost simultan setate, va avea loc o ntrerupere.
Bit 7 GIE (Global Interrupt Enable bit-bit Permite ntrerupere Global) Bit ce permite sau interzice
toate ntreruperile.
1=toate ntreruperile sunt permise
0=toate ntreruperile sunt interzise
PIC16F84 are patru surse de ntrerupere:
1. Terminarea scrierii datelor n EEPROM
2. ntrerupere TMR0 cauzat de depirea timer-ului
3. ntrerupere n timpul schimbrii la pinii RB4, RB5, RB6 i RB7 ai portului B.
4. ntrerupere Extern de la pinul RB0/INT al microcontrolerului
n general, fiecare surs de ntrerupere are doi bii legai la ea. Unul permite ntreruperea, iar cellalt
detecteaz cnd au loc ntreruperi. Exist un bit comun numit GIE ce poate fi folosit pentru a interzice sau
permite toate ntreruperile simultan. Acest bit este foarte folositor cnd se scrie un program pentru c permite ca
toate ntreruperile s fie interzise pentru o perioad de timp, aa ca execuia unei pri importante a programului
s nu fie ntrerupt. Cnd instruciunea ce reseteaz bitul GIE a fost executat (GIE=0, toate ntreruperile
interzise), fiecare ntrerupere ce rmne nerezolvat trebuie ignorat.
- 62 -
Microprocesoare i microcontrolere
Acelai exemplu se poate realiza utiliznd macro-uri, fcnd astfel programul mai eligibil. Macro-urile
ce sunt deja definite, pot fi folosite pentru scrierea de noi macro-uri. Macro-urile BANK1 i BANK0 ce sunt
explicate n capitolul "Organizarea memoriei" sunt folosite cu macro-urile 'push' i 'pop'.
- 64 -
Microprocesoare i microcontrolere
ntreruperea n timpul depirii contorului TMRO
Depirea contorului TMRO (de la FFh la 00h) va seta bitul T0IF (INTCON<2>). Aceasta este o
ntrerupere foarte important pentru c multe probleme reale se por rezolva folosind aceast ntrerupere. Unul
din exemple este msurarea timpului. Dac tim ct timp are nevoie contorul pentru a completa un ciclu de la
00h to FFh, atunci numrul de ntreruperi nmulit cu acea durat de timp va da timpul total scurs. n rutina de
ntrerupere unele variabile vor fi incrementate n memoria RAM, valoarea acelei variabile nmulite cu timpul de
care are nevoie contorul pentru a contoriza ntr-un ciclu ntreg, va da timpul total scurs. ntreruperea poate fi
pornit/oprit prin setarea/resetarea bitului T0IE (INTCON<5>).
ntrerupere pe timpul unei schimbri la pinii 4, 5, 6 i 7 ai portului B
Schimbarea semnalului de intrare la PORTB <7:4> seteaz bitul RBIF (INTCON<0>). Patru pini RB7,
RB6, RB5 i RB4 ai portului B, pot triggera o ntrerupere ce are loc cnd starea la ei se schimb de la unu la zero
logic, sau viceversa. Pentru ca pinii s fie sensibili la aceast schimbare, trebuie definii ca intrare. Dac oricare
din ei este definit ca ieire, ntreruperea nu va fi generat la schimbarea strii. Dac ei sunt definii ca intrare,
starea lor curent este comparat cu vechea valoare ce a fost stocat la ultima citire de la portul B. ntreruperea
poate fi pornit/oprit prin setarea/resetarea bitului RBIE n registrul INTCON.
ntreruperea la terminarea subrutinei write n EEPROM
Aceast ntrerupere este doar de natur practic. Pentru c scrierea ntr-o locaie EEPROM dureaz cam
10ms (care este o durat lung n termenii microcontrolerului), nu este rentabil de a atepta pn la capt
scrierea. Este adugat astfel mecanismul de ntrerupere ceea ce permite microcontrolerului s continue
executarea programului principal, n timp ce scrierea n EEPROM este fcut n plan secundar. Cnd scrierea
este terminat, ntreruperea informeaz microcontrolerul c scrierea s-a terminat. Bitul EEIF, prin care se face
aceast informare, se gsete n registrul EECON1. Producerea unei ntreruperi poate fi interzis prin resetarea
bitului EEIE n registrul INTCON.
Iniializarea ntreruperii
Pentru a folosi un mecanism de ntrerupere a unui microcontroler, trebuie fcute unele sarcini
pregtitoare. Aceste proceduri sunt pe scurt numite "iniializare". Prin iniializare definim la ce va rspunde
microcontrolerul, i ce va ignora. Dac nu setm bitul ce permite o anumit ntrerupere, programul nu va executa
un subprogram ntrerupere. Prin aceasta putem obine controlul asupra producerii ntreruperii, ceea ce este foarte
folositor.
Exemplul de mai sus arat iniializarea unei ntreruperi externe la pinul RB0 al microcontrolerului.
Unde se vede unu setat, nseamn c ntreruperea este permis. Producerea altor ntreruperi nu este permis, i
toate ntreruperile mpreun sunt interzise pn ce bitul GIE este inut n unu.
2.8 Memoria de date EEPROM
PIC16F84 are 64 de bytes de locaii de memorie EEPROM la adresele de la 00h la 63h unde se poate
scrie sau de unde se poate citi. Cea mai important caracteristic a acestei memorii este c nu pierde coninutul
n timpul nchideri sursei de alimentare. Aceasta nseamn practic c ceea ce a fost scris n ea va rmne chiar i
- 66 -
Microprocesoare i microcontrolere
cnd microcontrolerul este nchis. Datele pot fi reinute n EEPROM fr sursa de alimentare pn la 40 de ani.
(dup cum declar productorul lui PICD16F84), i se pot executa 10000 de cicluri de scriere.
n practic, memoria EEPROM este folosit pentru stocarea unor date importante sau a unor parametri
de proces.
Un asemenea parametru este o temperatur dat, asignat cnd se seteaz un regulator de temperatur la
un proces. Dac nu s-a reinut, va fi nevoie s se ajusteze temperatura dat dup fiecare ntrerupere a alimentrii.
Pentru c aceasta este foarte nepractic (chiar periculos), productorii de microntrolere au nceput s instaleze un
tip mai mic de memorie EEPROM. Memoria EEPROM este plasat ntr-un loc special al memoriei i poate fi
accesat prin regitri speciali.
- 68 -
Microprocesoare i microcontrolere
CAPITOLUL 3
PROGRAMARE N LIMBAJ DE ASAMBLARE
3.1 Introducere
Abilitatea de a comunica este de mare importan n orice domeniu. Totui, este posibil numai dac
amndoi partenerii de comunicare cunosc acelai limbaj, sau urmresc aceleai reguli n timpul comunicrii.
Folosind aceste principii ca un punct de plecare, putem de asemenea defini comunicarea ce are loc ntre
microcontrolere i om. Limbajul pe care microcontrolerul i omul l folosesc pentru a comunica este numit
"limbaj de asamblare". Titlul nsui nu are un neles deosebit, i este analog numelor altor limbaje, de ex.
engleza i franceza. Mai precis, "limbajul de asamblare" este doar o soluie trectoare. Programele scrise n
limbaj de asamblare trebuie traduse ntr-un "limbaj de zero-uri i unu-uri" pentru ca un microcontroler s-l
neleag. "Limbajul de asamblare" i "assembler-ul" sau asamblorul sunt dou noiuni diferite. Primul reprezint
un set de reguli folosite n scrierea unui program pentru un microcontroler, iar cellalt este un program n
computerul personal care traduce limbajul de asamblare ntr-un limbaj de zero-uri i unu-uri. Un program ce este
tradus n "zero-uri" i "unu-uri" este numit "limbaj main".
- 70 -
Microprocesoare i microcontrolere
Exemplu: RETURN 00 0000 0000 1000
Similar propoziiei de mai sus, fiecare instruciune de asamblare este interpretat ca i corespunznd unei serii de
zero-uri i unu-uri.
Locul unde aceast traducere a limbajului de asamblare se gsete , se numete un fiier de "execuie". Vom
ntlni adesea numele de fiier "HEX". Acest nume vine de la o reprezentare hexazecimal a acelui fiier, ca i de
la apendicele "hex" din titlu, de ex. "run through.hex". Odat ce este generat, fiierul de execuie este citit n
microcontroler printr-un programator.
Un program n Limbaj de Asamblare este scris ntr-un program pentru procesarea textului (editorul) i
este capabil de a produce un fiier ASCII pe discul computerului sau n zone specializate ca MPLAB ce se va
explica n capitolul urmtor.
3.2 Limbaj de Asamblare
Elementele de baz ale limbajului de asamblare sunt:
Label-uri sau Etichete
Instruciuni
Operanzi
Directive
Comentarii
Label-uri
Un Label este o desemnare textual (n general un cuvnt uor de citit) pentru o linie ntr-un program,
sau seciunea unui program unde micro-ul poate sri sau chiar nceputul unui set de linii a unui program. Poate
fi folosit de asemenea pentru a executa ramificare de program (ca Goto.) i programul poate chiar avea o
condiie ce trebuie ndeplinit pentru ca instruciunea Goto s fie executat. Este important pentru un label de a
ncepe cu o liter a alfabetului sau cu o subliniere "_". Lungimea label-ului poate fi de pn la 32 caractere. Este
de asemenea important ca un label s nceap de la primul rnd.
3.3 Instruciuni
Instruciunile sunt deja definite prin folosirea unui microcontroler specific, aa c ne rmne doar s
urmm instruciunile pentru folosirea lor n limbajul de asamblare. Modul n care scriem o instruciune mai este
numit "sintaxa" instruciunii. n exemplul urmtor putem recunoate o greeal n scriere pentru c instruciunile
movlp i goto nu exist pentru microcontrolerul PIC16F84.
- 72 -
Microprocesoare i microcontrolere
Operanzi
Operanzii sunt elemente ale instruciunii pentru instruciunea ce este executat. Ei sunt de obicei regitri
sau variabile sau constante. Constantele sunt numite "literal-e". Cuvntul literal nseamn "numr".
Comentarii
Comentariul este o serie de cuvinte pe care programatorul le scrie pentru a face programul mai clar i
mai uor de citit. Se plaseaz dup o instruciune , i trebuie s nceap cu punct i virgul";".
Directive
O directiv este similar unei instruciuni, dar spre deosebire de o instruciune este independent de
modelul microcontrolerului, i reprezint o caracteristic a limbajului de asamblare nsui. Directivelor le sunt
date uzual nelesuri de scop prin variabile i regitri. De exemplu, LEVEL poate fi o desemnaie pentru o
variabil n memoria RAM la adresa 0Dh. n felul acesta, variabila la acea adres poate fi accesat prin
desemnaia LEVEL. Aceasta este mult mai uor pentru un programator s neleag dect s ncerce s-i aduc
aminte c adresa 0Dh conine informaii despre LEVEL.
- 74 -
Microprocesoare i microcontrolere
Cnd se scrie un program, nafar de regulile obligatorii, sunt de asemenea unele reguli ce nu sunt scrise
dar trebuie urmate. Una din ele s scrii numele programului la nceput, ce face programul, versiunea lui, date
cnd a fost scris, tipul microcontrolerului pentru care a fost scris, i numele programatorului.
Pentru c aceste date nu sunt importante pentru translatorul de asamblare, este scris ca i comentarii.
Trebuie remarcat c un comentariu ncepe totdeauna cu punct i virgul i c poate fi plasat ntr-un rnd nou sau
poate urma dup instruciune. Este cel mai bine inut n rndul al treilea pentru a face traseul uor de urmrit.
Dup deschiderea comentariului ce a fost scris, trebuie inclus directiva. Aceasta este artat n
exemplul de mai sus.
Pentru a funciona corect, trebuie s definim civa parametri ai microcontrolerului ca: - tipul
oscilatorului - dac timer-ul watchdog este pe deschis, i - dac circuitul de resetare intern este activ.
Toate acestea sunt definite prin urmtoarea directiv:
_CONFIG _CP_OFF&_WDT_OFF&PWRTE_ON&XT_OSC
Cnd toate elementele necesare au fost definite, putem ncepe scrierea unui program. n primul rnd,
este necesar de a determina adresa de unde ncepe microcontrolerul, dup pornirea sursei de alimentare. Aceasta
este (org 0x00). Adresa de la care ncepe programul dac are loc o ntrerupere este (org 0x04). Pentru c acesta
este un program simplu, va fi suficient s direcionm microcontrolerul la nceputul programului cu o
instruciune "goto Main".
Instruciunile gsite n Main sub-routine selecteaz bank-ul 1 al memoriei (BANK1) pentru a accesa registrul
TRISIB, aa nct portul B s fie declarat ca o ieire (movlw 0x00, movwf TRISIB).
Urmtorul pas este de a selecta bank-ul de memorie 0 i de plasa statusul unu-lui logic la portul
B( movlw 0Xff, movwf PORTB ), i astfel programul principal este terminat. Trebuie s facem o alt bucl unde
- 76 -
Microprocesoare i microcontrolere
microcontrolerul s fie inut ca s nu se "rtceasc" dac se ntmpl o eroare. Pentru acest scop, se face o bucl
infinit unde micro-ul este reinut n timp ce sursa este conectat. Necesarul "sfrit" de la concluzia fiecrui
program informeaz translatorul de asamblare c nu mai sunt instruciuni n program.
Directive de control
4.1 #DEFINE Schimb o bucat de text pentru o alta
Sintax:#define<name> [<text ce schimb numele>]
Descriere:De fiecare dat cnd apare <name> n program , va fi nlocuit cu <text ce schimb numele>.
Exemplu:#define turned on 1#define turned off 0
Directive similare: #UNDEFINE, IFDEF,IFNDEF
4.2 INCLUDE Include un fiier adiional ntr-un program
Sintax:
#include <file_name>
#include "
Descriere:
O aplicaie a acestei directive are efect ca i cum ntregul fiier a fost copiat ntr-un loc unde directiva
"include" a fost gsit. Dac numele fiierului este n paranteze ptrate, avem de a face cu un fiier de sistem, i
dac este n interiorul ghilimelelor de citare, avem de a face cu fiier de utilizator. Directiva "include" contribuie
la un traseu mai bun al programului principal.
Exemplu:
#include <regs.h>
#include "subprog.asm"
4.3 CONSTANT D o valoare numeric constant desemnrii textuale
Sintax:
Constant <name>=<value>
Descriere:
De fiecare dat cnd apare <name> n program, va fi nlocuit cu <value>.
Exemplu:
Constant MAXIMUM=100
Constant Length=30
Directive similare: SET, VARIABLE
4.4 VARIABLE D o valoare numeric variabil desemnrii textuale
Sintax:
Variable<name>=<value>
Descriere:
Folosind aceast directiv, desemnarea textual se nlocuiete cu o valoare particular. Difer de
directiva CONSTANT n aceea c dup aplicarea directivei, valoarea desemnrii textuale poate fi nlocuit.
Exemplu:
variable level=20
variable time=13
Directive similare: SET, CONSTANT
- 78 -
Microprocesoare i microcontrolere
4.5 SET Definirea variabilei asamblorului
Sintax:
<name_variable>set<value>
Descriere:
Variabilei <name_variable> i este adugat expresia <value>. Directiva SET este similar lui EQU, dar
cu directiva SET numele variabilei poate fi redefinit urmnd o definiie.
Exemplu:level set 0
length set 12
level set 45
Directive similare: EQU, VARIABLE
4.6 EQU Definind constanta asamblorului
Sintax:
<name_constant> equ <value>
Descriere:
To the name of a constant <name_constant> is added value <value>
Exemplu:
five equ 5
six equ 6
seven equ 7
Instruciuni similare: SET
4.7 ORG Definete o adres de unde programul este nmagazinat n memoria microcontrolerului
Sintax:
<label>org<value>
Descriere:
Aceasta este cea mai frecvent folosit directiv. Cu ajutorul acestei directive definim unde o anumit
parte a programului va fi n memoria program.
Exemplu:
Start org 000
Movlw
Movwf
Primele dou instruciuni ce urmeaz dup prima directiv 'org' sunt memorate de la adresa 00, i
celelalte dou de la adresa 10.
4.8 END Sfrit de program
Sintax:
End
Descriere:
La sfritul fiecrui program este necesar de a plasa directiva 'end' aa ca translatorul de asamblare s
tie c numai sunt instruciuni n program.
Exemplu:
movlw 0xFF
- 80 -
Microprocesoare i microcontrolere
movwf PORTB
end
Instruciuni condiionale
4.9 IF Ramificare de program condiional
Sintax:if<conditional_term>
Descriere: Dac condiia n <conditional_term> este ndeplinit, parte a programului ce urmeaz directivei IF va
fi executat. i dac nu este, partea ce urmeaz directivei ELSE sau ENDIF va fi executat.
Exemplu:
if nivo=100
goto PUNI
else
goto PRAZNI
endif
Directive similare: #ELSE, ENDIF
ELSE 'IF' alternativ la blocul program cu termeni condiionali
Sintax:
Else
Descriere: Folosit cu directiva IF ca o alterntiv dac termenul condiional este incorect.
Exemplu:
If time< 50
goto SPEED UP
else goto SLOW DOWN
endif
Instruciuni similare: ENDIF, IF
4.11 ENDIF Sfritul seciunii de program condiionale
Sintax:
Endif
Descriere: Directiva este scris la sfritul blocului condiional pentru translatorul de asamblare pentru a ti c
este sfritul blocului condiional
Exemplu:
If level=100
goto LOADS
else
goto UNLOADS
endif
Directive similare: ELSE, IF
4.12 WHILE Execuia seciunii programului ct timp condiia este ndeplinit
Sintax:
while<condition>
endw
- 82 -
Microprocesoare i microcontrolere
Descriere: Liniile de program ntre WHILE I ENDW vor fi execuate ct timp condiia este ndeplinit. Dac
condiia se oprete din a mai fi valid, programul continu executarea instruciunilor urmnd linia ENDW.
Numrul de instruciuni dintre WHILE i ENDW poate fi cel mult 100, i numrul de execuii 256.
Exemplu:
While i<10
i=i+1
endw
4.13 ENDW Sfritul prii condiionale a programului
Sintax:
Endw
Descriere:Instuciunea este scris la sfritul blocului WHILE condiional, aa ca translatorul de asamblare s
tie c este sfritul blocului condiional
Exemplu:
while i<10
i=i+1
endw
Directive similare: WHILE
4.14 IFDEF Execuia unei pri de program dac simbolul este definit
Sintax:
ifdef<designation>
Descriere:Dac desemnarea <designation> este definit anterior (cel mai adesea prin instruciunea#DEFINE),
instruciunile ce urmeaz sunt executate pn ce nu se ajunge la directivele ELSE i ENDIF.
Exemplu:
#define test
ifdef test ;how the test is defined instructions from these lines will execute
endif
Directive similare: #DEFINE, ELSE, ENDIF, IFNDEF, #UNDEFINE
4.15 IFNDEF Execuia unei pri de program dac simbolul este definit
Sintax:
ifndef<designation>
Descriere:
Dac desemnarea <designation> nu a fost definit anterior, sau dac definiia ei a fost tears cu directiva
directive #UNDEFINE, instruciunile ce urmeaz sunt executate pn ce nu se ajunge la directivele ELSE i
ENDIF.
Exemplu:
#define test
#undefine test
ifndef test ;how the test is undefined
instructions from these lines will execute
endif
- 84 -
Microprocesoare i microcontrolere
Directive similare: #DEFINE, ELSE, ENDIF, IFDEF, #UNDEFINE
Directive de Date
4.16 CBLOCK Definind un bloc pentru constantele numite
Sintax:
Cblock [<term>] <label>[:<increment>], <label>[:<increment>].
Endc
Descriere: Directiva este folosit pentru a da valori constantelor numite. Fiecare termen ce urmeaz primete o
valoare mai mare cu unu dect precursorul lui. Dac parametrul <increment> este de asemenea dat, atunci
valoarea dat n parametrul <increment> este adugat constantei urmtoare. Valoarea parametrului <term> este
valoarea de pornire. Dac nu este dat, este considerat a fi zero.
Exemplu:
Cblock 0x02
First, second, third ;first=0x02, second=0x03, third=0x04
Endc
cblock 0x02
first : 4, second : 2, third ;first=0x06, second=0x08, third=0x09
endc
Directive similare: ENDC
4.17 ENDC Sfritul definiiei blocului constante
Sintax:
Endc
Descriere:Directiva este folosit la sfritul definiiei unui bloc de constante ca translatorul de asamblare s tie
c nu mai sunt constante.
Directive similare: CBLOCK
4.18 DB Definind date de un byte
Sintax:
[<term>]db <term> [, <term>,.....,<term>]
Descriere:Directiva rezerv un byte n memoria de program. Cnd sunt mai muli termeni ce au nevoie s li se
desemneze un byte de fiecare, ei vor fi desemnai unul dup altul.
Exemplu:
db 't', 00f, 'e', 's', 012
Instruciuni similare: DE, DT
4.19 DE Definind Byte-ul de memorie EEPROM
Sintax:
[<term>] de <term> [, <term>,....., <term>]
Descriere:Directiva este folosit pentru definirea byte-ului de memorie EEPROM. Chiar dac a fost iniial
intenionat doar pentru memoria EEPROM, poate fi folosit pentru oricare alt locaie de memorie.
Exemplu:
org H'2100'
de "Version 1.0" , 0
- 86 -
Microprocesoare i microcontrolere
Instruciuni similare: DB, DT
4.20 DT Definin tabelul de date
Sintax:
[<term>] dt <term> [, <term>,........., <term>]
Descriere:Directiva genereaz seria RETLW de instruciuni, o instruciune de fiecare termen.
Exemplu:
dt "Message", 0
dt first, second, third
Directive similare: DB, DE
Configurnd o directiv
4.21 _CONFIG Setarea the biilor configuraionali
Sintax:
-config<term> or__config<address>,<term>
Descriere: Sunt definite oscilatorul, aplicaia timer watchdog i circuitul intern de reset. nainte de folosirea
acestei directive, procesorul trebuie definit folosind directiva PROCESSOR.
Exemplu:
_CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC
Directive similare: _IDLOCS, PROCESSOR
4.22 PROCESSOR Definind modeul microcontrolerului
Sintax:
Processor <microcontroller_type>
Descriere:Instruciunea
seteaz
tipul
microcontrolerului
unde
programarea
este
fcut.
Exemplu:
processor 16F84
Fiiere create ca rezultat al translrii programului
Ca un rezultat al procesului translrii unui program scris n limbaj de asamblare obinem fiiere ca:
Fiier de executare (Program_Name.HEX)
Fiier de erori program (Program_Name.ERR)
Fiier list (Program_Name.LST)
Primul fiier conine programul translat ce este citit n microcontroler prin programareare. Coninutul
lui nu poate da orice informaie programatorului, aa c nu ne vom mai referi la ele n continuare. Al doilea
fiier conine posibile erorile ce au fost fcute n procesul scrierii, i ca au fost observate de translatorul de
asamblare n timpul procesului de translare. Erorile pot fi descoperite de asemenea ntr-un fiier "list". Acest
fiier este mai potrivit dei cnd programul este mare i vederea fiierului "list" dureaz mai mult.
Al treilea fiier este cel mai folositor programatorului. n el sunt coninute multe informaii, ca
informaii despre instruciunile de poziionare i variabilele din memorie, sau semnalizarea erorii.
Exemplu unui fiier "list" pentru program urmeaz n acest capitol. n captul fiecrei pagini se gsesc
informaii despre numele fiierului, data cnd a fost translat i numrul paginii. Prima coloan conine o adres
din memoria programului unde este plasat o instruciune din acel rnd. A doua coloan conine o valoare a
oricrei variabile definit de una din directive: SET, EQU, VARIABLE, CONSTANT or CBLOCK. A treia
- 88 -
Microprocesoare i microcontrolere
coloan este rezervat pentru forma unei instruciuni translate pe care PIC-ul o execut. A patra coloan conine
instruciunile asamblorului i comentariile programatorului. Posibile erori vor apare ntre rnduri urmnd o linie
n care s-a produs eroarea.
- 90 -
Microprocesoare i microcontrolere
- 92 -
Microprocesoare i microcontrolere
CAPITOLUL 4
PROGRAMUL MPLAB
4.1 Introducere
MPLAB este un pachet de program Windows ce face scrierea i dezvoltarea unui program mai uoar.
Poate fi descris cel mai bine ca un mediu de dezvoltare pentru un limbaj de programare standard ce este
intenionat pentru programarea unui computer PC. Unele operaii ce erau fcute din linia de instruciuni cu un
numr mare de parametri pn la descoperirea IDE-ului, "Integrated Development Environment", sunt acum
fcute mai uoare prin folosirea MPLAB. Totui, gusturile noasre difer, aa c chiar astzi unii programatori
prefer editoarele standard i compilatoarele din linia de instruciuni. n orice caz, programul scris este uor de
citit, i este disponibil un help bine documentat.
4.2 Instalarea programului -MPLAB
MPLAB const din cteva pri:
- Gruparea fiierelor aceluiai proiect ntr-un singur proiect (Project Manager)
- Generarea i procesarea unui program (Text Editor)
- Simulator de program scris folosit pentru simularea funcionrii programului n microcontroler.
n afar de acestea, sunt sisteme de susinere pentru produsele Microchip ca PICStart Plus i ICD (In
Circuit Debugger). Pentru c aceast carte nu acoper acestea, ele vor fi menionate doar ca opiuni.
Cerinele minime pentru computer pentru rularea lui MPLAB sunt:
Computer compatibil PC 486 sau mai recent
Microsoft Windows 3.1x sau Windows 95 i noile versiuni ale sistemului de operare Windows
VGA graphic card
8MB memorie (32MB recomandat)
20MB spaiu pe hard disc
Mouse
Pentru a porni MPLAB-ul trebuie s-l instalm. Instalarea este un proces de copiere a fiierelor de pe
CD pe un hard disc al computerului. Este o opiune pentru fiecare fereastr ce v ajut s v ntoarcei la cea
precedent, aa ca erorile s nu prezinte o problem sau s devin o experien stresant. Instalarea propriu-zis
are loc ca la majoritatea programelor Windows. Mai nti apare ecranul Windows, apoi putei alege opiunile
urmate de instalarea propriu-zis, i n sfrit, apare mesajul care spune programul dumneavoastr instalat este
gata de start.
Pai pentru instalarea MPLAB:
1. Pornii Windows-ul Microsoft
2. Punei the discul CD Microchip n CD ROM
3. Facei clic pe START n partea stng de jos a ecranului i alegei opiunea RUN
4. Facei clic pe BROWSE i selectai driver-ul CD ROM-ului computerului.
5. Gsii directorul numit MPLAB pe CD ROM-ul dumneavoastr
6. Facei clic pe SETUP.EXE i apoi pe OK .
7. Facei clic din nou pe OK n fereastra dumneavoastr RUN
- 94 -
Microprocesoare i microcontrolere
Instalarea ncepe dup aceti apte pai. Urmtoarele imagini explic nelesul unor pai ai instalrii.
- 96 -
Microprocesoare i microcontrolere
DOS, trebuie s deselectai toate opiunile referitoare la Windows, i s alegei componentele potrivite pentru
DOS.
- 98 -
Microprocesoare i microcontrolere
o nou versiune MPLAB. n cazul nostru ar trebui s lsm selectat NO din cauza presupunerii c aceasta este
prima instalare a MPLAB-ului n computerul dumneavoastr.
Figura 5 Opiune pentru utilizatorii care instaleaz o versiune nou peste o versiune deja instalat de MPLAB
Start meniu este un grup de pointeri de program, i este selectat prin clic pe opiunea START n colul
de jos stng al ecranului. Pentru c MPLAB se va porni de aici, trebuie s lsm aceast opiune aa cum este.
- 100 -
Microprocesoare i microcontrolere
- 102 -
Microprocesoare i microcontrolere
- 104 -
Microprocesoare i microcontrolere
- 106 -
Microprocesoare i microcontrolere
dorim s scriem un program i prin programator s scriem ' hex file' ntr-un microcontoler. Selecia modelului
microcontrolerului este fcut n partea dreapt. Pentru c aceast carte este bazat pe PIC16F84, trebuie selectat
acest model.
De obicei cnd ncepem s lucrm cu microcontrolere, folosim un simulator. Dup cum nivelul cunoaterii va
crete, programul se va scrie ntr-un microcontroler imediat dup translare. Sfatul nostru este ca s folosii
totdeauna simulatorul. Chiar dac programul va prea c se dezvolt lent, se va merita la sfrit.
4.4 Conceperea unui proiect
Pentru a ncepe s scriei un program avei nevoie s creai mai inti un proiect. Fcnd clic pe
PROJECT --> NEW PROJECT putei s v denumii proiectul i s-l memorai ntr-un director pe care-l dorii.
n imaginea de mai jos, este creat un proiect numit 'test.pjt' i memorat n directorul c:\PIC\PROJEKTS\.
Acest director este ales pentru c autorii au ales acest director n calculatorul lor. n general, un director
cu fiiere este plasat de obicei ntr-un director mai mare a crui nume este asociat negreit cu coninutul lui.
- 108 -
Microprocesoare i microcontrolere
- 110 -
Microprocesoare i microcontrolere
Din aceast imagine observm c sunt diferii parametri. Fiecare fel corespunde la un parametru n
"Command line". Pentru c memorarea acestor parametri este foarte necomfortabil, chiar interzis pentru
nceptori, s-a introdus ajustarea grafic. Din imagine observm ce opiuni trebuie deschise. Fcnd clic pe OK
ne ntoarcem la fereastra anterioar unde "Add node" este o opiune activ. Fcnd clic pe ea obinem
urmtoarea fereastr unde ne denumim programul asamblor. S-l denumim"Test.asm" pentru c acesta este
primul nostru program n MPLAB.
- 112 -
Microprocesoare i microcontrolere
- 114 -
Microprocesoare i microcontrolere
- 116 -
Microprocesoare i microcontrolere
Cnd obinem aceast fereastr, trebuie s scrierm'test.asm' mai jos de 'File name:', i facem clic pe
OK. Dup aceea, vom observa numele fiierului 'test.asm' n partea de sus a ferestrei noastre.
4.6 Scrierea unui program
Numai dup ce toate operaiile precedente au fost terminate suntem capabili s ncepem s scriem un
program. Pentru c un program simplu a fost deja scris n seciunea crii "Programare n Limbaj de Asamblare",
vom folosi acelai program aici, de asemenea.
Programul trebuie s fie scris ntr-o fereastr care este deschis, sau copiat de pe un disc, sau luat din
prezentarea Mikroelektronika Internet folosind opiunile copy i paste. Cnd programul este copiat n "test.asm"
window, putem folosi comanda PROJECT -> BUILD ALL (dac nu sunt erori), i o nou fereastr va apare ca n
imaginea urmtoare.
- 118 -
Microprocesoare i microcontrolere
- 120 -
Microprocesoare i microcontrolere
- 122 -
Microprocesoare i microcontrolere
Figura 22 Simulator cu ferestre deschise pentru regitri SFR, fiierul regitrilor i variabile.
Comanda urmtoare ntr-un simulator este DEBUG>RUN>STEP care ncepe paii notri prin program.
Aceeai comand ar fi putut fi desemnat de la o tastatur cu tasta <F7> (n general, toate comenzile importante
au taste desemnate de le claviatur). Folosind tasta F7, programul este executat pas cu pas. Cnd obinem un
macro, fiierul coninnd un macro este deschis (Bank.inc), i continum cu macro. ntr-o fereastr cu regitri
SFR putem observa cum registrul W primete valoarea 0xFF i pe care o trimite la portul B. Fcnd clic pe tasta
F7 din nou, nu obinem nimic pentru c programul a ajuns ntr-o "infinite loop"-bucl infinit. Bucla infinit este
un termen pe care l ntlnim adesea. Reprezint bucla din care un microcontroler nu poate iei pn nu se
ntmpl ntreruperea (dac este folosit ntr-un program), sau pn ce micorcontrolerul va fi resetat.
4.8 Toolbar
Pentru c MPLAB are mai mult de o component, fiecare component are bara sa de instrumente,
toolbar-ul su. Totui, este un toolbar care este un fel de compilaie a tuturor toolbar-ilor, i poate servi ca un
toolbar folosit n mod uzual. Acest toolbar este de ajuns pentru nevoile noastre, i va fi descris n detaliu. n
figura de mai jos putem vedea un toolbar pentru care avem nevoie de o scurt explicaie pentru fiecare icon. Din
cauza formatului limitat a cestei cri, acest toolbar este reprezentat ca un toolbar suspendat. n general, este
plasat orizontal mai jos de menu, de-a lungul ntregului ecran.
- 124 -
Microprocesoare i microcontrolere
- 126 -
Microprocesoare i microcontrolere
transferarea datelor n sistemul operaional Windows. Mai trziu, fcnd clic pe acest icon poate fi
lipit-'pasted' n textul unde este cursorul.
Salvnd un program (fiier asamblor).
Starteaz execuia programului la vitez maxim.Se recunoate prin apariia unei linii de stare
galbene. Cu acest fel de execuie de program, simulatorul execut un program la vitez maxim
pn ce este ntrerupt de un clic pe iconul cu lumin roie de trafic.
Oprete execuia programului la vitez maxim. Dup clic pe acest icon, linia de stare devine gri din
nou, i execuia programului poate continua pas cu pas.
Pas cu pas execuia programului. Fcnd clic pe acest icon, ncepem executarea unei instruciuni din
linia urmtoare n legtur cu cea curent.
Cerere de a sri-skip. Pentru c simulatorul este totui o simulare de software de lucru real, este
posibil de a sri pur i simplu peste unele cereri ale programului. Aceasta este n special la ndemn
cu instruciuni ce ateapt o anumit cerere dup care programul poate s continue. Acea parte a
programului ce urmeaz unei cerei este partea ce este interesant pentru un programator.
Resetnd un microcontroler. Fcnd clic pe acest icon, contorul programului este poziionat la
nceputul programului i simularea poate ncepe.
Fcnd clic pe acest icon obinem o fereastr cu un program, dar de aceast dat ca memorie de
program unde putem veea ce instruciune este gsit i la ce adres.
Cu ajutorul acestui icon obinem o fereastr cu coninutul memoriei RAM a microcontrolerului.
Fcnd clic pe acest icon, apare fereastra cu registrul SFR. Pentru c regitrii SFR sunt folosii n
fiecare program, este recomandat ca n simulator aceast fereastr s fie totdeauna activ.
Dac un program conine variabile ale cror valoare trebuie s le urmrim (ex. contorul), o fereastr
are nevoie s fie adgat pentru fiecare din ele, ceea ce se face prin folosirea acestui icon.
Cnd unele erori ntr-un program sunt evideniate n timpul procesului de simulare, programul
trebuie corectat. Pentru c simulatorul folosete fiier HEX ca intrare a sa, trebuie s translm un
program din nou aa ca toate schimbrile s fie transferate ntr-un simulator. Fcnd clic pe acest
icon, ntregul proiect este translat din nou, i obinem versiunea mai nou a fiierului HEX pentru
simulator.
- 128 -
Microprocesoare i microcontrolere
CAPITOLUL 5
APLICAII
5.1 Introducere
Exemplele oferite n aceast capitol v vor arta cum s conectai microcontrolerul PIC cu alte
componente sau dispozitive periferice cnd producei propriul sistem bazat pe microcontroler. Fiecare exemplu
conine descriere detaliat a prii hardware cu schema electric i comentarii despre program. Toate programele
pot fi luate direct din prezentarea de pe internet MikroElektronika.
- 130 -
Microprocesoare i microcontrolere
Ledurile sunt unele dintre cele mai folosite elemente n electronic. LED este o abreviere pentru Light
Emitting Diode. n momentul n care alegem un led, sunt mai muli parametri de care trebuie s inem seama:
diametrul, care este deobicei 3 sau 5mm (milimetri), curentul de funcionare care este n jur de 10mA (poate fi
mai mic dect 2mA pentru ledurile cu randament maxim: emisie de lumin puternic) i bineneles culoarea,
care poate fi roie sau verde dei mai sunt leduri portocalii, albastre, galbene... . Ledurile trebuie conectate corect
pentru a emite lumin i rezistena care limiteaz curentul trebuie s fie de o valoare corect pentru ca ledul s nu
se ard (supranclzire). Tensiunea pozitiv de alimentare este legat la ANOD, iar catodul este legat la tensiunea
negativ sau la masa circuitului. Pentru a identifica fiecare pin, catodul este cel mai scurt pin iar corpul are n
general o teitur pe partea catodului. Diodele vor emite lumin numai dac curentul circul de la ANOD spre
CATOD. Altfel jonctiunea PN este polarizat invers i curentul nu va circula. Pentru a conecta corect un led
trebuie adugat o rezisten n serie pentru a limita de curentul prin diod, pentru ca aceasta s nu se ard.
Valoarea rezistenei este determinat de curentul care vrei s circule prin led. Curentul maxim care poate curge
printr-un led a fost stabilit de productor. Ledurile cu randament maxim pot produce rezultate bune cu un curent
mai mic de de 2mA.
Pentru a determina valoarea rezistenei serie, trebuie s cunoatem valoarea tensiunii de alimentare. De
aici scdem tensiunea care cade pe led. Aceast valoare va varia de la 1,2v la 1,6v, depinznd de culoarea
ledului. Rspunsul este valoarea lui Ur. Folosind aceast valoare i curentul care vrem s circule prin LED
(ntre 0.002A i 0.01A) putem s aflm valoarea rezistenei cu ajutorul formulei: R=UR / I.
- 132 -
Microprocesoare i microcontrolere
- 134 -
Microprocesoare i microcontrolere
5.3 Tastatura
Tastaturile sunt dispozitive mecanice utilizate pentru a executa o ntrerupere sau pentru a realiza o
conexiune ntre dou puncte. Ele au diferite mrimi i au diferite scopuri. Tastele care sunt utilizate aici sunt
denumite taste dip. Ele sunt lipite direct pe o plac de circuit i sunt deseori ntlnite n electronic. Au patru
pini (doi pentru fiecare contact), ceea ce le ofer stabilitate mecanic.
- 136 -
Microprocesoare i microcontrolere
- 138 -
Microprocesoare i microcontrolere
- 140 -
Microprocesoare i microcontrolere
5.4 Optocuplor
Optocuplorul combin un LED i un fototranzistor n aceeai capsul. Rolul unui optocuplor este acela
de a separa dou pri de circuit.
Aceasta este realizat pentru un numr de motive:
-Interferena. O parte a unui circuit poate fi ntr-o zon unde este influenat de interferene (cum ar fi cele de la
motoarele electrice, echipamente de sudur, motoare termice etc.). Dac ieirea acestui circuit trece printr-un
- 142 -
Microprocesoare i microcontrolere
optocuplor spre alt circuit, numai semnalele dorite vor trece prin optocuplor. Semnalele de interferen nu vor
avea destul putere s activeze LEDul din optocuplor i de aceea ele sunt eliminate. Exemplele tipice sunt
unitile industriale care au mai multe interferene care afecteaz semnalele pe cablu. Dac aceste interferene
afecteaz funcia unei seciuni de control, vor apare erori i unitatea nu va mai funciona.
-Separare simultan i intensitatea semnalului. Un semnal mai mic de 3v este capabil s activeze un optocuplor
i ieirea optocuplorului poate fi conectat la o linie de intrare a microcontrolerului. Microcontrolerul are nevoie
de un impuls de intrare de 5v i n caz semnalul de 3v este amplificat la 5v. Poate fi folosit pentru a amplifica
curentul semnalului. Uitai-v mai jos pentru utilizarea unei linii de ieire a microcontrolerului pentru
amplificare de curent.
-Separare de tensiune mare. Optocuploarele au caliti nnscute pentru separarea tensiunilor mari. Deoarece
LEDul este complet separat de fototranzistor, optocuploarele pot da dovad de izolare de tensiune de 3Kv sau
chiar mai mare.
Optocuploarele pot fi folosite ca dispozitive de intrare sau ieire. Ele au funcii adiionale cum ar fi
Schmitt triggering (ieirea unui Schmitt trigger este 0 sau 1 se schimb ncet ridicnd i cobornd forma de
und n valori definite LOW sau HIGH). Optocuploarele sunt mpachetate ca o singur unitate sau n grupuri de
dou sau mai multe ntr-o singur capsul. Ele mai sunt denumite foto-ntreruptoare n care un disc cu fante este
introdus ntr-un lca ntre LED i fototranzistor i de fiecare dat cnd lumina este ntrerupt, tranzistorul
produce un impuls. Fiecare optocuplor are nevoie de dou alimentri pentru a funciona. Ele pot fi folosite cu o
alimentare, dar capacitatea de izolare a tensiunii este pierdut.
-Optocuplor pe o linie de intrare
Modul de funcionare este simplu: cnd ajunge un semnal, LEDul din optocuplor este aprins i
lumineaz pe baza fototranzistorului din aceeai carcas. n momentul n care tranzistorul este activat, tensiunea
dintre colector i emitor cade la 0.5v sau mai puin i microcontrolerul sesizeaz acest lucru ca zero logic pe
pinul RA4. Exemplul de mai jos este un contor, folosit pentru numrarea produselor de pe o linie de producie,
pentru determinarea vitezei motorului, pentru contorizarea numrului de revoluii a unei axe etc. Considerm
senzorul ca un microntreruptor. De fiecare dat cnd ntreruptorul este nchis, LEDul este luminat. LEDul
transfer semnalul ctre fototranzistor i operaia fototranzistorului livreaz LOW ctre intrarea RA4 a
microcontrolerului. Un program n microcontroler va fi necesar pentru a preveni contorizrile false i un
indicator conectat la oricare dintre ieirile microcontrolerului va indica starea curent a contorului.
- 144 -
Microprocesoare i microcontrolere
Figura 5 Exemplu de linie de intrare cu optocuplor
-Optocuplor pe o linie de ieire
Un optocuplor poate fi folosit pentru a separa semnalul de ieire a unui microcontroler fa de un
dispozitiv de ieire. Acest lucru poate Releul
Releul este un dispozitiv electromecanic care transform un semnal electric ntr-o micare mecanic. El este
alctuit dintr-o bobin din conductori izolai nfurai pe un nucleu metalic i o armtur metalic cu unul sau
mai multe contacte. n momentul n care o tensiune de alimentare este aplicat la bornele unei bobin, curentul
circul i va fi produs un cmp magnetic care mic armtura pentru a nchide un set de contacte i/sau pentru a
deschide un alt set. Cnd alimentarea este dezactivat din releu, cade fluxul magnetic din bobin i se produce o
tensiune nalt n direcia opus. Aceast tensiune poate strica tranzistorul de comand i de aceea este conectat
o diod cu polarizare invers de-a lungul bobinei pentru a scurtcircuita vrfurile de tensiune n momentul n care
apar.
- 146 -
Microprocesoare i microcontrolere
- 148 -
Microprocesoare i microcontrolere
Ieirea buzzerului piezo are cea mai nalt frecven i durata de 2 cicluri de 65.3ms, ceea ce rezult 130.6ms.
Exemplu 2: BEEP 0x90, 0x05
Ieirea buzzerului piezo are frecvena de 0x90 i durata de 5 cicluri de 65.3ms. Este bine ca argumentele
macroului s fie determinate prin experimente i astfel s fie ales sunetul care se potrivete cel mai bine pentru
aplicaie. n continuare este prezentat macroul BEEP:
- 150 -
Microprocesoare i microcontrolere
- 152 -
Microprocesoare i microcontrolere
Urmtorul exemplu arat ntrebuinarea unui macro ntr-un program. Programul produce dou melodii
care sunt obinute prin apsarea T1 sau T2. Cteva din macrourile discutate anterior sunt incluse n program.
- 154 -
Microprocesoare i microcontrolere
Ar fi necesar pentru separarea tensiunilor nalte sau pentru amplificare. Ieirea unor anumite
microcontrolere este limitat la 25mA. Optocuplorul va lua semnal de curent sczut din microcontroler i
tranzistorul de ieire va comanda un LED sau un releu, cum este exemplificat mai jos:
- 156 -
Microprocesoare i microcontrolere
- 158 -
Microprocesoare i microcontrolere
Datele provenite de la pinii registrului de deplasare sunt stocate n variabila data. Variabila
Time/counter este folosit pe post de contor bucl. Textul macroului:
Exemplul care v arat cum s folosii macroul HC597 este n programul urmtor. Programul
recepioneaz date de la intrarea paralel a registrului de deplasare i le mut serial n variabila RX a
microcontrolerului. LEDurile conectate la portul B vor indica rezultatul datelor de intrare.
- 160 -
Microprocesoare i microcontrolere
- 162 -
Microprocesoare i microcontrolere
Registru de deplasare de ieire
Regitrii de deplasare de ieire transform datele seriale n date paralele. Pe fiecare front cresctor al
tactului, registrul de deplasare citete valoarea de la linia de date, o memoreaz ntr-un registru temporar, apoi
repet acest ciclu de 8 ori. La un semnal de la linia latch, datele sunt copiate din registrul de deplasare n
registrul de intrare, apoi datele sunt transformate din date seriale n date paralele.
variabil
crei
coninut
este
transferat
la
ieirea
registrului
de
deplasare.
- 164 -
Microprocesoare i microcontrolere
Un exemplu al utilizrii macroului HC595 este n programul urmtor. Datele provenite de la variabila
TX sunt transferate serial n registrul de deplasare. LEDurile conectate la ieirea paralel a registrului de
deplasare vor indica starea liniilor. n acest exemplu valoarea 0xCB (11001011) este transmis astfel nct
LEDurile 8, 7, 4, 2 i 1 sunt iluminate.
- 166 -
Microprocesoare i microcontrolere
- 168 -
Microprocesoare i microcontrolere
5.7 Afiaj cu 7 segmente (multiplexare)
Segmentele ntr-un afiaj cu 7 segmente sunt aranjate astfel nct s formeze un singur digit de la 0 la F,
dup cum se observ n desen:
- 170 -
Microprocesoare i microcontrolere
- 172 -
Microprocesoare i microcontrolere
- 174 -
Microprocesoare i microcontrolere
Realizarea macroului arat modalitatea de utilizare a macrourilor ntr-un program. Programul afieaz
numrul 21 n 2 digii cu 7 segmente.
- 176 -
Microprocesoare i microcontrolere
5.8 Afiaj LCD
Multe dispozitive cu microcontroler folosesc LCDuri inteligente pentru a afia informaia vizual.
Urmtorul material se ocup de conectarea unui afiaj LDC Hitachi la un microcontroler PIC. Afiajele LCD
proiectate cu HD44780, modulul pentru LCD fabricat de Hitachi, nu sunt scumpe i sunt uor de folosit, i chiar
posibil s produc verificarea datelor afiate folosind cei 8x80 pixeli ai afiajului. Afiajele LCD Hitachi conin
un set de caractere ASCII plus simboluri japoneze, greceti i matematice.
Fiecare dintre cei 640 de pixeli ai afiajului trebuie s poat fi accesat individual i aceasta se poate
realiza cu un numr de integrate SMD pentru control montate pe spatele afiajului. Aceasta ne salveaz de o
cantitate enorm de fire i de un control adecvat astfel nct sunt necesare doar cteva linii pentru a accesa
afiajul. Putem comunica cu afiajul prin intermediul unui bus de date pe 8 bii sau de 4 biti. Pentru un bus de 8
biti, afiajul are nevoie de o tensiune de alimentare de +5v i 11 linii I/O. Pentru un bus de 4 bii sunt necesare
doar liniile de alimentare i 7 linii. Cnd afiajul LCD nu este pornit liniile de date sunt TRI-STATE, ceea ce
nseamn c ele sunt n stare de nalt impedan (ca i cum ar fi deconectate) i astfel nu interfereaz cu
funcionabilitatea microcontrolerului cnd afiajul nu este adresat. LCDul necesit de altfel 3 linii de control de
la microcontroler.
Linia Enable (E) permite accesul la afiaj prin intermediul liniilor R/W i RS. Cnd aceast linie este LOW,
LCDul este dezactivat i ignor semnalele de la R/W i RS. Cnd linia (E) este HIGH, LCDul verific starea
celor dou linii de control i rspunde corespunztor.
Linia Read/Write (R/W) stabilete direcia datelor dintre LCD i microcontroler. Cnd linia este LOW, datele
sunt scrise n LCD. Cnd este HIGH, datele sunt citite de la LCD.
Cu ajutorul liniei Register select (RS), LCD interpreteaz tipul datelor de pe liniile de date. Cnd este LOW, o
instruciune este scris n LCD. Cnd este HIGH, un caracter este scris n LCD.
Starea logic a liniilor de control:
E 0 Accesul la LCD dezactivat
1 Accesul la LCD activat
R/W 0 Scrie date n LCD
1 Citete date din LCD
RS 0 Instruciuni
1 Caracter
Scrierea datelor n LCD se realizeaz n civa pai:
se seteaz bitul R/W LOW
se seteaz bitul RS n 0 sau 1 logic (instruciune sau caracter)
se trimit datele ctre liniile de date (dac se execut o scriere)
se seteaz linia E HIGH
se citesc datele de la liniile de date (dac se execut o citire)
Citirea datelor de la LCD se realizeaz similar, cu deosebirea c linia de control R/W trebuie s fie
HIGH. Cnd trimitem un HIGH ctre LCD, el se va reseta i va accepta instruciuni. Instruciunile tipice care
sunt transmise ctre un afiaj LCD dup reset sunt: pornirea afiajului, activarea cursorului i scrierea
caracterelor de la stnga spre dreapta. n momentul n care un LCD este iniializat, el este pregtit sa primeasc
date sau instruciuni. Dac recepioneaz un caracter, el l va afia i va muta cursorul un spaiu la dreapta.
- 178 -
Microprocesoare i microcontrolere
Cursorul marcheaz locaia urmtoare unde un caracter va fi afiat. Cnd dorim s scriem un ir de caractere,
mai nti trebuie s setm adresa de start, i apoi s trimitem cte un caracter pe rnd. Caracterele care pot fi
afiate pe ecran sunt memorate n memoria video DD RAM (Data Display RAM). Capacitatea memoriei DD
RAM este de 80 bytes.
Afiajul LCD mai conine 64 bytes CG RAM ( Character Generator
RAM). Aceast memorie este rezervat pentru caracterele definite de
utilizator. Datele din CG RAM sunt reprezentate sub form de
caractere bitmap de 8 biti. Fiecare caracter ocup maxim 8 bytes n CG
RAM, astfel numrul total de caractere pe care un utilizator poate s le
defineasc este 8. Pentru a afia caracterul bitmap pe LCD, trebuie
setat adresa CG RAM la punctul de start (de obicei 0) i apoi s fie
scrise datele n afiaj. Definirea unui caracter special este
exemplificat n figur.
nainte de a accesa DD RAM, dup definirea unui caracter special, programul trebuie s seteze adresa
n DD RAM. Orice scriere i citire a datelor din memoria LCD este realizat de la ultima adres care a fost
setat, folosind instruciunea set-adress. Odat ce adresa DD RAM este setat, un caracter nou va fi afiat n
locul potrivit pe ecran. Pn acum am discutat operaia de scriere i citire a memoriei unui LCD ca i cum ar fi o
memorie obinuit. Acest lucru nu este adevrat. Controlerul LCD are nevoie de 40 pn la 120 microsecunde
(us) pentru scriere i citire. Alte operaii pot dura pn la 5 ms. n acest timp microcontrolerul nu poate accesa
LCDul, astfel un program trebuie s tie cnd un LCD este ocupat. Putem rezolva aceasta n dou metode.
O metod este verificarea bitului BUSY de pe linia de date D7. Aceasta nu este cea mai bun metod
pentru c LCDul se poate bloca i programul va sta ntr-o bucl infinit verificnd bitul BUSY. O alt metod
este introducerea unei ntrzieri n program. ntrzierea trebuie s fie destul de lung pentru ca LCDul s termine
operaia n desfurare. Instruciunile pentru scriere i citire cu memoria LCDului sunt afiate mai sus. La
nceput am menionat c avem nevoie de 11 linii I/O pentru a comunica cu un LCD. Oricum, putem comunica cu
un LCD printr-un bus de 4 linii. Putem reduce numrul total de linii de comunicaie la 7. Schema pentru
conectarea printr-un bus de 4 biti este n imaginea de mai jos. n acest exemplu folosim un afiaj LCD cu 2x16
caractere, denumit LM16x212 fabricat de productorul japonez Sharp. Mesajul character este scris pe prima
linie urmat de dou caractere speciale ~ i }. Pe a doua linie este scris cuvntul mikroElektronika.
- 180 -
Microprocesoare i microcontrolere
- 182 -
Microprocesoare i microcontrolere
- 184 -
Microprocesoare i microcontrolere
- 186 -
Microprocesoare i microcontrolere
Macro pentru lucrul cu LCD
Macroul LCDinit este utilizat pentru a iniializa portul conectat la LCD. LCDul este configurat s mearg n
modul de 4 bii.
Exemplu: LCDinit
LCDchar LCDarg scrie un caracter ASCII. Argumentul este caracterul ASCII.
Exemplu: LCDchar d
LCDw scrie caracterul din registul W.
Exemplu: movlw p
LCDw
LCDcmd LCDcommand trimite comenzi.
Exemplu: LCDcmd LCDCH
LCD_DDAdr DDRamAddress seteaz adresa DD RAM
xemplu: LCD_DDAdr .3
LCDline line_num seteaz poziia cursorului la nceputul primei sau celei de-a doua linie.
Exemplu: LCDline 2
Cnd lucrm cu microcontrolere numerele sunt reprezentate n form binar. Din aceast cauz ele nu
pot fi afiate. Pentru aceasta este necesar s schimbm numerele dintr-un sistem binar ntr-un sistem zecimal
pentru ca ele s fie uor de neles. Sursele celor dou macrouri LCDval_08 i LCDval_16 sunt prezentate mai
jos.
Macroul LCDval_08 realizeaz conversia unui numr binar de 8 bii ntr-un numr zecimal de la 0 la
255 i l afieaz. Este necesar s declarm urmtoarele variabile n programul principal: TEMP1, TEMP2, LO,
LO_TEMP, Bcheck. Numrul binar de 8 bii este n variabila LO. Cnd macroul este executat, echivalentul
zecimal al acestui numr este afiat. Zerourile precedente numrului nu sunt afiate.
Macroul LCDval_16 realizeaz conversia unui numr binar de 16 bii ntr-un numr zecimal de la 0 la
65535 i l afieaz. Urmtoarele variabile trebuie declarate n programul pricipal: TEMP1, TEMP2, TEMP3,
LO, HI, LO_TEMP. HI_TEMP, Bcheck. Numrul binar de 16 bii este n variabilele LO i HI. Cnd macroul este
executat, echivalentul zecimal al acestui numr este afiat. Zerourile precedente numrului nu sunt afiate.
Programul principal este o demontraie pentru utilizarea afiajelor LCD i desenarea de noi caractere.
La nceputul programului, trebuie s declarm variabilele LCDbuf i LCDtemp folosite n subrutinele pentru
LCD, ct i portul microcontrolerului conectat la LCD. Programul scrie mesajul characters: pe prima linie
urmat de dou caractere speciale ~ i }. Pe cea de-a doua linie este afiat mikroElektronika.
- 188 -
Microprocesoare i microcontrolere
- 190 -
Microprocesoare i microcontrolere
- 192 -
Microprocesoare i microcontrolere
- 194 -
Microprocesoare i microcontrolere
5.9 Convertor analog digital de 12 bii
Deoarece totul n lumea microcontrolerelor este reprezentat cu 0 i 1, ce facem cu un semnal care este
0.5 sau 0.77? Aproape toat lumea exterioar unui calculator consist din semnale analogice. n afar de vorbire
i muzic, sunt multe cantiti care trebuie cuantificate ntr-un calculator. Umiditatea, temperatura, presiunea
aerului, culoarea, turbidity, i concentraia metanului sunt doar o parte. Rspunsul este s lum un numr de linii
digitale pe care s le combinm asfel nct ele s exprime o valoare analogic. O valoare analogic este orice
valoare dintre 0 i 1. O putei numi valoare fracional. Toate cantitile de mai sus trebuie s fie convertite la o
valoare cuprins ntre 0 i 1 astfel s fie utilizat ntr-un calculator. Acesta este conceptul cel mai rspndit. El
devine ceva mai puin complex n aplicaii. Dac lum 8 linii i le aranjm astfel nct s accepte valori binare,
rezultatul total va fi 256 (acesta este obinut de o numrare pn la 255 plus valoarea 0). Dac conectm aceste 8
linii ntr-o cutie neagr, vor fi numite linii de ieire i astfel trebuie s-i furnizm o singur linie de intrare. Cu
acest aranjament putem detecta pn la 255 incrementri ntre 0 i 1. Aceast cutie neagr este denumit
CONVERTOR i pentru c noi convertim din Analog n Digital, convertorul se numete convertor AD sau ADC
(Analog to Digital Convertor). Convertoarele AD pot fi clasificate dup parametrii diferii. Cei mai importani
parametri sunt precizia i modul de transfer al datelor. Referitor la precizie, domeniul este: 8 bii, 10 bii, 12 bii,
14 bii, 16 bii. Deoarece conversia pe 12 bii este un standard industrial, exemplul de mai jos a fost realizat cu
ajutorul unui convertor pe 12 bii. Cellalt parametru important este modul prin care datele sunt transferate n
microcontroler. Poate fi paralel sau serial. Transmisia paralel este mai rapid. Oricum, aceste convertoare sunt
deobicei mai scumpe. Transmisia serial este mai lent, dar considernd preul sczut i numrul redus de linii de
intrare la un microcontroler, este transmisia preferat pentru multe aplicaii. Semnalele analogice pot depi
limitele de intrare ale unui ADC. Aceast lucru poate duce la stricarea convertorului. Pentru a proteja intrarea sunt
conectate dou diode, dup cum se observ n schem. Acestea vor proteja de tensiuni de peste 5V i sub 0V. n
exemplul nostru am folosit LTC1286, un ADC pe 12 biti (Linear Technology). Convertorul este conectat cu
microcontrolerul prin intermediul a trei linii: data, clock i CS (Chip Select). Linia CS este folosit pentru a
selecta un dispozitiv de intrare ca s fie posibil s fie conectate i alte dispozitive de intrare (ex. registru de
deplasare de intrare, registru de deplasare de ieire, ADC serial) pe aceleai linii ale microcontrolerului. Circuitul
de mai jos arat cum s conectm un ADC, tensiune de referin i un afiaj LCD la un microcontroler. Afiajul
LCD a fost adugat pentru a vizualiza rezultatele conversiei AD.
- 196 -
Microprocesoare i microcontrolere
- 198 -
Microprocesoare i microcontrolere
- 200 -
Microprocesoare i microcontrolere
Macroul LTC86 are trei argumente:
LTC86 macro Var_LO, Var_HI, Var
Variabila Var_LO este unde se stocheaz rezultatul
Variabila Var_HI este
unde
se
stocheaz
rezultatul
byte-ului
cel
mai
semnificativ.
- 202 -
Microprocesoare i microcontrolere
- 204 -
Microprocesoare i microcontrolere
5.10 Comunicaia serial
SCI este o abrevire pentru Serial Communication Interface, i ca un subsistem special exist la
majoritatea microcontrolerelor. Cnd nu este disponibil, cum ar fi n cazul lui PIC16F84, poate fi creat n
software.
- 206 -
Microprocesoare i microcontrolere
Figura 18.
Conectarea unui microcontroler la un PC prin intermediul unei interfee realizate cu MAX232.
Fiierul RS232.inc conine un grup de macrouri folosite pentru comunicaia serial.
Utilizarea macroului:
Macroul RS232init este folosit pentru iniializarea pinului RB0 i liniei pentru transmisia de date (pinul TX).
Exemplu: RS232init
SEND S_string trimite un caracter ASCII. Argumentul este este semnul ASCII.
Exemplu: SEND g
SENDw trimite data din registrul W.
Exemplu: movlw t
SENDw
Macroul RECEICE este o subrutin de tratare a unei ntreruperi care recepioneaz datele pentru RS232 i le
memoreaz n registrul RXD.
- 208 -
Microprocesoare i microcontrolere
- 210 -
Microprocesoare i microcontrolere
Exemplu:
- 212 -
Microprocesoare i microcontrolere
- 214 -