Sunteți pe pagina 1din 172

CAPITOLUL 1

Introducere n Microcontrolere
Introducere Circumstanele n care ne gsim astzi n 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 at t procesorul c t i perifericele. Aa s-a nt mplat cum primul cip conin nd un microcalculator, sau ce va deveni cunoscut mai t rziu ca microcontroler a luat fiin. Istorie !ste anul "#$#, i o echip de ingineri %aponezi de la compania &U'(C)* sosesc n 'tatele Unite cu cererea ca unele circuite integrate pentru calculatoare s fie fcute folosind proiectele lor. +ropunerea a fost fcut ctre (,-!., iar *arcian /off a fost desemnat responsabil cu acest proiect. +entru c el era cel ce avea e0perien n lucrul cu un calculator 1+C2 +3+4, 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 dec t ar fi cerut proiectul propus de inginerii %aponezi. 3up un timp, cu toate c inginerii %aponezi au ncercat s caute o soluie mai simpl, ideea lui *arcian a c tigat, i a luat natere primul microprocesor. 5n transformarea unei idei ntr-un produs finit, 6rederico 6aggin a fost de un a%utor ma%or pentru (,-!.. !l s-a transferat la (,-!., i doar n # luni a reuit s scoat un produs din prima sa concepie. (,-!. a obinut drepturile de a vinde acest bloc integral n "#7". 5n primul r nd ei au cumprat licena de la compania &U'(C)* care nu au avut idee ce comoar avuseser. 5n timpul acelui an a aprut pe pia un microprocesor numit 8998. Acela a fost primul microprocesor de 8 bii cu vitez $999 operaii pe secund. ,u mult dup aceea, compania american C-C a cerut de la (,-!. i de la -e0as (nstruments s fac un microprocesor pe 4 bii pentru folosin n terminale. Cu toate c C-C a renunat la aceast idee p n la sf rit, (,-!. i -e0as (nstruments au continuat s lucreze la microprocesor i n aprilie "#7: a aprut pe pia primul microprocesor de 4 bii sub numele de 4994. +utea s adreseze "$;b de memorie i avea 8< de instruciuni i viteza de =99.999 de operaii pe secund. Acel microprocesor a fost predecesorul tuturor microprocesoarelor de astzi. (,-!. au continuat dezvoltrile lor p n n aprilie "#78 i au lansat pe pia microprocesorul de 4 bii sub numele de 4949 ce putea adresa $8;b de memorie i avea 7< de instruciuni, iar preul ncepuse de la =$9>. 5ntr-o alt companie american *otorola, i-au dat seama repede ce se nt mpla, aa c au lansat pe pia un microprocesor de 4 bii $499. Constructor ef era Chuc? +eddle i pe l ng microprocesorul propriu-zis, *otorola a fost prima companie care s fac alte periferice ca $4:9 i $4<9. .a acel timp multe companii au recunoscut marea importan a microprocesoarelor i au nceput propriile lor dezvoltri. Chuc? +eddle prsete *otorola

pentru a se muta la *)' -echnolog@ i continu s lucreze intensiv la dezvoltarea microprocesoarelor. .a e0poziia A!'C), din 'tatele Unite din "#7< a avut loc un eveniment critic n istoria microprocesoarelor. *)' -echnolog@ a anunat c produce microprocesoarele $<9" i $<9: la :<> bucata pe care cumprtorii le puteau cumpra imediat. Aceasta a fost at t de senzaional nc t au crezut c este un fel de nelciune, g ndind c competitorii vindeau 4949 i $499 la "7#>. Ca un rspuns la competitorii lor at t (,-!. c t i *otorola au sczut preurile lor n prima zi a e0poziiei p n la $#.#<> pe microprocesor. *otorola intenteaz repede proces contra lui *)' -echnolog@ i contra lui Chuc? +eddle pentru copierea prote%atului $499. *)' -echnolog@ nceteaz de a mai produce $<9" dar continu s produc $<9:. $<9: este un microcontroler pe 4 bii cu <$ de instruciuni i o capabilitate de adresare direct de $8;b de memorie. 3atorit costului sczut, $<9: devine foarte popular, aa c este instalat n calculatoare ca B;(*-", Apple (, Apple ((, Atari, Comodore, Acorn, )ric, Caleb, )rao, Ultra i multe altele. Cur nd apar c iva productori de $<9: 1Doc?Eell, 'znerte?, C-!, ,CD, Dicoh i Comodore preiau *)' -echnolog@2 ce era n momentul prosperitii sale v ndut la o rat de "< milioane de microprocesoare pe anF Alii totui nu au cedat. 6ederico 6aggin prsete (,-!., i i pornete propria sa companie Gilog (nc. 5n "#7$ Gilog anun G49. 5n timpul crerii acestui microprocesor, 6aggin ia o decizie crucial. Htiind c un mare numr de programe fuseser dezvoltate pentru 4949, 6aggin i d seama c muli vor rm ne 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 4949, sau c trebuie s fie capabil s e0ecute toate programele care de%a fusese scrise pentru 4949. 5n afar acestor caracteristici, multe altele noi au fost adugate, aa c G49 a fost un microprocesor foarte puternic la vremea lui. +utea adresa direct $8;b de memorie, avea "7$ instruciuni, un numr mare de registre, o opiune incorporat pentru remprosptarea memoriei DA* dinamice, o singur surs, vitez de lucru mult mai mare etc. G49 a fost un succes mare i toat lumea a fcut conversia de 4949 la G49. 'e poate spune c G49 comercial, a fost fr nici o ndoial, cel mai de succes micropocesor de 4 bii a acelui timp. 5n afar de Gilog, ali noi productori apar de asemenea caB *oste?, ,!C, '/AD+ i 'C'. G49 a fost inima a multor calculatoare caB 'pectrum, +artner, -D'79=, G-=. 5n "#7$, (,-!. iese pe pia cu o versiune mbuntit de microprocesor pe 4 bii numit 494<. -otui, G49 era cu mult mai bun nc t (,-!. cur nd a pierdut btlia. Chiar dac au aprut pe pia nc c teva microprocesoare 1$49#, :$<9, 'CI*+ etc.2, totul fusese de fapt de%a hotr t. ,u mai erau de fcut mbuntiri importante ca s-i fac pe productori s se converteasc spre ceva nou, aa c $<9: i G49 mpreun cu $499 au rmas ca cei mai reprezentativi ai microprocesoarelor de 4 bii ai acelui timp. Microcontrolere contra Microprocesoare *icrocontrolerul difer de un microprocesor n multe feluri. 5n primul r nd i cel mai important este funcionalitatea sa. +entru a fi folosit, unui microprocesor trebuie s i se adauge alte componente ca memorie, sau componente pentru primirea i trimiterea de date. +e scurt, aceasta nseamn c microprocesorul este inima calculatorului. +e de alt parte, microcontrolerul este proiectat s fie toate acestea ntr-unul singur. ,u sunt necesare alte componente e0terne pentru aplicarea sa

pentru c toate perifericele necesare sunt de%a incluse n el. Astfel, economisim timpul i spaiul necesare pentru construirea de aparate. 1.1 Unitatea de memorie *emoria este o parte a microcontrolerului a crei funcie este de a nmagazina date. Cel mai uor mod de a e0plica este de a-l descrie ca un dulap mare cu multe sertare. 3ac presupunem c am marcat sertarele ntr-un asemenea fel nc t s nu fie confundate, oricare din coninutul lor va fi atunci uor accesibil. !ste suficient s se tie desemnarea sertarului i astfel coninutul lui ne va fi cunoscut n mod sigur.

Componentele de memorie sunt e0act aa. +entru o anumit intrare obinem coninutul unei anumite locaii de memorie adresate i aceasta este totul. 3ou noi concepte ne sunt aduseB adresarea i locaia de memorie. *emoria const din toate locaiile de memorie, i adresarea nu este altceva dec t selectarea uneia din ele. Aceasta nseamn c noi trebuie s selectm locaia de memorie la un capt, i la cellalt capt trebuie s ateptm coninutul acelei locaii. 5n afar de citirea dintr-o locaie de memorie, memoria trebuie de asemenea s permit scrierea n ea. Aceasta se face prin asigurarea unei linii adiionale numit linie de control. Jom desemna aceast linie ca DIA 1citete Iscrie2. .inia de control este folosit n urmtorul felB dac rIEK", se face citirea, i dac opusul este adevrat atunci se face scrierea n locaia de memorie. *emoria este primul element, dar avem nevoie i de altele pentru ca microcontrolerul nostru s funcioneze. 1.2 Unitatea de procesare central ' adugm alte = locaii de memorie pentru un bloc specific ce va avea o capabilitate incorporat de nmulire, mprire, scdere i s-i mutm coninutul dintr-o locaie de memorie n alta. +artea pe care tocmai am adugat-o este numit Lunitatea de procesare centralL 1C+U2. .ocaiile ei de memorie sunt numite regitri.

Degitrii sunt deci locaii de memorie al cror rol este de a a%uta prin e0ecutarea a variate operaii matematice sau a altor operaii cu date oriunde se vor fi gsit datele. ' privim la situaia curent. Avem dou entiti independente 1memoria i C+U2 ce sunt interconectate, i astfel orice schimb de informaii este ascuns, ca i funcionalitatea sa. 3ac, de e0emplu, dorim s adugm coninutul a dou locaii de memorie i ntoarcem rezultatul napoi n memorie, vom avea nevoie de o cone0iune ntre memorie i C+U. *ai simplu formulat, trebuie s avem o anumit LcaleL prin care datele circul de la un bloc la altul. 1.3 Bus ul Calea este numit LbusL- magistral. 6izic, el reprezint un grup de 4, "$, sau mai multe fire. 'unt dou tipuri de bus-uriB bus de adres i bus de date. +rimul const din at tea linii c t este cantitatea de memorie ce dorim s o adresm, iar cellalt este at t de lat c t sunt datele, n cazul nostru 4 bii sau linia de conectare. +rimul servete la transmiterea adreselor de la C+U la memorie, iar cel de al doilea la conectarea tuturor blocurilor din interiorul microcontrolerului.

5n ceea ce privete funcionalitatea, situaia s-a mbuntit, dar o nou problem a aprut de asemeneaB avem o unitate ce este capabil s lucreze singur, dar ce nu are nici un contact cu lumea de afar, sau cu noiF +entru a nltura aceast deficien, s adugm un bloc ce conine c teva locaii de memorie al cror singur capt este conectat la bus-ul de date, iar cellalt are

cone0iune cu liniile de ieire la microcontroler ce pot fi vzute cu ochiul liber ca pini la componenta electronic. 1.! Unitatea intrare ie"ire Aceste locaii ce tocmai le-am adugat sunt numite LporturiL. 'unt diferite tipuri de porturiB intrare, ieire sau porturi pe dou-ci. C nd se lucreaz cu porturi, mai nt i 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.

C nd se lucreaz cu el portul se comport ca o locaie de memorie. Ceva este pur i simplu scris n sau citit din el, i este posibil de a remarca uor aceasta la pinii microcontrolerului. 1.# Comunica$ia serial Cu aceasta am adugat la unitatea de%a e0istent posibilitatea comunicrii cu lumea de afar. -otui, acest mod de comunicare are nea%unsurile lui. Unul din nea%unsurile de baz este numrul de linii ce trebuie s fie folosite pentru a transfera datele. Ce s-ar nt mpla dac acestea ar trebui transferate la distan de c iva ?ilometriM ,umrul de linii nmulit cu numrul de ?ilometri nu promite costuri eficiente pentru proiect. ,u ne rm ne dec t s reducem numrul de linii ntr-un aa fel nc t s nu scdem funcionalitatea. ' presupunem c lucrm doar cu = linii, i c o linie este folosit pentru trimiterea de date, alta pentru recepie i a treia este folosit ca o linie de referin at t pentru partea de intrare c t i pentru partea de ieire. +entru ca aceasta s funcioneze, trebuie s stabilim regulile de schimb ale datelor. Aceste reguli sunt numite protocol. +rotocolul este de aceea definit n avans ca s nu fie nici o nenelegere ntre prile ce comunic una cu alta. 3e e0emplu, dac un om vorbete n francez, i altul vorbete n englez, este puin probabil c ei se vor nelege repede i eficient unul cu altul. ' presupunem c avem urmtorul protocol. Unitatea logic L"L este setat pe linia de transmisie p n ce ncepe transferul. )dat ce ncepe transferul, cobor m linia de transmisie la L9L logic pentru o perioad de timp 1pe care o vom desemna ca -2, aa c partea receptoare va ti c sunt date de primit, aa c va activa mecanismul ei de recepie. ' ne ntoarcem acum la partea de transmisie i s ncepem s punem zero-uri i unu-uri pe linia de transmisie n ordinea de la un bit a celei mai de %os valori la un bit a celei mai de sus valori. ' lsm ca fiecare bit s rm n pe linie pentru o perioad de timp egal cu -, i la sf rit, sau dup al 4-lea bit, s aducem unitatea logic L"L napoi pe linie ce va marca sf ritul transmisiei unei date. +rotocolul ce tocmai l-am descris este numit n literatura profesional ,DG 1,on-Deturn to Gero2.

Unitatea serial %olosit pentru a trimite date& dar numai prin trei linii +entru c avem linii separate de recepie i de transmitere, este posibil s recepionm i s transmitem date 1informaii2 n acelai timp. &locul aa numit full-duple0 mode ce permite acest mod de comunicare este numit blocul de comunicare serial. 'pre deosebire de transmisia paralel, datele sunt mutate aici bit cu bit, sau ntr-o serie de bii, de unde vine i numele de comunicaie serial. 3up recepia de date trebuie s le citim din locaia de transmisie i s le nmagazinm n memorie n mod opus transmiterii unde procesul este invers. 3atele circul din memorie prin bus ctre locaia de trimitere, i de acolo ctre unitatea de recepie conform protocolului. 1.' Unitatea timer Acum c avem comunicaia serial, putem recepiona, trimite i procesa date.

-otui, pentru noi ca s putem s l folosim n industrie mai avem nevoie de c teva blocuri. Unul din acestea este blocul timer care este important pentru noi pentru c ne d informaia de timp, durat, protocol etc. Unitatea de baz a timer-ului este un contor liber 1free-run2 care este de fapt un registru a crui valoare numeric crete cu unu la intervale egale, aa nc t lu ndu-i valoarea dup intervalele -" i -: i pe baza diferenei lor s putem determina c t timp a trecut. Acesta este o parte foarte important a microcontrolerului al crui control cere cea mai mare parte a timpului nostru. 1.( )atc*do+ ul 5nc un lucru ce necesit atenia noastr este funcionarea fr defecte a microcontrolerului n timpul funcionrii. ' presupunem c urmare a unei anumite interferene 1ce adesea se nt mpl n industrie2 microcontrolerul nostru se oprete din e0ecutarea programului, sau i mai ru, ncepe s funcioneze incorect.

&ineneles, c nd aceasta se nt mpl cu un calculator, l resetm pur i simplu i va continua s lucreze. -otui, nu e0ist buton de resetare pe care s-l apsm n cazul microcontrolerului care s rezolve astfel problema noastr. +entru a depi acest obstacol, avem nevoie de a introduce nc un bloc numit Eatchdog-c inele de paz. Acest bloc este de fapt un alt contor liber 1free-run2 unde programul nostru trebuie s scrie un zero ori de c te ori se e0ecut corect. 5n caz c programul se LnepeneteL, nu se va mai scrie zero, iar contorul se va reseta singur la atingerea valorii sale ma0ime. 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., Con-ertorul Analo+ .i+ital +entru c semnalele de la periferice sunt substanial diferite de cele pe care le poate nelege microcontrolerul 1zero i unu2, 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 A3. 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 C+U aa ca blocul C+U s o poat procesa.

Astfel microcontrolerul este acum terminat, i tot ce mai rm ne de fcut este de a-l pune ntro component electronic unde va accesa blocurile interioare prin pinii e0teriori. (maginea de mai %os arat cum arat un microcontroler n interior.

Con%i+ura$ia %i/ic a interiorului unui microcontroler

.iniile subiri ce merg din interior ctre prile laterale ale microcontrolerului reprezint fire conect nd blocurile interioare cu pinii capsulei microcontrolerului. 'chema urmtoare reprezint seciunea central a microcontrolerului.

+entru o aplicaie real, un microcontroler singur nu este de a%uns. 5n afar de microcontroler, avem nevoie de un program pe care s-l e0ecute, i alte c teva elemente ce constituie o interfa logic ctre elementele de stabilizare 1ce se va discuta n capitolele urmtoare2. 1.0 Pro+ramul 'crierea programului este un domeniu special de lucru al microcontolerului i este denumit LprogramareL. ' ncercm s scriem un mic program ce l vom crea singuri i pe care oricine va fi n stare s-l neleag.

1TA2T 234I1T3215M3MO26 LOCATIO78A 234I1T3225M3MO26 LOCATIO78B PO2TA5234I1T321 9 234I1T322 37. +rogramul adun coninutul a dou locaii de memorie, i vede suma lor la portul A. +rima linie a programului este pentru mutarea coninutul locaiei de memorie LAL ntr-unul din regitri unitii de procesare centrale. +entru 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, nc t suma acestei adunri s fie vizibil pentru toat lumea de afar. +entru o problem mai comple0, programul care s lucreze la rezolvarea ei va fi mai mare. +rogramarea poate fi fcut n c teva limba%e ca Assembler, C i &asic care sunt cele mai folosite limba%e. Assembler aparine limba%elor de nivel sczut ce sunt programate lent, dar folosesc cel mai mic spaiu n memorie i d cele mai bune rezultate c nd se are n vedere viteza de e0ecuie a programului. +entru c este cel mai folosit limba% n programarea microcontrolerelor va fi discutat ntr-un capitol ulterior. +rogramele n limba%ul C sunt mai uor de scris, mai uor de neles, dar sunt mai lente n e0ecutare dec t programele n Assembler. &asic este cel mai uor de nvat, i instruciunile sale sunt cele mai aproape de modul de g ndire a omului, dar ca i limba%ul de programare C este de asemenea mai lent dec t Assembler-ul. 5n orice caz, nainte de a v hotr n privina unuia din aceste limba%e trebuie s studiai cu atenie cerinele privind viteza de e0ecuie, mrimea memoriei i timpul disponibil pentru asamblarea sa. 3up ce este scris programul, trebuie s instalm microcontrolerul ntr-un aparat i s-l lsm s lucreze. +entru a face aceasta trebuie s adugm c teva componente e0terne necesare pentru funcionarea sa. *ai nt i trebuie s dm via microcontrolerului prin conectarea sa la o surs 1tensiune necesar pentru operarea tuturor instrumentelor electronice2 i oscilatorului al crui rol este similar inimii din corpul uman. &azat pe ceasul su microcontrolerul e0ecut instruciunile programului. 5ndat ce este alimentat microcontrolerul va e0ecuta un scurt control asupra sa, se va uita la nceputul programului i va ncepe s-l e0ecute. Cum va lucra aparatul depinde de muli parametri, cel mai important fiind priceperea dezvoltatorului de hardEare, i de e0periena programatorului n obinerea ma0imului din aparat cu programul su.

CAPITOLUL 2 Microcontrolerul PIC1':,!

Introducere PIC1':,! aparine unei clase de microcontrolere de 4 bii cu arhitectur D('C. 'tructura lui general este artat n schia urmtoare reprezent nd blocurile de baz. Memoria pro+ram 16.A'/2-pentru memorarea unui program scris. +entru c memoria ce este fcut n tehnologia 6.A'/ poate fi programat i tears mai mult dec t odat, aceasta face microcontrolerul potrivit pentru dezvoltarea de component. 33P2OM memorie de date ce trebuie s fie salvate c nd nu mai este alimentare. !ste n mod uzual folosit pentru memorarea de date importante ce nu trebuie pierdute dac sursa de alimentare se ntrerupe dintr-o dat. 3e e0emplu, o astfel de dat este o temperatur prestabilit n regulatoarele de temperatur. 3ac n timpul ntreruperii alimentrii aceast dat se pierde, va trebui s facem a%ustarea nc o dat la revenirea alimentrii. Astfel componenta noastr pierde n privina auto-meninerii. 2AM-memorie de date folosit de un program n timpul e0ecutrii sale. 5n DA* sunt memorate toate rezultatele intermediare sau datele temporare ce nu sunt cruciale la ntreruperea sursei de alimentare. PO2TUL A "i PO2TUL B sunt cone0iuni fizice ntre microcontroler i lumea de afar. +ortul A are < pini, iar portul & are 4 pini. TIM32 UL LIB32 ;:233 2U7< este un registru de 4 bii n interiorul microcontrolerului ce lucreaz independent de program. .a fiecare al patrulea impuls de ceas al oscilatorului i ncrementeaz valoarea lui p n ce atinge ma0imul 1:<<2, i apoi ncepe s numere tot din nou de la zero. 3up cum tim timpul e0act dintre fiecare dou incrementri ale coninutului timer-ului, poate fi folosit pentru msurarea timpului ce este foarte util la unele componente. U7ITAT3A .3 P2OC31A23 C37T2AL= are rolul unui element de conectivitate ntre celelalte blocuri ale microcontrolerului. Coordoneaz lucrul altor blocuri i e0ecut programul utilizatorului.

CI1C& 2I1C '-a spus de%a c +(C"$48 are o arhitectur D('C. Acest termen este adeseori gsit n literatura despre calculatoare, i are nevoie s fie e0plicat aici mai n detaliu. Arhitectura /arvard este un concept mai nou dec t von-,eumann. '-a nscut din nevoia de mrire a vitezei microcontrolerului. 5n arhitectura /arvard, bus-ul de date i bus-ul de adrese sunt separate. Astfel este posibil un mare debit de date prin unitatea de procesare central, i bineneles, o vitez mai mare de lucru. 'epararea programului de memoria de date face posibil ca mai departe instruciunile s nu trebuiasc s fie cuvinte de 4 bii. +(C"$648 folosete "8 bii pentru instruciuni ceea ce permite ca toate instruciunile s fie instruciuni dintr-un singur cuv nt. !ste de asemenea tipic pentru arhitectura /arvard s aib mai puine instruciuni dec t von-,eEmann i s aib instruciuni e0ecutate uzual intr-un ciclu. *icrocontrolerele cu arhitectur /arvard sunt de asemenea numite Lmicrocontrolere D('CL. D('C nseamn Deduced (nstruction 'et Computer. *icrocontrolerele cu arhitectura von,eEmann sunt numite Lmicrocontrolere C('CL. -itlul C('C nseamn Comple0 (nstruction 'et Computer. +entru c +(C"$648 este un microcontroler D('C, aceasta nseamn c are un set redus de instruciuni, mai precis =< de instruciuni 1de e0. microcontrolerele (,-!. i *otorola au peste "99 de instruciuni2. -oate aceste instruciuni sunt e0ecutate ntr-un ciclu cu e0cepia instruciunilor %ump i branch. Conform cu ceea ce spune constructorul, +(C"$648 a%unge la

rezultate de :B" n compresia cod i 8B" n vitez n comparaie cu alte microcontrolere de 4 bii din clasa sa. Aplica$ii +(C"$648 se potrivete perfect n multe folosine, de la industriile auto i aplicaiile de control casnice la instrumentele industriale, senzori la distan, m nere electrice de ui i dispozitivele de securitate. !ste de asemenea ideal pentru cardurile smart ca i pentru aparatele alimentate de baterie din cauza consumului lui mic. *emoria !!+D)* face mai uoar aplicarea microcontrolerelor la aparate unde se cere memorarea permanent a diferitor parametri 1coduri pentru transmitoare, viteza motorului, frecvenele receptorului, etc.2. Costul sczut, consumul sczut, m nuirea uoar i fle0ibilitatea fac +(C"$648 aplicabil chiar i n domenii unde microcontrolerele nu au fost prevzute nainte 1e0empleB funcii de timer, nlocuirea interfeei n sistemele mari, aplicaiile coprocesor, etc.2. +rogramabilitatea sistemului acestui cip 1mpreun cu folosirea a doar doi pini n transferul de date2 face posibil fle0ibilitatea 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. Cloc> ul ?ciclul instruc$iune Cloc?-ul sau ceasul este starter-ul principal al microcontrolerului, i este obinut dintr-o component de memorie e0tern numit LoscilatorL. 3ac ar fi s comparm un microcontroler cu un ceas de timp, Lcloc?-ulL nostru ar fi un ticit pe care l-am auzi de la ceasul de timp. 5n acest caz, oscilatorul ar putea fi comparat cu arcul ce este rsucit astfel ca ceasul de timp s mearg. 3e asemenea, fora folosit pentru a ntoarce ceasul poate fi comparat cu o surs electric. Cloc?-ul de la oscilator intr ntr-un microcontroler prin pinul )'C" unde circuitul intern al microcontrolerului divide cloc?-ul n 8 cloc?-uri egale N", N:, N= i N8 ce nu se suprapun. Aceste 8 cloc?-uri constituie un ciclu de o singur instruciune 1numit de asemenea ciclu main2 n timpul creia instruciunea este e0ecutat. !0ecutarea instruciunii ncepe prin apelarea unei instruciuni care este urmtoarea n linie. (nstruciunea este apelat din memoria program la fiecare N" i este scris n registrul de instruciuni la N8. 3ecodarea i e0ecutarea instruciunii sunt fcute ntre urmtoarele cicluri N" i N8. 5n urmtoarea diagram putem vedea relaia dintre ciclul instruciunii i cloc?-ul oscilatorului 1)'C"2 ca i aceea a cloc?-urilor interne N"-N8. Contorul de program 1+C2 reine informaia despre adresa urmtoarei instruciuni.

Pipelinin+ Ciclul instruciune const din ciclurile N", N:, N= i N8. Ciclurile de instruciuni de apelare i e0ecutare sunt conectate ntr-un aa fel nc t pentru a face o apelare, este necesar un ciclu cu o instruciune, i mai este nevoie de nc unul pentru decodare i e0ecutare. -otui, datorit pipelining-ului 1folosirea unei pipeline-conduct, i este aducerea unei instruciuni din memorie n timp ce se e0ecut alta2, fiecare instruciune este e0ecutat efectiv ntr-un singur ciclu. 3ac instruciunea cauzeaz o schimbare n contorul programului, i +C-ul nu direcioneaz spre urmtoarea ci spre alte adrese 1poate fi cazul cu subprogramele %umps sau calling2, : cicluri sunt necesare pentru e0ecutarea unei instruciuni. Aceasta este pentru c instruciunea trebuie procesat din nou, dar de data aceasta de la adresa corect. Ciclul ncepe cu cloc?-ul N", prin scrierea n registrul instruction register 1(D2. 3ecodarea i e0ecutarea ncepe cu cloc?-urile N:, N= i N8.

T6C@ citete instruciunea *)J.A <<h 1nu are importan pentru noi ce instruciune a fost e0ecutat, ce e0plic de ce nu este un dreptunghi desenat n partea de %os2. TC6I e0ecut instruciunea *)J.A <<h i citete *)JA6 +)D-&. TC62 e0ecut *)JA6 +)D-& i citete CA.. 'U&O". TC63 e0ecut o apelare a subprogramului CA.. 'U&O", i citete instruciunea &'6 +)D-A, &(-=. +entru c instruciunea aceasta nu este aceea de care avem nevoie, sau nu este prima instruciune a subprogramului 'U&O" a crei e0ecuie este urmtoarea n ordine, instruciunea trebuie citit din nou. Acesta este un bun e0emplu a unei instruciuni av nd

nevoie de mai mult de un ciclu. TC6! ciclul instruciunii este total folosit pentru citirea primei instruciuni din subprogram la adresa 'U&O". TC6# e0ecut prima instruciune din subprogram 'U&O" i citete urmtoarea. 1emni%ica$ia pinilor +(C"$648 are un numr total de "4 pini. Cel mai adesea se gsete ntr-o capsul de tip 3(+"4 dar se poate gsi de asemenea i ntr-o capsul '*3 care este mai mic ca cea 3(+. 3(+ este prescurtarea de la 3ual (n +ac?age. '*3 este prescurtarea de la 'urface *ount 3evices suger nd c gurile pentru pini unde s intre acetia, nu sunt necesare n lipirea acestui tip de component.

+inii microcontrolerului +(C"$648 au urmtoarea semnificaieB +in nr." 2A2 Al doilea pin la portul A. ,u are funcie adiional. +in nr.: 2A3 Al treilea pin la portul A. ,u are funcie adiional. +in nr.= 2A! Al patrulea pin la portul A. -)C;" care funcioneaz ca timer se gsete de asemenea la acest pin. +in nr.8 MCL2 Deseteaz intrarea i tensiunea de programare Jpp a microcontrolerului. +in nr.< A11 Alimentare, mas. +in nr.$ 2B@ +in de zero la portul &. (ntrarea 5ntrerupere este o funcie adiional. +in nr.7 2B1 +rimul pin la portul &. ,u are funcie adiional. +in nr.4 2B2 Al doilea pin la portul &. ,u are funcie adiional. +in nr.# 2B3 Al treilea pin la portul &. ,u are funcie adiional. +in nr."9 2B! Al patrulea pin la portul &. ,u are funcie adiional. +in nr."" 2B# Al cincilea pin la portul &. ,u are funcie adiional. +in nr.": 2B' Al aselea pin la portul &. .inia de PCloc?P n mod programare. +in nr."= 2B( Al aptelea pin la portul &. .inia P3ataP n mod programare. +in nr."8 Add +olul pozitiv al sursei. +in nr."< O1C2 +in desemnat pentru conectarea la un oscilator. +in nr."$ O1C1 +in desemnat pentru conectarea la un oscilator. +in nr."7 2A2 Al doilea pin la portul A. ,u are funcie adiional. +in nr."4 2A1 +rimul pin la portul A. ,u are funcie adiional.

2.1 4enerator de ceas B oscilator Circuitul oscilator este folosit pentru a da microcontrolerului un ceas-cloc?. Ceasul este necesar pentru ca microcontrolerul s e0ecute programul sau instruciunile din program. -ipuri de oscilatoare +(C"$648 poate lucra cu patru configuraii diferite de oscilator. +entru c configuraiile cu oscilator cu cristal i rezistor-condensator 1DC2 sunt cele utilizate cel mai frecvent, doar pe ele le vom meniona aici. -ipul de microcontroler cu oscilator cu cristal este desemnat ca Q-, iar microcontrolerul cu perechea rezistor-condensator are desemnarea DC. Aceasta este important pentru c trebuie s numii tipul de oscilator c nd cumprai un microcontroler. )scilatorul Q-

)scilatorul cu cristal se afl intr-o carcas metalic cu doi pini pe care este nscris frecvena la care cristalul oscileaz. *ai este necesar c te un condensator ceramic de =9p6 cu cellalt capt la mas de a fi conectai la fiecare pin. )scilatorul i condensatorii pot fi ncapsulai mpreun ntr-o carcas cu trei pini. Un asemenea element se numete rezonator ceramic i este reprezentat n scheme ca cel de mai %os. +inii centrali ai elementului sunt masa, iar pinii terminali sunt conectai la pinii )'C" i )'C: ai microcontrolerului. C nd se proiecteaz un aparat, regula este s plasai oscilatorul c t mai aproape de microcontroler, pentru a elimina orice interferen de pe liniile pe care microcontrolerul primete tactul de ceas.

)scilatorul DC 5n aplicaiile unde nu este nevoie de o mare precizie de timp, oscilatorul DC permite economii adiionale la cumprare. 6ecvena de rezonan a oscilatorului DC depinde de valoarea tensiunii de alimentare, rezistorul D, condensatorul C i temperatura de lucru. -rebuie de menionat c frecvena de rezonan este de asemenea influenat de variaiile normale ale parametrilor de proces, de tolerana e0tern a componentelor D i C, etc.

3iagrama de mai sus arat cum este conectat oscilatorul DC la +(C"$648. .a valoarea rezistorului mai mic :.:?, oscilatorul poate deveni instabil, sau oscilaia se poate chiar opri. .a valori mari a lui D 1e0."*2 oscilatorul devine foarte sensibil la zgomot i umezeal. 'e recomand ca valoarea rezistorului D s fie ntre = i "99?. Chiar dac oscilatorul va lucra fr un condensator e0tern 1CK9p62, trebuie totui folosit un condensator de peste :9p6 pentru zgomot i stabilitate. (ndiferent de ce oscilator este folosit, pentru a obine un ceas la care s funcioneze microcontrolerul, ceasul trebuie divizat la 8. Un ceas al oscilatorului divizat cu 8 se poate obine la pinul )'C:IC.;)U-, i poate fi folosit pentru testarea sau sincronizarea altor circuite logice.

3up alimentare, oscilatorul ncepe s oscileze. )scilaia la nceput are o perioad i o amplitudine instabile, dar dup un timp devin stabilizate.

+entru a preveni ca un asemenea ceas ine0act s influeneze performanele microcontrolerului, trebuie s inem microcontrolerul n starea reset pe durata stabilizrii ceasului oscilatorului. 3iagrama de mai sus arat o form tipic de semnal pe care microcontrolerul o primete de la oscilatorul cu cuar dup alimentare.

2.2 2eset ul Desetul este folosit pentru a pune microcontrolerul ntr-o condiie PcunoscutP. Aceasta nseamn practic c microcontrolerul poate s se comporte incorect n unele condiii nedorite. +entru a continua s funcioneze corect trebuie resetat, nsemn nd c toi registrii vor fi pui ntr-o stare de start. Desetul nu este folosit numai c nd microcontrolerul nu se comport cum vrem noi, dar poate de asemenea s fie folosit c nd se ncearc un monta% ca o ntrerupere ntr-un program de e0ecuie sau c nd se pregtete un microcontroler de a citi un program. +entru a preveni a%ungerea unui zero logic la pinul *C.D accidental 1linia de deasupra nseamn c resetul este activat de un zero logic2, *C.D trebuie s fie conectat printr-un rezistor la polul pozitiv al sursei de alimentare. Dezistorul trebuie s fie ntre < i "9?. 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.

*icrocontrolerul +(C"$648 are c teva surse de resetB a2 Deset la alimentare, +)D 1+oEer-)n Deset2 b2 Deset n timpul lucrului obinuit prin aducerea unui zero logic la pinul *C.D al microcontrolerului. c2 Deset n timpul regimului '.!!+ d2 Deset la depirea timer-ului Eatchdog 1A3-2 e2 Deset n timpul depirii A3- n timpul regimului '.!!+. Cele mai importante resurse de reset sunt a2 i b2. +rima are loc de fiecare dat c nd 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 *C.D n timpul operaiei normale a microcontrolerului. !ste des folosit n dezvoltarea de programe. 5n timpul unui reset, locaiile de memorie DA* nu sunt resetate. !le sunt necunoscute la alimentare i nu sunt schimbate la nici un reset. 'pre deosebire de acestea, regitrii '6D sunt resetai la o stare iniial a poziiei de start. Unul din cele mai importante efecte ale resetului este setarea contorului de program 1+C2 la zero 19999h2, ceea ce permite programului s nceap e0ecutarea de la prima instruciune scris.

2esetul la scderea tensiunii de alimentare dincolo de limita permisiCil ;BroDn out 2eset< (mpulsul pentru resetare n timpul creterii tensiunii este generat de microcontrolerul nsui c nd detecteaz o cretere n tensiunea Jdd 1n domeniul de la ".:J la ".4J2. Acest impuls dureaz 7: ms ceea ce este un timp suficient pentru oscilator ca s se stabilizeze. Aceste 7: ms sunt asigurate de un timer intern +AD- care are oscilatorul lui DC. *icrocontrolerul este n modul reset c t timp +AD- este activ. -otui, c nd monta%ul funcioneaz, probleme apar c nd sursa nu scade la zero ci c nd scade mai %os 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. +entru a rezolva aceast problem trebuie s ne asigurm c microcontrolerul este ntr-o stare de reset de fiecare dat c nd tensiunea sursei scade sub limita admis.

3ac, conform cu specificaiile electrice, circuitul intern de resetare a microcontrolerului nu poate satisface aceste cerine, se pot folosi componente electronice speciale ce sunt capabile s genereze semnalul de reset dorit. 5n afar de aceast funcie, ele pot funciona pentru supravegherea tensiunii de alimentare. 3ac tensiunea scade mai %os de nivelul specificat, un zero logic va apare la pinul *C.D ce ine microcontrolerul n starea de reset p n ce tensiunea nu este n limitele ce garanteaz funcionarea corect.

2.3 Unitatea de Procesare Central Unitatea de procesare central 1C+U2 este creierul microcontrolerului. Aceast parte este responsabil cu gsirea i aducerea 1citirea din memorie2-fetching instruciunii corecte ce trebuie e0ecutat, cu decodarea acelei instruciuni, i n final cu e0ecutarea ei.

Unitatea de procesare central conecteaz toate prile microcontrolerului ntr-un ntreg. 3esigur, funcia sa cea mai important este s decodeze instruciunile de program. C nd programatorul scrie un program, instruciunile au o form clar ca *)J.A 90:9. -otui, pentru ca microcontrolerul s neleag aceasta, aceast form de PscrisoareP a unei instruciuni trebuie tradus ntr-o serie de zero-uri i unu-uri ce se numete PopcodeP. Aceast tranziie de la o scrisoare la o form binar este fcut de translatori ca translatorul assembler 1cunoscut ca i assembler sau asamblor2. (nstruciunea astfel adus-fetched din memoria programului trebuie s fie decodat de unitatea de procesare central. +utem apoi selecta din tabela tuturor instruciunilor un set de aciuni ce e0ecut o sarcin desemnat definit de instruciune. +entru 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, C+U trebuie s fie conectat cu toate prile microcontrolerului. Aceasta este posibil printr-un bus de date i un bus de adrese. Unitatea de .ogic Aritmetic 1A.U2 Unitatea de logic aritmetic este responsabil de e0ecutarea operaiilor ca adunarea, scderea, mutarea 1la st nga sau la dreapta ntr-un registru2 i de operaiile logice. *utarea datelor ntr-un registru se mai numete PshiftingP- transferare. +(C"$648 conine o unitate logic aritmetic de 4 bii i regitri de lucru de 4 bii.

5n instruciunile cu doi operanzi, n mod obinuit un operand este n registrul de lucru 1registrul A2, iar cellalt este unul din regitri sau o constant. +rin operand nelegem coninutul asupra cruia se fac unele operaii, iar un registru este oricare din regitrii C+D sau '6D. C+D este o prescurtare de la PCeneral +urposes DegistersP-Degitri cu 'copuri Cenerale, iar '6D de la P'pecial 6unction DegistersP-Degitri cu 6uncie 'pecial. 5n instruciunile cu un operand, un operand este fie registrul A fie unul din regitri. +e l ng operaiile aritmetice i logice, A.U controleaz biii de stare 1bii gsii n registrul '-A-U'2. !0ecutarea unor instruciuni afecteaz biii de stare, de care depinde rezultatul nsui. 3epinz nd de ce instruciune este e0ecutat, A.U poate afecta valorile biilor Carr@ 1C2, 3igit Carr@ 13C2, i Gero 1G2 n registrul '-A-U'.

Degistru '-A-U'

bit 0 C 1Carr@2 -ransfer &it care este afectat de operaiile de adunare, scdere i transfer. "K transferul produs din bitul cel mai nalt al rezultatului 9K transferul nu s-a produs &itul C este afectat de instruciunile A33A6, A33.A, 'U&.A, 'U&A6.

bit 1 .C 13igit Carr@2 3C -ransfer &it afectat de operaiile de adunare, scdere i transfer. 'pre deosebire de bitul C, acest bit reprezint transferul din al patrulea loc rezultat. !ste setat de adunare c nd se nt mpl un transport de la bitul = la bitul 8, sau de scdere c nd se nt mpl mprumut de la bitul 8 la bitul =, sau de transfer n ambele direcii. "K transfer produs la al patrulea bit conform cu ordinea, al rezultatului. 9K transferul nu s-a produs &itul 3C este afectat de instruciunile A33A6, A33.A, 'U&.A, 'U&A6. bit 2 E 1Gero bit2 (ndicarea unui rezultat zero. Acest bit este setat c nd rezultatul unei operaii aritmetice sau logice e0ecutate este zero. "K rezultatul egal cu zero 9K rezultatul nu este egal cu zero bit 3 P. 1+oEer-doEn bit2 &it ce este setat c nd microcontrolerul este alimentat atunci c nd ncepe s funcioneze, dup fiecare reset obinuit i dup e0ecutarea instruciunii C.DA3-. (nstruciunea '.!!+ l reseteaz c nd microcontrolerul intr n regimul consumIuza% redus. 'etarea lui repetat este posibil prin reset sau prin pornirea sau oprirea sursei. 'tarea poate fi triggerat de asemenea de un semnal la pinul D&9I(,-, de o schimbare la portul D&, de terminarea scrierii n !!+D)*-ul de date intern, i de Eatchdog de asemenea. "K dup ce sursa a fost pornit 9K e0ecutarea instruciunii '.!!+ bit 4 TO -ime-out R depirea-overfloE Eatchdog-ului. &itul este setat dup pornirea sursei i e0ecutarea instruciunilor C.DA3- i '.!!+. &itul este resetat c nd Eatchdog-ul a%unge la sf rit semnal nd c ceva nu este n ordine. "K depirea-ovefloE nu s-a produs 9K depirea-overfloE s-a produs bit6:5 2P1F2P@ 1Degister &an? 'elect bits-&ii de 'electare a &ancului de Degitri2 Aceti doi bii sunt partea superioar a adresei la adresarea direct. +entru c instruciunile ce adreseaz memoria direct au doar apte bii, ei au nevoie doar de nc un bit pentru a adresa cei :<$ b@tes adic c i are +(C"$648. &itul D+" nu este folosit, dar este lsat pentru e0pansiuni viitoare ale acestui microcntroler. 9"K primul banc 99K bancul zero bit 7 I2P 1Degister &an? 'elect bit-&it de 'electare a &ancului de Degitri2 &it al crui rol este de a fi al optulea bit la adresarea indirect a DA*-ului intern. "K bancul : i = 9K bancul 9 i " 1de la 99h la 66h2 Degistrul '-A-U' conine starea aritmetic A.U 1C, 3C, G2, starea D!'!- 1-), +32 i biii pentru selectarea bancului de memorie 1(D+, D+", D+92. Consider nd c selecia bancului de memorie este controlat prin acest registru, el trebuie s fie prezent n fiecare banc. &ancul de memorie se va discuta mai n detaliu n capitolul )rganizarea memoriei. Degistrul '-A-U' poate fi o destinaie pentru orice instruciune, cu oricare alt registru. 3ac registrul '-A-U' este o destinaie pentru instruciunile ce afecteaz biii G, 3C or C, atunci scrierea n aceti trei bii nu este posibil.

Degistrul )+-(),

bit 0:2 P1@& P11& P12 1+rescaler Date 'elect bit-&it 'elecie Dat +rescaler2 Aceti trei bii definesc bitul de selecie a ratei prescalerului. Ce este un prescaler i cum pot afecta aceti bii funcionarea unui microcontroler va fi e0plicat n seciunea depre -*D).

bit 3 P1A 1+rescaler Assignment bit-&it de Asignare +rescaler2 &it ce asigneaz prescalerul ntre -*D) i Eatchdog. "K prescalerul este asignat Eatchdogului 9K prescalerul este asignat timer-ului liber 1ree-run2 -*D) bit 4 T@13 1-*D9 'ource !dge 'elect bit-&it 'elecie a 6rontului 'ursei -*D92 3ac este permis de a se triggera -*D) prin impulsurile de la pinul DA8I-9C;(, acest bit determin dac aceasta va fi la frontul descresctor sau cresctor al unui semnal. "K front cresctor 9K front descresctor bit 5 TOC1 1-*D9 Cloc? 'ource 'elect bit-&it 'elecie 'urs Ceas -*D92 Acest pin permite timerului liber 1free-run2 s incrementeze starea lui fie de la oscilatorul intern la fiecare S a ceasului oscilatorului, fie prin impulsuri e0terne la pinul DA8I-9C;(. "K impulsuri e0terne 9K ceas intern "I8 bit 6 (7T3.4 1(nterrupt !dge 'elect bit-&it de 'elecie a 6rontului 5ntrerupere2 3ac ntreruperea este activat este posibil ca acest bit s determine frontul la care o ntrerupere va fi activat la pinul D&9I(,-. "K front cresctor 9K front descresctor bit 7 2BPU 1+)D-& +ull-up !nable bit-&it !nable-Activare +ull-up +)D-&2 Acest bit pornete i oprete rezistorii interni Ppull-upP-scoatere la portul &. "K Dezistori oprire Lpull-upL 9K Dezistori pornire Lpull-upL

.! Porturi +ortul 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 e0istent. 6izic, portul este un registru n interiorul unui microcontroler ce este conectat cu fire la pinii microcontrolerului. +orturile reprezint cone0iunea fizic a Unitii de +rocesare Central cu lumea e0terioar. *icrocontrolerul le folosete pentru a monitoriza sau controla alte componente sau aparate. 3atorit funcionalitii, unii pini au rol dublu ca DA8I-)C;( de e0emplu, care este simultan al patrulea bit la portul A i o intrare e0tern pentru contorul liber 1free-run2. 'elecia uneia din aceste dou funcii ale pinului se face n unul din regitrii configuraionali. ) ilustraie a acesteia este al cincilea bit -9C' n registrul )+-(),. 'elect nd una din funcii cealalt este dezactivat.

-oi pinii portului pot fi definii ca intrare sau ieire, conform cu nevoile unui monta% ce este n dezvoltare. +entru a defini un pin ca pin de intrare sau ca pin de ieire, trebuie scris combinaia corect de zero-uri i unu-uri n registrul -D('. 3ac n locul potrivit este scris L"L logic n registrul -D(', acel pin este pin de intrare, iar dac este valabil contrariul, este un pin de ieire. 6iecare port are registrul lui -D('. Astfel, portul A are -D('A la adresa 4<h, iar portul & are -D('& la adresa 4$h. +)D-& +)D-& are 4 pini legai la el. Degistrul adecvat pentru direcia datelor este -D('& la adresa 4$h. 'etarea unui bit n registrul -D('& definete pinul portului corespunztor ca pin de intrare, i resetarea unui bit n registrul -D('&, definete pinul portului corespunztor ca pin de ieire. 6iecare pin la +)D-& are un rezistor slab intern pull-up 1scoatere2 1rezistor care definete o linie la unu logic2 care poate fi activat prin resetarea celui de-al aptelea bit D&+U n registrul )+-(),. Aceti rezistori Ppull-upP se nchid automat c nd pinul portului este

configurat ca o ieire. C nd pornete microcontrolerul, Ppull-upP-ii sunt dezactivai. +atru pini ai portului +)D-&, D&7BD&8 pot cauza o ntrerupere, care se nt mpl c nd starea lor se schimb de la unu logic la zero logic i invers. ,umai pinii configurai ca intrare pot cauza aceast ntrerupere s se nt mple 1dac fiecare pin D&7BD&8 este configurat ca o ieire, nu va fi generat o ntrerupere la schimbarea strii2. Aceast opiune de ntrerupere cu rezistorii Ppull-upP fac mai uoar rezolvarea problemelor din practic, ca de e0emplu o tastatur matriceal. 3ac r ndurile tastaturii sunt conectate la aceti pini, fiecare apsare a unei clape va cauza o ntrerupere. *icrocontrolerul va determina care clap este apsat n timp ce se proceseaz o ntrerupere. ,u se recomand s apelai la portul & n timp ce se proceseaz ntreruperea.

!0emplul de mai sus arat cum pinii 9, ", :, i = sunt declarai ca intrare, i pinii 8, <, $ i 7 ca ieire. +)D-A +)D-A are < pini legai la el. Degistrul corespunztor pentru direcia datelor este -D('A la adresa 4<h. Ca i la portul &, setarea unui bit n registrul -D('A definete de asemenea pinul portului corespunztor ca un pin de intrare, i resetarea unui bit n registrul -D('A definete pinul portului corespunztor ca pin de ieire. Al cincilea pin al portului A are funcie dual. .a acel pin se afl de asemenea o intrare e0tern pentru timer-ul -*D). Una din aceste dou opiuni este aleas prin setarea sau resetarea bitului -)C' 1-*D9 Cloc? 'ource 'elect bit-bit de 'elecie a 'ursei Ceasului -*D)2. Acest pin permite timer-ului -*D) sa-i creasc starea fie de la oscilatorul intern fie prin impulsuri e0terne la pinul DA8I-9C;(.

!0emplul arat cum pinii 9, ", :, =, i 8 sunt declarai ca intrare iar <, $ i 7 ca pini de ieire.

2.# Or+ani/area memoriei

+(C"$648 are dou blocuri separate de memorie, unul pentru date i cellalt pentru programe. *emoria !!+D)* i regitrii C+D n memoria DA* constituie un bloc, i memoria 6.A'/ constituie un bloc de programe. *emoria program *emoria program a fost realizat n tehnologia 6.A'/ ceea ce face posibil de a programa un microcontroler de mai multe ori nainte de a fi instalat ntr-un monta%, i chiar dup instalarea sa dac se nt mpl unele schimbri n program sau parametri de proces. *rimea memoriei program este de "9:8 locaii cu lime de "8 bii unde locaiile zero i patru sunt rezervate pentru reset i pentru vectorul ntrerupere. *emoria de date *emoria de date const din memoriile !!+D)* i DA*. *emoria !!+D)* const din $8 de locaii de opt bii a cror coninut nu este pierdut n timpul opririi sursei de alimentare. !!+D)*-ul nu este direct adresabil, dar este accesat indirect prin regitrii !!A3D i !!3A-A. +entru c memoria !!+D)* este folosit curent la memorarea unor parametri importani 1de e0emplu, o temperatur dat n regulatoarele de temperatur2, e0ist o procedur strict de scriere n !!+D)* ce trebuie urmat pentru a preveni scrierea accidental. *emoria DA* pentru date ocup un spaiu ntr-o hart a memoriei de la locaia 909C la 9086 ceea ce nseamn $4 de locaii. .ocaiile memoriei DA* sunt de asemenea denumite regitri C+D care este o abreviere Ceneral +urpose Degisters-Degitri cu 'cop Ceneral. Degitrii C+D pot fi accesai indiferent de ce banc este selectat la un moment. Degitri '6D Degitri ce ocup primele ": locaii n bancurile 9 i " i sunt regitri ai funciei specializate asignat cu unele blocuri ale microcontrolerului. Acetia sunt numii 'pecial 6unction Degisters-Degitri ai 6unciei 'peciale.

Bancuri de Memorie 5n afar de aceast diviziune n PlungimeP a regitrilor '6D i C+D, harta memoriei este de asemenea mprit n PlimeP 1vezi harta precedent2 n dou zone numite PbancuriP. 'electarea unuia din bancuri se face de biii D+) i D+" n registrul '-A-U'-stare. 3GempluF bcf '-A-U', D+9 (nstruciunea &C6 terge bitul D+) 1D+9K92 n registrul '-A-U' i astfel seteaz bancul 9.

bsf '-A-U', D+9 (nstruciunea &'6 seteaz bitul D+) 1D+9K"2 n registrul '-A-U' i astfel seteaz bancul ".

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 *acros-macrocomand. Cu a%utorul lor, selecia dintre dou bancuri devine mai clar i programul mult mai elegibil. &A,;9 macro &cf '-A-U', D+9 R'elect memor@ ban? 9 !ndm &A,;" macro &sf '-A-U', D+9 R'elect memor@ ban? " !ndm

Locaiile 0Ch - 4Fh sunt regitri cu scop general !"#$ ce sunt %olosii ca &e&orie #'() C*n+ sunt accesate locaiile ,Ch - CFh -n .ancul 1/ acces0& +e %apt e1act aceleai locaii -n .ancul 0) Cu alte c c*n+ +orii s0 accesai unul +in regitrii !"#/ nu trebuie s0 20 -ngri3orai c0 nu tii -n ce banc sunte Contorul de +rogram Contorul de program 1+C2 este un registru de "= bii ce conine adresa instruciunii ce se e0ecut. +rin incrementarea sau schimbarea sa 1e0. n caz de salturi2 microcontrolerul e0ecut instruciunile de program pas-cu-pas. 'tiva +(C"$648 are o stiv de "= bii cu 4 nivele, sau cu alte cuvinte, un grup de 4 locaii de memorie de "= bii lime cu funcii speciale. Dolul su de baz este de a pstra valoarea contorului de program dup un salt din programul principal la o adres a unui subprogram. +entru ca un program s tie cum s se ntoarc la punctul de unde a pornit, trebuie s napoieze valoarea contorului programului din stiv. C nd se mut dintr-un program ntr-un subprogram, contorul programului este mpins n stiv 1un e0emplu de acesta este instruciunea CA..2. C nd se e0ecut instruciuni ca D!-UD,, D!-.A sau D!-6(! ce au fost e0ecutate la sf ritul 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 +U'/ i +)+, i sunt numite conform cu instruciunile similare ale unor microcontrolere mai mari. +rogramarea 5n 'istem +entru a programa o memorie de program, microcontrolerul trebuie s fie setat pentru un mod de lucru special prin aducerea pinului *C.D la "=.<J, iar sursa de tensiune Jdd trebuie s fie stabilizat ntre 8.<J i <.<J. *emoria program poate fi programat serial folosind doi

pini PdataIcloc?P ce trebuie s fie mai nt i separai de liniile monta%ului, aa ca s nu apar erori n timpul programrii. *oduri de adresare .ocaiile de memorie DA* pot fi accesate direct sau indirect.

Adresarea 3irect Adresarea 3irect se face printr-o adres de # bii. Aceast adres este obinut prin conectarea celui de-al aptelea bit al adresei directe a unei instruciuni cu doi bii 1D+", D+92 din registrul '-A-U' dup cum se arat n figura urmtoarea. )rice acces la regitrii '6D poate fi un e0emplu de adresare direct. &sf '-A-U', D+9 R&an?l movlE 9066 REK9066 movEf -D('A Raddress of -D('A register is ta?en from Rinstruction movEf

Adresarea 3irect Adresarea (ndirect Adresarea indirect spre deosebire de cea direct nu ia o adres dintr-o instruciune ci o creeaz cu a%utorul bitului (D+ a regitrilor '-A-U' i 6'D. .ocaia adresat este accesat prin registrul (,36 care de fapt ine o adres indicat de un 6'D. Cu alte cuvinte, orice instruciune care folosete (,36 ca registrul al ei, n realitate acceseaz datele indicate de un registru 6'D. ' spunem, de e0emplu, c un registru cu scop general 1C+D2 la adresa 96h

conine o valoarea :9. +rin scrierea unei valori 96h n registrul 6'D vom obine un registru indicator la adresa 96h, iar prin citirea din registrul (,36, vom obine valoarea :9, ceea ce nseamn c am citit din primul registru valoarea lui fr accesarea lui direct 1dar prin 6'D i (,362. 'e pare c acest tip de adresare nu are nici un avanta% fa de adresarea direct, dar e0ist unele nevoi n timpul programrii ce se pot rezolva mai simplu doar prin adresarea indirect.

Un asemenea e0emplu poate trimite un set de date prin comunicaia serial, lucr nd cu bufere i indicatoare 1ce vor fi discutate n continuare ntr-un capitol cu e0emple2, sau s tearg o parte a memoriei DA* 1"$ locaii2 ca n urmtorul e0emplu.

Citind datele din registrul (,36 c nd coninutul registrului 6'D este egal cu zero, ntoarce valoarea zero, i scrie n el rezultatul n operaia ,)+ 1no operation- nu opereaz2.

2.' Hntreruperi

5ntreruperile sunt un mecanism a unui microcontroler ce i permit s rspund la unele evenimente la momentul c nd se nt mpl, indiferent de ce face atunci microcontrolerul. Aceasta este o parte foarte important, pentru c permite cone0iunea microcontrolerului cu lumea de afar. 5n general, fiecare ntrerupere schimb debitul programului, l ntrerupe i dup e0ecutarea unui subprogram 1rutine de ntrerupere2, continu din acelai punct.

Degistrul de control al unei ntreruperi se numete (,-C), i se gsete la adresa 9&h. Dolul lui este de a permite sau interzice cererile de ntreruperi, i n caz c nu sunt permise, nregistreaz cererile de ntrerupere singulare prin biii lui. Degistru (,-C),

bit 0 2BI: 1D& +ort Change (nterrupt 6lag bit-bit 'tegule de 5ntrerupere a 'chimbrii +ortului D&2 &it ce informeaz despre schimbrile de la pinii 8, <, $ i 7 ai portului &. "Kcel puin un pin i-a schimbat starea 9Knu s-a nt mplat nici o schimbare la vreun pin

bit 1 I7T: 1(,- !0ternal (nterrupt 6lag bit-bit 'tegule de 5ntrerupere !0tern (,-2 A avut loc o ntrerupere e0tern. "Ka avut loc o ntrerupere 9Knu a avut loc o ntrerupere 3ac s-a detectat un front cresctor sau descresctor la pinul D&9I(,-, 1ce este definit cu bitul (,-!3C n registrul )+-(),2, bitul (,-6 este setat. &itul trebuie s fie ters n subprogramul ntrerupere pentru a detecta urmtoarea ntrerupere. bit 2 T@I: 1-*D9 )verfloE (nterrupt 6lag bit-bit 'tegule 3epire 5ntrerupere -*D)2 3epirea contorului -*D). "Kcontorul i-a schimbat starea de la 66h la 99h. 9Kdepirea nu a avut loc &itul trebuie s fie ters n program pentru ca o ntrerupere s fie detectat. bit 3 2BI3 1D& port change (nterrupt !nable bit-bit +ermite 5ntreruperea schimbrii portului D&2 +ermite s aib loc ntreruperi la schimbarea strii pinilor 8, <, $, i 7 ai portului &. "Kpermite ntreruperi la schimbarea strii 9Kntreruperi interzise la schimbarea strii 3ac D&(! i D&(6 au fost simultan setate, va avea loc o ntrerupere. bit 4 I7T3 1(,- !0ternal (nterrupt !nable bit-bit +ermite 5ntrerupere e0tern (,-2 &it ce permite ntreruperea e0tern de la pinul D&9I(,-. "Kntrerupere e0tern permis 9Kntrerupere e0tern interzis 3ac (,-! i (,-6 au fost setate simultan, va avea loc o ntrerupere. bit 5 T@I3 1-*D9 )verfloE (nterrupt !nable bit-bit +ermite 3epire 5ntrerupere -*D)2 &it ce permite ntreruperile n timpul depirii contorului -*D). "Kntrerupere permis 9Kntrerupere interzis 3ac -9(! i -9(6 au fost simultan setate, va avea loc ntreruperea. .it 6 33I3 1!!+D)* Arite Complete (nterrupt !nable bit-bit +ermite 5ntrerupere Complet a 'crierii !!+D)*2 &it ce permite o ntrerupere la sf ritul unei rutine de scriere n !!+D)* "K ntrerupere permis 9K ntrerupere interzis 3ac !!(! i !!(6 1ce este n registrul !!C),"2 au fost simultan setate, va avea loc o ntrerupere. .it 7 4I3 1Clobal (nterrupt !nable bit-bit +ermite 5ntrerupere Clobal2 &it ce permite sau interzice toate ntreruperile. "Ktoate ntreruperile sunt permise 9Ktoate ntreruperile sunt interzise +(C"$648 are patru surse de ntrerupereB ". -erminarea scrierii datelor n !!+D)* :. 5ntrerupere -*D9 cauzat de depirea timer-ului

=. 5ntrerupere n timpul schimbrii la pinii D&8, D&<, D&$ i D&7 ai portului &. 8. 5ntrerupere !0tern de la pinul D&9I(,- al microcontrolerului 5n general, fiecare surs de ntrerupere are doi bii legai la ea. Unul permite ntreruperea, iar cellalt detecteaz c nd au loc ntreruperi. !0ist un bit comun numit C(! ce poate fi folosit pentru a interzice sau permite toate ntreruperile simultan. Acest bit este foarte folositor c nd se scrie un program pentru c permite ca toate ntreruperile s fie interzise pentru o perioad de timp, aa ca e0ecuia unei pri importante a programului s nu fie ntrerupt. C nd instruciunea ce reseteaz bitul C(! a fost e0ecutat 1C(!K9, toate ntreruperile interzise2, fiecare ntrerupere ce rm ne nerezolvat trebuie ignorat.

5ntreruperile ce rm n nerezolvate i ce au fost ignorate, sunt procesate c nd bitul C(! 1C(!K", toate ntreruperile sunt permise2 va fi ters. C nd i s-a rspuns ntreruperii, bitul C(! a fost ters, aa c orice ntreruperi adiionale vor fi interzise, adresa de ntoarcere a fost trimis n stiv, iar adresa 9998h a fost scris n contorul programului T numai dup aceasta ncepe rspunsul la o ntrerupereF 3up ce este procesat ntreruperea, bitul a crui setare a cauzat o ntrerupere trebuie ters, sau rutina de ntrerupere va fi procesat automat tot mereu n timpul ntoarcerii la programul principal. +strarea coninutului regitrilor importani 3oar valoarea de ntoarcere a contorului programului este nmagazinat ntr-o stiv n timpul unei ntreruperi 1prin valoare de ntoarcere a contorului programului nelegem adresa instruciunii ce trebuie e0ecutat, dar nu a fost e0ecutat pentru c a avut loc ntreruperea2. +str nd doar valoarea contorului programului adesea nu este suficient. Unii regitri ce sunt n uz n programul principal pot fi de asemenea n uz n rutina de ntrerupere. 3ac ei nu sunt reinui, programul principal va obine valori complet diferite n acei regitri n timpul ntoarcerii dintr-o rutin de ntrerupere, ceea ce va cauza erori n program. Un e0emplu de asemenea caz este coninutul registrului de lucru A. 3ac presupunem c programul principal a folosit registrul de lucru A pentru unele din operaiile sale, i c a pstrat n el o valoare ce este important pentru urmtoarea instruciune, atunci o ntrerupere ce se va nt mpla nainte de acea instruciune va schimba valoarea registrului de lucru A, ce va influena direct

programul principal. +rocedura de nregistrare de regitri importani nainte de a merge la o rutin de ntrerupere se numete +U'/, n timp ce procedura ce aduce valorile nregistrate napoi, se numete +)+. +U'/ i +)+ sunt instruciuni ale altor microcontrolere 1(ntel2, dar sunt at t de larg acceptate c o ntreag operaie este numit dup ele. +(C"$648 nu are instruciuni ca +U'/ i +)+, i ele trebuie s fie programate.

3atorit simplitii i folosirii frecvente, aceste pri ale programului pot fi fcute ca macrouri. Conceptul unui *acro este e0plicat n L.imba% de asamblare programL. 5n urmtorul e0emplu, coninuturile regitrilor A i '-A-U' sunt memorate n variabilele AO-!*+ i '-A-U'O-!*+ nainte de rutina de ntrerupere. .a nceputul rutinei +U'/ trebuie s verificm bancul selectat n prezent pentru c AO-!*+ and '-A-U'O-!*+ nu se gsesc n bancul 9. +entru schimbul de date ntre aceti regitri, instruciunea 'AA+6 se folosete n loc de *)J6 pentru c nu afecteaz starea biilor registrului '-A-U'. !0emplul este un program asamblor pentru urmtorii pai B ". -estarea bancului curent :. 'tocarea registrului A indiferent de bancul curent =. 'tocarea registrul '-A-U' n bancul 9 8. !0ecutarea rutinei de ntrerupere pentru procesul de ntrerupere 1('D2 <. Destaureaz registrul '-A-U' $. Destaureaz registrul A 3ac mai sunt i alte variabile sau regitri ce trebuie stocai, atunci ei trebuie s fie pstrai

dup stocarea registrului '-A-U' 1pasul =2, i adui napoi nainte ca registrul '-A-U' s fie restaurat 1pasul <2.

Acelai e0emplu se poate realiza utiliz nd macro-uri, fc nd astfel programul mai eligibil. *acro-urile ce sunt de%a definite, pot fi folosite pentru scrierea de noi macro-uri. *acro-urile &A,;" i &A,;9 ce sunt e0plicate n capitolul L)rganizarea memorieiL sunt folosite cu macro-urile PpushP i PpopP.

5ntrerupere e0tern la pinul D&9I(,- al microcontrolerului 5ntreruperea e0tern la pinul D&9I(,- este triggerat de frontul cresctor 1dac bitul (,-!3CK" n registrul )+-(),U$V2, sau de frontul descresctor 1dac (,-!3CK92. C nd apare semnalul corect la pinul (,-, bitul (,-6 este setat la registrul (,-C),. &itul (,-6 1(,-C),U"V2 trebuie resetat n rutina de ntrerupere, aa ca ntreruperea s nu aib loc din nou n timpul ntoarcerii la programul principal. Acesta este un pas important al programului pe care programatorul nu trebuie s-l uite, sau programul va merge constant n rutina de ntrerupere. 5ntreruperea poate fi nchis prin resetarea bitului de control (,-! 1(,-C),U8V2. 5ntreruperea n timpul depirii contorului -*D) 3epirea contorului -*D) 1de la 66h la 99h2 va seta bitul -9(6 1(,-C),U:V2. Aceasta este o ntrerupere foarte important pentru c multe probleme reale se por rezolva folosind aceast ntrerupere. Unul din e0emple este msurarea timpului. 3ac tim c t timp are nevoie contorul pentru a completa un ciclu de la 99h to 66h, atunci numrul de ntreruperi nmulit cu acea durat de timp va da timpul total scurs. 5n rutina de ntrerupere unele variabile vor fi incrementate n memoria DA*, valoarea acelei variabile nmulite cu timpul de care are nevoie contorul pentru a contoriza ntr-un ciclu ntreg, va da timpul total scurs. 5ntreruperea poate fi pornitIoprit prin setareaIresetarea bitului -9(! 1(,-C),U<V2. 5ntrerupere pe timpul unei schimbri la pinii 8, <, $ i 7 ai portului & 'chimbarea semnalului de intrare la +)D-& U7B8V seteaz bitul D&(6 1(,-C),U9V2. +atru pini D&7, D&$, D&< i D&8 ai portului &, pot triggera o ntrerupere ce are loc c nd starea la ei se schimb de la unu la zero logic, sau viceversa. +entru ca pinii s fie sensibili la aceast schimbare, trebuie definii ca intrare. 3ac oricare din ei este definit ca ieire, ntreruperea nu va fi generat la schimbarea strii. 3ac ei sunt definii ca intrare, starea lor curent este comparat cu vechea valoare ce a fost stocat la ultima citire de la portul &. 5ntreruperea poate fi pornitIoprit prin setareaIresetarea bitului D&(! n registrul (,-C),. 5ntreruperea la terminarea subrutinei Erite n !!+D)*

Aceast ntrerupere este doar de natur practic. +entru c scrierea ntr-o locaie !!+D)* dureaz cam "9ms 1care este o durat lung n termenii microcontrolerului2, nu este rentabil de a atepta p n la capt scrierea. !ste adugat astfel mecanismul de ntrerupere ceea ce permite microcontrolerului s continue e0ecutarea programului principal, n timp ce scrierea n !!+D)* este fcut n plan secundar. C nd scrierea este terminat, ntreruperea informeaz microcontrolerul c scrierea s-a terminat. &itul !!(6, prin care se face aceast informare, se gsete n registrul !!C),". +roducerea unei ntreruperi poate fi interzis prin resetarea bitului !!(! n registrul (,-C),. (niializarea ntreruperii +entru a folosi un mecanism de ntrerupere a unui microcontroler, trebuie fcute unele sarcini pregtitoare. Aceste proceduri sunt pe scurt numite LiniializareL. +rin iniializare definim la ce va rspunde microcontrolerul, i ce va ignora. 3ac nu setm bitul ce permite o anumit ntrerupere, programul nu va e0ecuta un subprogram ntrerupere. +rin aceasta putem obine controlul asupra producerii ntreruperii, ceea ce este foarte folositor.

!0emplul de mai sus arat iniializarea unei ntreruperi e0terne la pinul D&9 al microcontrolerului. Unde se vede unu setat, nseamn c ntreruperea este permis. +roducerea altor ntreruperi nu este permis, i toate ntreruperile mpreun sunt interzise p n ce bitul C(! este inut n unu. Urmtorul e0emplu arat o cale tipic de a diri%a ntreruperile. +(C"$648 are doar o locaie unde adresa unui subprogram ntrerupere este memorat. Aceasta nseamn c mai nt i trebuie s detectm ce ntrerupere este la ndem n 1dac mai mult de o surs de ntreruperi este disponibil2, i apoi putem e0ecuta acea parte a programului ce se refer la acea ntrerupere.

#e-ntoarcerea +intr-o rutin0 +e -ntrerupere poate %i %0cut0 cu instruciunile #567#8/ #56L9 i #5 ;e reco&an+0 ca s0 %ie utili<at0 instruciunea #56F:5 pentru c0 acea instruciune este singura ce s auto&at bitul !:5/ ceea ce per&ite s0 se pro+uc0 o nou0 -ntrerupere)

2.( Timer ul liCer TM2@ -imer-ele 1temporizatoarele2 sunt de obicei cele mai complicate pri ale unui microcontroler, aa c este necesar s rezervm mai mult timp pentru a le e0plica. )dat cu aplicarea lor este posibil s se creeze relaii ntre o dimensiune real ca LtimpL i o variabil ce reprezint starea timer-ului ntr-un microcontroler. 6izic, timer-ul este un registru a crui valoare crete continuu p n la :<<, i apoi pornete de la captB 9, ", :, =, 8...:<<....9,", :, =......etc.

Aceast incrementare se face n fundalul a tot ceea ce face un microcontroler. 3epinde de programator Ls gseasc o caleL de cum s profite de aceast caracteristic pentru nevoile lui. Una din ci este s creasc o variabil la fiecare depire a timer-ului. 3ac tim c t timp are nevoie timer-ul s fac o rund complet, atunci nmulind valoarea variabilei cu acel timp obinem timpul total scurs. +(C"$648 are un timer de 4 bii. ,umrul de bii determin p n la ce valoare contorizeaz timer-ul nainte de a ncepe s contorizeze de la zero din nou. 5n cazul unui timer de 4 bii, acel numr este :<$. ) schem simplificat a relaiei dintre un timer i un prescaler-divizor este reprezentat n diagrama anterioar. +rescalerul este numele acelei pri din microcontroler ce divide ceasul oscilatorului nainte de a a%unge la logica ce crete starea timer-ului. ,umrul ce divide un ceas este definit prin trei bii n registrul )+-(),. Cel mai mare divizor este :<$. Aceasta nseamn de fapt c doar la al fiecare :<$-lea ceas, valoarea timer-ului va crete cu unu. Aceasta ne d posibilitatea de a msura perioade de timp mai lungi.

3up fiecare numrtoare p n la :<<, timer-ul i reseteaz valoarea la zero i ncepe cu un nou ciclu de contorizare p n la :<<. 5n timpul fiecrei tranziii de la :<< la zero, bitul -)(6 n registrul (,-C), este setat. 3ac se permit ntreruperi, de aceasta se poate profita n generarea i n procesarea rutinei de ntrerupere. 3epinde de programator s reseteze bitul -)(6 n rutina de ntrerupere, aa ca noua ntrerupere, sau noua depire s fie detectate. 5n afar de ceasul oscilator intern, starea timer-ului poate de asemenea s creasc prin ceasul e0tern la pinul DA8I-)C;(. Alegerea uneia din aceste dou opiuni se face n registrul )+-(), prin bitul -)C'. 3ac a fost aleas aceast opiune de ceas e0tern, va fi posibil s se defineasc frontul unui semnal 1cresctor sau descresctor2, la care timer-ul s-i creasc valoarea.

5n practic, unul din e0emplele tipice ce este rezolvat prin ceas e0tern i unde timer-ul contorizeaz rotaiile complete ale unui a0 al unei maini de producie, ca bobinatorul de

transformator de e0emplu. ' rotim patru uruburi de metal pe a0ul unui bobinator. Aceste patru uruburi vor reprezenta conve0itatea metalic. ' plasm acum un senzor inductiv la o distan de < mm de captul unui urub. 'enzorul inductiv va genera semnalul descresctor de fiecare dat c nd capul urubului este paralel cu capul senzorului. 6iecare semnal va reprezenta o ptrime dintr-o rotaie, i suma tuturor rotaiilor se va gsi n timer-ul -*D). +rogramul poate uor citi aceste date din timer printr-un bus de date. Urmtorul e0emplu ilustreaz cum s se iniializeze timer-ul la fronturile descresctoare ale semnalului din sursa e0tern cu un prescaler "B8. -imer-ul lucreaz n mod Lpolig-mpingereL.

Acelai e0emplu poate fi realizat printr-o ntrerupere n modul urmtorB

+rescalerul poate fi asignat fie de timer-ul -*D) fie de Eatchdog. Aatchdogul este un mecanism pe care microcontrolerul l folosete s se apere mpotriva blocrii programelor. Ca orice alt circuit electric, la fel i cu microcontrolerul se pot nt mpla defectri, sau unele stricciuni. 3in nefericire microcontrolerul are de asemenea un program unde se pot nt mpla probleme. C nd se nt mpl aceasta, microcontrolerul se va opri din funcionare i va rm ne n acea stare p n ce cineva l reseteaz. 3in cauza aceasta, a fost introdus mecanismul Eatchdog. 3up o anumit perioad de timp, Eatchdogul reseteaz microcontrolerul 1de fapt

microcontrolerul se reseteaz singur2. Aatchdogul luceaz pe baza unui principiu simpluB dac se nt mpl depirea timer-ului, microcontrolerul este resetat, i ncepe e0ecutarea programului mereu din nou. Astfel, se va nt mpla un reset at t n cazul unei funcionri corecte c t i incorecte. Urmtorul pas este prevenirea resetului n cazul unei funcionri corecte, ce se face prin scrierea unui zero n registrul A3- 1instruciunea C.DA3-2 de fiecare dat c nd se apropie de depire. Astfel programul va preveni un reset c t timp este e0ecutat corect. 3e ndat ce s-a blocat, nu se va scrie zero, va avea loc depirea timer-ului A3- i un reset ce va duce microcontrolerul napoi la funcionarea corect din nou. +rescalerul este acordat cu timer-ul -*D), sau cu timer-ul Eatchdogului prin bitul +'A n registrul )+-(),. Hterg nd bitul +'A, prescalerul va fi acordat cu timer-ul -*D). C nd prescalerul este acordat cu timer-ul -*D), toate instruciunile de scriere n registrul -*D) 1C.D6 -*D9, *)JA6 -*D9, &'6 -*D9,...2 vor terge prescalerul. C nd prescalerul este asignat timerului Eatchdog, numai instruciunea C.DA3- va terge prescalerul i timer-ul Eatchdog n acelai timp. 'chimbarea prescalerului este complet sub controlul programatorului, i poate fi schimbat n timp ce se ruleaz programul.

51ist0 +oar un prescaler i un ti&er) Funcie +e ne2oi/ ele sunt asignate %ie ti&er-ului 6(#= %ie >atc ului)

Degistrul control )+-(),

.it 0:2 P1@& P11& P12 1+rescaler Date 'elect bit-bit 'electare Dat +rescaler2 'ubiectul prescaler, i cum afecteaz aceti bii lucrul unui microcontroler va fi abordat n seciunea despre -*D).

bit 3 P1A 1+rescaler Assignment bit-bit Asignare +rescaler2 &it ce asigneaz prescalerul ntre -*D) i timer-ul Eatchdog2. "Kprescalerul este asignat la timer-ul Eatchdog 9Kprescalerul este asignat la timer-ul free-liber bit 4 T@13 1-*D9 'ource !dge 'elect bit-bit 'electare 6ront 'urs -*D)2

3ac triggerul -*D) a fost activat cu impulsuri de la pinul DA8I-9C;(, acest bit va determina dac va fi la frontul cresctor sau descresctor al semnalului. "Kfront descresctor 9Kfront cresctor bit 5 T@C1 1-*D9 Cloc? 'ource 'elect bit-bit 'electare 'urs Ceas -*D)2 Acest bit permite unui timer free-run s-i incrementeze valoarea fie de la oscilatorul intern, de e0emplu S din ceasul oscilatorului, sau prin impulsuri e0terne la pinul DA8I-9C;(. "Kimpulsuri e0terne 9K"I8 ceas intern bit 6 (7T3.4 1(nterrupt !dge 'elect bit-bit 'electare 6ront 5ntreruperi2 3ac a fost permis producerea de ntreruperi, acest bit va determina la ce front va avea loc ntreruperea la pinul D&9I(,-. "Kfront cresctor 9Kfront descresctor bit 7 2BPU 1+)D-& +ull-up !nable bit-bit +ermite +ull-up-tragerea +)D-&2 Acest bit deschide sau nchide rezistorii interni la portul &. "Krezistorii Ppull-upP deschii 9Krezistorii Ppull-upP nchii

2., Memoria de date 33P2OM +(C"$648 are $8 de b@tes de locaii de memorie !!+D)* la adresele de la 99h la $=h 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 rm ne chiar i c nd microcontrolerul este nchis. 3atele pot fi reinute n !!+D)* fr sursa de alimentare p n la 89 de ani. 1dup cum declar productorul lui +(C3"$6482, i se pot e0ecuta "9999 de cicluri de scriere. 5n practic, memoria !!+D)* este folosit pentru stocarea unor date importante sau a unor parametri de proces. Un asemenea parametru este o temperatur dat, asignat c nd se seteaz un regulator de temperatur la un proces. 3ac nu s-a reinut, va fi nevoie s se a%usteze temperatura dat dup fiecare ntrerupere a alimentrii. +entru c aceasta este foarte nepractic 1chiar periculos2, productorii de microntrolere au nceput s instaleze un tip mai mic de memorie !!+D)*. *emoria !!+D)* este plasat ntr-un loc special al memoriei i poate fi accesat prin regitri speciali. Aceti regitri suntB W 33.ATA la adresa 94h, care reine datele de citit sau cele de scris. W 33A.2 la adresa 9#h, ce conine o adres a locaiei !!+D)* ce este accesat.

W 33CO71 la adresa 44h, ce conine bii de control. W 33CO72 la adresa 4#h. Acest registru nu e0ist fizic i servete la prote%area !!+D)*ului de scrieri accidentale. Degistrul !!C)," la adresa 44h este un registru de control cu < bii implementai. &iii <, $ i 7 nu sunt folosii, i prin citire sunt totdeauna zero. (nterpretarea biilor registrului !!C)," urmeaz. Degistrul !!C),"

bit 9 2. 1Dead Control bit-bit Control Citire2 'etarea acestui bit iniializeaz transferul de date definit n !!A3D la registrul !!3A-A. +entru c timpul nu este esenial n citirea datelor ca la scriere, datele din !!3A-A pot fi de%a folosite n urmtoarea instruciune. "Kinitializeaz citirea 9Knu iniializeaz citirea bit " )2 1Arite Control bit-bit Control 'criere2 'etarea acestui bit iniializeaz scrierea datelor din registrul !!3A-A la adresa specifcat prin registrul !!A3D. "Kinitializeaz scrierea 9Knu iniializeaz scrierea bit : )237 1!!+D)* Arite !nable bit-bit +ermite 'crierea !!+D)*2 +ermite scrierea n !!+D)* 3ac acest bit nu a fost setat, microcontrolerul nu va permite scrierea n !!+D)*. "Kscriere permis 9Kscriere interzis bit = )2322 1Arite !!+D)* !rror 6lag-'tegule !roare 'criere !!+D)* 2 !roare n timpul scrierii n !!+D)* Acest bit a fost setat doar n caz c scrierea n !!+D)* a fost intrerupt de un semnal sau prin terminarea timpului din timer-ul Eatchdog 1dac este activat2. "Ka avut loc eroare 9Knu a avut loc eroare bit 8 33I: 1!!+D)* Arite )peration (nterrupt 6lag bit-bit 'tegule 5ntrerupere )peraie 'criere !!+D)*2 &it folosit pentru a informa c scrierea datelor s-a terminat. C nd s-a terminat scrierea, acest bit va fi setat automat. +rogramtorul trebuie s tearg bitul !!(6 n programul su pentru a detecta noua terminare a scrierii. "Kscrierea terminat 9Kscrierea nc neterminat, sau nc nu a nceput Citirea din memoria !!+D)*

'etarea bitului D3 iniializeaz transferul de date de la adresa gsit n !!A3D la registrul !!3A-A. Ca i la citirea datelor nu avem nevoie de at t de mult timp ca la scriere, datele luate din registrul !!3A-A pot de%a fi folosite mai departe n urmtoarea instruciune. ) mostr a prii programului ce citete datele n !!+D)*, ar putea arta ca mai %osB

3up ultima instruciune de program, coninutul de la o adres !!+D)* zero poate fi gsit n registrul E. 'crierea n memoria !!+D)* +entru a scrie datele n locaia !!+D)*, programatorul trebuie mai nt i s scrie adresa n registrul !!A3D i datele n registrul !!3A-A. ,umai atunci este folositor de a seta bitul AD ce pune totul n micare. &itul AD va fi resetat, i bitul !!(6 setat urm nd o scriere ce poate fi folosit n procesarea ntreruperilor. Jalorile <<h i AAh sunt prima i a doua cheie care interzic ca scrierea accidental n !!+D)* s se nt mple. Aceste dou valori sunt scrise n !!C),: care servete doar pentru acel scop, de a primi aceste dou valori i de a preveni orice scriere accidental n memoria !!+D)*. .iniile de program marcate ca ", :, = i 8 trebuie s fie e0ecutate n acea ordine n intervale egale de timp. 3e aceea este foarte important, s nchidei ntreruperile ce ar putea schimba timpul necesar pentru e0ecutare instruciunilor. 3up scriere, ntreruperile, pot fi permise din nou. !0emplu unei pri a programului ce scrie datele 90!! n prima locaie n memoria !!+D)* ar putea arta ca mai %osB

5ste reco&an+at ca 9#58 s0 %ie -nchis tot ti&pul cu e1cepia scrierii +atelor -n 55"#=(/ aa c0 posibilitatea unei scrieri acci+entale 2a %i &ini&0) ;crierea -n 55"#=( 2a %i auto&at tears04

CAPITOLUL 3 1et Instruc$iuni

Introducere Am menionat de%a c microcontrolerul nu este ca orice alt circuit integrat. C nd ies din producie cele mai multe circuite integrate sunt gata de a fi introduse n aparate ceea ce nu

este cazul cu microcontrolerele. +entru a LfaceL microcontrolerul s ndeplineasc o sarcin, trebuie s-i spunem e0act ce s fac, sau cu alte cuvinte trebuie s scriem programul pe care microcontrolerul s-l e0ecute. Jom descrie n acest capitol instruciunile care alctuiesc assembler-ul, sau limba%ul de programare cu nivel sczut pentru microcontrolerele +(C. 1et de Instruc$iuni n :amilia Microcontrolerului PIC1'CGG 'etul complet care cuprinde =< de instruciuni este dat n tabela urmtoare. Un motiv pentru un numr aa de mic de instruciuni st n primul r nd n faptul c discutm despre un microcontroler D('C ale crui instruciuni sunt bine optimizate av nd n vedere viteza de lucru, simplitatea arhitectural i compactitatea codului. 'ingurul nea%uns este c programatorul trebuie s controleze o tehnic LneconfortabilL n a utiliza un set modest de =< de instruciuni. Trans%er de .ate -ransferul de date ntr-un microcontroler este fcut ntre registrul de lucru 1A2 i un registru PfP ce reprezint orice locaie n DA*-ul intern 1indiferent dac acetia sunt regitri speciali sau de scop general2. +rimele trei instruciuni 1a se vedea urmtorul tabel2 fac ca o constant s fie nscris n registrul A 1*)J.A este prescurtarea pentru *)Je .iteral to A2, i ca datele s fie copiate din registrul A n DA* i datele din DA* s fie copiate n registrul A 1sau n aceeai locaie DA*, la care punct numai starea steguleului G se schimb2. (nstruciunea C.D6 scrie constanta 9 n registrul Pf P, iar C.DA scrie constanta 9 n registrul A. (nstruciunea 'AA+6 schimb locurile c mpului de nibbles- buci de 8 bii n interiorul unui registru. Aritmetic "i lo+ic 3in toate operaiile aritmetice, +(C ca ma%oritatea microcontrolerelor, accept doar scderea i adunarea. 'teguleele C, 3C i G sunt setate funcie de rezultatul adunrii sau scderii, dar cu o e0cepieB pentru c scderea se face ca o adunare a unei valori negative, eticheta C este invers urm nd scderii. Cu alte cuvinte, este setat dac operaia este posibil, i este resetat dac un numr mai mare a fost sczut din unul mai mic. Unitatea logic a +(C-ului are capabilitatea de a face operaiile A,3 1H(2, )D 1'AU2, !Q-)D 1'AU-!QC.U'(J2, complementare 1C)*62 i rotaie 1D.6 i DD62.

(nstruciunile ce rotesc coninutul registrului mut biii n interiorul registrului prin eticheta C cu un spaiu la st nga 1ctre bitul 72, sau la dreapta 1ctre bitul 92. &itul ce LieseL din registru este scris n steguleul C, i valoarea steguleului C este scris ntr-un bit al Lprii opuseL a registrului. Opera$ii cu Ci$i (nstruciunile &C6 i &'6 fac setarea sau tergerea unui singur bit oriunde n memorie. Chiar dac pare o simpl operaie, este e0ecutat n aa fel ca C+U citete mai nt i ntregul b@te, schimb un bit n el i apoi scrie ntregul b@te n acelai loc. .irec$ionarea deCitului unui pro+ram (nstruciunile C)-), CA.. i D!-UD, sunt e0ecutate n acelai fel ca i n celelalte microcontrolere, numai stiva este independent de DA*-ul intern i limitat la opt nivele. (nstruciunea PD!-.A ?P este identic cu instruciunea D!-UD,, cu e0cepia c nainte de a se ntoarce dintr-un subprogram, constanta definit operandul de instruciuni este scris n registrul A. Aceast instruciune ne permite s proiectm uor tabelele 1listele2 .oo?-up. Cel mai mult le folosim la determinarea poziiei datelor n tabelul nostru adug nd-o la adresa la care ncep tabelele, i apoi citim datele din acea locaie 1care este uzual gsit n memoria program2. -abelul poate fi format ca un subprogram ce const dintr-o serie de instruciuni PD!-.A ?P, unde constantele P?P sunt membri ai tabelului.

'criem poziia unui membru al tabelului nostru n registrul A, i folosind instruciunea CA.. apelm un subprogram care creaz tabelul. +rima linie de subprogram A33A6 +C., f adaug poziia unui membru al registrului A la adresa de start a tabelului nostru, gsit n registrul +C., i astfel obinem adresa datelor reale n memoria program. C nd ne ntoarcem dintr-un subprogram vom avea n registrul A coninutul unui membru al tabelului adresat. 5n

e0emplul anterior, constanta P?:P va fi n registrul A urm nd unei ntoarceri dintr-un subprogram. D!-6(! 1D!-urn 6rom (nterrupt - (nterrupt !nable2 este o ntoarcere dintr-o rutin de ntrerupere i difer de o D!-UD, numai n aceea c seteaz automat bitul C(! 1Clobal (nterrupt !nable2. .a o ntrerupere, acest bit este automat ters. C nd ncepe ntreruperea, numai valoarea contorului de program este pus n v rful stivei. ,u este prevzut memorarea automat a valorilor i strii registrului. Xump-urile 1salturile2 condiionale sunt sintetizate n dou instruciuniB &-6'C i &-6''. 6uncie de starea bitului n registrul PfP ce este testat, instruciunile sar sau nu peste instruciunea de program urmtoare. Perioada de 3Gecu$ie a Instruc$iunii -oate instruciunile sunt e0ecutate ntr-un ciclu cu e0cepia instruciunilor ramur condiionale dac condiia a fost adevrat, sau dac coninutul contorului de program a fost schimbat de o anumit instruciune. 5n acest caz, e0ecuia cere dou cicluri de instruciuni, iar al doilea ciclu este e0ecutat ca ,)+ 1,o )peration-6r operaii2. +atru cloc?-uri oscilator fac un ciclu instruciune. 3ac folosim un oscilator cu frecvena de 8 */z, timpul normal pentru e0ecuia instruciunii este " Ys, i n caz de branching-ramificare condiional, perioada de e0ecuie este : Ys. List de cu-inte % orice locaie de memorie ntr-un microcontroler ) registru de lucru C poziie bit n registru PfP d bit destinaie label grup de opt caractere ce marcheaz nceputul unei pri de program TO1 v rful stivei IJ opiune KL poziie bit n registru

Z" 3ac portul (I) este operand surs, este citit starea pinilor microcontrolerului Z: 3ac aceast instruciune este e0ecutat n registrul -*D) i dac dK", prescaler-ul asignat acelui timer va fi automat ters Z= 3ac +C s-a modificat, sau rezultatul testului K", instruciunea s-a e0ecutat n dou cicluri

CAPITOLUL ! Pro+ramare n LimCaM de AsamClare

Introducere Abilitatea de a comunica este de mare importan n orice domeniu. -otui, este posibil numai dac am ndoi partenerii de comunicare cunosc acelai limba%, sau urmresc aceleai reguli n timpul comunicrii. 6olosind aceste principii ca un punct de plecare, putem de asemenea defini comunicarea ce are loc ntre microcontrolere i om. .imba%ul pe care microcontrolerul i omul l folosesc pentru a comunica este numit Llimba% de asamblareL. -itlul nsui nu are un neles deosebit, i este analog numelor altor limba%e, de e0. engleza i franceza. *ai precis, Llimba%ul de asamblareL este doar o soluie trectoare. +rogramele scrise n limba% de asamblare trebuie traduse ntr-un Llimba% de zero-uri i unu-uriL pentru ca un microcontroler s-l neleag. L.imba%ul de asamblareL i Lassembler-ulL sau asamblorul sunt dou noiuni diferite. +rimul reprezint un set de reguli folosite n scrierea unui program pentru un microcontroler, iar cellalt este un program n computerul personal care traduce limba%ul de asamblare ntr-un limba% de zero-uri i unu-uri. Un program ce este tradus n Lzero-uriL i Lunu-uriL este numit Llimba% mainL.

6izic, LPro+ramL reprezint un fiier pe discul computerului 1sau n memorie dac este citit ntr-un microcontroler2, i este scris conform cu regulile de asamblare sau ale altui limba% pentru programarea microcontrolerului. )mul poate nelege pentru c este constituit din semne i cuvinte ale alfabetului. C nd se scrie un program, trebuie urmrite unele reguli pentru a se obine un efect dorit. Un Translator interpreteaz fiecare instruciune scris n limba%ul de asamblare ca o serie de zero-uri i unu-uri ce au o semnificaie pentru logica intern a microcontrolerului. ' lum de e0emplu instruciunea LD!-UD,L pe care microcontrolerul o folosete pentru a se ntoarce dintr-un sub-program.

C nd asamblorul l traduce, obinem o serie de zero-uri i unu-uri pe care microcontroleul tie cum s-l interpreteze. 3GempluF D!-UD, 99 9999 9999 "999 'imilar propoziiei de mai sus, fiecare instruciune de asamblare este interpretat ca i corespunz nd unei serii de zero-uri i unu-uri. .ocul unde aceast traducere a limba%ului de asamblare se gsete , se numete un fiier de Le0ecuieL. Jom nt lni adesea numele de fiier L/!QL. Acest nume vine de la o reprezentare he0azecimal a acelui fiier, ca i de la apendicele Lhe0L din titlu, de e0. Lrun through.he0L. )dat ce este generat, fiierul de e0ecuie este citit n microcontroler printr-un programator. Un program n LimCaM de AsamClare este scris ntr-un program pentru procesarea te0tului 1editorul2 i este capabil de a produce un fiier A'C(( pe discul computerului sau n zone specializate ca *+.A& T ce se va e0plica n capitolul urmtor. .imba% de Asamblare !lementele de baz ale limba%ului de asamblare suntB

.abel-uri sau !tichete (nstruciuni )peranzi 3irective Comentarii

.abel-uri Un LaCel este o desemnare te0tual 1n general un cuv nt uor de citit2 pentru o linie ntr-un program, sau seciunea unui program unde micro-ul poate sri T sau chiar nceputul unui set de linii a unui program. +oate fi folosit de asemenea pentru a e0ecuta ramificare de program 1ca Coto[[.2 i programul poate chiar avea o condiie ce trebuie ndeplinit pentru ca instruciunea Coto s fie e0ecutat. !ste important pentru un label de a ncepe cu o liter a alfabetului sau cu o subliniere LOL. .ungimea label-ului poate fi de p n la =: caractere. !ste de asemenea important ca un label s nceap de la primul r nd.

(nstruciuni (nstruciunile sunt de%a definite prin folosirea unui microcontroler specific, aa c ne rm ne doar s urmm instruciunile pentru folosirea lor n limba%ul de asamblare. *odul n care scriem o instruciune mai este numit Lsinta0aL instruciunii. 5n e0emplul urmtor putem recunoate o greeal n scriere pentru c instruciunile movlp i goto nu e0ist pentru microcontrolerul +(C"$648.

)peranzi )peranzii sunt elemente ale instruciunii pentru instruciunea ce este e0ecutat. !i sunt de obicei re+i"tri sau -ariaCile sau constante. Constantele sunt numite Lliteral-eL. Cuv ntul literal nseamn LnumrL.

Comentarii Comentariul este o serie de cuvinte pe care programatorul le scrie pentru a face programul mai clar i mai uor de citit. 'e plaseaz dup o instruciune , i trebuie s nceap cu punct i virgulLRL. 3irective ) directi- este similar unei instruciuni, dar spre deosebire de o instruciune este independent de modelul microcontrolerului, i reprezint o caracteristic a limba%ului de asamblare nsui. 3irectivelor le sunt date uzual nelesuri de scop prin variabile i regitri. 3e e0emplu, .!J!. poate fi o desemnaie pentru o variabil n memoria DA* la adresa 93h. 5n felul acesta, variabila la acea adres poate fi accesat prin desemnaia .!J!.. Aceasta este

mult mai uor pentru un programator s neleag dec t s ncerce s-i aduc aminte c adresa 93h conine informaii despre .!J!..

Un eGemplu de pro+ram scris Urmtorul e0emplu ilustreaz un program simplu scris n limba% de asamblare respect nd regulile de baz. C nd 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 c nd a fost scris, tipul microcontrolerului pentru care a fost scris, i numele programatorului.

+entru c aceste date nu sunt importante pentru translatorul de asamblare, este scris ca i comentarii. -rebuie remarcat c un comentariu ncepe totdeauna cu punct i virgul i c poate fi plasat ntr-un r nd nou sau poate urma dup instruciune. !ste cel mai bine inut n r ndul al treilea pentru a face traseul uor de urmrit.

3up deschiderea comentariului ce a fost scris, trebuie inclus directi-a. Aceasta este artat n e0emplul de mai sus. +entru a funciona corect, trebuie s definim c iva parametri ai microcontrolerului caB - tipul oscilatorului - dac timer-ul Eatchdog este pe deschis, i - dac circuitul de resetare intern este activ. -oate acestea sunt definite prin urmtoarea directivB OC),6(C OC+O)66\OA3-O)66\+AD-!O),\Q-O)'C C nd toate elementele necesare au fost definite, putem ncepe scrierea unui program. 5n primul r nd, este necesar de a determina adresa de unde ncepe microcontrolerul, dup pornirea sursei de alimentare. Aceasta este 1org 90992. Adresa de la care ncepe programul dac are loc o ntrerupere este 1org 90982. +entru c acesta este un program simplu, va fi suficient s direcionm microcontrolerul la nceputul programului cu o instruciune L+oto MainL. (nstruciunile gsite n Main suC routine selecteaz ban?-ul " al memoriei 1&A,;"2 pentru a accesa registrul -D('(&, aa nc t portul & s fie declarat ca o ieire 1movlE 9099, movEf -D('(&2. Urmtorul pas este de a selecta ban?-ul de memorie 9 i de plasa statusul unu-lui logic la portul &1 movlE 9Qff, movEf +)D-& 2, i astfel programul principal este terminat. -rebuie s facem o alt bucl unde microcontrolerul s fie inut ca s nu se LrtceascL dac se nt mpl o eroare. +entru acest scop, se face o bucl infinit unde micro-ul este reinut n timp ce sursa este conectat. ,ecesarul Lsf ritL de la concluzia fiecrui program informeaz translatorul de asamblare c nu mai sunt instruciuni n program. .irecti-e de control 8." ]3!6(,! 'chimb o bucat de te0t pentru o alta 1intaGF ]defineUnameV ^Ute0t ce schimb numeleV_ .escriereF 3e fiecare dat c nd apare UnameV n program , va fi nlocuit cu Ute0t ce schimb numeleV. 3GempluF ]define turned on " ]define turned off 9 .irecti-e similareF ]U,3!6(,!, (63!6,(6,3!6 8.: (,C.U3! (nclude un fiier adiional ntr-un program 1intaGF ]include UfileOnameV

]include L .escriereF ) aplicaie a acestei directive are efect ca i cum ntregul fiier a fost copiat ntr-un loc unde directiva LincludeL a fost gsit. 3ac 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. 3irectiva LincludeL contribuie la un traseu mai bun al programului principal. 3GempluF ]include Uregs.hV ]include Lsubprog.asmL 8.= C),'-A,- 3 o valoare numeric constant desemnrii te0tuale 1intaGF Constant UnameVKUvalueV .escriereF 3e fiecare dat c nd apare UnameV n program, va fi nlocuit cu UvalueV. 3GempluF Constant *AQ(*U*K"99 Constant .engthK=9 .irecti-e similareF '!-, JAD(A&.! 8.8 JAD(A&.! 3 o valoare numeric variabil desemnrii te0tuale 1intaGF JariableUnameVKUvalueV .escriereF 6olosind aceast directiv, desemnarea te0tual se nlocuiete cu o valoare particular. 3ifer de directiva C),'-A,- n aceea c dup aplicarea directivei, valoarea desemnrii te0tuale poate fi nlocuit. 3GempluF variable levelK:9 variable timeK"= .irecti-e similareF '!-, C),'-A,8.< '!- 3efinirea variabilei asamblorului 1intaGF UnameOvariableVsetUvalueV .escriereF Jariabilei UnameOvariableV i este adugat e0presia UvalueV. 3irectiva '!- este similar lui

!NU, dar cu directiva '!- numele variabilei poate fi redefinit urm nd o definiie. 3GempluF level set 9 length set ": level set 8< .irecti-e similareF !NU, JAD(A&.! 8.$ !NU 3efinind constanta asamblorului 1intaGF UnameOconstantV e`u UvalueV .escriereF -o the name of a constant UnameOconstantV is added value UvalueV 3GempluF five e`u < si0 e`u $ seven e`u 7 Instruc$iuni similareF '!8.7 )DC 3efinete o adres de unde programul este nmagazinat n memoria microcontrolerului 1intaGF UlabelVorgUvalueV .escriereF Aceasta este cea mai frecvent folosit directiv. Cu a%utorul acestei directive definim unde o anumit parte a programului va fi n memoria program. 3GempluF 'tart org 9a99 movlE movEf +rimele dou instruciuni ce urmeaz dup prima directiv PorgP sunt memorate de la adresa 99, i celelalte dou de la adresa "9. 8.4 !,3 'f rit de program 1intaGF end .escriereF .a sf ritul fiecrui program este necesar de a plasa directiva PendP aa ca translatorul de asamblare s tie c numai sunt instruciuni n program.

3GempluF . . movlE 9066 movEf +)D-& end Instruc$iuni condi$ionale 8.# (6 Damificare de program condiional 1intaGF ifUconditionalOtermV .escriereF 3ac condiia n UconditionalOtermV este ndeplinit, parte a programului ce urmeaz directivei (6 va fi e0ecutat. Hi dac nu este, partea ce urmeaz directivei !.'! sau !,3(6 va fi e0ecutat. 3GempluF if nivoK"99 goto +U,( else goto +DAG,( endif .irecti-e similareF ]!.'!, !,3(6 8."9 !.'! P(6P alternativ la blocul program cu termeni condiionali 1intaGF !lse .escriereF 6olosit cu directiva (6 ca o alterntiv dac termenul condiional este incorect. 3GempluF (f timeU <9 goto '+!!3 U+ else goto '.)A 3)A, endif Instruc$iuni similareF !,3(6, (6 8."" !,3(6 'f ritul seciunii de program condiionale 1intaGF endif

.escriereF 3irectiva este scris la sf ritul blocului condiional pentru translatorul de asamblare pentru a ti c este sf ritul blocului condiional 3GempluF (f levelK"99 goto .)A3' else goto U,.)A3' endif .irecti-e similareF !.'!, (6 8.": A/(.! !0ecuia seciunii programului c t timp condiia este ndeplinit 1intaGF EhileUconditionV . endE .escriereF .iniile de program ntre A/(.! ( !,3A vor fi e0ecuate c t timp condiia este ndeplinit. 3ac condiia se oprete din a mai fi valid, programul continu e0ecutarea instruciunilor urm nd linia !,3A. ,umrul de instruciuni dintre A/(.! i !,3A poate fi cel mult "99, i numrul de e0ecuii :<$. 3GempluF Ahile iU"9 iKib" endE 8."= !,3A 'f ritul prii condiionale a programului 1intaGF endE .escriereF (nstuciunea este scris la sf ritul blocului A/(.! condiional, aa ca translatorul de asamblare s tie c este sf ritul blocului condiional 3GempluF Ehile iU"9 iKib" endE .irecti-e similareF A/(.! 8."8 (63!6 !0ecuia unei pri de program dac simbolul este definit

1intaGF ifdefUdesignationV .escriereF 3ac desemnarea UdesignationV este definit anterior 1cel mai adesea prin instruciunea]3!6(,!2, instruciunile ce urmeaz sunt e0ecutate p n ce nu se a%unge la directivele !.'! i !,3(6. 3GempluF ]define test . ifdef test RhoE the test is defined ......R instructions from these lines Eill e0ecute endif .irecti-e similareF ]3!6(,!, !.'!, !,3(6, (6,3!6, ]U,3!6(,! 8."< (6,3!6 !0ecuia unei pri de program dac simbolul este definit 1intaGF ifndefUdesignationV .escriereF 3ac desemnarea UdesignationV nu a fost definit anterior, sau dac definiia ei a fost tears cu directiva directive ]U,3!6(,!, instruciunile ce urmeaz sunt e0ecutate p n ce nu se a%unge la directivele !.'! i !,3(6. 3GempluF ]define test .......... ]undefine test .......... ifndef test RhoE the test is undefined ..... .R instructions from these lines Eill e0ecute endif .irecti-e similareF ]3!6(,!, !.'!, !,3(6, (63!6, ]U,3!6(,! .irecti-e de .ate 8."$ C&.)C; 3efinind un bloc pentru constantele numite 1intaGF Cbloc? ^UtermV_ UlabelV^BUincrementV_, UlabelV^BUincrementV_...... endc .escriereF 3irectiva este folosit pentru a da valori constantelor numite. 6iecare termen ce urmeaz primete o valoare mai mare cu unu dec t precursorul lui. 3ac parametrul UincrementV este

de asemenea dat, atunci valoarea dat n parametrul UincrementV este adugat constantei urmtoare. Jaloarea parametrului UtermV este valoarea de pornire. 3ac nu este dat, este considerat a fi zero. 3GempluF Cbloc? 909: 6irst, second, third RfirstK909:, secondK909=, thirdK9098 endc cbloc? 909: first B 8, second B :, third RfirstK909$, secondK9094, thirdK909# endc .irecti-e similareF !,3C 8."7 !,3C 'f ritul definiiei blocului constante 1intaGF endc .escriereF 3irectiva este folosit la sf ritul definiiei unui bloc de constante ca translatorul de asamblare s tie c nu mai sunt constante. .irecti-e similareF C&.)C; 8."4 3& 3efinind date de un b@te 1intaGF ^UtermV_db UtermV ^, UtermV,.....,UtermV_ .escriereF 3irectiva rezerv un b@te n memoria de program. C nd sunt mai muli termeni ce au nevoie s li se desemneze un b@te de fiecare, ei vor fi desemnai unul dup altul. 3GempluF db PtP, 9a9f, PeP, PsP, 9a": Instruc$iuni similareF 3!, 38."# 3! 3efinind &@te-ul de memorie !!+D)* 1intaGF ^UtermV_ de UtermV ^, UtermV,....., UtermV_ .escriereF 3irectiva este folosit pentru definirea b@te-ului de memorie !!+D)*. Chiar dac a fost iniial intenionat doar pentru memoria !!+D)*, poate fi folosit pentru oricare alt locaie de memorie.

3GempluF org /P:"99P de LJersion ".9L , 9 Instruc$iuni similareF 3&, 38.:9 3- 3efinin tabelul de date 1intaGF ^UtermV_ dt UtermV ^, UtermV,........., UtermV_ .escriereF 3irectiva genereaz seria D!-.A de instruciuni, o instruciune de fiecare termen. 3GempluF dt L*essageL, 9 dt first, second, third .irecti-e similareF 3&, 3! Con%i+urNnd o directi- 8.:" OC),6(C 'etarea the biilor configuraionali 1intaGF c -configUtermV orOOconfigUaddressV,UtermV .escriereF 'unt definite oscilatorul, aplicaia timer Eatchdog i circuitul intern de reset. 5nainte de folosirea acestei directive, procesorul trebuie definit folosind directiva +D)C!'')D. 3GempluF OC),6(C OC+O)66\OA3-O)66\O+AD-!O),\OQ-O)'C .irecti-e similareF O(3.)C', +D)C!'')D 8.:: +D)C!'')D 3efinind modeul microcontrolerului 1intaGF +rocessor UmicrocontrollerOt@peV .escriereF (nstruciunea seteaz tipul microcontrolerului unde programarea este fcut. 3GempluF processor "$648

:i"iere create ca re/ultat al translrii pro+ramului

Ca un rezultat al procesului translrii unui program scris n limba% de asamblare obinem fiiere caB

6iier de e0ecutare 1+rogramO,ame./!Q2 6iier de erori program 1+rogramO,ame.!DD2 6iier list 1+rogramO,ame..'-2

+rimul 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. !rorile pot fi descoperite de asemenea ntr-un fiier LlistL. Acest fiier este mai potrivit dei c nd programul este mare i vederea fiierului LlistL dureaz mai mult. Al treilea fiier este cel mai folositor programatorului. 5n el sunt coninute multe informaii, ca informaii despre instruciunile de poziionare i variabilele din memorie, sau semnalizarea erorii. !0emplu unui fiier LlistL pentru program urmeaz n acest capitol. 5n captul fiecrei pagini se gsesc informaii despre numele fiierului, data c nd a fost translat i numrul paginii. +rima coloan conine o adres din memoria programului unde este plasat o instruciune din acel r nd. A doua coloan conine o valoare a oricrei variabile definit de una din directiveB '!-, !NU, JAD(A&.!, C),'-A,- or C&.)C;. A treia coloan este rezervat pentru forma unei instruciuni translate pe care +(C-ul o e0ecut. A patra coloan conine instruciunile asamblorului i comentariile programatorului. +osibile erori vor apare ntre r nduri urm nd o linie n care s-a produs eroarea.

.a sf ritul fiierului LlistL este un tabel cu simboluri folosite n program. Un element folositor al fiierului LlistL este un grafic de utilizare a memoriei. .a sf rit de tot, este o statistic de erori ca i cantitatea de program rmas. Macro uri *acros-urile sunt elemente foarte folositoare n limba%ul de asamblare. !i ar putea fi pe scurt descrii ca Lgrup definit al utilizatorului de instruciuni ce vor intra n programul de asamblare unde a fost apelat macro-ulL. !ste posibil de a scrie un program chiar fr folosirea macrourilor. 3ar cu folosirea lor programul scris este mult mai uor de neles, n special dac mai muli programatori lucreaz la acelai program. *acro-urile au acelai scop ca funcii ale limba%elor de programare comple0e. Cum s le scriemF UlabelV macro ^Uargument"V,Uargument:V,......Uargument,V_ ........ ....... endm 3in modul n care sunt scrise, vedem c macro-urile pot accepta argumente, ceea ce este foarte folositor n programare. C nd apare argumentul n corpul macro-ului, va fi nlocuit cu valoarea Uargument,V. 3GempluF

!0emplu de mai sus arat un macro a crui scop este de a nlocui la portul & argumentul ADC" ce a fost definit n timp ce a fost apelat macro-ul. 6olosirea lui n program ar fi limitat la scrierea unei liniiB ),O+)D-& 9066 , i astfel am plasa valoarea 9066 la +)D-&. +entru a folosi un macro n program, este necesar de a include fiierul macro n programul principal cu instruciunea include LmacroOname.incL. Coninutul unui program este copiat automat ntrun loc unde instruciunea este scris. Aceasta poate fi cel mai bine vzut ntr-un fiier list anteriror unde fiierul cu macro-uri este copiat mai %os de linia ]includeLban?.incL.

CAPITOLUL # MPLAB

Introducere *+.A& este un pachet de program AindoEs ce face scrierea i dezvoltarea unui program mai uoar. +oate fi descris cel mai bine ca un mediu de dezvoltare pentru un limba% de programare standard ce este intenionat pentru programarea unui computer +C. Unele operaii ce erau fcute din linia de instruciuni cu un numr mare de parametri p n la descoperirea (3!-ului, L(ntegrated 3evelopment !nvironmentL, sunt acum fcute mai uoare prin folosirea *+.A&. -otui, gusturile noasre difer, aa c chiar astzi unii programatori prefer editoarele standard i compilatoarele din linia de instruciuni. 5n orice caz, programul scris este uor de citit, i este disponibil un help bine documentat. #.1 Instalarea pro+ramului MPLAB

*+.A& const din c teva priB - Cruparea fiierelor aceluiai proiect ntr-un singur proiect 1+ro%ect *anager2 - Cenerarea i procesarea unui program 1-e0t !ditor2 - 'imulator de program scris folosit pentru simularea funcionrii programului n microcontroler. 5nafar de acestea, sunt sisteme de susinere pentru produsele *icrochip ca +(C'tart +lus i (C3 1(n Circuit 3ebugger2. +entru c aceast carte nu acoper acestea, ele vor fi menionate doar ca opiuni.

Cerinele minime pentru computer pentru rularea lui *+.A& suntB W Computer compatibil +C 84$ sau mai recent W *icrosoft AindoEs =."0 sau AindoEs #< i noile versiuni ale sistemului de operare AindoEs W JCA graphic card W 4*& memorie 1=:*& recomandat2 W :9*& spaiu pe hard disc W *ouse +entru a porni *+.A&-ul trebuie s-l instalm. (nstalarea este un proces de copiere a fiierelor de pe C3 pe un hard disc al computerului. !ste o opiune pentru fiecare fereastr ce v a%ut s v ntoarcei la cea precedent, aa ca erorile s nu prezinte o problem sau s devin o e0perien stresant. (nstalarea propriu-zis are loc ca la ma%oritatea programelor AindoEs. *ai nt i apare ecranul AindoEs, apoi putei alege opiunile urmate de instalarea propriu-zis, i n sf rit, apare mesa%ul care spune programul dumneavoastr instalat este gata de start. +ai pentru instalarea *+.A&B ". +ornii AindoEs-ul *icrosoft :. +unei the discul C3 *icrochip n C3 D)* =. 6acei clic pe '-AD- n partea st ng de %os a ecranului i alegei opiunea DU, 8. 6acei clic pe &D)A'! i selectai driver-ul C3 D)*-ului computerului. <. Csii directorul numit *+.A& pe C3 D)*-ul dumneavoastr $. 6acei clic pe '!-U+.!Q! i apoi pe ); . 7. 6acei clic din nou pe ); n fereastra dumneavoastr DU, (nstalarea ncepe dup aceti apte pai. Urmtoarele imagini e0plic nelesul unor pai ai instalrii.

3cran de Cun -enit la nceputul instalrii MPLAB .a nceput de tot, este necesar de a selecta acele componente *+.A& cu care vom lucra. +entru c nu avem nici o component hardEare original *icrochip ca programatori sau emulatoare, vom instala doar mediul *+.A&, Assembler-ul, 'imulatorul i instruciunile.

1electarea componentelor mediului de de/-oltare MPLAB 5ntruc t se estimeaz c vei lucra cu AindoEs #< 1sau un sistem mai nou 2, tot ce este n legtur cu sistemul 3)' de operare a fost scos n timpul seleciei limba%ului de asamblare. -otui dac dorii s lucrai n 3)', trebuie s deselectai toate opiunile referitoare la AindoEs, i s alegei componentele potrivite pentru 3)'.

1electarea assemCler ului "i a sistemului de operare

Ca orice program, *+.A& va trebui instalat ntr-un director. Aceast opiune se poate schimba n orice director de pe orice hard disc al computerului dumneavoastr. 3ac nu avei o nevoie mai presant, va fi trebui lsat la locul selectat.

Ale+erea directorului unde MPLAB -a %i instalat Utilizatorii care au avut de%a *+.A& 1o versiune mai veche dec t aceasta2 au nevoie de urmtoarea opiune. 'copul acestei opiuni este de a salva copii a tuturor fiierelor ce sunt modificate n timpul unei treceri la o nou versiune *+.A&. 5n cazul nostru ar trebui s lsm selectat ,) din cauza presupunerii c aceasta este prima instalare a *+.A&-ului n computerul dumneavoastr.

Op$iune pentru utili/atorii care instalea/ o -ersiune nou peste o -ersiune deMa instalat de MPLAB 'tart meniu este un grup de pointeri de program, i este selectat prin clic pe opiunea '-ADn colul de %os st ng al ecranului. +entru c *+.A& se va porni de aici, trebuie s lsm aceast opiune aa cum este.

Adu+area MPLAB la start menu

.ocaia care va fi menionat de aici ncolo, are de a face cu o parte a *+.A& n a crui e0plicaie nu este nevoie s intrm. +rin selectarea unui director special, *+.A& va ine toate fiierele n cone0iune cu lin?er-ul ntr-un director separat.

.eterminNnd un director pentru %i"ierele lin>er ului )rice program AindoEs are fiierele de sistem n mod uzual memorate ntr-un director conin nd programul AindoEs. 3up un numr de instalri diferite. 3irectorul AindoEs devine supraaglomerat i prea mare. Astfel, unele programe permit ca fiierele lor de sistem s fie inute n aceiai directori cu programele. *+.A& este un e0emplu de asemenea program, i trebuie selectat opiunea de %os.

1electNnd un director pentru %i"ierele de sistem 3up paii de mai sus, instalarea ncepe fc nd clic pe P,e0tP.

3cran anterior instalrii (nstalarea nu dureaz mult, i procesul copierii fiierelor poate fi vzut ntr-o fereastr mic n colul din dreapta ecranului.

.es%"urarea instalrii 3up ce instalarea este gata, sunt dou ecrane de dialog, unul pentru informaia de ultim moment privind versiunile programului i coreciile, iar cellalt este un ecran de binevenit. 3ac s-au deschis fiierele te0t 1Deadme.t0t2, ele trebuie nchise.

In%orma$ii de ultim moment pri-ind -ersiunile pro+ramului "i corec$iile 6c nd clic pe 6inish, instalarea *+.A& este terminat.

#.2 Introducere n MPLAB Urm nd procedura de instalare, vei obine un ecran al programului nsui. 3up cum vedei, *+.A& arat ca cele mai multe programa AindoEs. 5n apropierea zonei de lucru este un LmenuL 1n partea de sus colorat n albastru cu opiunile 6ile, !dit[etc.2, LtoolbarL 1o zon cu ilustraii de mrimea unor ptrate mici2, i linia de stare n partea de %os a ferestrei. !ste o regul n AindoEs de a lua cele mai frecvent folosite opiuni de programe i de a le plasa mai %os de menu, de asemenea. Astfel le putem accesa mai uor i s grbim lucrul. Cu alte cuvinte, ceea ce avei n n toolbar avei de asemenea n menu.

3cranul dup startarea MPLAB 'copul acestui capitol este ca s devenii familiar cu mediul de dezvoltare *+.A& i cu elementele de baz ale *+.A& caB Alegerea modului de dezvoltare Conceperea unui proiect

Conceperea unui fiier pentru programul original 'crierea un program elementar n limba%ul de programare asamblor -ranslarea unui program n cod e0ecutiv 'tartarea programului 3eschiderea unei noi ferestre pentru un simulator 3eschiderea unei noi ferestre pentru variabile a cror valori le urmrim 1Aatch AindoE2 'alvarea unei fereastre cu variabile a cror valori le urmrim 'etarea punctelor de ntreupere ntr-un simulator 1&rea? point2 +regtirea unui program de a fi citit ntr-un microcontroler se poate rezuma n c iva paiB

#.3 Ale+erea modului de de/-oltare 'etarea unui mod dezvoltare este necesar aa ca *+.A& s poat ti ce instrumente vor fi folosite pentru a e0ecuta programul scris. 5n cazul nostru, avem nevoie s setm simulatorul ca un instrument ce este folosit. 6c nd clic pe )+-(),'---V 3!J!.)+*!,- *)3!, o nou fereastr apare ca n imaginea de mai %osB

1etarea unui mod de de/-oltare -rebuie s selectm opiunea P*+.A&-'(* 'imulatorP pentru c acolo se va testa programul. 5n afar de aceast opiune, este de asemenea disponibil opiunea P!ditor )nl@P. Aceast opiune este folosit doar dac dorim s scriem un program i prin programator s scriem P he0 fileP ntr-un microcontoler. 'elecia modelului microcontrolerului este fcut n partea dreapt. +entru c aceast carte este bazat pe +(C"$648, trebuie selectat acest model. 3e obicei c nd ncepem s lucrm cu microcontrolere, folosim un simulator. 3up cum nivelul cunoaterii va crete, programul se va scrie ntr-un microcontroler imediat dup translare. 'fatul nostru este ca s folosii totdeauna simulatorul. Chiar dac programul va prea c se dezvolt lent, se va merita la sf rit.

#.! Conceperea unui proiect +entru a ncepe s scriei un program avei nevoie s creai mai int i un proiect. 6c nd clic pe +D)X!C- --V ,!A +D)X!C- putei s v denumii proiectul i s-l memorai ntr-un director pe care-l dorii. 5n imaginea de mai %os, este creat un proiect numit Ptest.p%tP i memorat n directorul cBd+(Cd+D)X!;-'d. Acest director este ales pentru c autorii au ales acest director n calculatorul lor. 5n general, un director cu fiiere este plasat de obicei ntr-un director mai mare a crui nume este asociat negreit cu coninutul lui.

.esc*iderea unui proiect nou 3up denumirea unui proiect, clic pe );. ) nou fereastr apare n imaginea umtoare.

AMustNnd elementele proiectului 6c nd un clic pe Ltest ^.he0_L se activeaz opiunea P,ode propertiesP n colul din dreapta %os a ferestrei. 6c nd clic pe ea obinei urmtoarea fereastr.

.e%inind parametrii asamClorului MPA1M 3in aceast imagine observm c sunt diferii parametri. 6iecare fel corespunde la un parametru n LCommand lineL. +entru c memorarea acestor parametri este foarte necomfortabil, chiar interzis pentru nceptori, s-a introdus a%ustarea grafic. 3in imagine observm ce opiuni trebuie deschise. 6c nd clic pe ); ne ntoarcem la fereastra anterioar unde LAdd nodeL este o opiune activ. 6c nd clic pe ea obinem urmtoarea fereastr unde ne denumim programul asamblor. '-l denumimL-est.asmL pentru c acesta este primul nostru program n *+.A&.

.esc*i/Nnd un proiect nou 6c nd clic pe ); ne ntoarcem la fereastra de nceput unde observm adugat un fiier asamblor.

:i"ier asamClor adu+at 6c nd clic pe ); ne ntoarcem la mediul de dezvoltare *+.A&.

#.# Conceperea unui nou %i"ier asamClor;scrierea un pro+ram nou< C nd partea LproiectL a lucrului este terminat, trebuie s ncepem s scriem un program. Cu alte cuvinte, un nou fiier trebuie deschis, i se va denumi Ltest.asmL. 5n cazul nostru, fiierul trebuie denumit Ltest.asmL pentru c n proiecte ce au doar un fiier 1 ca al nostru2, numele proiectului i numele fiierului surs trebuie s fie aceleai. Un nou fiier este deschis fc nd clic pe 6(.!V,!A. Astfel obinem o fereastr te0t n interiorul spaiului de lucru *+.A&.

:i"ier nou asamClor desc*is 6ereastra nou reprezint un fiier unde va fi scris programul. +entru c fiierul nostru trebuie denumit Ltest.asmL, l vom denumi aa. 3enumirea se face 1ca la toate programele AindoEs2 prin clic pe 6(.!V'AJ! A'. )binem apoi o fereastr ca imaginea urmtoare.

.enumirea "i sal-area unui %i"ier asamClor nou C nd obinem aceast fereastr, trebuie s scriermPtest.asmP mai %os de P6ile nameBP, i facem clic pe );. 3up aceea, vom observa numele fiierului Ptest.asmP n partea de sus a ferestrei noastre.

#.' 1crierea unui pro+ram ,umai dup ce toate operaiile precedente au fost terminate suntem capabili s ncepem s scriem un program. +entru c un program simplu a fost de%a scris n seciunea crii L+rogramare n .imba% de AsamblareL, vom folosi acelai program aici, de asemenea.

+rogramul trebuie s fie scris ntr-o fereastr care este deschis, sau copiat de pe un disc, sau luat din prezentarea *i?roele?troni?a (nternet folosind opiunile cop@ i paste. C nd programul este copiat n Ltest.asmL EindoE, putem folosi comanda +D)X!C- -V &U(.3 A.. 1dac nu sunt erori2, i o nou fereastr va apare ca n imaginea urmtoare.

:ereastr cu mesaMe dup translarea pro+ramului asamClor +utem vedea din imagine c obinem fiierul Ltest.he0L ca rezultat al procesului de translare, pentru care este folosit programul *+A'*A(,, i c este doar un mesa%. 5n toate aceste informaii, ultima propoziie n fereastr este cea mai important pentru c arat dac translarea a fost sau nu fcut cu succes. P&uild completed successfull@P este un mesa% afirm nd c translarea a fost de succces i c nu sunt alt erori. 5n caz c apare o eroare, trebuie s facem dublu clic pe mesa%ul eroare n fereastra P&uild DesultsP. Aceasta v va transfera automat n programul asamblor i n linia unde a fost eroarea.

#.( 1imulatorul MP1IM 'imulatorul este o parte a mediului *+.A& care d o mai bun imagine a lucrrilor unui microcontroler. +rintr-un simulator, putem monitoriza valorile curente ale variabilelor, valorile registrului i starea pinilor portului. !ste adevrat, simulatorul nu are aceeai valoare n toate programele. 3ac un program este simplu 1 ca cel dat aici ca e0emplu2, simulrea nu este foarte important pentru c setarea pinilor portului & la unu logic nu este o sarcin dificil. -otui, simulatorul poate fi de mare de mare a%utor la programele mai complicate ce includ timer-i, condiii diferite unde ceva se nt mpl , i alte cerine similare 1n special cu operaii matematice2. 'imularea, dup cum indic numele L simuleaz lucrul unui microcontrolerL. 5n timp ce simulatorul este conceput ca microcontrolerul s e0ecute instruciunile una c te una, programatorul se mic ntr-un program pas-cu-pas 1linie-cu-linie2 i urmrete ce se nt mpl cu datele n microcontroler. C nd scrierea s-a terminat, este un obicei bun ca programatorul s-i verifice mai nt i programul su n simulator, i apoi s-l ruleze ntr-o situaie real. 3in nefericire, a cum se nt mpl cu multe alte obiceiuri bune, acesta este mai puin sau mai mult luat n seam. *otivele pentru aceasta sunt n parte personalitatea, i n parte lipsa unor simulatoare bune.

+rimul lucru pe care trebuie s-l facem este, ca ntr-o situaie real, este de a reseta un microcontroler cu comanda 3!&UC V DU, V D!'!-. Aceast comand rezult n linia ngroat poziionat la nceputul unui program, i contorul programului este poziionat la zero ceea ce poate fi observat n linia de stare 1pcB 90992.

Hnceperea simulrii pro+ramului& resetarea microcontrolerului Una din principalele caracteristici a simulatorului este abilitatea de a vedea starea regitrilor din microcontroler. Aceti regitri sunt numii regitri de funcie special, sau '6D. +utem obine o fereastr cu regitri '6D fc nd clic pe A(,3)A-V'+!C(A. 6U,C-(), D!C('-!D', sau pe icon-ul '6D. 5nafar de regitrii '6D, este util de a avea o avea o privire n interiorul fiierului regitrilor. 6ereastra cu fiierul regitrilor poate fi deschis fc nd clic pe A(,3)A-V6(.! D!C('-!D'. 3ac sunt variabile n program, este bine de a le vedea de asemenea. 6iecrei variabile i este desemnat o fereastr 1Aatch AindoEs2 fc nd clic pe A(,3)A-VAA-C/ A(,3)A'.

1imulator cu %erestre desc*ise pentru re+i"tri 1:2& %i"ierul re+i"trilor "i -ariaCile. Comanda urmtoare ntr-un simulator este 3!&UCVDU,V'-!+ care ncepe paii notri prin program. Aceeai comand ar fi putut fi desemnat de la o tastatur cu tasta U67V 1n general, toate comenzile importante au taste desemnate de le claviatur2. 6olosind tasta 67, programul este e0ecutat pas cu pas. C nd obinem un macro, fiierul conin nd un macro este deschis 1&an?.inc2, i continum cu macro. 5ntr-o fereastr cu regitri '6D putem observa cum registrul A primete valoarea 9066 i pe care o trimite la portul &. 6c nd clic pe tasta 67 din nou, nu obinem nimic pentru c programul a a%uns ntr-o Linfinite loopL-bucl infinit. &ucla infinit este un termen pe care l nt lnim adesea. Deprezint bucla din care un microcontroler nu poate iei p n nu se nt mpl ntreruperea 1dac este folosit ntr-un program2, sau pn ce micorcontrolerul va fi resetat.

#., ToolCar +entru c *+.A& are mai mult de o component, fiecare component are bara sa de instrumente, toolbar-ul su. -otui, 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 a%uns pentru nevoile noastre, i va fi descris n detaliu. 5n figura de mai %os putem vedea un toolbar pentru care avem nevoie de o scurt e0plicaie pentru fiecare icon. 3in cauza formatului limitat a cestei cri, acest toolbar este reprezentat ca un toolbar suspendat. 5n general, este plasat orizontal mai %os de menu, de-a lungul ntregului ecran.

ToolCar uni-ersal cu scurte eGplica$ii ale icon Burilor 3escriere a icon-urilor toolbar-ului 3ac toolbar-ul curent nu rspunde datorit diferitor motive la un clic pe acest icon, apare urmtorul. 'chimbarea total este repetat aa nc t la al patrulea clic vom obine acelai toolbar. (con pentru deschiderea unui proiect. +roiectul deschis n acest fel conine toate a%ustrile ecranului i a%ustarea tuturor elementelor care sunt cruciale pentru proiectul curent. (con pentru salvarea unui proiect. +roiectul salvat va pstra toate a%ustrile ferestrei i toate a%ustrile parametrilor. C nd citim un program din nou, totul se va ntoarce pe ecran ca atunci c nd s-a nchis proiectul. Cutarea unei pri de program, sau cuvinte este operaia de care avem nevoie c nd cutm printr-un asamblor mare sau alte programe. 6olosindu-l, putem gsi repede o parte a programului, label, macro, etc. -ind o parte a te0tului. Acesta i urmtoarele trei icon-uri sunt standard n toate programele care au de a face cu procesarea fiierelor te0tuale. +entru c fiecare program este de fapt un fiier te0t obinuit, aceste operaii sunt folositoare. Copiind o parte a te0tului. !ste o diferen ntre acesta i iconul precedent.Cu operaia de tiere, c nd tiai o parte a te0tului, dispare din ecran 1i din program2 i este copiat dup aceea. 3ar cu operaia cop@, te0tul este copiat i nu tiat, i rm ne

pe ecran. C nd o parte a te0tului este copiat, este mutat ntr-o parte a memoriei ce servete pentru transferarea datelor n sistemul operaional AindoEs. *ai t rziu, fc nd clic pe acest icon poate fi lipit-PpastedP n te0tul unde este cursorul. 'alv nd un program 1fiier asamblor2. 'tarteaz e0ecuia programului la vitez ma0im.'e recunoate prin apariia unei linii de stare galbene. Cu acest fel de e0ecuie de program, simulatorul e0ecut un program la vitez ma0im p n ce este ntrerupt de un clic pe iconul cu lumin roie de trafic. )prete e0ecuia programului la vitez ma0im. 3up clic pe acest icon, linia de stare devine gri din nou, i e0ecuia programului poate continua pas cu pas. +as cu pas e0ecuia programului. 6c nd clic pe acest icon, ncepem e0ecutarea unei instruciuni din linia urmtoare n legtur cu cea curent. Cerere de a sri-s?ip. +entru c simulatorul este totui o simulare de softEare de lucru real, este posibil de a sri pur i simplu peste unele cereri ale programului. Aceasta este n special la ndem n 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. Deset nd un microcontroler. 6c nd clic pe acest icon, contorul programului este poziionat la nceputul programului i simularea poate ncepe. 6c nd 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 a%utorul acestui icon obinem o fereastr cu coninutul memoriei DA* a microcontrolerului. 6c nd clic pe acest icon, apare fereastra cu registrul '6D. +entru c regitrii '6D sunt folosii n fiecare program, este recomandat ca n simulator aceast fereastr s fie totdeauna activ. 3ac un program conine variabile ale cror valoare trebuie s le urmrim 1e0. contorul2, o fereastr are nevoie s fie adgat pentru fiecare din ele, ceea ce se face prin folosirea acestui icon. C nd unele erori ntr-un program sunt evideniate n timpul procesului de simulare, programul trebuie corectat. +entru c simulatorul folosete fiier /!Q ca intrare a sa, trebuie s translm un program din nou aa ca toate schimbrile s fie transferate ntr-un simulator. 6c nd clic pe acest icon, ntregul proiect este translat din nou, i obinem versiunea mai nou a fiierului /!Q pentru simulator.

CAPITOLUL ' Mostrele

Introducere !0emplele oferite n aceast capitol v vor arta cum s conectai microcontrolerul +(C cu alte componente sau dispozitive periferice c nd producei propriul sistem bazat pe microcontroler. 6iecare e0emplu conine descriere detaliat a prii hardEare cu schema electric i comentarii despre program. -oate programele pot fi luate direct din prezentarea de pe internet e*i?ro!le?troni?af. Alimentarea microcontrolerului 5n general, alimentarea corect este de o importan ma0im pentru funcionarea corect a sistemului cu microcontroler. +oate fi uor comparat cu respiraia unui om n aer. !ste mai probabil ca un om care respir n aer curat va tri mai mult dec t un om care locuiete ntrTun mediu poluat. +entru o funcionare corect a oricrui microcontroler, este necesar s oferim o surs stabil de alimentare, un reset sigur n momentul n care l pornii i un oscilator. Conform specificaiilor tehnice oferite de productorul microcontrolerului +(C, tensiunea de alimentare ar trebui s se ncadreze ntre :.9J i $.9J pentru toate versiunile. Cea mai simpl soluie este folosirea stabilizatorului de tensiune .*749< care ofer tensiune stabil de b<J la ieire. ) astfel de surs este ilustrat n figura de mai %os.

+entru a funciona corect sau pentru a avea o tensiune stabilizat la <J la ieire 1pinul =2, tensiunea de intrare pe pinul " la .*749< ar trebui s fie ntre 7J i :8J. 5n funcie de curentul consumat de monta% vom folosi tipul corespunztor de stabilizator de tensiune .*749<. 'unt diferite versiuni de .*749<. +entru consum de curent de p n la un "A ar trebui s folosim versiunea n capsul -)-::9 cu posibilitatea de rcire adiional. 3ac consumul total este de <9mA, putem s folosim 74.9< 1versiune de stabilizator n capsul mic -)-#: pentru curent de p n la "99mA2.

Macrouri %olosite n pro+rame !0emplele din seciunile urmtoare ale acestui capitol utilizeaz deseori AA(-, AA(-0 i +D(,-, de aceea ele vor fi e0plicate n detaliu. *acrourile AA(-, AA(-0 6iierul Aait.inc conine dou macrouriB AA(- i AA(-0. +rin intermediul acestor macrouri este posibil s repartizm nt rzieri de timp n intervale variate. Am ndou macrouri folosesc depirea contorului -*D9 ca un interval de timp de baz. +rin schimbarea prescaler-ului putem schimba lungimea intervalului depirii contorului -*D9.

3ac folosim un oscilator 1rezonator2 de 8*/z, pentru valorile prescaler-ului 9," i 7 care divid ceasul de baz al oscilatorului, intervalul urmat de o depire a contorului -*D9 va fi 9.<":, ".9: i $<.=ms. +ractic, aceasta nseamn c cea mai mare nt rziere va fi :<$0$<.=ms care este egal cu "$.7: secunde.

+entru a utiliza macrouri n programul principal este necesar s declarm variabilele Ec@cle i prescAA(- dup cum vom vedea n e0emplele ce vor urma acestui capitol. *acroul AA(are un singur argument. Jaloarea standard atribuit prescaler-ului acestui macro este " 1".9:ms2, i nu poate fi schimbat. AA(- timeconstO" timeconst81 este un numr de la 9 la :<<. +rin multiplicarea acestui numr cu perioada de timp de depire 1overfloE2 vom obine durata total a nt rzieriiB -(*! K timeconstO" 0 ".9:ms. 3GempluF AA(- ."99 !0emplul arat cum s obinem o nt rziere de "990".9:ms, sau durata total de "9:ms. 'pre deosebire de macroul AA(-, macroul AA(-Q mai are un argument care poate atribui o valoare prescaler-ului. *acroul AA(-Q are dou argumenteB timeconst82 este un numr de la 9 la :<<. +rin multiplicarea acestui numr cu perioada de timp de depire 1overfloE2 vom obine durata total a nt rzieriiB -(*! K timeconstO" 0 ".9:ms 0 +D!'Ce0t. P231CeGt este un numr de la 9 la 7 care seteaz relaia dintre tact i timer-ul -*D9. 3GempluF AA(-Q ."99,7 !0emplul arat cum s obinem o nt rziere de "990$<.=ms, sau durata total de $<=ms. *acroul +D(,*acroul +D(,- este localizat n fiierul +rint.inc. !l uureaz lucrul pentru trimiterea unui ir de date la unul dintre dispozitivele de ieire, cum ar fiB .C3, D':=:, imprimant matricial...etc. Cea mai uoar cale pentru a forma o serie este prin folosirea unei directive dt 1define table2. Aceast instruciune memoreaz o serie de date n cadrul memoriei programului ca un grup de instruciuni retlE al crui operand este data din ir.

*odalitatea prin care o astfel de secven este format folosind instruciunea dt este artat n urmtorul e0empluB org 9099 goto *ain 'tring movEf +C. 'tring" dt Lacesta este un sir gA'C((L 'tring: dt Lal doilea sirL !nd *ain movlE .< call 'tring B +rima instruciune dup eticheta *ain scrie poziia unui membru al irului n registrul A. !0ecutm un salt cu instruciunea call la eticheta irului unde poziia membrului irului este adunat la valoarea +C 1+rogram Counter2B +C. K +C. b A. 5n continuare avem n program counter o adres a instruciunii retlE cu membrul dorit al irului. 5n momentul n care aceast instruciune este e0ecutat, membrul irului va fi n registrul A, i adresa instruciunii care va fi e0ecutat dup instruciunea call va fi n program counter. !ticheta end este o metod elegant de a marca adresa la care irul se termin. *acroul +D(,- are cinci argumenteB +D(,- macro Addr, 'tart, !nd, Jar, )ut

Addr este o adres unde unul sau mai multe iruri 1situate unul dup altul2 ncep. 1tart este o adres a primului membru al irului. 3nd este o adres unde irul se termin. Aar este variabila care are rolul de a arta 1pointa2 membrii irului. Out este un argument pe care l folosim pentru a trimite adresa rutinelor e0istente atribuite dispozitivelor de ieire cum ar fiB .C3, D'-:=:, etc.

*acroul +D(,- scrie la ieire un ir emi?ro!le?troni?af format din caractere A'C(( la un dispozitiv de afiare .C3. Hirul ta>es one part o% pro+ram memorO ncep nd cu adresa 909=.

3Gample .ight !mitting 3iodes T.!3uri .edurile sunt unele dintre cele mai folosite elemente n electronic. .!3 este o abreviere pentru e.ight !mitting 3iodef. 5n momentul n care alegem un led, sunt mai muli parametri de care trebuie s inem seamaB diametrul, care este deobicei = sau <mm 1milimetri2, curentul de funcionare care este n %ur de "9mA 1poate fi mai mic dec t :mA pentru ledurile cu randament ma0imB emisie de lumin puternic2 i bineneles culoarea, care poate fi roie sau verde dei mai sunt leduri portocalii, albastre, galbene... . .edurile 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 1supranclzire2. -ensiunea pozitiv de alimentare este legat la A,)3, iar catodul este legat la tensiunea negativ sau la masa circuitului. +entru a identifica fiecare pin, catodul este cel mai scurt pin iar corpul are n general o teitur pe partea catodului. 3iodele vor emite lumin numai dac curentul circul de la A,)3 spre CA-)3. Altfel %onctiunea +, este polarizat invers i curentul nu va circula. +entru 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. Jaloarea rezistenei este determinat de curentul care vrei s circule prin led. Curentul ma0im care poate cur+e printr-un led a fost stabilit de productor. .edurile cu randament ma0im pot produce rezultate bune cu un curent mai mic de de :mA.

+entru a determina valoarea rezistenei serie, trebuie s cunoatem valoarea tensiunii de alimentare. 3e aici scdem tensiunea care cade pe led. Aceast valoare va varia de la ",:v la ",$v, depinz nd de culoarea ledului. Dspunsul este valoarea lui Ur. 6olosind aceast valoare i curentul care vrem s circule prin .!3 1ntre 9.99:A i 9.9"A2 putem s aflm valoarea rezistenei cu a%utorul formuleiB 25U2 ? I. .edurile sunt conectate la microcontroler n dou metode. Una este s le activm cu zero logic i a doua este s le activm cu unu logic. +rima metod este numit logic ,!CA-(Jh iar cea de-a doua este numit logic +)G(-(Jh. 6igura de mai sus ilustreaz modalitatea de conectare prin logic +)G(-(Jh. 3eoarece logica +)G(-(Jh ofer o tensiune de b<v diodei i rezistenei serie, ledul va emite lumin de fiecare dat c nd un pin al portului & este n starea " logic 1" K ieire /(C/2. .ogica ,!CA-(Jh necesit ca ledul s fie ntors i terminalele de tip anod s fie conectate mpreun la borna pozitiv a sursei. 5n momentul n care este livrat o ieire .)A de la microcontroler ctre anod i rezisten, ledul va lumina.

Connectin+ L3. diodes to PO2TB microcontroller !0emplul urmtor initializeaz portul & ca port de ieire i seteaz unu logic pe fiecare pin al portului & pentru a activa toate ledurile.

-astatura -astaturile sunt dispozitive mecanice utilizate pentru a e0ecuta o ntrerupere sau pentru a realiza o cone0iune ntre dou puncte. !le au diferite mrimi i au diferite scopuri. -astele

care sunt utilizate aici sunt denumite etaste dipf. !le sunt lipite direct pe o plac de circuit i sunt deseori nt lnite n electronic. Au patru pini 1doi pentru fiecare contact2, ceea ce le ofer stabilitate mecanic.

3Gemplu pentru conectarea tastelor la pinii microcontrolerului 6uncia tastei este simpl. 5n momentul n care apsm o tast, dou contacte sunt unite i se realizeaz o cone0iune. -otui, nu toate lucrurile sunt simple. +roblema const n natura tensiunii ca valoare, i n imperfeciunea contactelor mecanice. 5nainte ca un contact s fie realizat sau decuplat, e0ist o perioad scurt de timp c nd pot aprea vibraii 1oscilaii2 ca rezultat al imperfeciunii contactelor mecanice, sau din cauza vitezei diferite de apsare 1acest lucru depinde de persoana care apas tasta2. -ermenul atribuit acestui fenomen este denumit sDitc* ;contact< deCounce. 3ac acest lucru nu este prevzut n momentul n care un program este conceput, poate aprea o eroare sau programul poate produce mai mult dec t un singur impuls la ieire pentru o singur apsare de tast. +entru a evita acest lucru, putem introduce o mic nt rziere c nd detectm nchiderea unui contact. Aceasta va asigura faptul c apsarea unei taste este interpretat ca un singur impuls. 5nt rzierea de deCounce este produs n softEare i durata nt rzierii depinde de buton i de scopul butonului. +roblema poate fi parial rezolvat prin adugarea unui condensator n paralel la tast, dar un program bine realizat ofer rezultate mai bune. +rogramul poate fi a%ustat p n c nd detecia fals este complet eliminat. 5n anumite cazuri o simpl nt rziere poate fi suficient dar dac vrei ca programul s se ocupe de mai multe lucruri n acelai timp, o simpl nt rziere va nsemna c procesorul nu va face nimic pe o lung perioad de timp i poate rata alte intrri sau poate decupla portul de ieire ctre un afior. 'oluia este s avem un program care s urmreasc apsarea unei taste c t i decuplarea unei taste. *acroul de mai %os poate fi folosit pentru >eOpress deCounce.

*acroul precedent are mai multe argumente care trebuiesc e0plicateB &U--), macro /i.o, +ort, &it, 3ela@, Address PiLo poate fi g9g sau g"g care reprezint frontul cresctor sau cztor unde subrutinele pot fi e0ecutate n momentul n care apsai o tast. Port este un port al microcontrolerului la care trebuie conectat tasta. 5n cazul microcontrolerului +(C"$648, el poate fi +)DA sau +)D&. Bit este un pin al portului la care tasta este conectat. .elaO este un numr de la 9 la :<<, folosit pentru a atribui timpul necesar pentru a detecta >eO deCounce B contact oscillation B to stop . !l este calculat astfelB -(*! K 3ela@ 0 "ms. Adress este adresa la care microcontrolerul se duce dup ce este detectat un eveniment provenit de la tastatur. 'ubrutina de la aceast adres e0ecut instruciunile necesare pentru apsarea unei taste. 3Gemplu 1 &U--), 9, +)D-A, =, ."99, -ester"Oabove -asta-" este conectat la DA9 1prima ieire a portului A2 cu o nt rziere de "99 milisecunde i cu o reacie la zero logic. 'ubrutina care proceseaz tasta este localizat la adresa etichetei -ester"Oabove.

3Gemplu 2 &U--), ", +)D-A, :, .:99, -ester"ObeloE -asta-: este conectat la DA" 1a doua ieire a portului A2 cu :99ms nt rziere i cu reacie la unu logic. !0emplul urmtor arat modul de folosire ntr-un program. &U--),.A'* aprinde i stinge .!3ul. .!3ul este conectat la cea de-a aptea ieire a portului &. -asta-" este folosit pentru a aprinde .!3ul. -asta-: stinge .!3ul.

)ptocuplor )ptocuplorul combin un .!3 i un fototranzistor n aceeai capsul. Dolul unui optocuplor este acela de a separa dou pri de circuit. Aceasta este realizat pentru un numr de motiveB

Inter%eren$a. ) parte a unui circuit poate fi ntr-o zon unde este influenat de interferene 1cum ar fi cele de la motoarele electrice, echipamente de sudur, motoare termice etc.2. 3ac ieirea acestui circuit trece printr-un optocuplor spre alt circuit, numai semnalele dorite vor trece prin optocuplor. 'emnalele de interferen nu vor avea destul eputeref s activeze .!3ul din optocuplor i de aceea ele sunt eliminate. !0emplele tipice sunt unitile industriale care au mai multe interferene care afecteaz semnalele pe cablu. 3ac aceste interferene afecteaz funcia unei seciuni de control, vor apare erori i unitatea nu va mai funciona. 1eparare simultan "i intensitatea semnalului. Un semnal mai mic de =v este capabil s activeze un optocuplor i ieirea optocuplorului poate fi conectat la o linie de intrare a microcontrolerului. *icrocontrolerul are nevoie de un impuls de intrare de <v i n caz semnalul de =v este amplificat la <v. +oate fi folosit pentru a amplifica curentul semnalului. Uitai-v mai %os pentru utilizarea unei linii de ieire a microcontrolerului pentru amplificare de curent. 1eparare de tensiune mare. )ptocuploarele au caliti nnscute pentru separarea tensiunilor mari. 3eoarece .!3ul este complet separat de fototranzistor, optocuploarele pot da dovad de izolare de tensiune de =;v sau chiar mai mare.

)ptocuploarele pot fi folosite ca dispozitive de intrare sau ieire. !le au funcii adiionale cum ar fi 'chmitt triggering 1ieirea unui 'chmitt trigger este 9 sau " T se schimb ncet ridic nd i cobor nd forma de und n valori definite .)A sau /(C/2. )ptocuploarele sunt mpachetate ca o singur unitate sau n grupuri de dou sau mai multe ntr-o singur capsul. !le mai sunt denumite foto-ntreruptoare n care un disc cu fante este introdus ntr-un lca ntre .!3 i fototranzistor i de fiecare dat c nd lumina este ntrerupt, tranzistorul produce un impuls. 6iecare optocuplor are nevoie de dou alimentri pentru a funciona. !le pot fi folosite cu o alimentare, dar capacitatea de izolare a tensiunii este pierdut. )ptocuplor pe o linie de intrare *odul de funcionare este simpluB c nd a%unge un semnal, .!3ul din optocuplor este aprins i lumineaz pe baza fototranzistorului din aceeai carcas. 5n momentul n care tranzistorul este activat, tensiunea dintre colector i emitor cade la 9.<v sau mai puin i microcontrolerul sesizeaz acest lucru ca zero logic pe pinul DA8. !0emplul de mai %os este un contor, folosit pentru numrarea produselor de pe o linie de producie, pentru determinarea vitezei motorului, pentru contorizarea numrului de revoluii a unei a0e etc. Considerm senzorul ca un microntreruptor. 3e fiecare dat c nd ntreruptorul este nchis, .!3ul este luminat. .!3ul etransferf semnalul ctre fototranzistor i operaia fototranzistorului livreaz .)A ctre intrarea DA8 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.

3Gemplu de linie de intrare cu optocuplor

)ptocuplor 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 fi necesar pentru separarea tensiunilor nalte sau pentru amplificare. (eirea unor anumite microcontrolere este limitat la :<mA. )ptocuplorul va lua semnal de curent sczut din microcontroler i tranzistorul de ieire va comanda un .!3 sau un releu, cum este e0emplificat mai %osB

Output line optocoupler eGample +rogramul pentru acest e0emplu este simplu. +rin livrarea unui i"g logic n pinul 8 al portului A, .!3ul se va aprinde i tranzistorul va fi activat n optocuplor. )rice dispozitiv conectat la ieirea optocuplorului va fi activat. Curentul limit pentru tranzistor este n %ur de :<9mA.

Deleul Deleul este un dispozitiv electromecanic care transform un semnal electric ntr-o micare mecanic. !l este alctuit dintr-o bobin din conductori izolai nfurai pe un nucleu metalic i o armtur metalic cu unul sau mai multe contacte. 5n momentul n care o tensiune de alimentare este aplicat la bornele unei bobin, curentul circul i va fi produs un c mp magnetic care mic armtura pentru a nchide un set de contacte iIsau pentru a deschide un alt set. C nd alimentarea este dezactivat din releu, cade flu0ul 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 v rfurile de tensiune n momentul n care apar.

Conectarea unui releu la microcontroler prin intermediul unui tran/istor *ulte microcontrolere nu pot comanda un releu direct i de aceea un tranzistor de comand este necesar. Un /(C/ pe baza tranzistorului activeaz tranzistorul i acesta la r ndul lui activeaz releul. Deleul poate fi conectat la orice dispozitiv electric prin intermediul contactelor. Dezistena de "9; din baza tranzistorului limiteaz curentul dinspre microcontroler la o valoare solicitat de tranzistor. Dezistena de "9; dinspre baz i bara negativ previne ca tensiunile de zgomot aplicate n baza tranzistorului s activeze releul. 3e aceea numai un semnal clar de la microcontroler va activa releul.

Connectin+ t*e optocoupler and relaO to a microcontroller Un releu poate fi de altfel activat prin intermediul unui optocuplor care n aceli timp amplific curentul provenit de la ieirea microcontrolerului i ofer un grad nalt de izolare. )ptocuploarele PI4P CU2237T deobicei conin un tranzistor cu o ieire e3arlingtonf pentru a oferi curent mare de ieire. Conectarea prin intermediul unui optocuplor este recomandat n mod special pentru aplicaiile microcontroler unde motoarele sunt activate i zgomotulele de comutaie provenite de la motor pot a%unge n microcontroler prin intermediul liniilor de alimentare. )ptocuplorul comand un releu iar releul activeaz motorul. 6igura de mai %os arat programul necesar pentru activarea releului i include c teva din macrourile de%a discutate.

Cenerarea unui sunet Un buzzer piezo poate fi adugat la o linie de ieire a unui microcontroler pentru a livra tonuri eaudiof, piuituri i semnale. !ste important de tiut c sunt dou mari tipuri de dispozitive piezoelectrice emitoare de sunet. Una are componente active nuntrul carcasei i are nevoie numai de alimentare de curent continuu pentru a emite un ton sau un beep. 5n general tonurile sau beep-urile emise de aceste difuzoare sau piuitoare nu pot fi schimbate T ele sunt fi0e din cauza circuitelor interne. Acesta nu este tipul despre care discutm n acest articol. Cellalt tip const dintr-un buzzer piezo i necesit semnal livrat n ea pentru a funciona. 3epinz nd de frecvena formei de und, ieirea poate fi ton, melodie, alarm sau chiar un mesa% vocal. +entru ca ele s funcioneze trebuie s livrm un ciclu care este alctuit din semnale /(C/ i .)A. -ranziia de la /(C/ la .)A sau de la .)A la /(C/ cauzeaz micri diafragmei pentru a produce secvene de sunete. 6orma de und poate avea o schimbare fin de la o valoare la alta 1denumit und sinusoidal2 sau o schimbare rapid 1denumit und dreptunghiular2. Un calculator este ideal pentru producerea de unde dreptunghiulare. .ivrarea de unde dreptunghiulare produce o ieire uor grosier. Conectarea unui buzzer piezo este foarte uoar. Un pin este conectat la linia negativ, iar cealalt la o ieire a microcontrolerului, dup cum este ilustrat n figura de mai %os. Acesta va livra o form de und de <v ctre buzzerul piezo. +entru a produce o tensiune mai mare, forma de und trebuie amplificat i aceasta necesit un tranzistor de comand i o bobin.

Conectarea unui Cu//er pie/o la un microcontroler Ca i n cazul tastaturii, putei folosi un macro care va furniza o rutin &!!+ ntr-un program c nd va fi necesar. &!!+ macro fre`, duration %reQF frecvena sunetului. Un numr mai mare produce o frecven mai nalt. durationF durata sunetului. Un numr mai mare reprezint un sunet mai lung.

3Gemplu 1F &!!+ 9066, 909: (eirea buzzerului piezo are cea mai nalt frecven i durata de 2 cicluri de '#.3ms, ceea ce rezult "=9.$ms. 3Gemplu 2F &!!+ 90#9, 909< (eirea buzzerului piezo are frecvena de 90#9 i durata de < cicluri de $<.=ms. !ste bine ca argumentele macroului s fie determinate prin e0perimente i astfel s fie ales sunetul care se potrivete cel mai bine pentru aplicaie. 5n continuare este prezentat macroul &!!+B

Urmtorul e0emplu arat ntrebuinarea unui macro ntr-un program. +rogramul produce dou melodii care sunt obinute prin apsarea -" sau -:. C teva din macrourile discutate anterior sunt incluse n program.

Degitrii de deplasare !0ist dou tipuri de regitrii de deplasareB de intrare "i de ie"ire. 2e+i"trii de intrare ncarc datele paralel, prin intermediul a 4 linii, i apoi le trimite serial prin intermediul a dou linii ctre microcontroler. 2e+i"trii de ie"ire opereaz n direcie opusB primesc date serial i la un semnal pe linia elatchf, transform datele n date paralele. Degitrii de deplasare sunt folosii n general pentru a mri numrul de intrri T ieiri ale unui microcontroler. !i nu prea mai sunt folosii pentru c microcontrolerele moderne au un numr mare de linii intrare T ieire. )ricum, utilizarea lor cu microcontrolere cum ar fi +(C"$648 este foarte important. Degitrii de deplasare de intrare 78/C<#7 Deitrii de deplasare de intrare transform datele paralele n date seriale i le transfer ctre microcontroler. *odul lor de funcionare este simplu. 'unt patru linii pentru transferul datelorB cloc>& latc*& load "i data. 3atele sunt citite de la pinii de intrare de un registru intern prin intermediul unui semnal elatchf. Apoi, cu un semnal eloadf, datele sunt transferate de la registrul elatchf de intrare ctre registrul de deplasare, iar de acolo sunt transferate serial ctre un microcontroler prin intermediul liniilor edataf i ecloc?f.

) schem de legtur a registrului de deplasare 78/C<#7 la un microcontroler este prezentat mai %osB

Modalitatea de conectare a unui re+istru de deplasare de intrare la un microcontroler +entru simplificarea programului principal, un macro poate fi utilizat pentru registrul de deplasare de intrare. *acroul /C<#7 are dou argumenteB /C<#7 macro Jar, Jar" Aar variabil unde datele provenite de la pinii registrului de deplasare de intrare sunt transferate. Aar1 contor bucl. 3GempluF /C<#7 data, counter 3atele provenite de la pinii registrului de deplasare sunt stocate n variabila data. Jariabila -imeIcounter este folosit pe post de contor bucl. -e0tul macrouluiB

!0emplul care v arat cum s folosii macroul /C<#7 este n programul urmtor. +rogramul recepioneaz date de la intrarea paralel a registrului de deplasare i le mut serial n variabila DQ a microcontrolerului. .!3urile conectate la portul & vor indica rezultatul datelor de intrare.

Degistru de deplasare de ieire Degitrii de deplasare de ieire transform datele seriale n date paralele. +e 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 4 ori. .a un semnal de la linia elatchf, datele sunt copiate din registrul de deplasare n registrul de intrare, apoi datele sunt transformate din date seriale n date paralele.

) schem a registrului de deplasare este prezentat mai %osB

Conectarea unui re+istru de deplasare de ie"ire la un microcontroler *acroul folosit n acest e0emplu este localizat n fisierul /C<#<.(,C i se numete /C<#<. *acroul /C<#< are dou argumenteB Aar variabil a crei coninut este transferat la ieirea registrului de deplasare. Aar1 contor bucl. 3GempluF /C<#< 3ata, Counter

3atele pe care vrem s le transferm sunt stocate n variabila 3ata, iar variabila Counter este folosit pe post de contor bucl

Un e0emplu al utilizrii macroului /C<#< este n programul urmtor. 3atele provenite de la variabila -Q sunt transferate serial n registrul de deplasare. .!3urile conectate la ieirea paralel a registrului de deplasare vor indica starea liniilor. 5n acest e0emplu valoarea 90C& 1""99"9""2 este transmis astfel nc t .!3urile 4, 7, 8, : i " sunt iluminate.

Afia% cu 7 segmente 1multiple0are2 'egmentele ntr-un afia% cu 7 segmente sunt aran%ate astfel nc t s formeze un singur digit de la 9 la 6, dup cum se observ n desenB

+utem afia un numr pe mai muli digii prin conectarea de afia%e adiionale. Chiar dac este mult mai confortabil s lucrm cu .C3uri, afia%ele cu 7 segmente sunt nc un standard n industrie. Aceasta din cauza rezistenei la temperatur, vizibilitii i unghiului larg de observare. 'egmentele sunt marcate cu litere miciB a, b, c, d, e, f, g i dp, unde dp este punctul zecimal. Cele 4 .!3uri din cadrul fiecrui afia% pot fi aran%ate cu catod comun sau cu anod comun. .a un afia% cu catod comun, catodul comun trebuie s fie conectat la linia de 9v i .!3urile sunt activate cu unu logic. Afia%ele cu anod comun trebuie s prezinte anodul comun conectat la linia de b<v. 'egmentele sunt activate cu zero logic. 3imensiunea afia%ului este msurat n milimetriR se msoar doar nlimea digitului 1nu carcasa, doar digitulF2. Afia%ele sunt disponibile cu digii de nlimi de 7, "9, "=.<, :9 sau :< milimetri. 'unt de diferite culori incluz ndB rou, portocaliu i verde. Cea mai simpl metod pentru a comanda un afia% este prin intermediul unui driver de afia%. Acestea sunt disponibile pentru p n la 8 afia%e. Alternativ, afia%ele pot fi comandate de un microcontroler, i, dac este necesar mai mult dec t un afia%, metoda de comandare se numete emultiple0aref. +rincipala diferen dintre cele dou metode este numrul de linii de comand. Un driver special poate avea numai o singur linie de tact i integratul de comand va accesa toate segmentele i va incrementa afia%ul. 3ac avem doar un singur afia% de comandat de ctre microcontroler, vor fi necesare 7 linii plus una pentru punctul zecimal. +entru fiecare afia% zecimal, este necesar doar c te o linie n plus. +entru a produce un afia% cu 8, < sau $ digii, toate afia%ele cu 7 segmente vor fi conectate n paralel. .inia comun 1linia catodului comun2 este conectat separat i aceast linie este conectat la zero logic pentru o perioad scurt de timp pentru a activa afia%ul. 6iecare afia% este activat de "99 ori pe secund i vor da impresia c toate afia%ele sunt active n acelai timp. 5n timp ce fiecare afia% este activat, informaia trebuie livrat astfel nc t el va afia informaia corect. +ot fi accesate p n la $ afia%e n acest mod fr ca strlucirea fiecrui afia% s fie afectat. 6iecare afia% este activat efectiv pentru "I$ din timp i persistena vizual a ochilor d impresia c afia%ul este pornit tot timpul. -oate semnalele de sincronizare pentru afia% sunt produse de program, avanta%ul unui afia% controlat de un microcontroler este fle0ibilitatea. Afia%ul poate fi configurat ca un contor cresctor, contor descresctor, i poate produce un numr de mesa%e folosind literele alfabetului care pot fi uor de afiat. !0emplul de mai %os arat cum s controlm dou afia%e.

Conectarea unui microcontroler cu a%i"aMe cu ( se+mente n mod multipleGat 6iierul .!3.(,C conine dou macrouriB .!3O(nit i .!3O3isp:. +rimul macro este folosit pentru initializarea afia%ului. Aici este definit perioada de remprosptare c t i pinii microcontrolerului utilizai pentru conectarea afia%elor. *acroul .!3O3isp: are un argumentB .!3O3isp: macro first %irst este numrul de la 9 la ## care trebuie afiat pe digiii *'3 i .'3. 3GempluF .!3O3isp: 90=8 ,umrul =8 va fi afiat.

Dealizarea macroului arat modalitatea de utilizare a macrourilor ntr-un program. +rogramul afieaz numrul i:"g n : digii cu ( se+mente.

Afia% .C3 *ulte dispozitive cu microcontroler folosesc .C3uri inteligente pentru a afia informaia vizual. Urmtorul material se ocup de conectarea unui afia% .3C /itachi la un microcontroler +(C. Afia%ele .C3 proiectate cu /388749, modulul pentru .C3 fabricat de /itachi, nu sunt scumpe i sunt uor de folosit, i chiar posibil s produc verificarea datelor afiate folosind cei 4049 pi0eli ai afia%ului. Afia%ele .C3 /itachi conin un set de caractere A'C(( plus simboluri %aponeze, greceti i matematice.

A 1'G2 line Pitac*i P.!!(,@ displaO

6iecare dintre cei $89 de pi0eli ai afia%ului trebuie s poat fi accesat individual i aceasta se poate realiza cu un numr de integrate '*3 pentru control montate pe spatele afia%ului. Aceasta ne salveaz de o cantitate enorm de fire i de un control adecvat astfel nc t sunt necesare doar c teva linii pentru a accesa afia%ul. +utem comunica cu afia%ul prin intermediul unui bus de date pe 4 bii sau de 8 biti. +entru un bus de 4 biti, afia%ul are nevoie de o tensiune de alimentare de b<v i "" linii (I). +entru un bus de 8 bii sunt necesare doar liniile de alimentare i 7 linii. C nd afia%ul .C3 nu este pornit liniile de date sunt -D('-A-!, ceea ce nseamn c ele sunt n stare de nalt impedan 1ca i cum ar fi deconectate2 i astfel nu interfereaz cu funcionabilitatea microcontrolerului c nd afia%ul nu este adresat. .C3ul necesit de altfel = linii de control de la microcontroler. .inia 3naCle ;3< permite accesul la afia% prin intermediul liniilor DIA i D'. C nd aceast linie este .)A, .C3ul este dezactivat i ignor semnalele de la DIA i D'. C nd linia 1!2 este /(C/, .C3ul verific starea celor dou linii de control i rspunde corespunztor. .inia 2ead?)rite ;2?)< stabilete direcia datelor dintre .C3 i microcontroler. C nd linia este .)A, datele sunt scrise n .C3. C nd este /(C/, datele sunt citite de la .C3. Cu a%utorul liniei 2e+ister select ;21<, .C3 interpreteaz tipul datelor de pe liniile de date. C nd este .)A, o instruciune este scris n .C3. C nd este /(C/, un caracter este scris n .C3. 'tarea logic a liniilor de controlB 3 9 Accesul " Accesul la .C3 activat 9 " Citete date din .C3 'crie 9 la date .C3 n dezactivat .C3 (nstruciuni

2?)

21 " Caracter

'crierea datelor n .C3 se realizeaz n c iva paiB se se se seteaz seteaz bitul D' n 9 trimit datele ctre liniile bitul DIA .)A sau " logic 1instruciune sau caracter2 de date 1dac se e0ecut o scriere2

se seteaz linia se citesc datele de la liniile de date 1dac se e0ecut o citire2

/(C/

Citirea datelor de la .C3 se realizeaz similar, cu deosebirea c linia de control DIA trebuie s fie /(C/. C nd trimitem un /(C/ ctre .C3, el se va reseta i va accepta instruciuni. (nstruciunile tipice care sunt transmise ctre un afia% .C3 dup reset suntB pornirea afia%ului, activarea cursorului i scrierea caracterelor de la st nga spre dreapta. 5n momentul n care un .C3 este iniializat, el este pregtit sa primeasc date sau instruciuni. 3ac recepioneaz un caracter, el l va afia i va muta cursorul un spaiu la dreapta. Cursorul marcheaz locaia urmtoare unde un caracter va fi afiat. C nd dorim s scriem un ir de caractere, mai nt i trebuie s setm adresa de start, i apoi s trimitem c te un caracter pe r nd. Caracterele care pot fi afiate pe ecran sunt memorate n memoria video 33 DA* 13ata 3ispla@ DA*2. Capacitatea memoriei 33 DA* este de 49 b@tes. Afia%ul .C3 mai conine $8 b@tes CC DA* 1 Character Cenerator DA*2. Aceast memorie este rezervat pentru caracterele definite de utilizator. 3atele din CC DA* sunt reprezentate sub form de caractere bitmap de 4 biti. 6iecare caracter ocup ma0im 4 b@tes n CC DA*, astfel numrul total de caractere pe care un utilizator poate s le defineasc este 4. +entru a afia caracterul bitmap pe .C3, trebuie setat adresa CC DA* la punctul de start 1de obicei 92 i apoi s fie scrise datele n afia%. 3efinirea unui caracter ispecialg este e0emplificat n figur. 5nainte de a accesa 33 DA*, dup definirea unui caracter special, programul trebuie s seteze adresa n 33 DA*. )rice scriere i citire a datelor din memoria .C3 este realizat de la ultima adres care a fost setat, folosind instruciunea set-adress. )dat ce adresa 33 DA* este setat, un caracter nou va fi afiat n locul potrivit pe ecran. + n acum am discutat operaia de scriere i citire a memoriei unui .C3 ca i cum ar fi o memorie obinuit. Acest lucru nu este adevrat. Controlerul .C3 are nevoie de 89 p n la ":9 microsecunde 1us2 pentru scriere i citire. Alte operaii pot dura p n la < ms. 5n acest timp microcontrolerul nu poate accesa .C3ul, astfel un program trebuie s tie c nd un .C3 este ocupat. +utem rezolva aceasta n dou metode.

) metod este verificarea bitului &U'j de pe linia de date 37. Aceasta nu este cea mai bun metod pentru c .C3ul se poate bloca i programul va sta ntr-o bucl infinit verific nd bitul &U'j. ) alt metod este introducerea unei nt rzieri n program. 5nt rzierea trebuie s fie destul de lung pentru ca .C3ul s termine operaia n desfurare. (nstruciunile pentru scriere i citire cu memoria .C3ului sunt afiate mai sus. .a nceput am menionat c avem nevoie de "" linii (I) pentru a comunica cu un .C3. )ricum, putem comunica cu un .C3 printr-un bus de 8 linii. +utem reduce numrul total de linii de comunicaie la 7. 'chema pentru conectarea printr-un bus de 8 biti este n imaginea de mai %os. 5n acest e0emplu folosim un afia% .C3 cu :0"$ caractere, denumit .*"$0:": fabricat de productorul %aponez 'harp. *esa%ul icharacterg este scris pe prima linie urmat de dou caractere speciale ikg i ilg. +e a doua linie este scris cuv ntul imi?ro!le?troni?ag.

Conectarea unui a%i"aM la un microcontroler

6iierul LC..inc conine un grup de macrouri pentru lucrul cu afia%ele .C3.

*acro pentru lucrul cu .C3 *acroul LC.init este utilizat pentru a iniializa portul conectat la .C3. .C3ul este configurat s mearg n modul de 8 bii. 3GempluF .C3init LC.c*ar LC.ar+ scrie un caracter A'C((. Argumentul este caracterul A'C((. 3GempluF .C3char idg LC.D scrie 3GempluF .C3E caracterul din movlE trimite seteaz adresa registul A. ipg comenzi. 33 DA*

LC.cmd LC.command 3GempluF .C3cmd .C3C/ LC.8..Adr ..2amAddress 3GempluF .C3O33Adr .=

LC.line line8num seteaz poziia cursorului la nceputul primei sau celei de-a doua linie. 3GempluF .C3line : C nd lucrm cu microcontrolere numerele sunt reprezentate n form binar. 3in aceast cauz ele nu pot fi afiate. +entru aceasta este necesar s schimbm numerele dintr-un sistem binar ntr-un sistem zecimal pentru ca ele s fie uor de neles. 'ursele celor dou macrouri LC.-al8@, i LC.-al81' sunt prezentate mai %os. *acroul LC.-al8@, realizeaz conversia unui numr binar de 4 bii ntr-un numr zecimal de la 9 la :<< i l afieaz. !ste necesar s declarm urmtoarele variabile n programul principalB -!*+", -!*+:, .), .)O-!*+, &chec?. ,umrul binar de 4 bii este n variabila .). C nd macroul este e0ecutat, echivalentul zecimal al acestui numr este afiat. Gerourile precedente numrului nu sunt afiate.

*acroul LC.-al81' realizeaz conversia unui numr binar de "$ bii ntr-un numr zecimal de la 9 la $<<=< i l afieaz. Urmtoarele variabile trebuie declarate n programul pricipalB

-!*+", -!*+:, -!*+=, .), /(, .)O-!*+. /(O-!*+, &chec?. ,umrul binar de "$ bii este n variabilele .) i /(. C nd macroul este e0ecutat, echivalentul zecimal al acestui numr este afiat. Gerourile precedente numrului nu sunt afiate.

+rogramul principal este o demontraie pentru utilizarea afia%elor .C3 i desenarea de noi caractere. .a nceputul programului, trebuie s declarm variabilele LC.Cu% i LC.temp folosite n subrutinele pentru .C3, c t i portul microcontrolerului conectat la .C3. +rogramul scrie mesa%ul icharactersBg pe prima linie urmat de dou caractere speciale ikg i ilg. +e cea de-a doua linie este afiat imi?ro!le?troni?ag.

Convertor analog T digital de ": bii 3eoarece totul n lumea microcontrolerelor este reprezentat cu 9 i ", ce facem cu un semnal care este 9.< sau 9.77M Aproape toat lumea e0terioar unui calculator consist din semnale analogice. 5n afar de vorbire i muzic, sunt multe cantiti care trebuie cuantificate ntr-un calculator. Umiditatea, temperatura, presiunea aerului, culoarea, turCiditO, i concentraia metanului sunt doar o parte. Dspunsul este s lum un numr de linii digitale pe care s le combinm asfel nc t ele s e0prime o valoare analogic. ) valoare analogic este orice valoare dintre 9 i ". ) putei numi evaloare fracionalf. -oate cantitile de mai sus trebuie s fie convertite la o valoare cuprins ntre 9 i " astfel s fie utilizat ntr-un calculator. Acesta este conceptul cel mai rsp ndit. !l devine ceva mai puin comple0 n aplicaii. 3ac lum 4 linii i le aran%m astfel nc t s accepte valori binare, rezultatul total va fi :<$ 1acesta este obinut de o numrare p n la :<< plus valoarea 92. 3ac conectm aceste 4 linii ntr-o ecutie neagrf, vor fi numite linii de ieire i astfel trebuie s-i furnizm o singur linie de intrare. Cu acest aran%ament putem detecta p n la :<< incrementri ntre e9f i e"f. Aceast cutie neagr este denumit C),J!D-)D i pentru c noi convertim din Analog n .igital, convertorul se numete convertor A. sau A.C ;Analog to .igital Convertor2. Convertoarele A3 pot fi clasificate dup parametrii diferii. Cei mai importani parametri sunt precizia i modul de transfer al datelor. Deferitor la precizie, domeniul esteB 4 bii, "9 bii, ": bii, "8 bii, "$ bii. 3eoarece conversia pe ": bii este un standard industrial, e0emplul de mai %os a fost realizat cu a%utorul unui convertor pe ": bii. Cellalt parametru important este modul prin care datele sunt transferate n microcontroler. +oate fi paralel sau serial. -ransmisia paralel este mai rapid. )ricum, aceste convertoare sunt deobicei mai scumpe. -ransmisia serial este mai lent, dar consider nd preul sczut i numrul redus de linii de intrare la un microcontroler, este transmisia preferat pentru multe aplicaii. 'emnalele analogice pot depi limitele de intrare ale unui A3C. Aceast lucru poate duce la stricarea convertorului. +entru a prote%a intrarea sunt conectate dou diode, dup cum se observ n schem. Acestea vor prote%a de tensiuni de peste <J i sub 9J. 5n e0emplul nostru am folosit .-C":4$, un A3C pe ": biti 1.inear -echnolog@2. Convertorul este conectat cu microcontrolerul prin intermediul a trei liniiB data, cloc? i C' 1Chip 'elect2. .inia C' este folosit pentru a selecta un dispozitiv de intrare ca s fie posibil s fie conectate i alte dispozitive de intrare 1e0. registru de deplasare de intrare, registru de deplasare de ieire, A3C serial2 pe aceleai linii ale microcontrolerului. Circuitul de mai %os arat cum s conectm un A3C, tensiune de referin i un afia% .C3 la un microcontroler. Afia%ul .C3 a fost adugat pentru a vizualiza rezultatele conversiei A3.

Conectarea unui con-ertor A. cu tensiune de re%erin$ la un microcontroler *acroul folosit n acest e0emplu este .C34$ i este localizat n fiierul .-C":4$.inc.

*acroul .-C4$ are trei argumenteB .-C4$ macro JarO.), JarO/(, Jar Jariabila Aar8LO este unde se stocheaz rezultatul conversiei b@te-ului mai puin semnificativ. Jariabila Aar8PI este unde se stocheaz rezultatul conversiei b@te-ului cel mai semnificativ. Aar este un contor bucl. 3GempluF .-C4$ .), /(, Count Cei patru bii ai celei mai mari valori sunt n variabila PI, iar primii 4 bii ai rezultatului conversiei sunt n variabila LO. Count este o variabil de asisten$ care numr trecerile prin bucle. Urmtorul e0emplu arat cum macrourile sunt folosite n program. +rogramul citete valoarea provenit de la A3C i o afieaz pe .3C. Dezultatul este dat n Quantums. !0B pentru 9J rezultatul este 9, iar pentru <J este 89#<.

Comunicaia serial 'C( este o abrevire pentru 'erial Communication (nterface, i ca un subsistem special e0ist la ma%oritatea microcontrolerelor. C nd nu este disponibil, cum ar fi n cazul lui +(C"$648, poate fi creat n softEare.

Ca i n cazul comunicaiei hardEare, folosim formatul standard ,DG 1,on Deturn to Gero2 cunoscut ca 4 1#2-,-" sau 4 sau # bii de date, fr paritate i cu un bit de stop. Linia liCer este definit starea unu lo+ic. 'tartul transmisiei T Bitul de 1tart, are starea /ero lo+ic. 3up biii de date care urmeaz bitului de start 1primul bit este cel mai puin semnificativ bit2 urmeaz un Bit de 1top care are starea unu lo+ic. 3urata bitului de stop i-g depinde de viteza transmisiei i este a%ustat dup necesitile transmisiei. +entru o vitez de transmisie de #$99 baud, - este "98us. ". C3 1Carrier 3etect2 :. DQ3 1Deceive 3ata2 =. -Q3 1-ransmit 3ata2 8. 3-D 13ata terminal Dead@2 <. C,3 1Cround2 $. 3'D 13ata 'et Dead@2 7. D-' 1De`uest -o 'end2 4. C-' 1Clear -o 'end2 #. D( 1Ding (ndicator2 .escrierea pinilor ai unui conector 21232 +entru a conecta un microcontroler la un port serial al unui calculator +C, trebuie s a%ustm nivelul semnalelor pentru ca s aib loc comunicaia. ,ivelul semnalului la un +C este -"9J pentru zero logic i b"9J pentru unu logic. 3in cauz c nivelul semnalului la un microcontroler este de b<J pentru unu logic i 9J pentru zero logic, avem nevoie de un stadiu intermediar care s realizeze conversia nivelurilor. Un integrat special proiectat pentru aceast sarcin este *AQ:=:. 'chema interfeei este n diagrama de mai %osB

Conectarea unui microcontroler la un PC prin intermediul unei inter%e$e reali/ate cu MAR232. 6iierul D':=:.inc conine un grup de macrouri folosite pentru comunicaia serial.

Utilizarea macrouluiB *acroul 21232init este folosit pentru iniializarea pinului D&9 i liniei pentru transmisia de date 1pinul -Q2. 3GempluF D':=:init 137. 18strin+ trimite un caracter A'C((. Argumentul este este semnul A'C((. 3GempluF '!,3 igg 137.D 3GempluF '!,3E trimite data movlE din registrul A. itg

*acroul 23C3IC3 este o subrutin de tratare a unei ntreruperi care recepioneaz datele pentru D':=: i le memoreaz n registrul DQ3. 3GempluF

.a nceputul programului principal, trebuie s declarm variabilele D'O-!*+", D!O-!*+:, -Q3, DQ3 i pinul -Q al microcontrolerului. 3up resetarea microcontrolerului programul trimite un mesa% de nt mpinare ctre calculatorul +CB S PIC1':,! on line S, i apoi este gata de a recepiona date de pe linia DQ. +utem transmite i recepiona date de la calculatorul +C prin acelai program de comunicaie. C nd microcontrolerul recepioneaz datele, va transmite un mesa%B Character received from +(C"$648B 0, pentru confirmarea succesului recepionrii. +rogramul principalB

AneGa A 1et Instruc$iuni Introducere Ane0a conine toate instruciunile prezentate separat cu e0emple pentru folosirea lor. 'inta0a, descrierea i efectele ei asupra strii biilor sunt pentru fiecare instruciune.

A." *)J.A

'crie constanta n registrul A

A.: *)JA6

Copiaz A n f

A.= *)J6

Copiaz f n d

A.8 C.DA

'crie 9 n A

A.< C.D6

'crie 9 n f

A.$ 'AA+6

Copiaz the bucelele din f n d n diagonal

A.7 A33.A

Adun A la o constant

A.4 A33A6

Adun A la f

A.# 'U&.A

'cade A dintr-o constant

A."9 'U&A6

'cade A din f

A."" A,3.A

A A,31H(2 logic cu o constant

A.": A,3A6

A A,31H(2 logic cu f

A."= ()D.A

A )D1'AU2 logic cu o constant

A."8 ()DA6

A )D1'AU2 logic cu f

A."< Q)D.A

A )D1'AU2 logic e0clusiv cu o constant

A."$ Q)DA6

A logic e0clusiv )D1'AU2 cu f

A."7 (,C6

(ncrementeaz f

A."4 3!C6

3ecrementeaz f

A."# D.6

Dotete f la st nga prin CADDj

A.:9 DD6

Dotete f la dreapta prin CADDj

A.:" C)*6

Complement f

A.:: &C6

Deseteaz bitul b n f

A.:= &'6

'eteaz bitul b n f

A.:8 &-6'C

-esteaz bitul b n f, sari dac K 9

A.:< &-6''

-esteaz bitul b n f, sari dac K"

A.:$ (,C6'G

(ncrementeaz f, sari dacK9

A.:7 3!C6'G

3ecrementeaz f, sari dac K 9

A.:4 C)-)

'alt la adres

A.:# CA..

Apeleaz un program

A.=9 D!-UD,

5ntoarcere dintr-un subprogram

A.=" D!-.A

5ntoarcere dintr-un subprogram cu constant n A

A.=: D!-6(!

5ntoarcere dintr-o rutin de ntrerupere

A.== ,)+

6r operaii

A.=8 C.DA3-

(niializeaz timer-ul Eatchdog

A.=< '.!!+

*odul stand b@

AneGa B 1isteme numerice

Introducere A fost dificil pentru oameni s accepte faptul c unele lucruri difer de ei i de modul lor de g ndire. Acesta este probabil unul din motivele pentru care sistemele numerice care difer de cele zecimale sunt nc greu de neles. -otui, fie c le vrem ori nu, realitatea este diferit. 'istemul numeric zecimal pe care oamenii l folosesc n viaa de fiecare zi este de departe n urma sistemului binar folosit de milioane de calculatoare n lumea ntreag. 6iecare sistem numeric se bazeaz pe o fundaie. .a un sistem numeric zecimal, baza este "9, la binar :, i la sistemul he0azecimal "$. Jaloarea fiecrui zecimal este determinat de poziia lui n relaie cu ntreg numrul reprezentat n sistemul numeric dat. 'uma valorilor fiecrui zecimal d valoarea ntregului numr. 'istemele binare i he0azecimale sunt n special interesante pentru subiectul acestei cri. 5n afar de acestea vom discuta de asemenea un sistem zecimal, pentru a-l compara cu celelalte dou. Chiar dac un sistem numeric zecimal este un subiect cu care suntem bine familiarizai, l vom discuta aici din cauza legturii sale cu alte sisteme numerice.

B.1 1istem numeric /ecimal 'istemul numeric zecimal este definit de baza lui "9 i de spaiul zecimal care este numrat de la dreapta la st nga, i const din numerele ", :, =, 8, <, $, 7, 4, #. Aceasta nseamn c numrul din captul din st nga a sumei totale este multiplicat cu ", urmtorul cu "9, urmtorul cu "99, etc. 3GempluF

)peraiile de adunare, scdere, mprire i nmulire ntr-un sistem numeric zecimal sunt folosite ntr-un fel care ne este de%a cunoscut, aa c nu-l vom discuta mai departe. B.2 1istem numeric Cinar 'istemele numerice binare difer n multe aspecte de sistemul zecimal pe care l folosim n viaa de zi cu zi. &aza lui numeric este :, i fiecare numr poate avea doar dou valori, P"P sau P9P. 'istemul numeric binar este folosit n calculatoare i microcontrolere pentru c este de departe mai potrivit pentru procesare dec t un sistem zecimal. Uzual, numrul binar const din numerele 4, "$, sau =:, i nu este important av nd n vedere coninutul de a discuta de ce. !ste destul acum de a accepta aceast informaie. 3GempluF "99""9"" numr binar cu 4 digii +entru a nelege logica numerelor binare, vom considera un e0emplu. ' spunem c avem un mic dulpior cu patru sertare, i c trebuie s spunem cuiva s ne aduc ceva din unul din sertare. ,imic nu este mai simplu, vom spune partea st ng, %os 1sertarul2, i sertarul dorit este clar definit. -otui, dac ar fi trebuit s facem aceasta fr folosirea instruciunilor ca st nga, dreapta, %os, sus, etc., atunci am fi avut o problem. 'unt multe soluii la aceast problem, dar noi ar trebui s cutm una care este cea mai benefic i practicF ' desemnm r ndurile cu A, i tipurile cu &. 3ac AK", se refer la r ndul de sus a sertarelor, i pentru AK9, r ndul de %os. 'imilar cu coloanele, &K" reprezint coloana st ng, i &K9, dreapt 1urmtoarea imagine2. Acum este de%a mult mai uor de a e0plica din care sertar avem nevoie de ceva. -rebuie doar s formulm una din cel patru combinaiiB 99, 9", "9 sau "". Aceast caracteristic denumind fiecare sertar individual nu este dec t reprezentarea numeric binar, sau conversia numerelor comune dintr-o form zecimal ntr-una binar. Cu alte cuvinte, referirile ca Lprimul, al doilea, al treilea i al patruleaL sunt schimbate cu L99, 9", "9 i ""L.

Ceea ce ne rm ne este s ne acomodm cu logica care este folosit la sistemul numeric binar, sau cu cum s obinem o valoare numeric dintr-o serie de zero-uri i unu-uri ntr-un fel n care s-l nelegem, bineneles. Aceast procedur se numete conversia dintr-un numr binar ntr-unul zecimal. 3GempluF

3up cum putei vedea, convertirea unui numr binar ntr-unul zecimal se face prin calcularea e0presiei din partea st ng. 3epinz nd de poziie ntr-un numr binar, cifrele poart diferite valori care sunt multiplicate cu ele nsele, i prin adugarea lor obinem un numr zecimal pe care l putem nelege. ' presupunem mai departe c n fiecare sertar sunt c teva bileB : n primul, 8 n al doilea sertar, 7 n al treilea i = n al patrulea sertar. ' spunem de asemenea celui care deschide sertarele s foloseasc reprezentarea binar ca rspuns. 5n aceste condiii, ntrebarea ar fiB LC te bile sunt n 9"ML, i rspunsul va fiB L'unt "99 de bile n 9".L -rebuie remarcat c at t ntrebarea c t i rspusul sun foarte clare chiar dac nu am folosit nume standard. -rebuie mai departe de observat c pentru numerele zecimale de la 9 la = este suficient de a avea dou cifre binare, i c pentru toate valorile de mai sus trebuie s adugm cifre binare noi. Aa c, pentru numere de la 9 la7 este suficient s avem trei cifre, pentru numere de la 9 la "<, patru, etc. *ai simplu spus, cel mai mare numr ce poate fi reprezentat de o cifr binar este cel obinut c nd baza : este gradat cu un numr de cifre binare ntr-un numr binar i astfel numrul derivat este decrementat cu unu. 3GempluF

Aceasta nseamn c este posibil de a se reprezenta numere zecimale de la 9 la "< cu 8 cifre binare, incluz nd numerele P9P i P"<P, sau "$ valori diferite. )peraiile ce e0ist n sistemul numeric zecimal e0ist de asemenea ntr-un sistem binar. 3in motive de claritate i descifrabilitate, vom revedea adunarea i scderea doar n acest capitol.

Degulile de baz care se aplic adunrii binare suntB

Adunarea se face aa nc t cifrele din aceeai poziie nmeric sunt adunate, similar sistemuluii numeric zecimal. 3ac ambii digii de adunat sunt zero, suma lor rm ne zero, i dac sunt P9P i P"P, rezultatul este P"P. 'uma a doi de unu d zero, dar cu transferarea unui P"P la poziia de mai sus care este adunat cifrelor din acea poziie. 3GempluF

+utem verifica dac rezultatul este corect transfer nd aceste numere n sistemul numeric zecimal i fc nd adunarea n el. .a transfer obinem valoarea "9 ca primul numr, valoarea # ca al doilea, i valoarea "# ca sum. Astfel am dovedit c operaia s-a fcut corect. +robleme apar c nd suma este mai mare dec t ceea ce poate fi reprezentat de un numr binar cu un numr dat de cifre binare. 'e pot aplica diferite soluii atunci, una este s cretem numrul de cifre binare n sum ca n e0emplul anterior. 'cderea, ca i adunarea se face pe acelai principiu. Dezultatul scderii dintre doi de zero, sau doi de unu rm ne zero. C nd scdem unu din zero, trebuie s mprumutm unu de la cifra binar care este pe o poziie mai sus n numrul binar. 3GempluF

Jerific nd rezulatul cum am fcut i cu adunarea, c nd translm aceste numere binare obinem numerele zecimale "9 i #. 3iferena lor corespunde numrului " care este ceea ce obinem din scdere. B.3 1istem numeric *eGa/ecimal 'istemul numeric he0azecimal are numrul "$ ca baz a sa. +entu c baza unui sistem numeric este "$, sunt "$ cifre care se pot gsi ntr-un numr he0azecimal. Aceste cifre sunt L9, ", :, =, 8, <, $, 7, 4, #, A, &, C, 3, !, 6L. .iterele A, &, C, 3, ! i 6 nu sunt altceva dec t valorile "9, "", ":, "=, "8 i "<. !le s-au introdus ca un nlocuitor pentru a face scrierea mai uoar. Ca i la sistemul binar, aici de asemenea, putem determina cu aceeai formul care este cel mai mare numr zecimal pe care l putem reprezenta cu un numr specific de cifre he0azecimale.

3GempulF

Uzual, numrul he0azecimal este scris cu un semn L>L sau L90L nanitea lui, pentru a evidenia sistemul numeric. Astfel, numrul A=7! ar fi scris mult mai corect ca >A=7! sau 90A=7!. +entru a transla un numr he0azecimal ntr-un sistem numeric binar nu este necesar de a face nici un calcul ci simpla schimbare de cifre he0azecimale cu cifre binare. +entru c valoarea ma0im a numrului he0azecimal este "<, aceasta nseamn c este suficient s se foloseasc 8 cifre binare pentru o cifr he0azecimal. 3GempulF

Jeific nd, sau transfer nd ambele numere ntr-un sistem numeric zecimal, obinem numrul ::4 ceea ce dovedete acurateea aciunii noastre. +entru a obine un zecimal echivalent a unui numr he0azecimal, trebuie s nmulim fiecare cifr a unui numr cu numrul "$ care este gradat prin poziia acelei cifre n numrul he0azecimal. 3GempulF

Adunarea, ca i n precedetele dou e0emple, se face ntr-o manier similar. 3GempulF

-rebuie s adugm cifrele corespunztoare ale numruluiR i, dac suma lor este mai mare ca "$, trebie s scriem numrul P9P acolo. Jaloarea peste "$ trebuie adunat urmtoarelor dou cifre mai mari n valoare. Jerific nd, obinem "84#" ca prim numr, i al doilea este 8=8<7. 'uma lor este <4=84, care este numrul >!=!C c nd este transferat n sistemul numeric zecimal. 'cderea este un proces identic celor dou sisteme numerice anterioare. 3ac numrul pe care l scdem este mai mic, mprumutm din urmtorul loc al valorii mai mari.

3GempluF

Jerific nd rezultatul, obinem valorile ""<#9 pentru prmul numr i <#79 pentru al doilea, c nd diferena lor este <$:9, ceea ce coresponde numrului >"<68 dup transferul ntr-un sistem numeric zecimal. Conclu/ie 'istemul numeric binar este nc cel mai folosit, cel zecimal cel mai uor de neles, iar cel he0azecimal este ntre cele dou sisteme. Conversia lui uoar ntr-un sistem numeric binar i memorarea lui uoar l fac, mpreun cu sistemele binar i zecimal, unul din cele mai importante sisteme numerice.

AneGa C 4losar

Introducere +entru c toate domeniile de activitate ale omului sunt n mod obinuit bazate pe termeni adecvai i de%a adoptai 1prin care au aprut alte noiuni i definiii2, tot aa n domeniul microcontrolerelor putem selecta c iva termeni frecvent folosii. (deile sunt adesea conectate a c nelegerea corect a unei noiuni este necesar pentru a deveni familiarizai cu una sau mai alte idei. *icrocontroler *icroprocesor cu periferice ntr-o singur component electronic.

+in (I) +in de conecor e0tern al microcontrolerului care poate fi configurat ca intrare sau ca ieire. 5n cele mai multe cazuri pinul (I) activeaz microcontrolerul pentru a comunica, controla sau citi informaia. 'oftEare (nformaia de care mocrocontrolerul are nevoie pentru a funciona. 'otEare-ul nu poate avea erori dac vrem ca programul i dispozitivul s funcioneze corect. 'oftEare-ul poate fi scris n diferite limba%e caB &asic, C, +ascal sau assembler. 6izic, el este un fiier pe un disc de calculator. /ardEare *irocontrolerul, memoria, sursa, circuitele de semnal i toate componentele conectate cu microcontrolerul. Cellalt mod de a-l vedea 1n special dac nu funcioneaz2 este, c, hardEare-ul este ceva ce putei atinge. 'imulator +achet softEare pentru +C care simuleaz funcionarea intern a microcontrolerului. !ste ideal pentru verificarea rutinelor softEare i a tuturor prilor codului care nu au cone0iuni de supra cerere cu e0teriorul. )piunile sunt instalate pentru a supraveghea codul, micarea n program napoi i nainte i pas cu pas, i debugging-ul. (C! (C! 1(n Circuit !mulator2, emulator intern, parte foarte folositoare a echipamentului care conecteaz un +C n locul unui microcontroler la un dispozitiv care este n dezvoltare. +ermite softEare-ului de a funciona la un calculator +C, dar s apar ca i cum un microcontroler real e0ist n dispozitiv. (C! v permite s v micai n program n timp real, pentru a vedea ce se nt mpl n microcontroler i cum comunic cu e0teriorul. !mulator !+D)* !mulatorul !+D)* este un dispozitiv care nu emuleaz ntregul microcontroler ca emulatorul (C!, ci emuleaz doar memoria lui. !ste cel mai mult folosit la microcontrolerele ce au memorie e0tern. +rin folosirea lui evitm tergerea i scrierea constant a memoriei !+D)*. Assembler +achet softEare care transleaz codul surs ntr-un cod pe care microcontrolerul l poate nelege. Conine o seciune pentru descoperirea erorilor. Aceast parte este folosit c nd depanm un program de erorile fcute c nd programul a fost scris. 6iier /!Q

Acesta este un fiier fcut de translatorul assembler c nd se transleaz un fiier surs, i are o form LneleasL de microcontroler. ) continuare a fiierului este uzual 6ileOname./!Q de unde vine numele fiierului /!Q. 6iier .ist Acesta este un fiier fcut de translatorul assembler i conine toate instruciunile din fiierul surs cu adresele i comnetariile pe care le-a scris programatorul. !ste un fiier foarte util pentru a urmri erorile n program. !0tensia fiierului este .('- de unde vine i numele lui. 6iier 'ource 6iier scris n limb%ul neles de om i de translatorul assembler. +rin translarea fiierului surs, obinem fiierele /!Q i .('-. 3ebugging !roare fcut n scrierea programului, eroare de care nu suntem n cunotiin. !rorile pot fi chiar simple ca erori de tastare, i chiar comple0e ca folosirea incorect a limba%ului programului. Assembler-ul va gsi ma%oritatea acestor erori i le va raporta fiierului P..'-P. Alte erori se vor cuta prin ncercarea i urmrirea funcionrii dispozitivului. D)*, !+D)*, !!+D)*, 6.A'/, DA* -ipuri de memorie pe care le nt lnim la folosirea microcontrolerului. +rima nu poate fi tears, ceea ce ai scris n ea rm ne pentru totdeauna, i nu poate fi ters. A doua este posibil de ters electric cu sursa adus separat, i tensiunea peste aceea la care funcioneaz microcontrolerul. A treia poate de asemenea fi tears electric, dar folosete tensiunea la care funcioneaz microcontrolerul. A patra este electric posibil de ters, dar spre deosebire de memoria !!+D)*, dar nu are un numr aa de mare de cicluri de scriere i tergere n locaiile de memorie. A cincea este rapid, dar nu reine coninutul ca i cea anterioar c nd se ntrerupe alimentarea. Astfel, programul nu este memorat n ea, dar servete pentru diferite variabile i inter-rezultate. Adresarea 3etermin i asigneaz unele locaii de memorie. A'C(( +rescurtare pentru LAmerican 'tandard Code for (nformation (nterchange-Codul 'tandard American pentru (nterschimb (nformaiiL. !ste un tip de cod larg acceptat unde fiecare numr i liter au codul lor de opt bii. Carr@ &it de transfer conectat cu operaii aritmetice. Code

6iier sau seciune a unui fiier ce conine instruciuni de program. &@te, ;ilob@te, *egab@te -ermen desemn nd cantitatea de informaie. Unitatea de baz este un b@te, i are 4 bii. ;ilob@te-ul are "9:8 b@tes, i un megab@te are "9:8 ?ilob@tes. 6lag &ii din registrul de stare. +rin activarea lor, programatorul este informat de unele aciuni. +rogramul activeaz rspunsul lui dac este necesar. Jector ntrerupere sau ntreruperi .ocaie n memoria microcontrolerului. *icrocontrolerul ia din aceast locaie informaia despre o seciune a programului ce trebuie e0ecutat ca un rspuns la unele evenimente de interes ale programatorului i dispozitivului. +rogramator 3ispozitiv ce face posibil scrierea softEare-ului n memoria microcontrolerului, permi nd astfel microcontrolerului s lucreze independent. Const din seciunea hardEare uzual conectat cu unul din porturi i seciune softEare folosit de calculator ca un program. +rodus 3ezvoltarea produsului este o combinaie de succes i e0perien. -ermenele scurte sau limitele de timp trebuie evitate pentru c chiar i cu cele mai multe simple asignri, este nevoie de mult timp pentru a dezvolta i mbunti. C nd se creaz un proiect, avem nevoie de timp, linite , minte logic i cel mai important, o nelegere complet a nevoilor consumatorului. Cursul tipic n crearea unui produs va avea urmtorul algoritmB

S-ar putea să vă placă și