You are on page 1of 152

PIC book

Microcontrolere PIC on-line


GRATIS!
Pagina anterioarfont>

Coninut

Scopul acestei ci nu este de a


face din dvs. un expert
microcontrolere, ci unul care
are runsuri tehnice la unele
reb.

Pagina urmare

CAPITOLUL 1 Introducere Microcontrolere


CAPITOLUL 2 Microcontrolerul PIC16F84
CAPITOLUL 3 Set Instructiuni
CAPITOLUL 4 Programare Limbaj de Asamblare

All credits for translation goes


to Cristian Secrieru Romanian
editor.

Author: Nebojsa Matic

Trimitei un e-mail
unui prieten despre acest
articol
Sisteme de dezvoltare

CAPITOLUL 5 MPLAB
CAPITOLUL 6 Mostrele
Anexa A

Set Instruciuni

Anexa B

Sisteme numerice

Anexa C

Glosar

C O N I N U T
CAPITOLUL 1 Introducere
Microcontrolere

CAPITOLUL 2 Microcontrolerul
PIC16F84

Introducere
Istorie
Microcontrolere contra microprocesoare

Introducere

1.1
1.2
1.3
1.4
1.5
1.7
1.8
1.9

Unitatea de memorie
Unitatea de procesare
Bus-ul
Unitatea intrare-ieire
Comunicaie serialBR>1.6 Unitatea de timer
Watchdog-ul
Convertorul Analog-Digital
Programul

CAPITOLUL 3 Set Instructiuni


Introducere
3.1 Set de instructiuni familia microcontrolerului
PIC16Cxx
3.2 Transfer Date
3.3 Aritmetica si logica
3.4 Operatii cu biti
3.5 Directionarea debitului de program
3.6 Perioada de executie a instructiunilor
3.7 Lista de cuvinte

CISC, RISC
Aplicatii
Ciclu de clock/instructiune
Pipelining
Semnificatia pinilor
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8

Generator-oscilator de ceas
Reset
Unitatea de procesare centrala
Porturi
Organizarea memoriei
treruperi
Timer-ul liber TMRO
Memoria de date EEPROM

CAPITOLUL 4 Programare Limbaj


de Asamblare
Introducere
Un exemplu de program scris
Directive de control
Fisiere create ca rezultat al translarii de program
Macro-uri

CAPITOLUL 5 MPLAB

CAPITOLUL 6 Mostrele

Introducere

Introducere

5.1
5.2
5.3
5.4
5.5
5.6
5.7
5.8

6.1 Alimentarea microcontrolerului


6.2 Macrouri folosite programe

Instalarea pachetului de program MPLAB


Introducere MPLAB
Alegerea modului de dezvoltare
Conceperea unui proiect
Proiectarea unui fisier de asamblare
Scrierea unui program
Simulator MPSIM
Toolbar

Anexa A Set Instruciuni

6.3 Exemple

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/picbook.htm (1 of 2)07.May.07 6:20:48 PM

Macrourile WAIT, WAITX


Macroul PRINT

Light emitting diodes LEDuri


Tastatura

PIC book

Anexa B Sisteme numerice

Introducere
B.1 Sistem numeric zecimal
B.2 Sistem numeric binar
B.3 Sistem numeric hexazecimal

Concluzie

Anexa C Glosar

Optocuploare
Izolarea galvanic liniilor de intrare
folosind optocuploare
Izolarea galvanic liniilor de ieire folosind
optocuploare
Relee
Generarea unui sunet
Regitri de deplasare
Registru de deplasare de intrare
Registru de deplasare de ieire
Afioare 7segmente (multiplexare)
Afior LCD
Convertor AD pe 12 bii
Comunicaia serialSPAN>

Trimitei-ne un comentariu despre carte

Subiect :
Comentariu despre cartea Microcontrolere PIC
Nume :
Tara :
Romania
E-mail :

Mesajul tau:

Submit

Reset

C o p y r i g h t 2 0 0 3. m i k r o E l e k t r o n i k a. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/picbook.htm (2 of 2)07.May.07 6:20:48 PM

PIC book

Microcontrolere PIC on-line


GRATIS!
Pagina anterioarfont>

Coninut

Scopul acestei ci nu este de a


face din dvs. un expert
microcontrolere, ci unul care
are runsuri tehnice la unele
reb.

Pagina urmare

CAPITOLUL 1 Introducere Microcontrolere


CAPITOLUL 2 Microcontrolerul PIC16F84
CAPITOLUL 3 Set Instructiuni
CAPITOLUL 4 Programare Limbaj de Asamblare

All credits for translation goes


to Cristian Secrieru Romanian
editor.

Author: Nebojsa Matic

Trimitei un e-mail
unui prieten despre acest
articol
Sisteme de dezvoltare

CAPITOLUL 5 MPLAB
CAPITOLUL 6 Mostrele
Anexa A

Set Instruciuni

Anexa B

Sisteme numerice

Anexa C

Glosar

C O N I N U T
CAPITOLUL 1 Introducere
Microcontrolere

CAPITOLUL 2 Microcontrolerul
PIC16F84

Introducere
Istorie
Microcontrolere contra microprocesoare

Introducere

1.1
1.2
1.3
1.4
1.5
1.7
1.8
1.9

Unitatea de memorie
Unitatea de procesare
Bus-ul
Unitatea intrare-ieire
Comunicaie serialBR>1.6 Unitatea de timer
Watchdog-ul
Convertorul Analog-Digital
Programul

CAPITOLUL 3 Set Instructiuni


Introducere
3.1 Set de instructiuni familia microcontrolerului
PIC16Cxx
3.2 Transfer Date
3.3 Aritmetica si logica
3.4 Operatii cu biti
3.5 Directionarea debitului de program
3.6 Perioada de executie a instructiunilor
3.7 Lista de cuvinte

CISC, RISC
Aplicatii
Ciclu de clock/instructiune
Pipelining
Semnificatia pinilor
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8

Generator-oscilator de ceas
Reset
Unitatea de procesare centrala
Porturi
Organizarea memoriei
treruperi
Timer-ul liber TMRO
Memoria de date EEPROM

CAPITOLUL 4 Programare Limbaj


de Asamblare
Introducere
Un exemplu de program scris
Directive de control
Fisiere create ca rezultat al translarii de program
Macro-uri

CAPITOLUL 5 MPLAB

CAPITOLUL 6 Mostrele

Introducere

Introducere

5.1
5.2
5.3
5.4
5.5
5.6
5.7
5.8

6.1 Alimentarea microcontrolerului


6.2 Macrouri folosite programe

Instalarea pachetului de program MPLAB


Introducere MPLAB
Alegerea modului de dezvoltare
Conceperea unui proiect
Proiectarea unui fisier de asamblare
Scrierea unui program
Simulator MPSIM
Toolbar

Anexa A Set Instruciuni

6.3 Exemple

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/0_Uvod.htm (1 of 2)07.May.07 6:20:56 PM

Macrourile WAIT, WAITX


Macroul PRINT

Light emitting diodes LEDuri


Tastatura

PIC book

Anexa B Sisteme numerice

Introducere
B.1 Sistem numeric zecimal
B.2 Sistem numeric binar
B.3 Sistem numeric hexazecimal

Concluzie

Anexa C Glosar

Optocuploare
Izolarea galvanic liniilor de intrare
folosind optocuploare
Izolarea galvanic liniilor de ieire folosind
optocuploare
Relee
Generarea unui sunet
Regitri de deplasare
Registru de deplasare de intrare
Registru de deplasare de ieire
Afioare 7segmente (multiplexare)
Afior LCD
Convertor AD pe 12 bii
Comunicaia serialSPAN>

Trimitei-ne un comentariu despre carte

Subiect :
Comentariu despre cartea Microcontrolere PIC
Nume :
Tara :
Romania
E-mail :

Mesajul tau:

Submit

Reset

C o p y r i g h t 2 0 0 3. m i k r o E l e k t r o n i k a. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/0_Uvod.htm (2 of 2)07.May.07 6:20:56 PM

Chapter 1 - Introduction to Microprocessors

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

CAPITOLUL 1
Introducere n Microcontrolere
Introducere
Istorie
Microcontrolere contra microprocesoare
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9

Unitatea de memorie
Unitatea de procesare
Bus-ul
Unitatea intrare-ieire
Comunicaie serial
Unitatea de timer
Watchdog-ul
Convertorul Analog-Digital
Programul

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 att procesorul ct i perifericele. Aa s-a ntmplat cum primul
cip coninnd un microcalculator, sau ce va deveni cunoscut mai trziu ca microcontroler a luat fiin.

Istorie
Este anul 1969, i o echip de ingineri japonezi de la compania BUSICOM sosesc n Statele Unite cu cererea ca unele
circuite integrate pentru calculatoare s fie fcute folosind proiectele lor. Propunerea a fost fcut ctre INTEL, iar
Marcian Hoff a fost desemnat responsabil cu acest proiect. Pentru c el era cel ce avea experien n lucrul cu un
calculator (PC) PDP8, i-a venit s sugereze o soluie diferit fundamental n locul construciei propuse. Aceast soluie
presupunea c funcionarea circuitului integrat este determinat de un program memorat n el. Aceasta a nsemnat c
configuraia ar fi fost mult mai simpl, dar aceasta ar fi cerut mult mai mult memorie dect ar fi cerut proiectul
propus de inginerii japonezi. Dup un timp, cu toate c inginerii japonezi au ncercat s caute o soluie mai simpl,
ideea lui Marcian a ctigat, i a luat natere primul microprocesor. n transformarea unei idei ntr-un produs finit,
Frederico Faggin a fost de un ajutor major pentru INTEL. El s-a transferat la INTEL, i doar n 9 luni a reuit s scoat
un produs din prima sa concepie. INTEL a obinut drepturile de a vinde acest bloc integral n 1971. n primul rnd ei
au cumprat licena de la compania BUSICOM care nu au avut idee ce comoar avuseser. n timpul acelui an a aprut
pe pia un microprocesor numit 4004. Acela a fost primul microprocesor de 4 bii cu vitez 6000 operaii pe secund.
Nu mult dup aceea, compania american CTC a cerut de la INTEL i de la Texas Instruments s fac un microprocesor
pe 8 bii pentru folosin n terminale. Cu toate c CTC a renunat la aceast idee pn la sfrit, INTEL i Texas
Instruments au continuat s lucreze la microprocesor i n aprilie 1972 a aprut pe pia primul microprocesor de 8 bii
sub numele de 8008. Putea s adreseze 16Kb de memorie i avea 45 de instruciuni i viteza de 300.000 de operaii
pe secund. Acel microprocesor a fost predecesorul tuturor microprocesoarelor de astzi. INTEL au continuat
dezvoltrile lor pn n aprilie 1974 i au lansat pe pia microprocesorul de 8 bii sub numele de 8080 ce putea adresa
64Kb de memorie i avea 75 de instruciuni, iar preul ncepuse de la 360$.
ntr-o alt companie american Motorola, i-au dat seama repede ce se ntmpla, aa c au lansat pe pia un
microprocesor de 8 bii 6800. Constructor ef era Chuck Peddle i pe lng microprocesorul propriu-zis, Motorola a
fost prima companie care s fac alte periferice ca 6820 i 6850. La acel timp multe companii au recunoscut marea
importan a microprocesoarelor i au nceput propriile lor dezvoltri. Chuck Peddle prsete Motorola pentru a se
muta la MOS Technology i continu s lucreze intensiv la dezvoltarea microprocesoarelor.
La expoziia WESCON din Statele Unite din 1975 a avut loc un eveniment critic n istoria microprocesoarelor. MOS
Technology a anunat c produce microprocesoarele 6501 i 6502 la 25$ bucata pe care cumprtorii le puteau

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/1_Poglavlje.htm (1 of 7)07.May.07 6:20:59 PM

Chapter 1 - Introduction to Microprocessors

cumpra imediat. Aceasta a fost att de senzaional nct au crezut c este un fel de nelciune, gndind c
competitorii vindeau 8080 i 6800 la 179$. Ca un rspuns la competitorii lor att INTEL ct i Motorola au sczut
preurile lor n prima zi a expoziiei pn la 69.95$ pe microprocesor. Motorola intenteaz repede proces contra lui
MOS Technology i contra lui Chuck Peddle pentru copierea protejatului 6800. MOS Technology nceteaz de a mai
produce 6501 dar continu s produc 6502. 6502 este un microcontroler pe 8 bii cu 56 de instruciuni i o
capabilitate de adresare direct de 64Kb de memorie. Datorit costului sczut, 6502 devine foarte popular, aa c este
instalat n calculatoare ca :KIM-1, Apple I, Apple II, Atari, Comodore, Acorn, Oric, Galeb, Orao, Ultra i multe altele.
Curnd apar civa productori de 6502 (Rockwell, Sznertek, GTE, NCR, Ricoh i Comodore preiau MOS Technology) ce
era n momentul prosperitii sale vndut la o rat de 15 milioane de microprocesoare pe an!
Alii totui nu au cedat. Federico Faggin prsete INTEL, i i pornete propria sa companie Zilog Inc.
n 1976 Zilog anun Z80. n timpul crerii acestui microprocesor, Faggin ia o decizie crucial. tiind c un mare numr
de programe fuseser dezvoltate pentru 8080, Faggin i d seama c muli vor rmne fideli acelui microprocesor din
cauza marii cheltuieli care ar rezulta n urma refacerii tuturor programelor. Astfel el decide c un nou microprocesor
trebuie s fie compatibil cu 8080, sau c trebuie s fie capabil s execute toate programele care deja fusese scrise
pentru 8080. n afar acestor caracteristici, multe altele noi au fost adugate, aa c Z80 a fost un microprocesor
foarte puternic la vremea lui. Putea adresa direct 64Kb de memorie, avea 176 instruciuni, un numr mare de registre,
o opiune incorporat pentru remprosptarea memoriei RAM dinamice, o singur surs, vitez de lucru mult mai mare
etc. Z80 a fost un succes mare i toat lumea a fcut conversia de 8080 la Z80. Se poate spune c Z80 comercial, a
fost fr nici o ndoial, cel mai de succes micropocesor de 8 bii a acelui timp. n afar de Zilog, ali noi productori
apar de asemenea ca: Mostek, NEC, SHARP i SGS. Z80 a fost inima a multor calculatoare ca: Spectrum, Partner,
TRS703, Z-3.
n 1976, INTEL iese pe pia cu o versiune mbuntit de microprocesor pe 8 bii numit 8085. Totui, Z80 era cu
mult mai bun nct INTEL curnd a pierdut btlia. Chiar dac au aprut pe pia nc cteva microprocesoare (6809,
2650, SC/MP etc.), totul fusese de fapt deja hotrt. Nu mai erau de fcut mbuntiri importante ca s-i fac pe
productori s se converteasc spre ceva nou, aa c 6502 i Z80 mpreun cu 6800 au rmas ca cei mai reprezentativi
ai microprocesoarelor de 8 bii ai acelui timp.

Microcontrolere contra Microprocesoare


Microcontrolerul difer de un microprocesor n multe feluri. n primul rnd i cel mai important este funcionalitatea sa. Pentru a fi
folosit, unui microprocesor trebuie s i se adauge alte componente ca memorie, sau componente pentru primirea i trimiterea de date.
Pe scurt, aceasta nseamn c microprocesorul este inima calculatorului. Pe de alt parte, microcontrolerul este proiectat s fie toate
acestea ntr-unul singur. Nu sunt necesare alte componente externe pentru aplicarea sa pentru c toate perifericele necesare sunt deja
incluse n el. Astfel, economisim timpul i spaiul necesare pentru construirea de aparate.

1.1 Unitatea de memorie


Memoria este o parte a microcontrolerului a crei funcie este de a nmagazina date.
Cel mai uor mod de a explica este de a-l descrie ca un dulap mare cu multe sertare. Dac presupunem c am marcat
sertarele ntr-un asemenea fel nct s nu fie confundate, oricare din coninutul lor va fi atunci uor accesibil. Este
suficient s se tie desemnarea sertarului i astfel coninutul lui ne va fi cunoscut n mod sigur.

Componentele de memorie sunt exact aa. Pentru o anumit intrare obinem coninutul unei anumite locaii de
memorie adresate i aceasta este totul. Dou noi concepte ne sunt aduse: adresarea i locaia de memorie. Memoria
http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/1_Poglavlje.htm (2 of 7)07.May.07 6:20:59 PM

Chapter 1 - Introduction to Microprocessors

const din toate locaiile de memorie, i adresarea nu este altceva dect 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.
n 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. Vom desemna aceast linie ca R/W (citete /scrie). Linia de
control este folosit n urmtorul fel: dac r/w=1, se face citirea, i dac opusul este adevrat atunci se face scrierea n
locaia de memorie. Memoria este primul element, dar avem nevoie i de altele pentru ca microcontrolerul nostru s
funcioneze.

1.2 Unitatea de procesare central


S adugm alte 3 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. Partea pe care tocmai am adugat-o
este numit "unitatea de procesare central" (CPU). Locaiile ei de memorie sunt numite regitri.

Regitrii sunt deci locaii de memorie al cror rol este de a ajuta prin executarea a variate operaii matematice sau a
altor operaii cu date oriunde se vor fi gsit datele. S privim la situaia curent. Avem dou entiti independente
(memoria i CPU) ce sunt interconectate, i astfel orice schimb de informaii este ascuns, ca i funcionalitatea sa.
Dac, de exemplu, dorim s adugm coninutul a dou locaii de memorie i ntoarcem rezultatul napoi n memorie,
vom avea nevoie de o conexiune ntre memorie i CPU. Mai simplu formulat, trebuie s avem o anumit "cale" prin
care datele circul de la un bloc la altul.

1.3 Bus-ul
Calea este numit "bus"- magistral. Fizic, el reprezint un grup de 8, 16, sau mai multe fire. Sunt dou tipuri de busuri: bus de adres i bus de date. Primul const din attea linii ct este cantitatea de memorie ce dorim s o adresm,
iar cellalt este att de lat ct sunt datele, n cazul nostru 8 bii sau linia de conectare. Primul servete la transmiterea
adreselor de la CPU la memorie, iar cel de al doilea la conectarea tuturor blocurilor din interiorul microcontrolerului.

n ceea ce privete funcionalitatea, situaia s-a mbuntit, dar o nou problem a aprut de asemenea: avem o
unitate ce este capabil s lucreze singur, dar ce nu are nici un contact cu lumea de afar, sau cu noi! Pentru a
nltura aceast deficien, s adugm un bloc ce conine cteva locaii de memorie al cror singur capt este
conectat la bus-ul de date, iar cellalt are conexiune cu liniile de ieire la microcontroler ce pot fi vzute cu ochiul liber
ca pini la componenta electronic.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/1_Poglavlje.htm (3 of 7)07.May.07 6:20:59 PM

Chapter 1 - Introduction to Microprocessors

1.4 Unitatea intrare-ieire


Aceste locaii ce tocmai le-am adugat sunt numite "porturi". Sunt diferite tipuri de porturi: intrare, ieire sau porturi
pe dou-ci. Cnd se lucreaz cu porturi, mai nti de toate este necesar s se aleag cu ce port urmeaz s se lucreze,
i apoi s se trimit date la, sau s se ia date de la port.

Cnd 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.5 Comunicaia serial


Cu aceasta am adugat la unitatea deja existent posibilitatea comunicrii cu lumea de afar. Totui, acest mod de
comunicare are neajunsurile lui. Unul din neajunsurile de baz este numrul de linii ce trebuie s fie folosite pentru a
transfera datele. Ce s-ar ntmpla dac acestea ar trebui transferate la distan de civa kilometri? Numrul de linii
nmulit cu numrul de kilometri nu promite costuri eficiente pentru proiect. Nu ne rmne dect s reducem numrul
de linii ntr-un aa fel nct s nu scdem funcionalitatea. S presupunem c lucrm doar cu 3 linii, i c o linie este
folosit pentru trimiterea de date, alta pentru recepie i a treia este folosit ca o linie de referin att pentru partea
de intrare ct i pentru partea de ieire. Pentru ca aceasta s funcioneze, trebuie s stabilim regulile de schimb ale
datelor. Aceste reguli sunt numite protocol. Protocolul este de aceea definit n avans ca s nu fie nici o nenelegere
ntre prile ce comunic una cu alta. De exemplu, 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. S presupunem c avem urmtorul protocol.
Unitatea logic "1" este setat pe linia de transmisie pn ce ncepe transferul. Odat ce ncepe transferul, coborm
linia de transmisie la "0" logic pentru o perioad de timp (pe care o vom desemna ca T), aa c partea receptoare va
ti c sunt date de primit, aa c va activa mecanismul ei de recepie. S 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 jos valori la un bit
a celei mai de sus valori. S lsm ca fiecare bit s rmn pe linie pentru o perioad de timp egal cu T, i la sfrit,
sau dup al 8-lea bit, s aducem unitatea logic "1" napoi pe linie ce va marca sfritul transmisiei unei date.
Protocolul ce tocmai l-am descris este numit n literatura profesional NRZ (Non-Return to Zero).

Unitatea serial folosit pentru a trimite date, dar numai prin trei linii

Pentru c avem linii separate de recepie i de transmitere, este posibil s recepionm i s transmitem date
(informaii) n acelai timp. Blocul aa numit full-duplex mode ce permite acest mod de comunicare este numit blocul
de comunicare serial. Spre 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. Dup 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. Datele circul din memorie prin bus
ctre locaia de trimitere, i de acolo ctre unitatea de recepie conform protocolului.

1.6 Unitatea timer

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/1_Poglavlje.htm (4 of 7)07.May.07 6:20:59 PM

Chapter 1 - Introduction to Microprocessors

Acum c avem comunicaia serial, putem recepiona, trimite i procesa date.

Totui, pentru noi ca s putem s l folosim n industrie mai avem nevoie de cteva 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 timerului este un contor liber (free-run) care este de fapt un registru a crui valoare numeric crete cu unu la intervale
egale, aa nct lundu-i valoarea dup intervalele T1 i T2 i pe baza diferenei lor s putem determina ct timp a
trecut. Acesta este o parte foarte important a microcontrolerului al crui control cere cea mai mare parte a timpului
nostru.

1.7 Watchdog-ul
nc un lucru ce necesit atenia noastr este funcionarea fr defecte a microcontrolerului n timpul funcionrii. S
presupunem c urmare a unei anumite interferene (ce adesea se ntmpl n industrie) microcontrolerul nostru se
oprete din executarea programului, sau i mai ru, ncepe s funcioneze incorect.

Bineneles, cnd aceasta se ntmpl cu un calculator, l resetm pur i simplu i va continua s lucreze. Totui, nu
exist buton de resetare pe care s-l apsm n cazul microcontrolerului care s rezolve astfel problema noastr. Pentru
a depi acest obstacol, avem nevoie de a introduce nc un bloc numit watchdog-cinele de paz. Acest bloc este de
fapt un alt contor liber (free-run) unde programul nostru trebuie s scrie un zero ori de cte ori se execut corect. n
caz c programul se "nepenete", nu se va mai scrie zero, iar contorul se va reseta singur la atingerea valorii sale
maxime. Aceasta va duce la rularea programului din nou, i corect de aceast dat pe toat durata. Acesta este un
element important al fiecrui program ce trebuie s fie fiabil fr supravegherea omului.

1.8 Convertorul Analog-Digital


Pentru c semnalele de la periferice sunt substanial diferite de cele pe care le poate nelege microcontrolerul (zero i
unu), ele trebuie convertite ntr-un mod care s fie neles de microcontroler. Aceast sarcin este ndeplinit de un
bloc pentru conversia analog-digital sau de un convertor AD. Acest bloc este responsabil pentru convertirea unei
informaii despre o anumit valoare analogic ntr-un numr binar i pentru a o urmri pe tot parcursul la un bloc CPU
aa ca blocul CPU s o poat procesa.

Astfel microcontrolerul este acum terminat, i tot ce mai rmne de fcut este de a-l pune ntr-o component
electronic unde va accesa blocurile interioare prin pinii exteriori. Imaginea de mai jos arat cum arat un
microcontroler n interior.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/1_Poglavlje.htm (5 of 7)07.May.07 6:20:59 PM

Chapter 1 - Introduction to Microprocessors

Configuraia fizic a interiorului unui microcontroler


Liniile subiri ce merg din interior ctre prile laterale ale microcontrolerului reprezint fire conectnd blocurile
interioare cu pinii capsulei microcontrolerului. Schema urmtoare reprezint seciunea central a microcontrolerului.

Pentru o aplicaie real, un microcontroler singur nu este de ajuns. n afar de microcontroler, avem nevoie de un
program pe care s-l execute, i alte cteva elemente ce constituie o interfa logic ctre elementele de stabilizare (ce
se va discuta n capitolele urmtoare).

1.9 Programul
http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/1_Poglavlje.htm (6 of 7)07.May.07 6:20:59 PM

Chapter 1 - Introduction to Microprocessors

Scrierea programului este un domeniu special de lucru al microcontolerului i este denumit "programare". S ncercm
s scriem un mic program ce l vom crea singuri i pe care oricine va fi n stare s-l neleag.
START
REGISTER1=MEMORY LOCATION_A
REGISTER2=MEMORY LOCATION_B
PORTA=REGISTER1 + REGISTER2
END
Programul adun coninutul a dou locaii de memorie, i vede suma lor la portul A. Prima linie a programului este
pentru mutarea coninutul locaiei de memorie "A" ntr-unul din regitri unitii de procesare centrale. Pentru c avem
nevoie i de celelalte date de asemenea, le vom muta de asemenea n cellalt registru al unitii de procesare centrale.
Urmtoarea instruciune instruiete unitatea de procesare central s adune coninutul celor doi regitri s trimit
rezultatul obinut la portul A, nct suma acestei adunri s fie vizibil pentru toat lumea de afar. Pentru o problem
mai complex, programul care s lucreze la rezolvarea ei va fi mai mare.
Programarea poate fi fcut n cteva limbaje ca Assembler, C i Basic care sunt cele mai folosite limbaje. Assembler
aparine limbajelor de nivel sczut ce sunt programate lent, dar folosesc cel mai mic spaiu n memorie i d cele mai
bune rezultate cnd se are n vedere viteza de execuie a programului. Pentru c este cel mai folosit limbaj n
programarea microcontrolerelor va fi discutat ntr-un capitol ulterior. Programele n limbajul C sunt mai uor de scris,
mai uor de neles, dar sunt mai lente n executare dect programele n Assembler. Basic este cel mai uor de
nvat, i instruciunile sale sunt cele mai aproape de modul de gndire a omului, dar ca i limbajul de programare C
este de asemenea mai lent dect Assembler-ul. n orice caz, nainte de a v hotr n privina unuia din aceste limbaje
trebuie s studiai cu atenie cerinele privind viteza de execuie, mrimea memoriei i timpul disponibil pentru
asamblarea sa.
Dup ce este scris programul, trebuie s instalm microcontrolerul ntr-un aparat i s-l lsm s lucreze. Pentru a face
aceasta trebuie s adugm cteva componente externe necesare pentru funcionarea sa. Mai nti trebuie s dm
via microcontrolerului prin conectarea sa la o surs (tensiune necesar pentru operarea tuturor instrumentelor
electronice) i oscilatorului al crui rol este similar inimii din corpul uman. Bazat pe ceasul su microcontrolerul execut
instruciunile programului. ndat ce este alimentat microcontrolerul va executa un scurt control asupra sa, se va uita
la nceputul programului i va ncepe s-l execute. Cum va lucra aparatul depinde de muli parametri, cel mai
important fiind priceperea dezvoltatorului de hardware, i de experiena programatorului n obinerea maximului din
aparat cu programul su.

Pagina anterioar

Coninut
Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/1_Poglavlje.htm (7 of 7)07.May.07 6:20:59 PM

Pagina urmtoare

Chapter 2 - Microcontroller PIC16F84

Microcontrolere PIC on-line


GRATIS!
Pagina anterioarfont>

Coninut

Pagina urmare

CAPITOLUL 2
Microcontrolerul PIC16F84
Introducere
CISC, RISC
Aplicaii
Clock-ul/instruciune
Pipelining
Semnificaia pinilor
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8

Generator-oscilator de ceas
Reset
Unitatea de procesare centralspan>
Porturi
Organizarea memoriei
treruperi
Timer-ul liber TMRO
Memoria de date EEPROM

Introducere
PIC16F84 aparine unei clase de microcontrolere de 8 bii cu arhitecturISC. Structura lui generalste artn schia
urmare reprezent blocurile de baz
Memoria program (FLASH)-pentru memorarea unui program scris.
Pentru cemoria ce este ftn tehnologia FLASH poate fi programat i tearsai mult decodataceasta face
microcontrolerul potrivit pentru dezvoltarea de component
EEPROM-memorie de date ce trebuie sie salvate c nu mai este alimentare.
Este mod uzual folositentru memorarea de date importante ce nu trebuie pierdute dacursa de alimentare se rerupe
dintr-o datDe exemplu, o astfel de datste o temperaturrestabilitn regulatoarele de temperaturnbsp;Dacn timpul
reruperii alimenti aceastate pierde, va trebui sacem ajustarea data revenirea alimenti. Astfel componenta
noastrierde privina auto-meninerii.
RAM-memorie de date folosite un program timpul executi sale.
RAM sunt memorate toate rezultatele intermediare sau datele temporare ce nu sunt cruciale la reruperea sursei de
alimentare.
PORTUL A i PORTUL B sunt conexiuni fizice re microcontroler i lumea de afar Portul A are 5 pini, iar portul B are
8 pini.
TIMER-UL LIBER (FREE-RUN) este un registru de 8 bii interiorul microcontrolerului ce lucreaz independent de
program. La fiecare al patrulea impuls de ceas al oscilatorului rementeazaloarea lui p ce atinge maximul (255), i
apoi epe sumere tot din nou de la zero. Dupum tim timpul exact dintre fiecare douncrement ale coninutului
timer-ului, poate fi folosit pentru mrarea timpului ce este foarte util la unele componente.
UNITATEA DE PROCESARE CENTRAL are rolul unui element de conectivitate re celelalte blocuri ale
microcontrolerului. Coordoneazucrul altor blocuri i executrogramul utilizatorului.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/2_01Poglavlje.htm (1 of 4)07.May.07 6:21:02 PM

Chapter 2 - Microcontroller PIC16F84

CISC, RISC
S-a spus deja cIC1684 are o arhitecturISC. Acest termen este adeseori gt literatura despre calculatoare, i are
nevoie sie explicat aici mai detaliu. Arhitectura Harvard este un concept mai nou dec von-Neumann. S-a nut din
nevoia de mre a vitezei microcontrolerului. arhitectura Harvard, bus-ul de date i bus-ul de adrese sunt separate.
Astfel este posibil un mare debit de date prin unitatea de procesare centrali bineeles, o vitezai mare de lucru.
Separarea programului de memoria de date face posibil ca mai departe instruciunile su trebuiascie cuvinte de 8
bii. PIC16F84 folosete 14 bii pentru instruciuni ceea ce permite ca toate instruciunile sie instruciuni dintr-un
singur cuv. Este de asemenea tipic pentru arhitectura Harvard sibai puine instruciuni decvon-Newmann i sib
nstruciuni executate uzual intr-un ciclu.
Microcontrolerele cu arhitecturarvard sunt de asemenea numite "microcontrolere RISC". RISC eamneduced
Instruction Set Computer. Microcontrolerele cu arhitectura von-Newmann sunt numite "microcontrolere CISC". Titlul
CISC eamnomplex Instruction Set Computer.
Pentru c PIC16F84 este un microcontroler RISC, aceasta eamnre un set redus de instruciuni, mai precis 35 de
instruciuni (de ex. microcontrolerele INTEL i Motorola au peste 100 de instruciuni). Toate aceste instruciuni sunt
executate r-un ciclu cu excepia instruciunilor jump i branch. Conform cu ceea ce spune constructorul, PIC16F84
ajunge la rezultate de 2:1 compresia cod i 4:1 vitezn comparaie cu alte microcontrolere de 8 bii din clasa sa.

Aplicaii
PIC16F84 se potrivete perfect multe folosine, de la industriile auto i aplicaiile de control casnice la instrumentele
industriale, senzori la distanmre electrice de ui i dispozitivele de securitate. Este de asemenea ideal pentru
cardurile smart ca i pentru aparatele alimentate de baterie din cauza consumului lui mic.
Memoria EEPROM face mai uoarplicarea microcontrolerelor la aparate unde se cere memorarea permanent diferitor
parametri (coduri pentru transmiare, viteza motorului, frecvenele receptorului, etc.). Costul sct, consumul sct,
mirea uoari flexibilitatea fac PIC16F84 aplicabil chiar i domenii unde microcontrolerele nu au fost prevte inte
(exemple: funcii de timer, ocuirea interfeei sistemele mari, aplicaiile coprocesor, etc.).
Programabilitatea sistemului acestui cip (reunu folosirea a doar doi pini transferul de date) face posibillexibilitatea
produsului, dup ce asamblarea i testarea au fost terminate. Aceastapabilitate poate fi folositentru a crea producie
pe linie de asamblare, de a agazina date de calibrare disponibile doar dupestarea finalsau poate fi folosit pentru a
uni programele la produsele finite.

Clock-ul /ciclul instruciune


http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/2_01Poglavlje.htm (2 of 4)07.May.07 6:21:02 PM

Chapter 2 - Microcontroller PIC16F84

Clock-ul sau ceasul este starter-ul principal al microcontrolerului, i este obinut dintr-o componente memorie extern
bsp; numitquot;oscilator". Dacr fi somparun microcontroler cu un ceas de timp, "clock-ul" nostru ar fi un tic pe
care l-am auzi de la ceasul de timp. acest caz, oscilatorul ar putea fi comparat cu arcul ce este rcit astfel ca ceasul
de timp seargDe asemenea, fora folositentru a oarce ceasul poate fi comparatu o surslectric
Clock-ul de la oscilator intrntr-un microcontroler prin pinul OSC1 unde circuitul intern al microcontrolerului divide
clock-ul 4 clock-uri egale Q1, Q2, Q3 i Q4 ce nu se suprapun. Aceste 4 clock-uri constituie un ciclu de o singur
nstruciune (numit de asemenea ciclu maintimpul cia instruciunea este executat
Executarea instruciunii epe prin apelarea unei instruciuni care este urmarea linie. Instruciunea este apelatin
memoria program la fiecare Q1 i este scrisn registrul de instruciuni la Q4. Decodarea i executarea instruciunii
sunt fte re urmarele cicluri Q1 i Q4. urmarea diagramutem vedea relaia dintre ciclul instruciunii i clock-ul
oscilatorului (OSC1) ca i aceea a clock-urilor interne Q1-Q4. Contorul de program (PC) reine informaia despre
adresa urmarei instruciuni.

Pipelining
Ciclul instruciune constin ciclurile Q1, Q2, Q3 i Q4. Ciclurile de instruciuni de apelare i executare sunt conectate
r-un aa fel pentru a face o apelare, este necesar un ciclu cu o instruciune, i mai este nevoie de nul pentru
decodare i executare. Totui, datorit pipelining-ului (folosirea unei pipeline-conducti este aducerea unei
instruciuni din memorie timp ce se executlta), fiecare instruciune este executatfectiv r-un singur ciclu. Dac
nstruciunea cauzeaz schimbare contorul programului, i PC-ul nu direcioneazpre urmarea ci spre alte adrese
(poate fi cazul cu subprogramele jumps sau calling), 2 cicluri sunt necesare pentru executarea unei instruciuni.
Aceasta este pentru cnstruciunea trebuie procesatin nou, dar de data aceasta de la adresa corectCiclul epe cu
clock-ul Q1, prin scrierea registrul instruction register (IR). Decodarea i executarea epe cu clock-urile Q2, Q3 i Q4.

TYC0 citete instruciunea MOVLW 55h (nu are importanspan> pentru noi ce instruciune a fost executatce explic
e ce nu este un dreptunghi desenat partea de jos).
TCYI executnstruciunea MOVLW 55h i citete MOVWF PORTB.
TCY2 executOVWF PORTB i citete CALL SUB_1.
TCY3 execut apelare a subprogramului CALL SUB_1, i citete instruciunea BSF PORTA, BIT3. Pentru cnstruciunea
aceasta nu este aceea de care avem nevoie, sau nu este prima instruciune a subprogramului SUB_1 a ci execuie
este urmarea ordine, instruciunea trebuie cititin nou. Acesta este un bun exemplu a unei instruciuni av nevoie
de mai mult de un ciclu.
TCY4 ciclul instruciunii este total folosit pentru citirea primei instruciuni din subprogram la adresa SUB_1.
http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/2_01Poglavlje.htm (3 of 4)07.May.07 6:21:02 PM

Chapter 2 - Microcontroller PIC16F84

TCY5 executrima instruciune din subprogram SUB_1 i citete urmarea.

Semnificaia pinilor
PIC16F84 are un numtotal de 18 pini. Cel mai adesea se gte r-o capsule tip DIP18 dar se poate g de asemenea
i r-o capsulMD care este mai mica cea DIP. DIP este prescurtarea de la Dual In Package. SMD este prescurtarea de
la Surface Mount Devices suger c gile pentru pini unde sntre acetia, nu sunt necesare lipirea acestui tip de
component/span>

Pinii microcontrolerului PIC16F84 au urmarea semnificaie:


Pin nr.1 RA2 Al doilea pin la portul A. Nu are funcie adiionalbr> Pin nr.2 RA3 Al treilea pin la portul A. Nu are
funcie adiionalbr> Pin nr.3 RA4 Al patrulea pin la portul A. TOCK1 care funcioneaz ca timer se gte de
asemenea la acest pin.
Pin nr.4 MCLR Reseteazntrarea i tensiunea de programare Vpp a microcontrolerului.
Pin nr.5 VSS Alimentare, mas/span>
Pin nr.6 RB0 Pin de zero la portul B. Intrarea /span>ntrerupere este o funcie adiional/span>
Pin nr.7 RB1 Primul pin la portul B. Nu are funcie adiional/span>
Pin nr.8 RB2 Al doilea pin la portul B. Nu are funcie adiional/span>
Pin nr.9 RB3 Al treilea pin la portul B. Nu are funcie adiional/span>
Pin nr.10 RB4 Al patrulea pin la portul B. Nu are funcie adiional/span>
Pin nr.11 RB5 Al cincilea pin la portul B. Nu are funcie adiionalbr> Pin nr.12 RB6 Al aselea pin la portul B. Linia de
'Clock' mod programare.
Pin nr.13 RB7 Al aptelea pin la portul B. Linia 'Data' mod programare.
Pin nr.14 Vdd Polul pozitiv al sursei.
Pin nr.15 OSC2 Pin desemnat pentru conectarea la un oscilator.
Pin nr.16 OSC1 Pin desemnat pentru conectarea la un oscilator.
Pin nr.17 RA2 Al doilea pin la portul A. Nu are funcie adiionalbr> Pin nr.18 RA1 Primul pin la portul A. Nu are
funcie adiional/span>

Pagina anterioarfont>

Coninut

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/2_01Poglavlje.htm (4 of 4)07.May.07 6:21:02 PM

Pagina urmare

Chapter 3 - Instruction Set

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

CAPITOLUL 3
Set Instruciuni
Introducere
Set de Instruciuni n Familia Microcontrolerului PIC16Cxx
Transfer Date
Aritmetic i logic
Operaii cu bii
Direcionarea debitului de program
Perioada de Execuie a Instruciunilor
Lista de cuvinte

Introducere
Am menionat deja c microcontrolerul nu este ca orice alt circuit integrat. Cnd ies din producie cele mai multe
circuite integrate sunt gata de a fi introduse n aparate ceea ce nu este cazul cu microcontrolerele. Pentru a "face"
microcontrolerul s ndeplineasc o sarcin, trebuie s-i spunem exact ce s fac, sau cu alte cuvinte trebuie s scriem
programul pe care microcontrolerul s-l execute. Vom descrie n acest capitol instruciunile care alctuiesc assemblerul, sau limbajul de programare cu nivel sczut pentru microcontrolerele PIC.

Set de Instruciuni n Familia Microcontrolerului PIC16Cxx


Setul complet care cuprinde 35 de instruciuni este dat n tabela urmtoare. Un motiv pentru un numr aa de mic de
instruciuni st n primul rnd n faptul c discutm despre un microcontroler RISC ale crui instruciuni sunt bine
optimizate avnd n vedere viteza de lucru, simplitatea arhitectural i compactitatea codului. Singurul neajuns este c
programatorul trebuie s controleze o tehnic "neconfortabil" n a utiliza un set modest de 35 de instruciuni.

Transfer de Date
Transferul de date ntr-un microcontroler este fcut ntre registrul de lucru (W) i un registru 'f' ce reprezint orice
locaie n RAM-ul intern (indiferent dac acetia sunt regitri speciali sau de scop general).
Primele trei instruciuni (a se vedea urmtorul tabel) fac ca o constant s fie nscris n registrul W (MOVLW este
prescurtarea pentru MOVe Literal to W), i ca datele s fie copiate din registrul W n RAM i datele din RAM s fie
copiate n registrul W (sau n aceeai locaie RAM, la care punct numai starea steguleului Z se schimb).
Instruciunea CLRF scrie constanta 0 n registrul 'f ', iar CLRW scrie constanta 0 n registrul W. Instruciunea SWAPF
schimb locurile cmpului de nibbles- buci de 4 bii n interiorul unui registru.

Aritmetic i logic
Din toate operaiile aritmetice, PIC ca majoritatea microcontrolerelor, accept doar scderea i adunarea. Steguleele
C, DC i Z sunt setate funcie de rezultatul adunrii sau scderii, dar cu o excepie: pentru c scderea se face ca o
adunare a unei valori negative, eticheta C este invers urmnd 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 PIC-ului are capabilitatea de a face operaiile AND (I), OR (SAU), EX-OR (SAU-EXCLUSIV),
complementare (COMF) i rotaie (RLF i RRF).
Instruciunile ce rotesc coninutul registrului mut biii n interiorul registrului prin eticheta C cu un spaiu la stnga
(ctre bitul 7), sau la dreapta (ctre bitul 0). Bitul ce "iese" din registru este scris n steguleul C, i valoarea
steguleului C este scris ntr-un bit al "prii opuse" a registrului.

Operaii cu bii

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/3_Poglavlje.htm (1 of 3)07.May.07 6:21:03 PM

Chapter 3 - Instruction Set

Instruciunile BCF i BSF fac setarea sau tergerea unui singur bit oriunde n memorie. Chiar dac pare o simpl
operaie, este executat n aa fel ca CPU citete mai nti ntregul byte, schimb un bit n el i apoi scrie ntregul byte
n acelai loc.

Direcionarea debitului unui program


Instruciunile GOTO, CALL i RETURN sunt executate n acelai fel ca i n celelalte microcontrolere, numai stiva este
independent de RAM-ul intern i limitat la opt nivele.
Instruciunea 'RETLW k' este identic cu instruciunea RETURN, cu excepia c nainte de a se ntoarce dintr-un
subprogram, constanta definit operandul de instruciuni este scris n registrul W. Aceast instruciune ne permite s
proiectm uor tabelele (listele) Look-up. Cel mai mult le folosim la determinarea poziiei datelor n tabelul nostru
adugnd-o la adresa la care ncep tabelele, i apoi citim datele din acea locaie (care este uzual gsit n memoria
program).
Tabelul poate fi format ca un subprogram ce const dintr-o serie de instruciuni 'RETLW k', unde constantele 'k' sunt
membri ai tabelului.

Scriem poziia unui membru al tabelului nostru n registrul W, i folosind instruciunea CALL apelm un subprogram
care creaz tabelul. Prima linie de subprogram ADDWF PCL, f adaug poziia unui membru al registrului W la adresa de
start a tabelului nostru, gsit n registrul PCL, i astfel obinem adresa datelor reale n memoria program. Cnd ne
ntoarcem dintr-un subprogram vom avea n registrul W coninutul unui membru al tabelului adresat. n exemplul
anterior, constanta 'k2' va fi n registrul W urmnd unei ntoarceri dintr-un subprogram.
RETFIE (RETurn From Interrupt - Interrupt Enable) este o ntoarcere dintr-o rutin de ntrerupere i difer de o
RETURN numai n aceea c seteaz automat bitul GIE (Global Interrupt Enable). La o ntrerupere, acest bit este
automat ters. Cnd ncepe ntreruperea, numai valoarea contorului de program este pus n vrful stivei. Nu este
prevzut memorarea automat a valorilor i strii registrului.
Jump-urile (salturile) condiionale sunt sintetizate n dou instruciuni: BTFSC i BTFSS. Funcie de starea bitului n
registrul 'f' ce este testat, instruciunile sar sau nu peste instruciunea de program urmtoare.

Perioada de Execuie a Instruciunii


Toate instruciunile sunt executate ntr-un ciclu cu excepia instruciunilor ramur condiionale dac condiia a fost
adevrat, sau dac coninutul contorului de program a fost schimbat de o anumit instruciune. n acest caz, execuia
cere dou cicluri de instruciuni, iar al doilea ciclu este executat ca NOP (No Operation-Fr operaii). Patru clock-uri
oscilator fac un ciclu instruciune. Dac folosim un oscilator cu frecvena de 4 MHz, timpul normal pentru execuia
instruciunii este 1 s, i n caz de branching-ramificare condiional, perioada de execuie este 2 s.

List de cuvinte
f
W
b
d
label
TOS
[]
<>

orice locaie de memorie ntr-un microcontroler


registru de lucru
poziie bit n registru 'f'
bit destinaie
grup de opt caractere ce marcheaz nceputul unei pri de program
vrful stivei
opiune
poziie bit n registru

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/3_Poglavlje.htm (2 of 3)07.May.07 6:21:03 PM

Chapter 3 - Instruction Set

*1 Dac portul I/O este operand surs, este citit starea pinilor microcontrolerului
*2 Dac aceast instruciune este executat n registrul TMRO i dac d=1, prescaler-ul asignat acelui timer va fi
automat ters
*3 Dac PC s-a modificat, sau rezultatul testului =1, instruciunea s-a executat n dou cicluri

Pagina anterioar

Coninut

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/3_Poglavlje.htm (3 of 3)07.May.07 6:21:03 PM

Pagina urmtoare

Chapter 4 - Assembly Language Programming

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

CAPITOLUL 4
Programare n Limbaj de Asamblare
Introducere
Un exemplu de program scris
Directive de control

4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8

definete
include
constant
variabil
set
equ
org
end

Instruciuni condiionale

4.9 if
4.10 else
4.11 endif
4.12 while
4.13 endw
4.14 ifdef
4.15 ifndef

Directive de date

4.16
4.17
4.18
4.19
4.20

cblock
endc
db
de
dt

Configurnd o directiv

4.21 _CONFIG
4.22 Processor

Fiiere create ca rezultat al translrii de program


Macro-uri

Introducere
Abilitatea de a comunica este de mare importan n orice domeniu. Totui, este posibil numai dac amndoi partenerii de
comunicare cunosc acelai limbaj, sau urmresc aceleai reguli n timpul comunicrii. Folosind aceste principii ca un punct de plecare,
putem de asemenea defini comunicarea ce are loc ntre microcontrolere i om. Limbajul pe care microcontrolerul i omul l folosesc
pentru a comunica este numit "limbaj de asamblare". Titlul nsui nu are un neles deosebit, i este analog numelor altor limbaje, de
ex. engleza i franceza. Mai precis, "limbajul de asamblare" este doar o soluie trectoare. Programele scrise n limbaj de asamblare
trebuie traduse ntr-un "limbaj de zero-uri i unu-uri" pentru ca un microcontroler s-l neleag. "Limbajul de asamblare" i
"assembler-ul" sau asamblorul sunt dou noiuni diferite. Primul reprezint un set de reguli folosite n scrierea unui program pentru un
microcontroler, iar cellalt este un program n computerul personal care traduce limbajul de asamblare ntr-un limbaj de zero-uri i
unu-uri. Un program ce este tradus n "zero-uri" i "unu-uri" este numit "limbaj main".

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/4_Poglavlje.htm (1 of 11)07.May.07 6:21:08 PM

Chapter 4 - Assembly Language Programming

Fizic, "Program" reprezint un fiier pe discul computerului (sau n memorie dac este citit ntr-un microcontroler), i este scris
conform cu regulile de asamblare sau ale altui limbaj pentru programarea microcontrolerului. Omul poate nelege pentru c este
constituit din semne i cuvinte ale alfabetului. Cnd se scrie un program, trebuie urmrite unele reguli pentru a se obine un efect
dorit. Un Translator interpreteaz fiecare instruciune scris n limbajul de asamblare ca o serie de zero-uri i unu-uri ce au o
semnificaie pentru logica intern a microcontrolerului.
S lum de exemplu instruciunea "RETURN" pe care microcontrolerul o folosete pentru a se ntoarce dintr-un sub-program.
Cnd asamblorul l traduce, obinem o serie de zero-uri i unu-uri pe care microcontroleul tie cum s-l interpreteze.
Exemplu: RETURN 00 0000 0000 1000
Similar propoziiei de mai sus, fiecare instruciune de asamblare este interpretat ca i corespunznd unei serii de zero-uri i unu-uri.
Locul unde aceast traducere a limbajului de asamblare se gsete , se numete un fiier de "execuie". Vom ntlni adesea numele
de fiier "HEX". Acest nume vine de la o reprezentare hexazecimal a acelui fiier, ca i de la apendicele "hex" din titlu, de ex. "run
through.hex". Odat ce este generat, fiierul de execuie este citit n microcontroler printr-un programator.
Un program n Limbaj de Asamblare este scris ntr-un program pentru procesarea textului (editorul) i este capabil de a produce un
fiier ASCII pe discul computerului sau n zone specializate ca MPLAB ce se va explica n capitolul urmtor.

Limbaj de Asamblare
Elementele de baz ale limbajului de asamblare sunt:

Label-uri sau Etichete


Instruciuni
Operanzi
Directive
Comentarii

Label-uri
Un Label este o desemnare textual (n general un cuvnt uor de citit) pentru o linie ntr-un program, sau seciunea unui program
unde micro-ul poate sri sau chiar nceputul unui set de linii a unui program. Poate fi folosit de asemenea pentru a executa
ramificare de program (ca Goto.) i programul poate chiar avea o condiie ce trebuie ndeplinit pentru ca instruciunea Goto s
fie executat. Este important pentru un label de a ncepe cu o liter a alfabetului sau cu o subliniere "_". Lungimea label-ului poate fi
de pn la 32 caractere. Este de asemenea important ca un label s nceap de la primul rnd.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/4_Poglavlje.htm (2 of 11)07.May.07 6:21:08 PM

Chapter 4 - Assembly Language Programming

Instruciuni
Instruciunile sunt deja definite prin folosirea unui microcontroler specific, aa c ne rmne doar s urmm instruciunile pentru
folosirea lor n limbajul de asamblare. Modul n care scriem o instruciune mai este numit "sintaxa" instruciunii. n exemplul urmtor
putem recunoate o greeal n scriere pentru c instruciunile movlp i goto nu exist pentru microcontrolerul PIC16F84.

Operanzi
Operanzii sunt elemente ale instruciunii pentru instruciunea ce este executat. Ei sunt de obicei regitri sau variabile sau
constante. Constantele sunt numite "literal-e". Cuvntul literal nseamn "numr".

Comentarii
Comentariul este o serie de cuvinte pe care programatorul le scrie pentru a face programul mai clar i mai uor de citit. Se plaseaz
dup o instruciune , i trebuie s nceap cu punct i virgul";".

Directive
O directiv este similar unei instruciuni, dar spre deosebire de o instruciune este independent de modelul microcontrolerului, i
reprezint o caracteristic a limbajului de asamblare nsui. Directivelor le sunt date uzual nelesuri de scop prin variabile i regitri.
De exemplu, LEVEL poate fi o desemnaie pentru o variabil n memoria RAM la adresa 0Dh. n felul acesta, variabila la acea adres
poate fi accesat prin desemnaia LEVEL. Aceasta este mult mai uor pentru un programator s neleag dect s ncerce s-i aduc
aminte c adresa 0Dh conine informaii despre LEVEL.

Un exemplu de program scris


Urmtorul exemplu ilustreaz un program simplu scris n limbaj de asamblare respectnd regulile de baz.
Cnd se scrie un program, nafar de regulile obligatorii, sunt de asemenea unele reguli ce nu sunt scrise dar trebuie urmate. Una din
ele s scrii numele programului la nceput, ce face programul, versiunea lui, date cnd a fost scris, tipul microcontrolerului pentru care
a fost scris, i numele programatorului.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/4_Poglavlje.htm (3 of 11)07.May.07 6:21:08 PM

Chapter 4 - Assembly Language Programming

Pentru c aceste date nu sunt importante pentru translatorul de asamblare, este scris ca i comentarii. Trebuie remarcat c un
comentariu ncepe totdeauna cu punct i virgul i c poate fi plasat ntr-un rnd nou sau poate urma dup instruciune. Este cel mai
bine inut n rndul al treilea pentru a face traseul uor de urmrit.
Dup deschiderea comentariului ce a fost scris, trebuie inclus directiva. Aceasta este artat n exemplul de mai sus.
Pentru a funciona corect, trebuie s definim civa parametri ai microcontrolerului ca:
- tipul oscilatorului
- dac timer-ul watchdog este pe deschis, i
- dac circuitul de resetare intern este activ.
Toate acestea sunt definite prin urmtoarea directiv:
_CONFIG _CP_OFF&_WDT_OFF&PWRTE_ON&XT_OSC
Cnd toate elementele necesare au fost definite, putem ncepe scrierea unui program. n primul rnd, este necesar de a determina
adresa de unde ncepe microcontrolerul, dup pornirea sursei de alimentare. Aceasta este (org 0x00). Adresa de la care ncepe
programul dac are loc o ntrerupere este (org 0x04). Pentru c acesta este un program simplu, va fi suficient s direcionm
microcontrolerul la nceputul programului cu o instruciune "goto Main".
Instruciunile gsite n Main sub-routine selecteaz bank-ul 1 al memoriei (BANK1) pentru a accesa registrul TRISIB, aa nct portul
B s fie declarat ca o ieire (movlw 0x00, movwf TRISIB).
Urmtorul pas este de a selecta bank-ul de memorie 0 i de plasa statusul unu-lui logic la portul B( movlw 0Xff, movwf PORTB ), i
astfel programul principal este terminat. Trebuie s facem o alt bucl unde microcontrolerul s fie inut ca s nu se "rtceasc" dac
se ntmpl o eroare. Pentru acest scop, se face o bucl infinit unde micro-ul este reinut n timp ce sursa este conectat. Necesarul
"sfrit" de la concluzia fiecrui program informeaz translatorul de asamblare c nu mai sunt instruciuni n program.

Directive de control
4.1 #DEFINE Schimb o bucat de text pentru o alta
Sintax:
#define<name> [<text ce schimb numele>]
Descriere:
De fiecare dat cnd apare <name> n program , va fi nlocuit cu <text ce schimb numele>.
Exemplu:
#define turned on 1
#define turned off 0

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/4_Poglavlje.htm (4 of 11)07.May.07 6:21:08 PM

Chapter 4 - Assembly Language Programming

Directive similare: #UNDEFINE, IFDEF,IFNDEF

4.2 INCLUDE Include un fiier adiional ntr-un program


Sintax:
#include <file_name>
#include "
Descriere:
O aplicaie a acestei directive are efect ca i cum ntregul fiier a fost copiat ntr-un loc unde directiva "include" a fost gsit. Dac
numele fiierului este n paranteze ptrate, avem de a face cu un fiier de sistem, i dac este n interiorul ghilimelelor de citare, avem
de a face cu fiier de utilizator. Directiva "include" contribuie la un traseu mai bun al programului principal.
Exemplu:
#include <regs.h>
#include "subprog.asm"

4.3 CONSTANT D o valoare numeric constant desemnrii textuale


Sintax:
Constant <name>=<value>
Descriere:
De fiecare dat cnd apare <name> n program, va fi nlocuit cu <value>.
Exemplu:
Constant MAXIMUM=100
Constant Length=30
Directive similare: SET, VARIABLE

4.4 VARIABLE D o valoare numeric variabil desemnrii textuale


Sintax:
Variable<name>=<value>
Descriere:
Folosind aceast directiv, desemnarea textual se nlocuiete cu o valoare particular. Difer de directiva CONSTANT n aceea c dup
aplicarea directivei, valoarea desemnrii textuale poate fi nlocuit.
Exemplu:
variable level=20
variable time=13
Directive similare: SET, CONSTANT

4.5 SET Definirea variabilei asamblorului


Sintax:
<name_variable>set<value>
Descriere:
Variabilei <name_variable> i este adugat expresia <value>. Directiva SET este similar lui EQU, dar cu directiva SET numele
variabilei poate fi redefinit urmnd o definiie.
Exemplu:
level set 0
length set 12
level set 45
Directive similare: EQU, VARIABLE

4.6 EQU Definind constanta asamblorului


Sintax:
<name_constant> equ <value>
Descriere:
To the name of a constant <name_constant> is added value <value>
Exemplu:
five equ 5
six equ 6
seven equ 7
Instruciuni similare: SET

4.7 ORG Definete o adres de unde programul este nmagazinat n memoria microcontrolerului
Sintax:
<label>org<value>

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/4_Poglavlje.htm (5 of 11)07.May.07 6:21:08 PM

Chapter 4 - Assembly Language Programming

Descriere:
Aceasta este cea mai frecvent folosit directiv. Cu ajutorul acestei directive definim unde o anumit parte a programului va fi n
memoria program.
Exemplu:
Start org 000
movlw
movwf
Primele dou instruciuni ce urmeaz dup prima directiv 'org' sunt memorate de la adresa 00, i celelalte dou de la adresa 10.

4.8 END Sfrit de program


Sintax:
end
Descriere:
La sfritul fiecrui program este necesar de a plasa directiva 'end' aa ca translatorul de asamblare s tie c numai sunt instruciuni
n program.
Exemplu:
.
.
movlw 0xFF
movwf PORTB
end

Instruciuni condiionale
4.9 IF Ramificare de program condiional
Sintax:
if<conditional_term>
Descriere:
Dac condiia n <conditional_term> este ndeplinit, parte a programului ce urmeaz directivei IF va fi executat. i dac nu este,
partea ce urmeaz directivei ELSE sau ENDIF va fi executat.
Exemplu:
if nivo=100
goto PUNI
else
goto PRAZNI
endif
Directive similare: #ELSE, ENDIF

4.10 ELSE 'IF' alternativ la blocul program cu termeni condiionali


Sintax:
Else
Descriere:
Folosit cu directiva IF ca o alterntiv dac termenul condiional este incorect.
Exemplu:
If time< 50
goto SPEED UP
else goto SLOW DOWN
endif
Instruciuni similare: ENDIF, IF

4.11 ENDIF Sfritul seciunii de program condiionale


Sintax:
endif
Descriere:
Directiva este scris la sfritul blocului condiional pentru translatorul de asamblare pentru a ti c este sfritul blocului condiional
Exemplu:
If level=100
goto LOADS
else
goto UNLOADS
endif
Directive similare: ELSE, IF
http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/4_Poglavlje.htm (6 of 11)07.May.07 6:21:08 PM

Chapter 4 - Assembly Language Programming

4.12 WHILE Execuia seciunii programului ct timp condiia este ndeplinit


Sintax:
while<condition>
.
endw
Descriere:
Liniile de program ntre WHILE I ENDW vor fi execuate ct timp condiia este ndeplinit. Dac condiia se oprete din a mai fi valid,
programul continu executarea instruciunilor urmnd linia ENDW. Numrul de instruciuni dintre WHILE i ENDW poate fi cel mult
100, i numrul de execuii 256.
Exemplu:
While i<10
i=i+1
endw

4.13 ENDW Sfritul prii condiionale a programului


Sintax:
endw
Descriere:
Instuciunea este scris la sfritul blocului WHILE condiional, aa ca translatorul de asamblare s tie c este sfritul blocului
condiional
Exemplu:
while i<10
i=i+1
endw
Directive similare: WHILE

4.14 IFDEF Execuia unei pri de program dac simbolul este definit
Sintax:
ifdef<designation>
Descriere:
Dac desemnarea <designation> este definit anterior (cel mai adesea prin instruciunea#DEFINE), instruciunile ce urmeaz sunt
executate pn ce nu se ajunge la directivele ELSE i ENDIF.
Exemplu:
#define test
.
ifdef test ;how the test is defined
......; instructions from these lines will execute
endif
Directive similare: #DEFINE, ELSE, ENDIF, IFNDEF, #UNDEFINE

4.15 IFNDEF Execuia unei pri de program dac simbolul este definit
Sintax:
ifndef<designation>
Descriere:
Dac desemnarea <designation> nu a fost definit anterior, sau dac definiia ei a fost tears cu directiva directive #UNDEFINE,
instruciunile ce urmeaz sunt executate pn ce nu se ajunge la directivele ELSE i ENDIF.
Exemplu:
#define test
..........
#undefine test
..........
ifndef test ;how the test is undefined
..... .; instructions from these lines will execute
endif
Directive similare: #DEFINE, ELSE, ENDIF, IFDEF, #UNDEFINE

Directive de Date
4.16 CBLOCK Definind un bloc pentru constantele numite
Sintax:
Cblock [<term>]
<label>[:<increment>], <label>[:<increment>]......
endc

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/4_Poglavlje.htm (7 of 11)07.May.07 6:21:08 PM

Chapter 4 - Assembly Language Programming

Descriere:
Directiva este folosit pentru a da valori constantelor numite. Fiecare termen ce urmeaz primete o valoare mai mare cu unu dect
precursorul lui. Dac parametrul <increment> este de asemenea dat, atunci valoarea dat n parametrul <increment> este adugat
constantei urmtoare. Valoarea parametrului <term> este valoarea de pornire. Dac nu este dat, este considerat a fi zero.
Exemplu:
Cblock 0x02
First, second, third ;first=0x02, second=0x03, third=0x04
endc
cblock 0x02
first : 4, second : 2, third ;first=0x06, second=0x08, third=0x09
endc
Directive similare: ENDC

4.17 ENDC Sfritul definiiei blocului constante


Sintax:
endc
Descriere:
Directiva este folosit la sfritul definiiei unui bloc de constante ca translatorul de asamblare s tie c nu mai sunt constante.
Directive similare: CBLOCK

4.18 DB Definind date de un byte


Sintax:
[<term>]db <term> [, <term>,.....,<term>]
Descriere:
Directiva rezerv un byte n memoria de program. Cnd sunt mai muli termeni ce au nevoie s li se desemneze un byte de fiecare, ei
vor fi desemnai unul dup altul.
Exemplu:
db 't', 00f, 'e', 's', 012
Instruciuni similare: DE, DT

4.19 DE Definind Byte-ul de memorie EEPROM


Sintax:
[<term>] de <term> [, <term>,....., <term>]
Descriere:
Directiva este folosit pentru definirea byte-ului de memorie EEPROM. Chiar dac a fost iniial intenionat doar pentru memoria
EEPROM, poate fi folosit pentru oricare alt locaie de memorie.
Exemplu:
org H'2100'
de "Version 1.0" , 0
Instruciuni similare: DB, DT

4.20 DT Definin tabelul de date


Sintax:
[<term>] dt <term> [, <term>,........., <term>]
Descriere:
Directiva genereaz seria RETLW de instruciuni, o instruciune de fiecare termen.
Exemplu:
dt "Message", 0
dt first, second, third
Directive similare: DB, DE

Configurnd o directiv
4.21 _CONFIG Setarea the biilor configuraionali
Sintax:
-config<term> or__config<address>,<term>
Descriere:
Sunt definite oscilatorul, aplicaia timer watchdog i circuitul intern de reset. nainte de folosirea acestei directive, procesorul trebuie
definit folosind directiva PROCESSOR.
Exemplu:

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/4_Poglavlje.htm (8 of 11)07.May.07 6:21:08 PM

Chapter 4 - Assembly Language Programming

_CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC
Directive similare: _IDLOCS, PROCESSOR

4.22 PROCESSOR Definind modeul microcontrolerului


Sintax:
Processor <microcontroller_type>
Descriere:
Instruciunea seteaz tipul microcontrolerului unde programarea este fcut.
Exemplu:
processor 16F84

Fiiere create ca rezultat al translrii programului


Ca un rezultat al procesului translrii unui program scris n limbaj de asamblare obinem fiiere ca:

Fiier de executare (Program_Name.HEX)


Fiier de erori program (Program_Name.ERR)
Fiier list (Program_Name.LST)

Primul fiier conine programul translat ce este citit n microcontroler prin programareare. Coninutul lui nu poate da orice informaie
programatorului, aa c nu ne vom mai referi la ele n continuare.
Al doilea fiier conine posibile erorile ce au fost fcute n procesul scrierii, i ca au fost observate de translatorul de asamblare n
timpul procesului de translare. Erorile pot fi descoperite de asemenea ntr-un fiier "list". Acest fiier este mai potrivit dei cnd
programul este mare i vederea fiierului "list" dureaz mai mult.
Al treilea fiier este cel mai folositor programatorului. n el sunt coninute multe informaii, ca informaii despre instruciunile de
poziionare i variabilele din memorie, sau semnalizarea erorii.
Exemplu unui fiier "list" pentru program urmeaz n acest capitol. n captul fiecrei pagini se gsesc informaii despre numele
fiierului, data cnd a fost translat i numrul paginii. Prima coloan conine o adres din memoria programului unde este plasat o
instruciune din acel rnd. A doua coloan conine o valoare a oricrei variabile definit de una din directive: SET, EQU, VARIABLE,
CONSTANT or CBLOCK. A treia coloan este rezervat pentru forma unei instruciuni translate pe care PIC-ul o execut. A patra
coloan conine instruciunile asamblorului i comentariile programatorului. Posibile erori vor apare ntre rnduri urmnd o linie n
care s-a produs eroarea.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/4_Poglavlje.htm (9 of 11)07.May.07 6:21:08 PM

Chapter 4 - Assembly Language Programming

La sfritul fiierului "list" este un tabel cu simboluri folosite n program. Un element folositor al fiierului "list" este un grafic de
utilizare a memoriei. La sfrit de tot, este o statistic de erori ca i cantitatea de program rmas.

Macro-uri
Macros-urile sunt elemente foarte folositoare n limbajul de asamblare. Ei ar putea fi pe scurt descrii ca "grup definit al utilizatorului
de instruciuni ce vor intra n programul de asamblare unde a fost apelat macro-ul". Este posibil de a scrie un program chiar fr
folosirea macro-urilor. Dar cu folosirea lor programul scris este mult mai uor de neles, n special dac mai muli programatori
lucreaz la acelai program. Macro-urile au acelai scop ca funcii ale limbajelor de programare complexe.
Cum s le scriem:
<label> macro [<argument1>,<argument2>,......<argumentN>]
........
.......
endm
Din modul n care sunt scrise, vedem c macro-urile pot accepta argumente, ceea ce este foarte folositor n programare. Cnd apare
argumentul n corpul macro-ului, va fi nlocuit cu valoarea <argumentN>.
Exemplu:

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/4_Poglavlje.htm (10 of 11)07.May.07 6:21:08 PM

Chapter 4 - Assembly Language Programming

Exemplu de mai sus arat un macro a crui scop este de a nlocui la portul B argumentul ARG1 ce a fost definit n timp ce a fost apelat
macro-ul. Folosirea lui n program ar fi limitat la scrierea unei linii: ON-_PORTB 0xFF , i astfel am plasa valoarea 0xFF la PORTB.
Pentru a folosi un macro n program, este necesar de a include fiierul macro n programul principal cu instruciunea include
"macro_name.inc". Coninutul unui program este copiat automat ntr-un 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 jos de linia #include"bank.inc".

Pagina anterioar

Coninut

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/4_Poglavlje.htm (11 of 11)07.May.07 6:21:08 PM

Pagina urmtoare

Chapter 5 - MPLAB

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

CAPITOLUL 5
MPLAB
Introducere
5.1 Instalarea pachetului de program MPLAB
5.2 Introducere n MPLAB
5.3 Alegerea modului de dezvoltare
5.4 Conceperea unui proiect
5.5 Proiectarea unui fiier de asamblare
5.6 Scrierea unui program
5.7 Simulator MPSIM
5.8 Toolbar

Introducere
MPLAB este un pachet de program Windows ce face scrierea i dezvoltarea unui program mai uoar. Poate fi descris cel mai bine ca
un mediu de dezvoltare pentru un limbaj de programare standard ce este intenionat pentru programarea unui computer PC. Unele
operaii ce erau fcute din linia de instruciuni cu un numr mare de parametri pn la descoperirea IDE-ului, "Integrated
Development Environment", sunt acum fcute mai uoare prin folosirea MPLAB. Totui, gusturile noasre difer, aa c chiar astzi unii
programatori prefer editoarele standard i compilatoarele din linia de instruciuni. n orice caz, programul scris este uor de citit, i
este disponibil un help bine documentat.

5.1 Instalarea programului -MPLAB

MPLAB const din cteva pri:


- Gruparea fiierelor aceluiai proiect ntr-un singur proiect (Project Manager)
- Generarea i procesarea unui program (Text Editor)
- Simulator de program scris folosit pentru simularea funcionrii programului n microcontroler.
nafar de acestea, sunt sisteme de susinere pentru produsele Microchip ca PICStart Plus i ICD (In Circuit Debugger). Pentru c
aceast carte nu acoper acestea, ele vor fi menionate doar ca opiuni.
Cerinele minime pentru computer pentru rularea lui MPLAB sunt:

Computer compatibil PC 486 sau mai recent


Microsoft Windows 3.1x sau Windows 95 i noile versiuni ale sistemului de operare Windows
VGA graphic card
8MB memorie (32MB recomandat)
20MB spaiu pe hard disc
Mouse

Pentru a porni MPLAB-ul trebuie s-l instalm. Instalarea este un proces de copiere a fiierelor de pe CD pe un hard disc al
computerului. Este o opiune pentru fiecare fereastr ce v ajut s v ntoarcei la cea precedent, aa ca erorile s nu prezinte o

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/5_01Poglavlje.htm (1 of 8)07.May.07 6:21:11 PM

Chapter 5 - MPLAB

problem sau s devin o experien stresant. Instalarea propriu-zis are loc ca la majoritatea programelor Windows. Mai nti apare
ecranul Windows, apoi putei alege opiunile urmate de instalarea propriu-zis, i n sfrit, apare mesajul care spune programul
dumneavoastr instalat este gata de start.
Pai pentru instalarea MPLAB:
1.
2.
3.
4.
5.
6.
7.

Pornii Windows-ul Microsoft


Punei the discul CD Microchip n CD ROM
Facei clic pe START n partea stng de jos a ecranului i alegei opiunea RUN
Facei clic pe BROWSE i selectai driver-ul CD ROM-ului computerului.
Gsii directorul numit MPLAB pe CD ROM-ul dumneavoastr
Facei clic pe SETUP.EXE i apoi pe OK .
Facei clic din nou pe OK n fereastra dumneavoastr RUN

Instalarea ncepe dup aceti apte pai. Urmtoarele imagini explic nelesul unor pai ai instalrii.

Ecran de bun venit la nceputul instalrii MPLAB


La nceput de tot, este necesar de a selecta acele componente MPLAB cu care vom lucra. Pentru c nu avem nici o component
hardware original Microchip ca programatori sau emulatoare, vom instala doar mediul MPLAB, Assembler-ul, Simulatorul i
instruciunile.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/5_01Poglavlje.htm (2 of 8)07.May.07 6:21:11 PM

Chapter 5 - MPLAB

Selectarea componentelor mediului de dezvoltare MPLAB


ntruct se estimeaz c vei lucra cu Windows 95 (sau un sistem mai nou ), tot ce este n legtur cu sistemul DOS de operare a fost
scos n timpul seleciei limbajului de asamblare. Totui dac dorii s lucrai n DOS, trebuie s deselectai toate opiunile referitoare
la Windows, i s alegei componentele potrivite pentru DOS.

Selectarea assembler-ului i a sistemului de operare


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

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/5_01Poglavlje.htm (3 of 8)07.May.07 6:21:11 PM

Chapter 5 - MPLAB

Alegerea directorului unde MPLAB va fi instalat

Utilizatorii care au avut deja MPLAB (o versiune mai veche dect aceasta) au nevoie de urmtoarea opiune.
Scopul acestei opiuni este de a salva copii a tuturor fiierelor ce sunt modificate n timpul unei treceri la o nou versiune MPLAB. n
cazul nostru ar trebui s lsm selectat NO din cauza presupunerii c aceasta este prima instalare a MPLAB-ului n computerul
dumneavoastr.

Opiune pentru utilizatorii care instaleaz o versiune nou peste o versiune deja instalat de MPLAB
Start meniu este un grup de pointeri de program, i este selectat prin clic pe opiunea START n colul de jos stng al ecranului.
Pentru c MPLAB se va porni de aici, trebuie s lsm aceast opiune aa cum este.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/5_01Poglavlje.htm (4 of 8)07.May.07 6:21:11 PM

Chapter 5 - MPLAB

Adugarea MPLAB la start menu


Locaia care va fi menionat de aici ncolo, are de a face cu o parte a MPLAB n a crui explicaie nu este nevoie s intrm. Prin
selectarea unui director special, MPLAB va ine toate fiierele n conexiune cu linker-ul ntr-un director separat.

Determinnd un director pentru fiierele linker-ului


Orice program Windows are fiierele de sistem n mod uzual memorate ntr-un director coninnd programul Windows. Dup un numr
de instalri diferite. Directorul Windows devine supraaglomerat i prea mare. Astfel, unele programe permit ca fiierele lor de sistem
s fie inute n aceiai directori cu programele. MPLAB este un exemplu de asemenea program, i trebuie selectat opiunea de jos.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/5_01Poglavlje.htm (5 of 8)07.May.07 6:21:11 PM

Chapter 5 - MPLAB

Selectnd un director pentru fiierele de sistem


Dup paii de mai sus, instalarea ncepe fcnd clic pe 'Next'.

Ecran anterior instalrii


Instalarea nu dureaz mult, i procesul copierii fiierelor poate fi vzut ntr-o fereastr mic n colul din dreapta ecranului.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/5_01Poglavlje.htm (6 of 8)07.May.07 6:21:11 PM

Chapter 5 - MPLAB

Desfurarea instalrii
Dup 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. Dac s-au deschis fiierele text (Readme.txt), ele trebuie nchise.

Informaii de ultim moment privind versiunile programului i coreciile


Fcnd clic pe Finish, instalarea MPLAB este terminat.

Pagina anterioar

Coninut

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/5_01Poglavlje.htm (7 of 8)07.May.07 6:21:11 PM

Pagina urmtoare

Chapter 5 - MPLAB

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/5_01Poglavlje.htm (8 of 8)07.May.07 6:21:11 PM

Chapter 6 - Samples

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

CAPITOLUL 6
Mostrele
Introducere
6.1 Alimentarea microcontrolerului
6.2 Macrouri folosite n programe

Macrourile WAIT, WAITX


Macroul PRINT

6.3 Exemple

Light emitting diodes LEDuri


Tastatura
Optocuploare
Izolarea galvanic a liniilor de intrare folosind optocuploare
Izolarea galvanic a liniilor de ieire folosind optocuploare
Relee
Generarea unui sunet
Regitri de deplasare
Registru de deplasare de intrare
Registru de deplasare de ieire
Afioare 7segmente (multiplexare)
Afior LCD
Convertor AD pe 12 bii
Comunicaia serial

Introducere
Exemplele oferite n aceast capitol v vor arta cum s conectai microcontrolerul PIC cu alte componente sau dispozitive periferice
cnd producei propriul sistem bazat pe microcontroler. Fiecare exemplu conine descriere detaliat a prii hardware cu schema
electric i comentarii despre program. Toate programele pot fi luate direct din prezentarea de pe internet MikroElektronika.

Alimentarea microcontrolerului
n general, alimentarea corect este de o importan maxim pentru funcionarea corect a sistemului cu microcontroler. Poate fi uor
comparat cu respiraia unui om n aer. Este mai probabil ca un om care respir n aer curat va tri mai mult dect un om care
locuiete ntrun mediu poluat. Pentru 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 PIC, tensiunea de alimentare ar trebui s se ncadreze ntre 2.0V i 6.0V pentru toate versiunile. Cea mai simpl
soluie este folosirea stabilizatorului de tensiune LM7805 care ofer tensiune stabil de +5V la ieire. O astfel de surs este ilustrat n
figura de mai jos.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_01Poglavlje.htm (1 of 2)07.May.07 6:21:12 PM

Chapter 6 - Samples

Pentru a funciona corect sau pentru a avea o tensiune stabilizat la 5V la ieire (pinul 3), tensiunea de intrare pe pinul 1 la LM7805 ar
trebui s fie ntre 7V i 24V. n funcie de curentul consumat de montaj vom folosi tipul corespunztor de stabilizator de tensiune
LM7805. Sunt diferite versiuni de LM7805. Pentru consum de curent de pn la un 1A ar trebui s folosim versiunea n capsul TO-220
cu posibilitatea de rcire adiional. Dac consumul total este de 50mA, putem s folosim 78L05 (versiune de stabilizator n capsul
mic TO-92 pentru curent de pn la 100mA).

Pagina anterioar

Coninut

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_01Poglavlje.htm (2 of 2)07.May.07 6:21:12 PM

Pagina urmtoare

Appendix A - Instruction Set

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

Anexa A

Set Instruciuni
Introducere
Anexa conine toate instruciunile prezentate separat cu exemple pentru folosirea lor. Sintaxa, descrierea i efectele ei
asupra strii biilor sunt pentru fiecare instruciune.

A.1 MOVLW
A.2 MOVWF
A.3 MOVF
A.4 CLRW
A.5 CLRF
A.6 SWAPF
A.7 ADDLW
A.8 ADDWF
A.9 SUBLW
A.10 SUBWF
A.11 ANDLW
A.12 ANDWF
A.13 IORLW
A.14 IORWF
A.15 XORLW
A.16 XORWF
A.17 INCF
A.18 DECF
A.19 RLF
A.20 RRF
A.21 COMF
A.22 BCF
A.23 BSF
A.24 BTFSC
A.25 BTFSS
A.26 INCFSZ
A.27 DECFSZ
A.28 GOTO
A.29 CALL
A.30 RETURN
A.31 RETLW
A.32 RETFIE
A.33 NOP
A.34 CLRWDT
A.35 SLEEP

A.1 MOVLW

Scrie constanta n registrul W

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/A_Dodatak.htm (1 of 18)07.May.07 6:21:19 PM

Appendix A - Instruction Set

A.2 MOVWF

A.3 MOVF

Copiaz W n f

Copiaz f n d

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/A_Dodatak.htm (2 of 18)07.May.07 6:21:19 PM

Appendix A - Instruction Set

A.4 CLRW

A.5 CLRF

Scrie 0 n W

Scrie 0 n f

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/A_Dodatak.htm (3 of 18)07.May.07 6:21:19 PM

Appendix A - Instruction Set

A.6 SWAPF

Copiaz the bucelele din f n d n diagonal

A.7 ADDLW

Adun W la o constant

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/A_Dodatak.htm (4 of 18)07.May.07 6:21:19 PM

Appendix A - Instruction Set

A.8 ADDWF

Adun W la f

A.9 SUBLW

Scade W dintr-o constant

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/A_Dodatak.htm (5 of 18)07.May.07 6:21:19 PM

Appendix A - Instruction Set

A.10 SUBWF

Scade W din f

A.11 ANDLW

W AND(I) logic cu o constant

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/A_Dodatak.htm (6 of 18)07.May.07 6:21:19 PM

Appendix A - Instruction Set

A.12 ANDWF

A.13 IORLW

W AND(I) logic cu f

W OR(SAU) logic cu o constant

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/A_Dodatak.htm (7 of 18)07.May.07 6:21:19 PM

Appendix A - Instruction Set

A.14 IORWF

W OR(SAU) logic cu f

A.15 XORLW

W OR(SAU) logic exclusiv cu o constant

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/A_Dodatak.htm (8 of 18)07.May.07 6:21:19 PM

Appendix A - Instruction Set

A.16 XORWF

A.17 INCF

W logic exclusiv OR(SAU) cu f

Incrementeaz f

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/A_Dodatak.htm (9 of 18)07.May.07 6:21:19 PM

Appendix A - Instruction Set

A.18 DECF

A.19 RLF

Decrementeaz f

Rotete f la stnga prin CARRY

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/A_Dodatak.htm (10 of 18)07.May.07 6:21:19 PM

Appendix A - Instruction Set

A.20 RRF

A.21 COMF

Rotete f la dreapta prin CARRY

Complement f

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/A_Dodatak.htm (11 of 18)07.May.07 6:21:19 PM

Appendix A - Instruction Set

A.22 BCF

Reseteaz bitul b n f

A.23 BSF

Seteaz bitul b n f

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/A_Dodatak.htm (12 of 18)07.May.07 6:21:19 PM

Appendix A - Instruction Set

A.24 BTFSC

Testeaz bitul b n f, sari dac = 0

A.25 BTFSS

Testeaz bitul b n f, sari dac =1

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/A_Dodatak.htm (13 of 18)07.May.07 6:21:19 PM

Appendix A - Instruction Set

A.26 INCFSZ

Incrementeaz f, sari dac=0

A.27 DECFSZ

Decrementeaz f, sari dac = 0

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/A_Dodatak.htm (14 of 18)07.May.07 6:21:19 PM

Appendix A - Instruction Set

A.28 GOTO

A.29 CALL

Salt la adres

Apeleaz un program

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/A_Dodatak.htm (15 of 18)07.May.07 6:21:19 PM

Appendix A - Instruction Set

A.30 RETURN

ntoarcere dintr-un subprogram

A.31 RETLW

ntoarcere dintr-un subprogram cu constant n W

A.32 RETFIE

ntoarcere dintr-o rutin de ntrerupere

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/A_Dodatak.htm (16 of 18)07.May.07 6:21:19 PM

Appendix A - Instruction Set

A.33 NOP

Fr operaii

A.34 CLRWDT

A.35 SLEEP

Iniializeaz timer-ul watchdog

Modul stand by

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/A_Dodatak.htm (17 of 18)07.May.07 6:21:19 PM

Appendix A - Instruction Set

Pagina anterioar

Coninut

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/A_Dodatak.htm (18 of 18)07.May.07 6:21:19 PM

Pagina urmtoare

Appendix B - Numeric Systems

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

Anexa B
Sisteme numerice
Introducere
B.1 Sistem numeric zecimal
B.2 Sistem numeric binar
B.3 Sistem numeric hexazecimal
Concluzie

Introducere
A fost dificil pentru oameni s accepte faptul c unele lucruri difer de ei i de modul lor de gndire. Acesta este probabil unul din
motivele pentru care sistemele numerice care difer de cele zecimale sunt nc greu de neles. Totui, fie c le vrem ori nu, realitatea
este diferit. Sistemul 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.
Fiecare sistem numeric se bazeaz pe o fundaie. La un sistem numeric zecimal, baza este 10, la binar 2, i la sistemul hexazecimal
16. Valoarea fiecrui zecimal este determinat de poziia lui n relaie cu ntreg numrul reprezentat n sistemul numeric dat. Suma
valorilor fiecrui zecimal d valoarea ntregului numr. Sistemele binare i hexazecimale sunt n special interesante pentru subiectul
acestei cri. n 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 Sistem numeric zecimal


Sistemul numeric zecimal este definit de baza lui 10 i de spaiul zecimal care este numrat de la dreapta la stnga, i const din
numerele 1, 2, 3, 4, 5, 6, 7, 8, 9. Aceasta nseamn c numrul din captul din stnga a sumei totale este multiplicat cu 1, urmtorul
cu 10, urmtorul cu 100, etc.
Exemplu:

Operaiile de adunare, scdere, mprire i nmulire ntr-un sistem numeric zecimal sunt folosite ntr-un fel care ne este deja
cunoscut, aa c nu-l vom discuta mai departe.

B.2 Sistem numeric binar


Sistemele numerice binare difer n multe aspecte de sistemul zecimal pe care l folosim n viaa de zi cu zi. Baza lui numeric este 2,
i fiecare numr poate avea doar dou valori, '1' sau '0'. Sistemul numeric binar este folosit n calculatoare i microcontrolere pentru
c este de departe mai potrivit pentru procesare dect un sistem zecimal. Uzual, numrul binar const din numerele 8, 16, sau 32, i
nu este important avnd n vedere coninutul de a discuta de ce. Este destul acum de a accepta aceast informaie.
Exemplu:
10011011 numr binar cu 8 digii

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/B_Dodatak.htm (1 of 4)07.May.07 6:21:21 PM

Appendix B - Numeric Systems

Pentru a nelege logica numerelor binare, vom considera un exemplu. S spunem c avem un mic dulpior cu patru sertare, i c
trebuie s spunem cuiva s ne aduc ceva din unul din sertare. Nimic nu este mai simplu, vom spune partea stng, jos (sertarul), i
sertarul dorit este clar definit. Totui, dac ar fi trebuit s facem aceasta fr folosirea instruciunilor ca stnga, dreapta, jos, sus,
etc., atunci am fi avut o problem. Sunt multe soluii la aceast problem, dar noi ar trebui s cutm una care este cea mai benefic
i practic! S desemnm rndurile cu A, i tipurile cu B. Dac A=1, se refer la rndul de sus a sertarelor, i pentru A=0, rndul de
jos. Similar cu coloanele, B=1 reprezint coloana stng, i B=0, dreapt (urmtoarea imagine). Acum este deja mult mai uor de
a explica din care sertar avem nevoie de ceva. Trebuie doar s formulm una din cel patru combinaii: 00, 01, 10 sau 11.
Aceast caracteristic denumind fiecare sertar individual nu este dect reprezentarea numeric binar, sau conversia numerelor
comune dintr-o form zecimal ntr-una binar. Cu alte cuvinte, referirile ca "primul, al doilea, al treilea i al patrulea" sunt

schimbate cu "00, 01, 10 i 11".

Ceea ce ne rmne 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.
Exemplu:

Dup cum putei vedea, convertirea unui numr binar ntr-unul zecimal se face prin calcularea expresiei din partea stng. Depinznd
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. S presupunem mai departe c n fiecare sertar sunt cteva bile: 2 n primul, 4 n al doilea
sertar, 7 n al treilea i 3 n al patrulea sertar. S spunem de asemenea celui care deschide sertarele s foloseasc reprezentarea
binar ca rspuns. n aceste condiii, ntrebarea ar fi: "Cte bile sunt n 01?", i rspunsul va fi: "Sunt 100 de bile n 01." Trebuie
remarcat c att ntrebarea ct i rspusul sun foarte clare chiar dac nu am folosit nume standard. Trebuie mai departe de observat
c pentru numerele zecimale de la 0 la 3 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 0 la7 este suficient s avem trei cifre, pentru numere de la 0 la 15, patru, etc.
Mai simplu spus, cel mai mare numr ce poate fi reprezentat de o cifr binar este cel obinut cnd baza 2 este gradat cu un numr
de cifre binare ntr-un numr binar i astfel numrul derivat este decrementat cu unu.
Exemplu:

Aceasta nseamn c este posibil de a se reprezenta numere zecimale de la 0 la 15 cu 4 cifre binare, incluznd numerele '0' i '15', sau
16 valori diferite.
Operaiile ce exist n sistemul numeric zecimal exist de asemenea ntr-un sistem binar. Din motive de claritate i descifrabilitate,
vom revedea adunarea i scderea doar n acest capitol.
Regulile de baz care se aplic adunrii binare sunt:

Adunarea se face aa nct cifrele din aceeai poziie nmeric sunt adunate, similar sistemuluii numeric zecimal. Dac ambii digii de
adunat sunt zero, suma lor rmne zero, i dac sunt '0' i '1', rezultatul este '1'. Suma a doi de unu d zero, dar cu transferarea unui
'1' la poziia de mai sus care este adunat cifrelor din acea poziie.
Exemplu:

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/B_Dodatak.htm (2 of 4)07.May.07 6:21:21 PM

Appendix B - Numeric Systems

Putem verifica dac rezultatul este corect transfernd aceste numere n sistemul numeric zecimal i fcnd adunarea n el. La transfer
obinem valoarea 10 ca primul numr, valoarea 9 ca al doilea, i valoarea 19 ca sum. Astfel am dovedit c operaia s-a fcut corect.
Probleme apar cnd suma este mai mare dect ceea ce poate fi reprezentat de un numr binar cu un numr dat de cifre binare. Se pot
aplica diferite soluii atunci, una este s cretem numrul de cifre binare n sum ca n exemplul anterior.
Scderea, ca i adunarea se face pe acelai principiu. Rezultatul scderii dintre doi de zero, sau doi de unu rmne zero. Cnd scdem
unu din zero, trebuie s mprumutm unu de la cifra binar care este pe o poziie mai sus n numrul binar.
Exemplu:

Verificnd rezulatul cum am fcut i cu adunarea, cnd translm aceste numere binare obinem numerele zecimale 10 i 9. Diferena
lor corespunde numrului 1 care este ceea ce obinem din scdere.

B.3 Sistem numeric hexazecimal


Sistemul numeric hexazecimal are numrul 16 ca baz a sa. Pentu c baza unui sistem numeric este 16, sunt 16 cifre care se pot gsi
ntr-un numr hexazecimal. Aceste cifre sunt "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F". Literele A, B, C, D, E i F nu sunt altceva
dect valorile 10, 11, 12, 13, 14 i 15. Ele 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 hexazecimale.
Exempul:

Uzual, numrul hexazecimal este scris cu un semn "$" sau "0x" nanitea lui, pentru a evidenia sistemul numeric. Astfel, numrul A37E
ar fi scris mult mai corect ca $A37E sau 0xA37E. Pentru a transla un numr hexazecimal ntr-un sistem numeric binar nu este necesar
de a face nici un calcul ci simpla schimbare de cifre hexazecimale cu cifre binare. Pentru c valoarea maxim a numrului hexazecimal
este 15, aceasta nseamn c este suficient s se foloseasc 4 cifre binare pentru o cifr hexazecimal.
Exempul:

Veificnd, sau transfernd ambele numere ntr-un sistem numeric zecimal, obinem numrul 228 ceea ce dovedete acurateea
aciunii noastre.
Pentru a obine un zecimal echivalent a unui numr hexazecimal, trebuie s nmulim fiecare cifr a unui numr cu numrul 16 care
este gradat prin poziia acelei cifre n numrul hexazecimal.
Exempul:

Adunarea, ca i n precedetele dou exemple, se face ntr-o manier similar.


Exempul:

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/B_Dodatak.htm (3 of 4)07.May.07 6:21:21 PM

Appendix B - Numeric Systems

Trebuie s adugm cifrele corespunztoare ale numrului; i, dac suma lor este mai mare ca 16, trebie s scriem numrul '0' acolo.
Valoarea peste 16 trebuie adunat urmtoarelor dou cifre mai mari n valoare. Verificnd, obinem 14891 ca prim numr, i al doilea
este 43457. Suma lor este 58348, care este numrul $E3EC cnd este transferat n sistemul numeric zecimal. Scderea este un
proces identic celor dou sisteme numerice anterioare. Dac numrul pe care l scdem este mai mic, mprumutm din urmtorul loc al
valorii mai mari.
Exemplu:

Verificnd rezultatul, obinem valorile 11590 pentru prmul numr i 5970 pentru al doilea, cnd diferena lor este 5620, ceea ce
coresponde numrului $15F4 dup transferul ntr-un sistem numeric zecimal.

Concluzie
Sistemul numeric binar este nc cel mai folosit, cel zecimal cel mai uor de neles, iar cel hexazecimal 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.

Pagina anterioar

Coninut

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/B_Dodatak.htm (4 of 4)07.May.07 6:21:21 PM

Pagina urmtoare

Appendix C - Glossary

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

Anexa C
Glosar
Introducere

Microcontroler
Pin I/O
Software
Hardware
Simulator
ICE
Emulator EPROM
Assembler

Fiier HEX
Fiier List
Fiier Source

Debugging
ROM, EPROM, EEPROM, FLASH, RAM
Adresarea
ASCII
Carry
Code
Byte, Kilobyte, Megabyte
Flag

Vector ntreruperi i ntreruperi

Programator
Produs

Introducere
Pentru c toate domeniile de activitate ale omului sunt n mod obinuit bazate pe termeni adecvai i deja adoptai
(prin care au aprut alte noiuni i definiii), tot aa n domeniul microcontrolerelor putem selecta civa termeni
frecvent folosii. Ideile sunt adesea conectate a c nelegerea corect a unei noiuni este necesar pentru a deveni
familiarizai cu una sau mai alte idei.

Microcontroler
Microprocesor cu periferice ntr-o singur component electronic.

Pin I/O
Pin de conecor extern al microcontrolerului care poate fi configurat ca intrare sau ca ieire. n cele mai multe cazuri
pinul I/O activeaz microcontrolerul pentru a comunica, controla sau citi informaia.

Software
Informaia de care mocrocontrolerul are nevoie pentru a funciona. Sotware-ul nu poate avea erori dac vrem ca
programul i dispozitivul s funcioneze corect. Software-ul poate fi scris n diferite limbaje ca: Basic, C, Pascal sau
assembler. Fizic, el este un fiier pe un disc de calculator.

Hardware
Mirocontrolerul, memoria, sursa, circuitele de semnal i toate componentele conectate cu microcontrolerul.
Cellalt mod de a-l vedea (n special dac nu funcioneaz) este, c, hardware-ul este ceva ce putei atinge.

Simulator
http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/C_Dodatak.htm (1 of 3)07.May.07 6:21:23 PM

Appendix C - Glossary

Pachet software pentru PC care simuleaz funcionarea intern a microcontrolerului. Este ideal pentru verificarea
rutinelor software i a tuturor prilor codului care nu au conexiuni de supra cerere cu exteriorul. Opiunile sunt
instalate pentru a supraveghea codul, micarea n program napoi i nainte i pas cu pas, i debugging-ul.

ICE
ICE (In Circuit Emulator), emulator intern, parte foarte folositoare a echipamentului care conecteaz un PC n locul unui
microcontroler la un dispozitiv care este n dezvoltare. Permite software-ului de a funciona la un calculator PC, dar s
apar ca i cum un microcontroler real exist n dispozitiv. ICE v permite s v micai n program n timp real, pentru
a vedea ce se ntmpl n microcontroler i cum comunic cu exteriorul.

Emulator EPROM
Emulatorul EPROM este un dispozitiv care nu emuleaz ntregul microcontroler ca emulatorul ICE, ci emuleaz doar
memoria lui. Este cel mai mult folosit la microcontrolerele ce au memorie extern. Prin folosirea lui evitm tergerea i
scrierea constant a memoriei EPROM.

Assembler
Pachet software care transleaz codul surs ntr-un cod pe care microcontrolerul l poate nelege. Conine o seciune
pentru descoperirea erorilor. Aceast parte este folosit cnd depanm un program de erorile fcute cnd programul a
fost scris.

Fiier HEX
Acesta este un fiier fcut de translatorul assembler cnd se transleaz un fiier surs, i are o form "neleas" de
microcontroler. O continuare a fiierului este uzual File_name.HEX de unde vine numele fiierului HEX.

Fiier List
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. Este un fiier foarte util pentru a urmri erorile n program. Extensia fiierului este LIST de unde vine i
numele lui.

Fiier Source
Fiier scris n limbjul neles de om i de translatorul assembler. Prin translarea fiierului surs, obinem fiierele HEX
i LIST.

Debugging
Eroare fcut n scrierea programului, eroare de care nu suntem n cunotiin. Erorile pot fi chiar simple ca erori de
tastare, i chiar complexe ca folosirea incorect a limbajului programului. Assembler-ul va gsi majoritatea acestor
erori i le va raporta fiierului '.LST'. Alte erori se vor cuta prin ncercarea i urmrirea funcionrii dispozitivului.

ROM, EPROM, EEPROM, FLASH, RAM


Tipuri de memorie pe care le ntlnim la folosirea microcontrolerului. Prima nu poate fi tears, ceea ce ai scris n ea
rmne 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
EEPROM, 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 cnd se ntrerupe alimentarea. Astfel, programul nu este memorat
n ea, dar servete pentru diferite variabile i inter-rezultate.

Adresarea
Determin i asigneaz unele locaii de memorie.

ASCII
Prescurtare pentru "American Standard Code for Information Interchange-Codul Standard American pentru Interschimb Informaii".
Este un tip de cod larg acceptat unde fiecare numr i liter au codul lor de opt bii.

Carry
Bit de transfer conectat cu operaii aritmetice.

Code
Fiier sau seciune a unui fiier ce conine instruciuni de program.

Byte, Kilobyte, Megabyte


Termen desemnnd cantitatea de informaie. Unitatea de baz este un byte, i are 8 bii. Kilobyte-ul are 1024 bytes,
i un megabyte are 1024 kilobytes.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/C_Dodatak.htm (2 of 3)07.May.07 6:21:23 PM

Appendix C - Glossary

Flag
Bii din registrul de stare. Prin activarea lor, programatorul este informat de unele aciuni. Programul activeaz
rspunsul lui dac este necesar.

Vector ntrerupere sau ntreruperi


Locaie n memoria microcontrolerului. Microcontrolerul ia din aceast locaie informaia despre o seciune a
programului ce trebuie executat ca un rspuns la unele evenimente de interes ale programatorului i dispozitivului.

Programator
Dispozitiv ce face posibil scrierea software-ului n memoria microcontrolerului, permind astfel microcontrolerului s
lucreze independent. Const din seciunea hardware uzual conectat cu unul din porturi i seciune software folosit de
calculator ca un program.

Produs
Dezvoltarea produsului este o combinaie de succes i experien. Termenele 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.
Cnd 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 algoritm:

Pagina anterioar

Coninut

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/C_Dodatak.htm (3 of 3)07.May.07 6:21:23 PM

Pagina urmtoare

Chapter 2 - Microcontroller PIC16F84

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

2.1 Generator de ceas oscilator


Circuitul oscilator este folosit pentru a da microcontrolerului un ceas-clock. Ceasul este necesar pentru ca
microcontrolerul s execute programul sau instruciunile din program.

Tipuri de oscilatoare
PIC16F84 poate lucra cu patru configuraii diferite de oscilator. Pentru c configuraiile cu oscilator cu cristal i rezistorcondensator (RC) sunt cele utilizate cel mai frecvent, doar pe ele le vom meniona aici. Tipul de microcontroler cu
oscilator cu cristal este desemnat ca XT, iar microcontrolerul cu perechea rezistor-condensator are desemnarea RC.
Aceasta este important pentru c trebuie s numii tipul de oscilator cnd cumprai un microcontroler.

Oscilatorul XT

Oscilatorul cu cristal se afl intr-o carcas


metalic cu doi pini pe care este nscris
frecvena la care cristalul oscileaz. Mai
este necesar cte un condensator ceramic
de 30pF cu cellalt capt la mas de a fi
conectai la fiecare pin.
Oscilatorul 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 jos. Pinii centrali ai
elementului sunt masa, iar pinii terminali
sunt conectai la pinii OSC1 i OSC2 ai
microcontrolerului. Cnd se proiecteaz un
aparat, regula este s plasai oscilatorul
ct mai aproape de microcontroler, pentru
a elimina orice interferen de pe liniile pe
care microcontrolerul primete tactul de
ceas.

Oscilatorul RC
n aplicaiile unde nu este nevoie de o mare precizie de timp, oscilatorul RC permite economii adiionale la cumprare.
Fecvena de rezonan a oscilatorului RC depinde de valoarea tensiunii de alimentare, rezistorul R, condensatorul C i
temperatura de lucru. Trebuie de menionat c frecvena de rezonan este de asemenea influenat de variaiile
normale ale parametrilor de proces, de tolerana extern a componentelor R i C, etc.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/2_02Poglavlje.htm (1 of 2)07.May.07 6:21:25 PM

Chapter 2 - Microcontroller PIC16F84

Diagrama de mai sus arat cum este conectat oscilatorul RC la PIC16F84. La valoarea rezistorului mai mic 2.2k,
oscilatorul poate deveni instabil, sau oscilaia se poate chiar opri. La valori mari a lui R (ex.1M) oscilatorul devine
foarte sensibil la zgomot i umezeal. Se recomand ca valoarea rezistorului R s fie ntre 3 i 100k. Chiar dac
oscilatorul va lucra fr un condensator extern (C=0pF), trebuie totui folosit un condensator de peste 20pF pentru
zgomot i stabilitate. Indiferent de ce oscilator este folosit, pentru a obine un ceas la care s funcioneze
microcontrolerul, ceasul trebuie divizat la 4. Un ceas al oscilatorului divizat cu 4 se poate obine la pinul OSC2/
CLKOUT, i poate fi folosit pentru testarea sau sincronizarea altor circuite logice.

Dup alimentare, oscilatorul ncepe s oscileze. Oscilaia la nceput are o perioad i o amplitudine instabile, dar dup
un timp devin stabilizate.

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

Pagina anterioar

Coninut

Pagina urmtoare

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/2_02Poglavlje.htm (2 of 2)07.May.07 6:21:25 PM

Chapter 2 - Microcontroller PIC16F84

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

2.2 Reset-ul
Resetul este folosit pentru a pune microcontrolerul ntr-o condiie 'cunoscut'. Aceasta nseamn practic c
microcontrolerul poate s se comporte incorect n unele condiii nedorite. Pentru a continua s funcioneze corect
trebuie resetat, nsemnnd c toi registrii vor fi pui ntr-o stare de start. Resetul nu este folosit numai cnd
microcontrolerul nu se comport cum vrem noi, dar poate de asemenea s fie folosit cnd se ncearc un montaj ca o
ntrerupere ntr-un program de execuie sau cnd se pregtete un microcontroler de a citi un program.

Pentru a preveni ajungerea unui zero logic la pinul


MCLR accidental (linia de deasupra nseamn c
resetul este activat de un zero logic), MCLR trebuie s
fie conectat printr-un rezistor la polul pozitiv al sursei
de alimentare. Rezistorul trebuie s fie ntre 5 i 10k.
Acest rezistor a crui funcie este de a menine o
anumit linie la starea logic unu ca o prevenire, se
numete o scoatere-pull up.

Microcontrolerul PIC16F84 are cteva surse de reset:


a) Reset la alimentare, POR (Power-On Reset)
b) Reset n timpul lucrului obinuit prin aducerea unui zero logic la pinul MCLR al microcontrolerului.
c) Reset n timpul regimului SLEEP
d) Reset la depirea timer-ului watchdog (WDT)
e) Reset n timpul depirii WDT n timpul regimului SLEEP.
Cele mai importante resurse de reset sunt a) i b). Prima are loc de fiecare dat cnd este alimentat microcontrolerul i
servete la aducerea toturor regitrilor la starea iniial a poziiei de start. A doua este pentru a aduce un zero logic la
pinul MCLR n timpul operaiei normale a microcontrolerului. Este des folosit n dezvoltarea de programe.
n timpul unui reset, locaiile de memorie RAM nu sunt resetate. Ele sunt necunoscute la alimentare i nu sunt
schimbate la nici un reset. Spre deosebire de acestea, regitrii SFR sunt resetai la o stare iniial a poziiei de start.
Unul din cele mai importante efecte ale resetului este setarea contorului de program (PC) la zero (0000h), ceea ce
permite programului s nceap executarea de la prima instruciune scris.

Resetul la scderea tensiunii de alimentare dincolo de limita permisibil (Brown-out


Reset)
Impulsul pentru resetare n timpul creterii tensiunii este generat de microcontrolerul nsui cnd detecteaz o cretere
n tensiunea Vdd (n domeniul de la 1.2V la 1.8V). Acest impuls dureaz 72 ms ceea ce este un timp suficient pentru
oscilator ca s se stabilizeze. Aceste 72 ms sunt asigurate de un timer intern PWRT care are oscilatorul lui RC.
Microcontrolerul este n modul reset ct timp PWRT este activ. Totui, cnd montajul funcioneaz, probleme apar cnd
sursa nu scade la zero ci cnd scade mai jos de limita ce garanteaz funcionarea corect a microcontrolerului. Acesta
este un caz real din practic, n special n mediile industriale unde perturbaiile i instabilitile sursei de alimentare
sunt ceva foarte curent. Pentru a rezolva aceast problem trebuie s ne asigurm c microcontrolerul este ntr-o stare
de reset de fiecare dat cnd tensiunea sursei scade sub limita admis.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/2_03Poglavlje.htm (1 of 2)07.May.07 6:21:26 PM

Chapter 2 - Microcontroller PIC16F84

Dac, 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. n afar de
aceast funcie, ele pot funciona pentru supravegherea tensiunii de alimentare. Dac tensiunea scade mai jos de
nivelul specificat, un zero logic va apare la pinul MCLR ce ine microcontrolerul n starea de reset pn ce tensiunea nu
este n limitele ce garanteaz funcionarea corect.

Pagina anterioar

Coninut

Pagina urmtoare

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/2_03Poglavlje.htm (2 of 2)07.May.07 6:21:26 PM

Chapter 2 - Microcontroller PIC16F84

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

2.3 Unitatea de Procesare Central


Unitatea de procesare central (CPU) este creierul microcontrolerului. Aceast parte este responsabil cu gsirea i
aducerea (citirea din memorie)-fetching instruciunii corecte ce trebuie executat, cu decodarea acelei instruciuni, i
n final cu executarea ei.

Unitatea de procesare central conecteaz toate prile microcontrolerului ntr-un ntreg. Desigur, funcia sa cea mai
important este s decodeze instruciunile de program. Cnd programatorul scrie un program, instruciunile au o
form clar ca MOVLW 0x20. Totui, pentru ca microcontrolerul s neleag aceasta, aceast form de 'scrisoare' a
unei instruciuni trebuie tradus ntr-o serie de zero-uri i unu-uri ce se numete 'opcode'. Aceast tranziie de la o
scrisoare la o form binar este fcut de translatori ca translatorul assembler (cunoscut ca i assembler sau
asamblor). Instruciunea astfel adus-fetched din memoria programului trebuie s fie decodat de unitatea de
procesare central. Putem apoi selecta din tabela tuturor instruciunilor un set de aciuni ce execut o sarcin
desemnat definit de instruciune. Pentru c instruciunile pot s conin n ele asignri ce cer diferite transferuri de
date dintr-o memorie n alta, din memorie la porturi, sau alte calcule, CPU trebuie s fie conectat cu toate prile
microcontrolerului. Aceasta este posibil printr-un bus de date i un bus de adrese.

Unitatea de Logic Aritmetic (ALU)


Unitatea de logic aritmetic este responsabil de executarea operaiilor ca adunarea, scderea, mutarea (la stnga
sau la dreapta ntr-un registru) i de operaiile logice. Mutarea datelor ntr-un registru se mai numete 'shifting'transferare. PIC16F84 conine o unitate logic aritmetic de 8 bii i regitri de lucru de 8 bii.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/2_04Poglavlje.htm (1 of 4)07.May.07 6:21:28 PM

Chapter 2 - Microcontroller PIC16F84

n instruciunile cu doi operanzi, n mod obinuit un operand este n registrul de lucru (registrul W), iar cellalt este
unul din regitri sau o constant. Prin operand nelegem coninutul asupra cruia se fac unele operaii, iar un registru
este oricare din regitrii GPR sau SFR. GPR este o prescurtare de la 'General Purposes Registers'-Regitri cu Scopuri
Generale, iar SFR de la 'Special Function Registers'-Regitri cu Funcie Special. n instruciunile cu un operand, un
operand este fie registrul W fie unul din regitri. Pe lng operaiile aritmetice i logice, ALU controleaz biii de stare
(bii gsii n registrul STATUS). Executarea unor instruciuni afecteaz biii de stare, de care depinde rezultatul nsui.
Depinznd de ce instruciune este executat, ALU poate afecta valorile biilor Carry (C), Digit Carry (DC), i Zero (Z) n
registrul STATUS.

Registru STATUS
http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/2_04Poglavlje.htm (2 of 4)07.May.07 6:21:28 PM

Chapter 2 - Microcontroller PIC16F84

bit 0 C (Carry) Transfer


Bit care este afectat de operaiile de adunare, scdere i transfer.
1= transferul produs din bitul cel mai nalt al rezultatului
0= transferul nu s-a produs
Bitul C este afectat de instruciunile ADDWF, ADDLW, SUBLW, SUBWF.
bit 1 DC (Digit Carry) DC Transfer
Bit afectat de operaiile de adunare, scdere i transfer. Spre deosebire de bitul C, acest bit reprezint transferul din al
patrulea loc rezultat. Este setat de adunare cnd se ntmpl un transport de la bitul 3 la bitul 4, sau de scdere cnd
se ntmpl mprumut de la bitul 4 la bitul 3, sau de transfer n ambele direcii.
1= transfer produs la al patrulea bit conform cu ordinea, al rezultatului.
0= transferul nu s-a produs
Bitul DC este afectat de instruciunile ADDWF, ADDLW, SUBLW, SUBWF.
bit 2 Z (Zero bit) Indicarea unui rezultat zero.
Acest bit este setat cnd rezultatul unei operaii aritmetice sau logice executate este zero.
1= rezultatul egal cu zero
0= rezultatul nu este egal cu zero
bit 3 PD (Power-down bit)
Bit ce este setat cnd microcontrolerul este alimentat atunci cnd ncepe s funcioneze, dup fiecare reset obinuit i
dup executarea instruciunii CLRWDT. Instruciunea SLEEP l reseteaz cnd microcontrolerul intr n regimul consum/
uzaj redus. Setarea lui repetat este posibil prin reset sau prin pornirea sau oprirea sursei. Starea poate fi triggerat
de asemenea de un semnal la pinul RB0/INT, de o schimbare la portul RB, de terminarea scrierii n EEPROM-ul de date
intern, i de watchdog de asemenea.
1= dup ce sursa a fost pornit
0= executarea instruciunii SLEEP
bit 4 TO Time-out ; depirea-overflow watchdog-ului.
Bitul este setat dup pornirea sursei i executarea instruciunilor CLRWDT i SLEEP. Bitul este resetat cnd watchdogul ajunge la sfrit semnalnd c ceva nu este n ordine.
1= depirea-oveflow nu s-a produs
0= depirea-overflow s-a produs
bit6:5 RP1:RP0 (Register Bank Select bits-Bii de Selectare a Bancului de Regitri)
Aceti doi bii sunt partea superioar a adresei la adresarea direct. Pentru c instruciunile ce adreseaz memoria
direct au doar apte bii, ei au nevoie doar de nc un bit pentru a adresa cei 256 bytes adic ci are PIC16F84. Bitul
RP1 nu este folosit, dar este lsat pentru expansiuni viitoare ale acestui microcntroler.
01= primul banc
00= bancul zero
bit 7 IRP (Register Bank Select bit-Bit de Selectare a Bancului de Regitri)
Bit al crui rol este de a fi al optulea bit la adresarea indirect a RAM-ului intern.
1= bancul 2 i 3
0= bancul 0 i 1 (de la 00h la FFh)
Registrul STATUS conine starea aritmetic ALU (C, DC, Z), starea RESET (TO, PD) i biii pentru selectarea bancului
de memorie (IRP, RP1, RP0). Considernd c selecia bancului de memorie este controlat prin acest registru, el
trebuie s fie prezent n fiecare banc. Bancul de memorie se va discuta mai n detaliu n capitolul Organizarea
memoriei. Registrul STATUS poate fi o destinaie pentru orice instruciune, cu oricare alt registru. Dac registrul
STATUS este o destinaie pentru instruciunile ce afecteaz biii Z, DC or C, atunci scrierea n aceti trei bii nu este
posibil.

Registrul OPTION

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/2_04Poglavlje.htm (3 of 4)07.May.07 6:21:28 PM

Chapter 2 - Microcontroller PIC16F84

bit 0:2 PS0, PS1, PS2 (Prescaler Rate Select bit-Bit Selecie Rat Prescaler)
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 explicat n seciunea depre TMRO.

bit 3 PSA (Prescaler Assignment bit-Bit de Asignare Prescaler)


Bit ce asigneaz prescalerul ntre TMRO i watchdog.
1= prescalerul este asignat watchdogului
0= prescalerul este asignat timer-ului liber (ree-run) TMRO
bit 4 T0SE (TMR0 Source Edge Select bit-Bit Selecie a Frontului Sursei TMR0)
Dac este permis de a se triggera TMRO prin impulsurile de la pinul RA4/T0CKI, acest bit determin dac aceasta va fi
la frontul descresctor sau cresctor al unui semnal.
1= front cresctor
0= front descresctor
bit 5 TOCS (TMR0 Clock Source Select bit-Bit Selecie Surs Ceas TMR0)
Acest pin permite timerului liber (free-run) s incrementeze starea lui fie de la oscilatorul intern la fiecare a ceasului
oscilatorului, fie prin impulsuri externe la pinul RA4/T0CKI.
1= impulsuri externe
0= ceas intern 1/4
bit 6 INTEDG (Interrupt Edge Select bit-Bit de Selecie a Frontului ntrerupere)
Dac ntreruperea este activat este posibil ca acest bit s determine frontul la care o ntrerupere va fi activat la pinul
RB0/INT.
1= front cresctor
0= front descresctor
bit 7 RBPU (PORTB Pull-up Enable bit-Bit Enable-Activare Pull-up PORTB)
Acest bit pornete i oprete rezistorii interni 'pull-up'-scoatere la portul B.
1= Rezistori oprire "pull-up"
0= Rezistori pornire "pull-up"

Pagina anterioar

Coninut

Pagina urmtoare

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/2_04Poglavlje.htm (4 of 4)07.May.07 6:21:28 PM

Chapter 2 - Microcontroller PIC16F84

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

2.4 Porturi
Portul se refer la un grup de pini ai unui microcontroler ce pot fi accesai simultan, sau la care putem seta combinaia
dorit de zero-uri i unu-uri, sau de la care putem citi o stare existent. Fizic, portul este un registru n interiorul unui
microcontroler ce este conectat cu fire la pinii microcontrolerului. Porturile reprezint conexiunea fizic a Unitii de
Procesare Central cu lumea exterioar. Microcontrolerul le folosete pentru a monitoriza sau controla alte componente
sau aparate. Datorit funcionalitii, unii pini au rol dublu ca RA4/TOCKI de exemplu, care este simultan al patrulea
bit la portul A i o intrare extern pentru contorul liber (free-run). Selecia uneia din aceste dou funcii ale pinului se
face n unul din regitrii configuraionali. O ilustraie a acesteia este al cincilea bit T0CS n registrul OPTION. Selectnd
una din funcii cealalt este dezactivat.

Toi pinii portului pot fi definii ca intrare sau ieire, conform cu nevoile unui montaj ce este n dezvoltare. Pentru 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
TRIS. Dac n locul potrivit este scris "1" logic n registrul TRIS, acel pin este pin de intrare, iar dac este valabil
contrariul, este un pin de ieire. Fiecare port are registrul lui TRIS. Astfel, portul A are TRISA la adresa 85h, iar portul
B are TRISB la adresa 86h.

PORTB
PORTB are 8 pini legai la el. Registrul adecvat pentru direcia datelor este TRISB la adresa 86h. Setarea unui bit n
registrul TRISB definete pinul portului corespunztor ca pin de intrare, i resetarea unui bit n registrul TRISB,
definete pinul portului corespunztor ca pin de ieire. Fiecare pin la PORTB are un rezistor slab intern pull-up
(scoatere) (rezistor care definete o linie la unu logic) care poate fi activat prin resetarea celui de-al aptelea bit RBPU
n registrul OPTION. Aceti rezistori 'pull-up' se nchid automat cnd pinul portului este configurat ca o ieire. Cnd
pornete microcontrolerul, 'pull-up'-ii sunt dezactivai.
Patru pini ai portului PORTB, RB7:RB4 pot cauza o ntrerupere, care se ntmpl cnd starea lor se schimb de la unu
logic la zero logic i invers. Numai pinii configurai ca intrare pot cauza aceast ntrerupere s se ntmple (dac fiecare
pin RB7:RB4 este configurat ca o ieire, nu va fi generat o ntrerupere la schimbarea strii). Aceast opiune de
ntrerupere cu rezistorii 'pull-up' fac mai uoar rezolvarea problemelor din practic, ca de exemplu o tastatur
matriceal. Dac rndurile tastaturii sunt conectate la aceti pini, fiecare apsare a unei clape va cauza o ntrerupere.
Microcontrolerul va determina care clap este apsat n timp ce se proceseaz o ntrerupere. Nu se recomand s
apelai la portul B n timp ce se proceseaz ntreruperea.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/2_05Poglavlje.htm (1 of 2)07.May.07 6:21:29 PM

Chapter 2 - Microcontroller PIC16F84

Exemplul de mai sus arat cum pinii 0, 1, 2, i 3 sunt declarai ca intrare, i pinii 4, 5, 6 i 7 ca ieire.

PORTA
PORTA are 5 pini legai la el. Registrul corespunztor pentru direcia datelor este TRISA la adresa 85h. Ca i la portul
B, setarea unui bit n registrul TRISA definete de asemenea pinul portului corespunztor ca un pin de intrare, i
resetarea unui bit n registrul TRISA definete pinul portului corespunztor ca pin de ieire.
Al cincilea pin al portului A are funcie dual. La acel pin se afl de asemenea o intrare extern pentru timer-ul TMRO.
Una din aceste dou opiuni este aleas prin setarea sau resetarea bitului TOCS (TMR0 Clock Source Select bit-bit de
Selecie a Sursei Ceasului TMRO). Acest pin permite timer-ului TMRO sa-i creasc starea fie de la oscilatorul intern fie
prin impulsuri externe la pinul RA4/T0CKI.

Exemplul arat cum pinii 0, 1, 2, 3, i 4 sunt declarai ca intrare iar 5, 6 i 7 ca pini de ieire.

Pagina anterioar

Coninut

Pagina urmtoare

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/2_05Poglavlje.htm (2 of 2)07.May.07 6:21:29 PM

Chapter 2 - Microcontroller PIC16F84

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

2.5 Organizarea memoriei


PIC16F84 are dou blocuri separate de memorie, unul pentru date i cellalt pentru programe. Memoria EEPROM i
regitrii GPR n memoria RAM constituie un bloc, i memoria FLASH constituie un bloc de programe.

Memoria program
Memoria program a fost realizat n tehnologia FLASH ceea ce face posibil de a programa un microcontroler de mai
multe ori nainte de a fi instalat ntr-un montaj, i chiar dup instalarea sa dac se ntmpl unele schimbri n program
sau parametri de proces. Mrimea memoriei program este de 1024 locaii cu lime de 14 bii unde locaiile zero i
patru sunt rezervate pentru reset i pentru vectorul ntrerupere.

Memoria de date
Memoria de date const din memoriile EEPROM i RAM. Memoria EEPROM const din 64 de locaii de opt bii a cror
coninut nu este pierdut n timpul opririi sursei de alimentare. EEPROM-ul nu este direct adresabil, dar este accesat
indirect prin regitrii EEADR i EEDATA. Pentru c memoria EEPROM este folosit curent la memorarea unor parametri
importani (de exemplu, o temperatur dat n regulatoarele de temperatur), exist o procedur strict de scriere n
EEPROM ce trebuie urmat pentru a preveni scrierea accidental. Memoria RAM pentru date ocup un spaiu ntr-o
hart a memoriei de la locaia 0x0C la 0x4F ceea ce nseamn 68 de locaii. Locaiile memoriei RAM sunt de asemenea
denumite regitri GPR care este o abreviere General Purpose Registers-Regitri cu Scop General. Regitrii GPR pot fi
accesai indiferent de ce banc este selectat la un moment.

Regitri SFR
Regitri ce ocup primele 12 locaii n bancurile 0 i 1 i sunt regitri ai funciei specializate asignat cu unele blocuri
ale microcontrolerului. Acetia sunt numii Special Function Registers-Regitri ai Funciei Speciale.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/2_06Poglavlje.htm (1 of 4)07.May.07 6:21:31 PM

Chapter 2 - Microcontroller PIC16F84

Bancuri de Memorie
n afar de aceast diviziune n 'lungime' a regitrilor SFR i GPR, harta memoriei este de asemenea mprit n
'lime' (vezi harta precedent) n dou zone numite 'bancuri'. Selectarea unuia din bancuri se face de biii RPO i RP1
n registrul STATUS-stare.
Exemplu:
bcf STATUS, RP0
Instruciunea BCF terge bitul RPO (RP0=0) n registrul STATUS i astfel seteaz bancul 0.
bsf STATUS, RP0
Instruciunea BSF seteaz bitul RPO (RP0=1) n registrul STATUS i astfel seteaz bancul 1.

Uzual, grupurile de instruciuni care sunt adesea n uz, sunt conectate ntr-o singur unitate ce poate fi uor apelat
ntr-un program, i a crei nume are o semnificaie clar, aa-numitul Macros-macrocomand. Cu ajutorul lor, selecia
dintre dou bancuri devine mai clar i programul mult mai elegibil.
BANK0 macro
Bcf STATUS, RP0
Endm

;Select memory bank 0

BANK1 macro
Bsf STATUS, RP0
Endm

;Select memory bank 1

Locaiile 0Ch - 4Fh sunt regitri cu scop general (GPR) ce sunt folosii ca memorie RAM. Cnd sunt accesate
locaiile 8Ch - CFh n Bancul 1, accesm de fapt exact aceleai locaii n Bancul 0. Cu alte cuvinte, cnd dorii
s accesai unul din regitrii GPR, nu trebuie s v ngrijorai c nu tii n ce banc suntei!

Contorul de Program
Contorul de program (PC) este un registru de 13 bii ce conine adresa instruciunii ce se execut. Prin incrementarea
sau schimbarea sa (ex. n caz de salturi) microcontrolerul execut instruciunile de program pas-cu-pas.

Stiva
PIC16F84 are o stiv de 13 bii cu 8 nivele, sau cu alte cuvinte, un grup de 8 locaii de memorie de 13 bii lime cu
funcii speciale. Rolul su de baz este de a pstra valoarea contorului de program dup un salt din programul principal
la o adres a unui subprogram. Pentru ca un program s tie cum s se ntoarc la punctul de unde a pornit, trebuie s
napoieze valoarea contorului programului din stiv. Cnd se mut dintr-un program ntr-un subprogram, contorul
programului este mpins n stiv (un exemplu de acesta este instruciunea CALL). Cnd se execut instruciuni ca
RETURN, RETLW sau RETFIE ce au fost executate la sfritul unui subprogram, contorul programului a fost luat dintr-o
stiv, aa ca programul s poat continua de unde a fost oprit nainte de a fi ntrerupt. Aceste operaii de plasare ntr-o
i luare dintr-o stiv de contor de program sunt numite PUSH i POP, i sunt numite conform cu instruciunile similare
ale unor microcontrolere mai mari.

Programarea n Sistem
Pentru a programa o memorie de program, microcontrolerul trebuie s fie setat pentru un mod de lucru special prin

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/2_06Poglavlje.htm (2 of 4)07.May.07 6:21:31 PM

Chapter 2 - Microcontroller PIC16F84

aducerea pinului MCLR la 13.5V, iar sursa de tensiune Vdd trebuie s fie stabilizat ntre 4.5V i 5.5V. Memoria
program poate fi programat serial folosind doi pini 'data/clock' ce trebuie s fie mai nti separai de liniile montajului,
aa ca s nu apar erori n timpul programrii.

Moduri de adresare
Locaiile de memorie RAM pot fi accesate direct sau indirect.

Adresarea Direct
Adresarea Direct se face printr-o adres de 9 bii. Aceast adres este obinut prin conectarea celui de-al aptelea
bit al adresei directe a unei instruciuni cu doi bii (RP1, RP0) din registrul STATUS dup cum se arat n figura
urmtoarea. Orice acces la regitrii SFR poate fi un exemplu de adresare direct.
Bsf STATUS, RP0 ;Bankl
movlw 0xFF
;w=0xFF
movwf TRISA
;address of TRISA register is taken from
;instruction movwf

Adresarea Direct

Adresarea Indirect
Adresarea indirect spre deosebire de cea direct nu ia o adres dintr-o instruciune ci o creeaz cu ajutorul bitului IRP
a regitrilor STATUS i FSR. Locaia adresat este accesat prin registrul INDF care de fapt ine o adres indicat de un
FSR. Cu alte cuvinte, orice instruciune care folosete INDF ca registrul al ei, n realitate acceseaz datele indicate de
un registru FSR. S spunem, de exemplu, c un registru cu scop general (GPR) la adresa 0Fh conine o valoarea 20.
Prin scrierea unei valori 0Fh n registrul FSR vom obine un registru indicator la adresa 0Fh, iar prin citirea din registrul
INDF, vom obine valoarea 20, ceea ce nseamn c am citit din primul registru valoarea lui fr accesarea lui direct
(dar prin FSR i INDF). Se pare c acest tip de adresare nu are nici un avantaj fa de adresarea direct, dar exist
unele nevoi n timpul programrii ce se pot rezolva mai simplu doar prin adresarea indirect.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/2_06Poglavlje.htm (3 of 4)07.May.07 6:21:31 PM

Chapter 2 - Microcontroller PIC16F84

Un asemenea exemplu poate trimite un set de date prin comunicaia serial, lucrnd cu bufere i indicatoare (ce vor fi
discutate n continuare ntr-un capitol cu exemple), sau s tearg o parte a memoriei RAM (16 locaii) ca n urmtorul
exemplu.

Citind datele din registrul INDF cnd coninutul registrului FSR este egal cu zero, ntoarce valoarea zero, i scrie n el
rezultatul n operaia NOP (no operation- nu opereaz).

Pagina anterioar

Coninut

Pagina urmtoare

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/2_06Poglavlje.htm (4 of 4)07.May.07 6:21:31 PM

Chapter 2 - Microcontroller PIC16F84

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

2.6 ntreruperi
ntreruperile sunt un mecanism a unui microcontroler ce i permit s rspund la unele evenimente la momentul cnd
se ntmpl, indiferent de ce face atunci microcontrolerul. Aceasta este o parte foarte important, pentru c permite
conexiunea microcontrolerului cu lumea de afar. n general, fiecare ntrerupere schimb debitul programului, l
ntrerupe i dup executarea unui subprogram (rutine de ntrerupere), continu din acelai punct.

Registrul de control al unei ntreruperi se numete INTCON i se gsete la adresa 0Bh. Rolul 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.

Registru INTCON

bit 0 RBIF (RB Port Change Interrupt Flag bit-bit Stegule de ntrerupere a Schimbrii Portului RB) Bit ce informeaz
despre schimbrile de la pinii 4, 5, 6 i 7 ai portului B.
1=cel puin un pin i-a schimbat starea
0=nu s-a ntmplat nici o schimbare la vreun pin
bit 1 INTF (INT External Interrupt Flag bit-bit Stegule de ntrerupere Extern INT) A avut loc o ntrerupere extern.
1=a avut loc o ntrerupere
0=nu a avut loc o ntrerupere

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/2_07Poglavlje.htm (1 of 6)07.May.07 6:21:34 PM

Chapter 2 - Microcontroller PIC16F84

Dac s-a detectat un front cresctor sau descresctor la pinul RB0/INT, (ce este definit cu bitul INTEDG n registrul
OPTION), bitul INTF este setat. Bitul trebuie s fie ters n subprogramul ntrerupere pentru a detecta urmtoarea
ntrerupere.
bit 2 T0IF (TMR0 Overflow Interrupt Flag bit-bit Stegule Depire ntrerupere TMRO) Depirea contorului TMRO.
1=contorul i-a schimbat starea de la FFh la 00h.
0=depirea nu a avut loc
Bitul trebuie s fie ters n program pentru ca o ntrerupere s fie detectat.
bit 3 RBIE (RB port change Interrupt Enable bit-bit Permite ntreruperea schimbrii portului RB) Permite s aib loc
ntreruperi la schimbarea strii pinilor 4, 5, 6, i 7 ai portului B.
1=permite ntreruperi la schimbarea strii
0=ntreruperi interzise la schimbarea strii
Dac RBIE i RBIF au fost simultan setate, va avea loc o ntrerupere.
bit 4 INTE (INT External Interrupt Enable bit-bit Permite ntrerupere extern INT) Bit ce permite ntreruperea extern
de la pinul RB0/INT.
1=ntrerupere extern permis
0=ntrerupere extern interzis
Dac INTE i INTF au fost setate simultan, va avea loc o ntrerupere.
bit 5 T0IE (TMR0 Overflow Interrupt Enable bit-bit Permite Depire ntrerupere TMRO) Bit ce permite ntreruperile n
timpul depirii contorului TMRO.
1=ntrerupere permis
0=ntrerupere interzis
Dac T0IE i T0IF au fost simultan setate, va avea loc ntreruperea.
Bit 6 EEIE (EEPROM Write Complete Interrupt Enable bit-bit Permite ntrerupere Complet a Scrierii EEPROM) Bit ce
permite o ntrerupere la sfritul unei rutine de scriere n EEPROM
1= ntrerupere permis
0= ntrerupere interzis
Dac EEIE i EEIF (ce este n registrul EECON1) au fost simultan setate, va avea loc o ntrerupere.
Bit 7 GIE (Global Interrupt Enable bit-bit Permite ntrerupere Global) Bit ce permite sau interzice toate ntreruperile.
1=toate ntreruperile sunt permise
0=toate ntreruperile sunt interzise
PIC16F84 are patru surse de ntrerupere:
1.
2.
3.
4.

Terminarea
ntrerupere
ntrerupere
ntrerupere

scrierii datelor n EEPROM


TMR0 cauzat de depirea timer-ului
n timpul schimbrii la pinii RB4, RB5, RB6 i RB7 ai portului B.
Extern de la pinul RB0/INT al microcontrolerului

n general, fiecare surs de ntrerupere are doi bii legai la ea. Unul permite ntreruperea, iar cellalt detecteaz cnd
au loc ntreruperi. Exist un bit comun numit GIE ce poate fi folosit pentru a interzice sau permite toate ntreruperile
simultan. Acest bit este foarte folositor cnd se scrie un program pentru c permite ca toate ntreruperile s fie
interzise pentru o perioad de timp, aa ca execuia unei pri importante a programului s nu fie ntrerupt. Cnd
instruciunea ce reseteaz bitul GIE a fost executat (GIE=0, toate ntreruperile interzise), fiecare ntrerupere ce
rmne nerezolvat trebuie ignorat.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/2_07Poglavlje.htm (2 of 6)07.May.07 6:21:34 PM

Chapter 2 - Microcontroller PIC16F84

ntreruperile ce rmn nerezolvate i ce au fost ignorate, sunt procesate cnd bitul GIE (GIE=1, toate ntreruperile
sunt permise) va fi ters. Cnd i s-a rspuns ntreruperii, bitul GIE a fost ters, aa c orice ntreruperi adiionale vor fi
interzise, adresa de ntoarcere a fost trimis n stiv, iar adresa 0004h a fost scris n contorul programului numai
dup aceasta ncepe rspunsul la o ntrerupere! Dup 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.

Pstrarea coninutului regitrilor importani


Doar valoarea de ntoarcere a contorului programului este nmagazinat ntr-o stiv n timpul unei ntreruperi (prin
valoare de ntoarcere a contorului programului nelegem adresa instruciunii ce trebuie executat, dar nu a fost
executat pentru c a avut loc ntreruperea). Pstrnd 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. Dac 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 exemplu de asemenea caz este coninutul registrului de lucru W.
Dac presupunem c programul principal a folosit registrul de lucru W 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 ntmpla nainte de acea
instruciune va schimba valoarea registrului de lucru W, ce va influena direct programul principal.
Procedura de nregistrare de regitri importani nainte de a merge la o rutin de ntrerupere se numete PUSH, n timp
ce procedura ce aduce valorile nregistrate napoi, se numete POP. PUSH i POP sunt instruciuni ale altor
microcontrolere (Intel), dar sunt att de larg acceptate c o ntreag operaie este numit dup ele. PIC16F84 nu are
instruciuni ca PUSH i POP, i ele trebuie s fie programate.

Datorit simplitii i folosirii frecvente, aceste pri ale programului pot fi fcute ca macro-uri. Conceptul unui Macro
este explicat n "Limbaj de asamblare program". n urmtorul exemplu, coninuturile regitrilor W i STATUS sunt
memorate n variabilele W_TEMP i STATUS_TEMP nainte de rutina de ntrerupere. La nceputul rutinei PUSH trebuie
s verificm bancul selectat n prezent pentru c W_TEMP and STATUS_TEMP nu se gsesc n bancul 0. Pentru schimbul
de date ntre aceti regitri, instruciunea SWAPF se folosete n loc de MOVF pentru c nu afecteaz starea biilor
registrului STATUS.
Exemplul este un program asamblor pentru urmtorii pai :
1. Testarea bancului curent
2. Stocarea registrului W indiferent de bancul curent
3. Stocarea registrul STATUS n bancul 0
4. Executarea rutinei de ntrerupere pentru procesul de ntrerupere (ISR)
5. Restaureaz registrul STATUS
6. Restaureaz registrul W
Dac mai sunt i alte variabile sau regitri ce trebuie stocai, atunci ei trebuie s fie pstrai dup stocarea registrului
STATUS (pasul 3), i adui napoi nainte ca registrul STATUS s fie restaurat (pasul 5).

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/2_07Poglavlje.htm (3 of 6)07.May.07 6:21:34 PM

Chapter 2 - Microcontroller PIC16F84

Acelai exemplu se poate realiza utiliznd macro-uri, fcnd astfel programul mai eligibil. Macro-urile ce sunt deja
definite, pot fi folosite pentru scrierea de noi macro-uri. Macro-urile BANK1 i BANK0 ce sunt explicate n capitolul
"Organizarea memoriei" sunt folosite cu macro-urile 'push' i 'pop'.

ntrerupere extern la pinul RB0/INT al microcontrolerului


ntreruperea extern la pinul RB0/INT este triggerat de frontul cresctor (dac bitul INTEDG=1 n registrul
OPTION<6>), sau de frontul descresctor (dac INTEDG=0). Cnd apare semnalul corect la pinul INT, bitul INTF este
setat la registrul INTCON. Bitul INTF (INTCON<1>) 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. ntreruperea poate fi
nchis prin resetarea bitului de control INTE (INTCON<4>).

ntreruperea n timpul depirii contorului TMRO


Depirea contorului TMRO (de la FFh la 00h) va seta bitul T0IF (INTCON<2>). Aceasta este o ntrerupere foarte
important pentru c multe probleme reale se por rezolva folosind aceast ntrerupere. Unul din exemple este

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/2_07Poglavlje.htm (4 of 6)07.May.07 6:21:34 PM

Chapter 2 - Microcontroller PIC16F84

msurarea timpului. Dac tim ct timp are nevoie contorul pentru a completa un ciclu de la 00h to FFh, atunci
numrul de ntreruperi nmulit cu acea durat de timp va da timpul total scurs. n rutina de ntrerupere unele variabile
vor fi incrementate n memoria RAM, valoarea acelei variabile nmulite cu timpul de care are nevoie contorul pentru a
contoriza ntr-un ciclu ntreg, va da timpul total scurs. ntreruperea poate fi pornit/oprit prin setarea/resetarea bitului
T0IE (INTCON<5>).

ntrerupere pe timpul unei schimbri la pinii 4, 5, 6 i 7 ai portului B


Schimbarea semnalului de intrare la PORTB <7:4> seteaz bitul RBIF (INTCON<0>). Patru pini RB7, RB6, RB5 i RB4
ai portului B, pot triggera o ntrerupere ce are loc cnd starea la ei se schimb de la unu la zero logic, sau viceversa.
Pentru ca pinii s fie sensibili la aceast schimbare, trebuie definii ca intrare. Dac oricare din ei este definit ca ieire,
ntreruperea nu va fi generat la schimbarea strii. Dac ei sunt definii ca intrare, starea lor curent este comparat
cu vechea valoare ce a fost stocat la ultima citire de la portul B. ntreruperea poate fi pornit/oprit prin setarea/
resetarea bitului RBIE n registrul INTCON.

ntreruperea la terminarea subrutinei write n EEPROM


Aceast ntrerupere este doar de natur practic. Pentru c scrierea ntr-o locaie EEPROM dureaz cam 10ms (care
este o durat lung n termenii microcontrolerului), nu este rentabil de a atepta pn la capt scrierea. Este adugat
astfel mecanismul de ntrerupere ceea ce permite microcontrolerului s continue executarea programului principal, n
timp ce scrierea n EEPROM este fcut n plan secundar. Cnd scrierea este terminat, ntreruperea informeaz
microcontrolerul c scrierea s-a terminat. Bitul EEIF, prin care se face aceast informare, se gsete n registrul
EECON1. Producerea unei ntreruperi poate fi interzis prin resetarea bitului EEIE n registrul INTCON.

Iniializarea ntreruperii
Pentru a folosi un mecanism de ntrerupere a unui microcontroler, trebuie fcute unele sarcini pregtitoare. Aceste
proceduri sunt pe scurt numite "iniializare". Prin iniializare definim la ce va rspunde microcontrolerul, i ce va
ignora. Dac nu setm bitul ce permite o anumit ntrerupere, programul nu va executa un subprogram ntrerupere.
Prin aceasta putem obine controlul asupra producerii ntreruperii, ceea ce este foarte folositor.

Exemplul de mai sus arat iniializarea unei ntreruperi externe la pinul RB0 al microcontrolerului. Unde se vede unu
setat, nseamn c ntreruperea este permis. Producerea altor ntreruperi nu este permis, i toate ntreruperile
mpreun sunt interzise pn ce bitul GIE este inut n unu.
Urmtorul exemplu arat o cale tipic de a dirija ntreruperile. PIC16F84 are doar o locaie unde adresa unui
subprogram ntrerupere este memorat. Aceasta nseamn c mai nti trebuie s detectm ce ntrerupere este la
ndemn (dac mai mult de o surs de ntreruperi este disponibil), i apoi putem executa acea parte a programului
ce se refer la acea ntrerupere.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/2_07Poglavlje.htm (5 of 6)07.May.07 6:21:34 PM

Chapter 2 - Microcontroller PIC16F84

Rentoarcerea dintr-o rutin de ntrerupere poate fi fcut cu instruciunile RETURN, RETLW i RETFIE. Se
recomand ca s fie utilizat instruciunea RETFIE pentru c acea instruciune este singura ce seteaz automat
bitul GIE, ceea ce permite s se produc o nou ntrerupere.

Pagina anterioar

Coninut

Pagina urmtoare

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/2_07Poglavlje.htm (6 of 6)07.May.07 6:21:34 PM

Chapter 2 - Microcontroller PIC16F84

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

2.7 Timer-ul liber TMR0


Timer-ele (temporizatoarele) sunt de obicei cele mai complicate pri ale unui microcontroler, aa c este necesar s
rezervm mai mult timp pentru a le explica. Odat cu aplicarea lor este posibil s se creeze relaii ntre o dimensiune
real ca "timp" i o variabil ce reprezint starea timer-ului ntr-un microcontroler. Fizic, timer-ul este un registru a
crui valoare crete continuu pn la 255, i apoi pornete de la capt: 0, 1, 2, 3, 4...255....0,1, 2, 3......etc.

Aceast incrementare se face n fundalul a tot ceea ce face un microcontroler. Depinde de programator "s gseasc o
cale" de cum s profite de aceast caracteristic pentru nevoile lui. Una din ci este s creasc o variabil la fiecare
depire a timer-ului. Dac tim ct timp are nevoie timer-ul s fac o rund complet, atunci nmulind valoarea
variabilei cu acel timp obinem timpul total scurs.
PIC16F84 are un timer de 8 bii. Numrul de bii determin pn la ce valoare contorizeaz timer-ul nainte de a ncepe
s contorizeze de la zero din nou. n cazul unui timer de 8 bii, acel numr este 256. O schem simplificat a relaiei
dintre un timer i un prescaler-divizor este reprezentat n diagrama anterioar. Prescalerul este numele acelei pri
din microcontroler ce divide ceasul oscilatorului nainte de a ajunge la logica ce crete starea timer-ului. Numrul ce
divide un ceas este definit prin trei bii n registrul OPTION. Cel mai mare divizor este 256. Aceasta nseamn de fapt
c doar la al fiecare 256-lea ceas, valoarea timer-ului va crete cu unu. Aceasta ne d posibilitatea de a msura
perioade de timp mai lungi.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/2_08Poglavlje.htm (1 of 4)07.May.07 6:21:36 PM

Chapter 2 - Microcontroller PIC16F84

Dup fiecare numrtoare pn la 255, timer-ul i reseteaz valoarea la zero i ncepe cu un nou ciclu de contorizare
pn la 255. n timpul fiecrei tranziii de la 255 la zero, bitul TOIF n registrul INTCON este setat. Dac se permit
ntreruperi, de aceasta se poate profita n generarea i n procesarea rutinei de ntrerupere. Depinde de programator s
reseteze bitul TOIF n rutina de ntrerupere, aa ca noua ntrerupere, sau noua depire s fie detectate. n afar de
ceasul oscilator intern, starea timer-ului poate de asemenea s creasc prin ceasul extern la pinul RA4/TOCKI.
Alegerea uneia din aceste dou opiuni se face n registrul OPTION prin bitul TOCS. Dac a fost aleas aceast opiune
de ceas extern, va fi posibil s se defineasc frontul unui semnal (cresctor sau descresctor), la care timer-ul s-i
creasc valoarea.

n practic, unul din exemplele tipice ce este rezolvat prin ceas extern i unde timer-ul contorizeaz rotaiile complete
ale unui ax al unei maini de producie, ca bobinatorul de transformator de exemplu. S rotim patru uruburi de metal
pe axul unui bobinator. Aceste patru uruburi vor reprezenta convexitatea metalic. S plasm acum un senzor
inductiv la o distan de 5 mm de captul unui urub. Senzorul inductiv va genera semnalul descresctor de fiecare
dat cnd capul urubului este paralel cu capul senzorului. Fiecare semnal va reprezenta o ptrime dintr-o rotaie, i
suma tuturor rotaiilor se va gsi n timer-ul TMRO. Programul poate uor citi aceste date din timer printr-un bus de
date.
Urmtorul exemplu ilustreaz cum s se iniializeze timer-ul la fronturile descresctoare ale semnalului din sursa
extern cu un prescaler 1:4. Timer-ul lucreaz n mod "polig-mpingere".

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/2_08Poglavlje.htm (2 of 4)07.May.07 6:21:36 PM

Chapter 2 - Microcontroller PIC16F84

Acelai exemplu poate fi realizat printr-o ntrerupere n modul urmtor:

Prescalerul poate fi asignat fie de timer-ul TMRO fie de watchdog. Watchdogul 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 ntmpla defectri, sau unele stricciuni. Din nefericire microcontrolerul are de asemenea un
program unde se pot ntmpla probleme. Cnd se ntmpl aceasta, microcontrolerul se va opri din funcionare i va
rmne n acea stare pn ce cineva l reseteaz. Din cauza aceasta, a fost introdus mecanismul watchdog. Dup o
anumit perioad de timp, watchdogul reseteaz microcontrolerul (de fapt microcontrolerul se reseteaz singur).
Watchdogul luceaz pe baza unui principiu simplu: dac se ntmpl depirea timer-ului, microcontrolerul este resetat,
i ncepe executarea programului mereu din nou. Astfel, se va ntmpla un reset att n cazul unei funcionri corecte
ct i incorecte. Urmtorul pas este prevenirea resetului n cazul unei funcionri corecte, ce se face prin scrierea unui
zero n registrul WDT (instruciunea CLRWDT) de fiecare dat cnd se apropie de depire. Astfel programul va preveni
un reset ct timp este executat corect. De ndat ce s-a blocat, nu se va scrie zero, va avea loc depirea timer-ului
WDT i un reset ce va duce microcontrolerul napoi la funcionarea corect din nou.
Prescalerul este acordat cu timer-ul TMRO, sau cu timer-ul watchdogului prin bitul PSA n registrul OPTION. tergnd
bitul PSA, prescalerul va fi acordat cu timer-ul TMRO. Cnd prescalerul este acordat cu timer-ul TMRO, toate
instruciunile de scriere n registrul TMRO (CLRF TMR0, MOVWF TMR0, BSF TMR0,...) vor terge prescalerul. Cnd
prescalerul este asignat timerului watchdog, numai instruciunea CLRWDT va terge prescalerul i timer-ul watchdog n
acelai timp. Schimbarea prescalerului este complet sub controlul programatorului, i poate fi schimbat n timp ce se
ruleaz programul.

Exist doar un prescaler i un timer. Funcie de nevoi, ele sunt asignate fie timer-ului TMRO fie watchdog-ului.

Registrul control OPTION

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/2_08Poglavlje.htm (3 of 4)07.May.07 6:21:36 PM

Chapter 2 - Microcontroller PIC16F84

Bit 0:2 PS0, PS1, PS2 (Prescaler Rate Select bit-bit Selectare Rat Prescaler)
Subiectul prescaler, i cum afecteaz aceti bii lucrul unui microcontroler va fi abordat n seciunea despre TMRO.

bit 3 PSA (Prescaler Assignment bit-bit Asignare Prescaler)


Bit ce asigneaz prescalerul ntre TMRO i timer-ul watchdog).
1=prescalerul este asignat la timer-ul watchdog
0=prescalerul este asignat la timer-ul free-liber
bit 4 T0SE (TMR0 Source Edge Select bit-bit Selectare Front Surs TMRO)
Dac triggerul TMRO a fost activat cu impulsuri de la pinul RA4/T0CKI, acest bit va determina dac va fi la frontul
cresctor sau descresctor al semnalului.
1=front descresctor
0=front cresctor
bit 5 T0CS (TMR0 Clock Source Select bit-bit Selectare Surs Ceas TMRO)
Acest bit permite unui timer free-run s-i incrementeze valoarea fie de la oscilatorul intern, de exemplu din ceasul
oscilatorului, sau prin impulsuri externe la pinul RA4/T0CKI.
1=impulsuri externe
0=1/4 ceas intern
bit 6 INTEDG (Interrupt Edge Select bit-bit Selectare Front ntreruperi)
Dac a fost permis producerea de ntreruperi, acest bit va determina la ce front va avea loc ntreruperea la pinul RB0/
INT.
1=front cresctor
0=front descresctor
bit 7 RBPU (PORTB Pull-up Enable bit-bit Permite Pull-up-tragerea PORTB)
Acest bit deschide sau nchide rezistorii interni la portul B.
1=rezistorii 'pull-up' deschii
0=rezistorii 'pull-up' nchii

Pagina anterioar

Coninut

Pagina urmtoare

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/2_08Poglavlje.htm (4 of 4)07.May.07 6:21:36 PM

Chapter 2 - Microcontroller PIC16F84

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

2.8 Memoria de date EEPROM


PIC16F84 are 64 de bytes de locaii de memorie EEPROM la adresele de la 00h la 63h unde se poate scrie sau de unde
se poate citi. Cea mai important caracteristic a acestei memorii este c nu pierde coninutul n timpul nchideri sursei
de alimentare. Aceasta nseamn practic c ceea ce a fost scris n ea va rmne chiar i cnd microcontrolerul este
nchis. Datele pot fi reinute n EEPROM fr sursa de alimentare pn la 40 de ani. (dup cum declar productorul lui
PICD16F84), i se pot executa 10000 de cicluri de scriere.
n practic, memoria EEPROM este folosit pentru stocarea unor date importante sau a unor parametri de proces.
Un asemenea parametru este o temperatur dat, asignat cnd se seteaz un regulator de temperatur la un proces.
Dac nu s-a reinut, va fi nevoie s se ajusteze temperatura dat dup fiecare ntrerupere a alimentrii. Pentru c
aceasta este foarte nepractic (chiar periculos), productorii de microntrolere au nceput s instaleze un tip mai mic de
memorie EEPROM.
Memoria EEPROM este plasat ntr-un loc special al memoriei i poate fi accesat prin regitri speciali. Aceti regitri
sunt:

EEDATA la adresa 08h, care reine datele de citit sau cele de scris.
EEADR la adresa 09h, ce conine o adres a locaiei EEPROM ce este accesat.
EECON1 la adresa 88h, ce conine bii de control.
EECON2 la adresa 89h. Acest registru nu exist fizic i servete la protejarea EEPROM-ului de scrieri accidentale.

Registrul EECON1 la adresa 88h este un registru de control cu 5 bii implementai.


Biii 5, 6 i 7 nu sunt folosii, i prin citire sunt totdeauna zero. Interpretarea biilor registrului EECON1 urmeaz.

Registrul EECON1

bit 0 RD (Read Control bit-bit Control Citire)


Setarea acestui bit iniializeaz transferul de date definit n EEADR la registrul EEDATA. Pentru c timpul nu este
esenial n citirea datelor ca la scriere, datele din EEDATA pot fi deja folosite n urmtoarea instruciune.
1=initializeaz citirea
0=nu iniializeaz citirea
bit 1 WR (Write Control bit-bit Control Scriere)
Setarea acestui bit iniializeaz scrierea datelor din registrul EEDATA la adresa specifcat prin registrul EEADR.
1=initializeaz scrierea
0=nu iniializeaz scrierea
bit 2 WREN (EEPROM Write Enable bit-bit Permite Scrierea EEPROM) Permite scrierea n EEPROM
Dac acest bit nu a fost setat, microcontrolerul nu va permite scrierea n EEPROM.
1=scriere permis
0=scriere interzis
bit 3 WRERR (Write EEPROM Error Flag-Stegule Eroare Scriere EEPROM ) Eroare n timpul scrierii n EEPROM
Acest bit a fost setat doar n caz c scrierea n EEPROM a fost intrerupt de un semnal sau prin terminarea timpului din
timer-ul watchdog (dac este activat).
1=a avut loc eroare
0=nu a avut loc eroare
bit 4 EEIF (EEPROM Write Operation Interrupt Flag bit-bit Stegule ntrerupere Operaie Scriere EEPROM) Bit folosit
pentru a informa c scrierea datelor s-a terminat.
Cnd s-a terminat scrierea, acest bit va fi setat automat. Programtorul trebuie s tearg bitul EEIF n programul su
pentru a detecta noua terminare a scrierii.
1=scrierea terminat
0=scrierea nc neterminat, sau nc nu a nceput
http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/2_09Poglavlje.htm (1 of 2)07.May.07 6:21:37 PM

Chapter 2 - Microcontroller PIC16F84

Citirea din memoria EEPROM


Setarea bitului RD iniializeaz transferul de date de la adresa gsit n EEADR la registrul EEDATA. Ca i la citirea
datelor nu avem nevoie de att de mult timp ca la scriere, datele luate din registrul EEDATA pot deja fi folosite mai
departe n urmtoarea instruciune.
O mostr a prii programului ce citete datele n EEPROM, ar putea arta ca mai jos:

Dup ultima instruciune de program, coninutul de la o adres EEPROM zero poate fi gsit n registrul w.

Scrierea n memoria EEPROM


Pentru a scrie datele n locaia EEPROM, programatorul trebuie mai nti s scrie adresa n registrul EEADR i datele n
registrul EEDATA. Numai atunci este folositor de a seta bitul WR ce pune totul n micare. Bitul WR va fi resetat, i bitul
EEIF setat urmnd o scriere ce poate fi folosit n procesarea ntreruperilor. Valorile 55h i AAh sunt prima i a doua
cheie care interzic ca scrierea accidental n EEPROM s se ntmple. Aceste dou valori sunt scrise n EECON2 care
servete doar pentru acel scop, de a primi aceste dou valori i de a preveni orice scriere accidental n memoria
EEPROM. Liniile de program marcate ca 1, 2, 3 i 4 trebuie s fie executate n acea ordine n intervale egale de timp.
De aceea este foarte important, s nchidei ntreruperile ce ar putea schimba timpul necesar pentru executare
instruciunilor. Dup scriere, ntreruperile, pot fi permise din nou.
Exemplu unei pri a programului ce scrie datele 0xEE n prima locaie n memoria EEPROM ar putea arta ca mai jos:

Este recomandat ca WREN s fie nchis tot timpul cu excepia scrierii datelor n EEPROM, aa c posibilitatea
unei scrieri accidentale va fi minim. Scrierea n EEPROM va fi automat tears!

Pagina anterioar

Coninut

Pagina urmtoare

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/2_09Poglavlje.htm (2 of 2)07.May.07 6:21:37 PM

Chapter 5 - MPLAB

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

5.2 Introducere n MPLAB


Urmnd procedura de instalare, vei obine un ecran al programului nsui. Dup cum vedei, MPLAB arat ca cele mai multe
programa Windows. n apropierea zonei de lucru este un "menu" (n partea de sus colorat n albastru cu opiunile File, Editetc.),
"toolbar" (o zon cu ilustraii de mrimea unor ptrate mici), i linia de stare n partea de jos a ferestrei. Este o regul n Windows de
a lua cele mai frecvent folosite opiuni de programe i de a le plasa mai jos 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.

Ecranul dup startarea MPLAB


Scopul acestui capitol este ca s devenii familiar cu mediul de dezvoltare MPLAB i cu elementele de baz ale MPLAB ca:
Alegerea modului de dezvoltare
Conceperea unui proiect
Conceperea unui fiier pentru programul original
Scrierea un program elementar n limbajul de programare asamblor
Translarea unui program n cod executiv
Startarea programului
Deschiderea unei noi ferestre pentru un simulator
Deschiderea unei noi ferestre pentru variabile a cror valori le urmrim (Watch Window)
Salvarea unei fereastre cu variabile a cror valori le urmrim
Setarea punctelor de ntreupere ntr-un simulator (Break point)
Pregtirea unui program de a fi citit ntr-un microcontroler se poate rezuma n civa pai:

Pagina anterioar

Coninut

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/5_02Poglavlje.htm (1 of 2)07.May.07 6:21:39 PM

Pagina urmtoare

Chapter 5 - MPLAB

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/5_02Poglavlje.htm (2 of 2)07.May.07 6:21:39 PM

Chapter 5 - MPLAB

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

5.3 Alegerea modului de dezvoltare


Setarea unui mod dezvoltare este necesar aa ca MPLAB s poat ti ce instrumente vor fi folosite pentru a executa programul scris.
n cazul nostru, avem nevoie s setm simulatorul ca un instrument ce este folosit. Fcnd clic pe OPTIONS---> DEVELOPMENT MODE,
o nou fereastr apare ca n imaginea de mai jos:

Setarea unui mod de dezvoltare


Trebuie s selectm opiunea 'MPLAB-SIM Simulator' pentru c acolo se va testa programul. n afar de aceast opiune, este de
asemenea disponibil opiunea 'Editor Only'. Aceast opiune este folosit doar dac dorim s scriem un program i prin programator
s scriem ' hex file' ntr-un microcontoler. Selecia modelului microcontrolerului este fcut n partea dreapt. Pentru c aceast carte
este bazat pe PIC16F84, trebuie selectat acest model.
De obicei cnd ncepem s lucrm cu microcontrolere, folosim un simulator. Dup cum nivelul cunoaterii va crete, programul se va
scrie ntr-un microcontroler imediat dup translare. Sfatul nostru este ca s folosii totdeauna simulatorul. Chiar dac programul va
prea c se dezvolt lent, se va merita la sfrit.

Pagina anterioar

Coninut

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/5_03Poglavlje.htm07.May.07 6:21:40 PM

Pagina urmtoare

Chapter 5 - MPLAB

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

5.4 Conceperea unui proiect


Pentru a ncepe s scriei un program avei nevoie s creai mai inti un proiect. Fcnd clic pe PROJECT --> NEW PROJECT putei s
v denumii proiectul i s-l memorai ntr-un director pe care-l dorii. n imaginea de mai jos, este creat un proiect numit 'test.pjt' i
memorat n directorul c:\PIC\PROJEKTS\.
Acest director este ales pentru c autorii au ales acest director n calculatorul lor. n general, un director cu fiiere este plasat de obicei
ntr-un director mai mare a crui nume este asociat negreit cu coninutul lui.

Deschiderea unui proiect nou


Dup denumirea unui proiect, clic pe OK. O nou fereastr apare n imaginea umtoare.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/5_04Poglavlje.htm (1 of 3)07.May.07 6:21:42 PM

Chapter 5 - MPLAB

Ajustnd elementele proiectului


Fcnd un clic pe "test [.hex]" se activeaz opiunea 'Node properties' n colul din dreapta jos a ferestrei. Fcnd clic pe ea obinei
urmtoarea fereastr.

Definind parametrii asamblorului MPASM


Din aceast imagine observm c sunt diferii parametri. Fiecare fel corespunde la un parametru n "Command line". Pentru c
memorarea acestor parametri este foarte necomfortabil, chiar interzis pentru nceptori, s-a introdus ajustarea grafic. Din imagine
observm ce opiuni trebuie deschise. Fcnd clic pe OK ne ntoarcem la fereastra anterioar unde "Add node" este o opiune activ.
Fcnd clic pe ea obinem urmtoarea fereastr unde ne denumim programul asamblor. S-l denumim"Test.asm" pentru c acesta
este primul nostru program n MPLAB.

Deschiznd un proiect nou


Fcnd clic pe OK ne ntoarcem la fereastra de nceput unde observm adugat un fiier asamblor.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/5_04Poglavlje.htm (2 of 3)07.May.07 6:21:42 PM

Chapter 5 - MPLAB

Fiier asamblor adugat


Fcnd clic pe OK ne ntoarcem la mediul de dezvoltare MPLAB.

Pagina anterioar

Coninut

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/5_04Poglavlje.htm (3 of 3)07.May.07 6:21:42 PM

Pagina urmtoare

Chapter 5 - MPLAB

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

5.5 Conceperea unui nou fiier asamblor(scrierea un program nou)


Cnd partea "proiect" a lucrului este terminat, trebuie s ncepem s scriem un program. Cu alte cuvinte, un nou fiier trebuie
deschis, i se va denumi "test.asm". n cazul nostru, fiierul trebuie denumit "test.asm" pentru c n proiecte ce au doar un fiier ( ca
al nostru), numele proiectului i numele fiierului surs trebuie s fie aceleai.
Un nou fiier este deschis fcnd clic pe FILE>NEW. Astfel obinem o fereastr text n interiorul spaiului de lucru MPLAB.

Fiier nou asamblor deschis


Fereastra nou reprezint un fiier unde va fi scris programul. Pentru c fiierul nostru trebuie denumit "test.asm", l vom denumi aa.
Denumirea se face (ca la toate programele Windows) prin clic pe FILE>SAVE AS. Obinem apoi o fereastr ca imaginea urmtoare.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/5_05Poglavlje.htm (1 of 2)07.May.07 6:21:43 PM

Chapter 5 - MPLAB

Denumirea i salvarea unui fiier asamblor nou


Cnd obinem aceast fereastr, trebuie s scrierm'test.asm' mai jos de 'File name:', i facem clic pe OK. Dup aceea, vom observa
numele fiierului 'test.asm' n partea de sus a ferestrei noastre.

Pagina anterioar

Coninut

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/5_05Poglavlje.htm (2 of 2)07.May.07 6:21:43 PM

Pagina urmtoare

Chapter 5 - MPLAB

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

5.6 Scrierea unui program


Numai dup ce toate operaiile precedente au fost terminate suntem capabili s ncepem s scriem un program. Pentru c un program
simplu a fost deja scris n seciunea crii "Programare n Limbaj de Asamblare", vom folosi acelai program aici, de asemenea.

Programul trebuie s fie scris ntr-o fereastr care este deschis, sau copiat de pe un disc, sau luat din prezentarea Mikroelektronika
Internet folosind opiunile copy i paste. Cnd programul este copiat n "test.asm" window, putem folosi comanda PROJECT -> BUILD
ALL (dac nu sunt erori), i o nou fereastr va apare ca n imaginea urmtoare.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/5_06Poglavlje.htm (1 of 2)07.May.07 6:21:44 PM

Chapter 5 - MPLAB

Fereastr cu mesaje dup translarea programului asamblor


Putem vedea din imagine c obinem fiierul "test.hex" ca rezultat al procesului de translare, pentru care este folosit programul
MPASMWIN, i c este doar un mesaj. n toate aceste informaii, ultima propoziie n fereastr este cea mai important pentru c
arat dac translarea a fost sau nu fcut cu succes. 'Build completed successfully' este un mesaj afirmnd c translarea a fost de
succces i c nu sunt alt erori.
n caz c apare o eroare, trebuie s facem dublu clic pe mesajul eroare n fereastra 'Build Results'. Aceasta v va transfera automat n
programul asamblor i n linia unde a fost eroarea.

Pagina anterioar

Coninut

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/5_06Poglavlje.htm (2 of 2)07.May.07 6:21:44 PM

Pagina urmtoare

Chapter 5 - MPLAB

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

5.7 Simulatorul MPSIM


Simulatorul este o parte a mediului MPLAB care d o mai bun imagine a lucrrilor unui microcontroler. Printr-un simulator, putem
monitoriza valorile curente ale variabilelor, valorile registrului i starea pinilor portului. Este adevrat, simulatorul nu are aceeai
valoare n toate programele. Dac un program este simplu ( ca cel dat aici ca exemplu), simulrea nu este foarte important pentru c
setarea pinilor portului B la unu logic nu este o sarcin dificil. Totui, simulatorul poate fi de mare de mare ajutor la programele mai
complicate ce includ timer-i, condiii diferite unde ceva se ntmpl , i alte cerine similare (n special cu operaii matematice).
Simularea, dup cum indic numele " simuleaz lucrul unui microcontroler". n timp ce simulatorul este conceput ca microcontrolerul
s execute instruciunile una cte una, programatorul se mic ntr-un program pas-cu-pas (linie-cu-linie) i urmrete ce se ntmpl
cu datele n microcontroler. Cnd scrierea s-a terminat, este un obicei bun ca programatorul s-i verifice mai nti programul su n
simulator, i apoi s-l ruleze ntr-o situaie real. Din nefericire, a cum se ntmpl cu multe alte obiceiuri bune, acesta este mai
puin sau mai mult luat n seam. Motivele pentru aceasta sunt n parte personalitatea, i n parte lipsa unor simulatoare bune.
Primul lucru pe care trebuie s-l facem este, ca ntr-o situaie real, este de a reseta un microcontroler cu comanda DEBUG > RUN >
RESET. 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 (pc: 0x00).

nceperea simulrii programului, 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 SFR. Putem obine o fereastr cu regitri SFR fcnd clic pe WINDOW->SPECIAL FUNCTION
REGISTERS, sau pe icon-ul SFR. nafar de regitrii SFR, este util de a avea o avea o privire n interiorul fiierului regitrilor. Fereastra
cu fiierul regitrilor poate fi deschis fcnd clic pe WINDOW->FILE REGISTERS. Dac sunt variabile n program, este bine de a le
vedea de asemenea. Fiecrei variabile i este desemnat o fereastr (Watch Windows) fcnd clic pe WINDOW->WATCH WINDOWS.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/5_07Poglavlje.htm (1 of 2)07.May.07 6:21:45 PM

Chapter 5 - MPLAB

Simulator cu ferestre deschise pentru regitri SFR, fiierul regitrilor i variabile.


Comanda urmtoare ntr-un simulator este DEBUG>RUN>STEP care ncepe paii notri prin program. Aceeai comand ar fi putut fi
desemnat de la o tastatur cu tasta <F7> (n general, toate comenzile importante au taste desemnate de le claviatur). Folosind
tasta F7, programul este executat pas cu pas. Cnd obinem un macro, fiierul coninnd un macro este deschis (Bank.inc), i
continum cu macro. ntr-o fereastr cu regitri SFR putem observa cum registrul W primete valoarea 0xFF i pe care o trimite la
portul B. Fcnd clic pe tasta F7 din nou, nu obinem nimic pentru c programul a ajuns ntr-o "infinite loop"-bucl infinit. Bucla
infinit este un termen pe care l ntlnim adesea. Reprezint bucla din care un microcontroler nu poate iei pn nu se ntmpl
ntreruperea (dac este folosit ntr-un program), sau pn ce micorcontrolerul va fi resetat.

Pagina anterioar

Coninut

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/5_07Poglavlje.htm (2 of 2)07.May.07 6:21:45 PM

Pagina urmtoare

Chapter 5 - MPLAB

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

5.8 Toolbar
Pentru c MPLAB are mai mult de o component, fiecare component are bara sa de instrumente, toolbar-ul su. Totui, este un
toolbar care este un fel de compilaie a tuturor toolbar-ilor, i poate servi ca un toolbar folosit n mod uzual. Acest toolbar este de
ajuns pentru nevoile noastre, i va fi descris n detaliu. n figura de mai jos putem vedea un toolbar pentru care avem nevoie de o
scurt explicaie pentru fiecare icon. Din cauza formatului limitat a cestei cri, acest toolbar este reprezentat ca un toolbar
suspendat. n general, este plasat orizontal mai jos de menu, de-a lungul ntregului ecran.

Toolbar universal cu scurte explicaii ale icon urilor


Descriere a icon-urilor toolbar-ului
Dac toolbar-ul curent nu rspunde datorit diferitor motive la un clic pe acest icon, apare
urmtorul. Schimbarea total este repetat aa nct la al patrulea clic vom obine acelai
toolbar.
Icon pentru deschiderea unui proiect. Proiectul deschis n acest fel conine toate ajustrile
ecranului i ajustarea tuturor elementelor care sunt cruciale pentru proiectul curent.
Icon pentru salvarea unui proiect. Proiectul salvat va pstra toate ajustrile ferestrei i toate
ajustrile parametrilor. Cnd citim un program din nou, totul se va ntoarce pe ecran ca atunci
cnd s-a nchis proiectul.
Cutarea unei pri de program, sau cuvinte este operaia de care avem nevoie cnd cutm
printr-un asamblor mare sau alte programe. Folosindu-l, putem gsi repede o parte a
programului, label, macro, etc.
Tind o parte a textului. Acesta i urmtoarele trei icon-uri sunt standard n toate programele
care au de a face cu procesarea fiierelor textuale. Pentru c fiecare program este de fapt un
fiier text obinuit, aceste operaii sunt folositoare.
Copiind o parte a textului. Este o diferen ntre acesta i iconul precedent.Cu operaia de tiere,
cnd tiai o parte a textului, dispare din ecran (i din program) i este copiat dup aceea. Dar cu
operaia copy, textul este copiat i nu tiat, i rmne pe ecran.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/5_08Poglavlje.htm (1 of 2)07.May.07 6:21:47 PM

Chapter 5 - MPLAB

Cnd o parte a textului este copiat, este mutat ntr-o parte a memoriei ce servete pentru
transferarea datelor n sistemul operaional Windows. Mai trziu, fcnd clic pe acest icon poate fi
lipit-'pasted' n textul unde este cursorul.
Salvnd un program (fiier asamblor).
Starteaz execuia programului la vitez maxim.Se recunoate prin apariia unei linii de stare
galbene. Cu acest fel de execuie de program, simulatorul execut un program la vitez maxim
pn ce este ntrerupt de un clic pe iconul cu lumin roie de trafic.
Oprete execuia programului la vitez maxim. Dup clic pe acest icon, linia de stare devine gri
din nou, i execuia programului poate continua pas cu pas.
Pas cu pas execuia programului. Fcnd clic pe acest icon, ncepem executarea unei instruciuni
din linia urmtoare n legtur cu cea curent.
Cerere de a sri-skip. Pentru c simulatorul este totui o simulare de software de lucru real, este
posibil de a sri pur i simplu peste unele cereri ale programului. Aceasta este n special la
ndemn cu instruciuni ce ateapt o anumit cerere dup care programul poate s continue.
Acea parte a programului ce urmeaz unei cerei este partea ce este interesant pentru un
programator.
Resetnd un microcontroler. Fcnd clic pe acest icon, contorul programului este poziionat la
nceputul programului i simularea poate ncepe.
Fcnd clic pe acest icon obinem o fereastr cu un program, dar de aceast dat ca memorie de
program unde putem veea ce instruciune este gsit i la ce adres.
Cu ajutorul acestui icon obinem o fereastr cu coninutul memoriei RAM a microcontrolerului.
Fcnd clic pe acest icon, apare fereastra cu registrul SFR. Pentru c regitrii SFR sunt folosii n
fiecare program, este recomandat ca n simulator aceast fereastr s fie totdeauna activ.
Dac un program conine variabile ale cror valoare trebuie s le urmrim (ex. contorul), o
fereastr are nevoie s fie adgat pentru fiecare din ele, ceea ce se face prin folosirea acestui
icon.
Cnd unele erori ntr-un program sunt evideniate n timpul procesului de simulare, programul
trebuie corectat. Pentru c simulatorul folosete fiier HEX ca intrare a sa, trebuie s translm un
program din nou aa ca toate schimbrile s fie transferate ntr-un simulator. Fcnd clic pe acest
icon, ntregul proiect este translat din nou, i obinem versiunea mai nou a fiierului HEX pentru
simulator.

Pagina anterioar

Coninut

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/5_08Poglavlje.htm (2 of 2)07.May.07 6:21:47 PM

Pagina urmtoare

Chapter 6 - Samples

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

Macrouri folosite n programe


Exemplele din seciunile urmtoare ale acestui capitol utilizeaz deseori WAIT, WAITx i PRINT, de aceea ele vor fi explicate n detaliu.

Macrourile WAIT, WAITx


Fiierul Wait.inc conine dou macrouri: WAIT i WAITx. Prin intermediul acestor macrouri este posibil s repartizm ntrzieri de timp
n intervale variate. Amndou macrouri folosesc depirea contorului TMR0 ca un interval de timp de baz. Prin schimbarea prescalerului putem schimba lungimea intervalului depirii contorului TMR0.

Dac folosim un oscilator (rezonator) de 4MHz, pentru valorile prescaler-ului 0,1 i 7 care divid ceasul de baz al oscilatorului,
intervalul urmat de o depire a contorului TMR0 va fi 0.512, 1.02 i 65.3ms. Practic, aceasta nseamn c cea mai mare ntrziere va
fi 256x65.3ms care este egal cu 16.72 secunde.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_02Poglavlje.htm (1 of 3)07.May.07 6:21:49 PM

Chapter 6 - Samples

Pentru a utiliza macrouri n programul principal este necesar s declarm variabilele wcycle i prescWAIT dup cum vom vedea n
exemplele ce vor urma acestui capitol. Macroul WAIT are un singur argument. Valoarea standard atribuit prescaler-ului acestui macro
este 1 (1.02ms), i nu poate fi schimbat.
WAIT timeconst_1
timecons-t_1 este un numr de la 0 la 255. Prin multiplicarea acestui numr cu perioada de timp de depire (overflow) vom obine
durata total a ntrzierii: TIME = timeconst_1 x 1.02ms.
Exemplu: WAIT .100
Exemplul arat cum s obinem o ntrziere de 100x1.02ms, sau durata total de 102ms.
Spre deosebire de macroul WAIT, macroul WAITX mai are un argument care poate atribui o valoare prescaler-ului. Macroul WAITX are
dou argumente:
timeconst_2 este un numr de la 0 la 255. Prin multiplicarea acestui numr cu perioada de timp de depire (overflow) vom obine
durata total a ntrzierii: TIME = timeconst_1 x 1.02ms x PRESCext.
PRESCext este un numr de la 0 la 7 care seteaz relaia dintre tact i timer-ul TMR0.
Exemplu: WAITX .100,7
Exemplul arat cum s obinem o ntrziere de 100x65.3ms, sau durata total de 653ms.

Macroul PRINT
Macroul PRINT este localizat n fiierul Print.inc. El uureaz lucrul pentru trimiterea unui ir de date la unul dintre dispozitivele de
ieire, cum ar fi: LCD, RS232, imprimant matricial...etc. Cea mai uoar cale pentru a forma o serie este prin folosirea unei
directive dt (define table). Aceast instruciune memoreaz o serie de date n cadrul memoriei programului ca un grup de instruciuni
retlw al crui operand este data din ir.

Modalitatea prin care o astfel de secven este format folosind instruciunea dt este artat n urmtorul exemplu:

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_02Poglavlje.htm (2 of 3)07.May.07 6:21:49 PM

Chapter 6 - Samples

org 0x00
goto Main
String movwf PCL
String1 dt "acesta este un sir ASCII"
String2 dt "al doilea sir"
End
Main
movlw .5
call String
:
Prima instruciune dup eticheta Main scrie poziia unui membru al irului n registrul W. Executm un salt cu instruciunea call la
eticheta irului unde poziia membrului irului este adunat la valoarea PC (Program Counter): PCL = PCL + W. n continuare avem n
program counter o adres a instruciunii retlw cu membrul dorit al irului. n momentul n care aceast instruciune este executat,
membrul irului va fi n registrul W, i adresa instruciunii care va fi executat dup instruciunea call va fi n program counter.
Eticheta end este o metod elegant de a marca adresa la care irul se termin.
Macroul PRINT are cinci argumente:
PRINT macro Addr, Start, End, Var, Out
Addr este o adres unde unul sau mai multe iruri (situate unul dup altul) ncep.
Start este o adres a primului membru al irului.
End este o adres unde irul se termin.
Var este variabila care are rolul de a arta (pointa) membrii irului.
Out este un argument pe care l folosim pentru a trimite adresa rutinelor existente atribuite dispozitivelor de ieire cum ar fi: LCD, RS232, etc.

Macroul PRINT scrie la ieire un ir mikroElektronika format din caractere ASCII la un dispozitiv de afiare LCD. irul takes one part
of program memory ncepnd cu adresa 0x03.

Pagina anterioar

Coninut

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_02Poglavlje.htm (3 of 3)07.May.07 6:21:49 PM

Pagina urmtoare

Chapter 6 - Samples

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

Example
Light Emitting Diodes LEDuri
Ledurile sunt unele dintre cele mai folosite elemente n electronic. LED este o abreviere pentru Light Emitting Diode. n momentul n
care alegem un led, sunt mai muli parametri de care trebuie s inem seama: diametrul, care este deobicei 3 sau 5mm (milimetri),
curentul de funcionare care este n jur de 10mA (poate fi mai mic dect 2mA pentru ledurile cu randament maxim: emisie de lumin
puternic) i bineneles culoarea, care poate fi roie sau verde dei mai sunt leduri portocalii, albastre, galbene... . Ledurile trebuie
conectate corect pentru a emite lumin i rezistena care limiteaz curentul trebuie s fie de o valoare corect pentru ca ledul s nu se
ard (supranclzire). Tensiunea pozitiv de alimentare este legat la ANOD, iar catodul este legat la tensiunea negativ sau la masa
circuitului. Pentru a identifica fiecare pin, catodul este cel mai scurt pin iar corpul are n general o teitur pe partea catodului. Diodele
vor emite lumin numai dac curentul circul de la ANOD spre CATOD. Altfel jonctiunea PN este polarizat invers i curentul nu va
circula. Pentru a conecta corect un led trebuie adugat o rezisten n serie pentru a limita de curentul prin diod, pentru ca aceasta
s nu se ard. Valoarea rezistenei este determinat de curentul care vrei s circule prin led. Curentul maxim care poate curge printrun led a fost stabilit de productor. Ledurile cu randament maxim pot produce rezultate bune cu un curent mai mic de de 2mA.

Pentru a determina valoarea rezistenei serie, trebuie s


cunoatem valoarea tensiunii de alimentare. De aici scdem
tensiunea care cade pe led. Aceast valoare va varia de la 1,2v la
1,6v, depinznd de culoarea ledului. Rspunsul este valoarea lui
Ur. Folosind aceast valoare i curentul care vrem s circule prin
LED (ntre 0.002A i 0.01A) putem s aflm valoarea rezistenei cu
ajutorul formulei: R=UR / I.

Ledurile 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. Prima metod este numit logic NEGATIV iar cea de-a doua este numit logic POZITIV. Figura de mai sus ilustreaz
modalitatea de conectare prin logic POZITIV. Deoarece logica POZITIV ofer o tensiune de +5v diodei i rezistenei serie, ledul va
emite lumin de fiecare dat cnd un pin al portului B este n starea 1 logic (1 = ieire HIGH). Logica NEGATIV necesit ca ledul s fie
ntors i terminalele de tip anod s fie conectate mpreun la borna pozitiv a sursei. n momentul n care este livrat o ieire LOW de
la microcontroler ctre anod i rezisten, ledul va lumina.

Connecting LED diodes to PORTB microcontroller

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_03Poglavlje.htm (1 of 2)07.May.07 6:21:50 PM

Chapter 6 - Samples

Exemplul urmtor initializeaz portul B ca port de ieire i seteaz unu logic pe fiecare pin al portului B pentru a activa toate ledurile.

Pagina anterioar

Coninut

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_03Poglavlje.htm (2 of 2)07.May.07 6:21:50 PM

Pagina urmtoare

Chapter 6 - Samples

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

Tastatura
Tastaturile sunt dispozitive mecanice utilizate pentru a executa o ntrerupere sau pentru a realiza o conexiune ntre dou puncte. Ele
au diferite mrimi i au diferite scopuri. Tastele care sunt utilizate aici sunt denumite taste dip. Ele sunt lipite direct pe o plac de
circuit i sunt deseori ntlnite n electronic. Au patru pini (doi pentru fiecare contact), ceea ce le ofer stabilitate mecanic.

Exemplu pentru conectarea tastelor la pinii microcontrolerului


Funcia tastei este simpl. n momentul n care apsm o tast, dou contacte sunt unite i se realizeaz o conexiune. Totui, nu toate
lucrurile sunt simple. Problema const n natura tensiunii ca valoare, i n imperfeciunea contactelor mecanice. nainte ca un contact
s fie realizat sau decuplat, exist o perioad scurt de timp cnd pot aprea vibraii (oscilaii) ca rezultat al imperfeciunii contactelor
mecanice, sau din cauza vitezei diferite de apsare (acest lucru depinde de persoana care apas tasta). Termenul atribuit acestui
fenomen este denumit switch (contact) debounce. Dac acest lucru nu este prevzut n momentul n care un program este
conceput, poate aprea o eroare sau programul poate produce mai mult dect un singur impuls la ieire pentru o singur apsare de
tast. Pentru a evita acest lucru, putem introduce o mic ntrziere cnd detectm nchiderea unui contact. Aceasta va asigura faptul
c apsarea unei taste este interpretat ca un singur impuls. ntrzierea de debounce este produs n software i durata ntrzierii
depinde de buton i de scopul butonului. Problema poate fi parial rezolvat prin adugarea unui condensator n paralel la tast, dar
un program bine realizat ofer rezultate mai bune. Programul poate fi ajustat pn cnd detecia fals este complet eliminat. n
anumite cazuri o simpl ntrziere poate fi suficient dar dac vrei ca programul s se ocupe de mai multe lucruri n acelai timp, o
simpl ntrziere 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. Soluia este s avem un program care s urmreasc apsarea unei taste ct i decuplarea unei taste.
Macroul de mai jos poate fi folosit pentru keypress debounce.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_04Poglavlje.htm (1 of 3)07.May.07 6:21:52 PM

Chapter 6 - Samples

Macroul precedent are mai multe argumente care trebuiesc explicate:


BUTTON macro HiLo, Port, Bit, Delay, Address
HiLo poate fi 0 sau 1 care reprezint frontul cresctor sau cztor unde subrutinele pot fi executate n momentul n care apsai o
tast.
Port este un port al microcontrolerului la care trebuie conectat tasta. n cazul microcontrolerului PIC16F84, el poate fi PORT A sau
PORT B.
Bit este un pin al portului la care tasta este conectat.
Delay este un numr de la 0 la 255, folosit pentru a atribui timpul necesar pentru a detecta key debounce contact oscillation
to stop. El este calculat astfel: TIME = Delay x 1ms.
Adress este adresa la care microcontrolerul se duce dup ce este detectat un eveniment provenit de la tastatur. Subrutina de la
aceast adres execut instruciunile necesare pentru apsarea unei taste.
Exemplu 1 BUTTON 0, PORTA, 3, .100, Tester1_above
Tasta-1 este conectat la RA0 (prima ieire a portului A) cu o ntrziere de 100 milisecunde i cu o reacie la zero logic. Subrutina care
proceseaz tasta este localizat la adresa etichetei Tester1_above.
Exemplu 2 BUTTON 1, PORTA, 2, .200, Tester1_below
Tasta-2 este conectat la RA1 (a doua ieire a portului A) cu 200ms ntrziere i cu reacie la unu logic.
Exemplul urmtor arat modul de folosire ntr-un program. BUTTON.ASM aprinde i stinge LEDul. LEDul este conectat la cea de-a
aptea ieire a portului B. Tasta-1 este folosit pentru a aprinde LEDul. Tasta-2 stinge LEDul.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_04Poglavlje.htm (2 of 3)07.May.07 6:21:52 PM

Chapter 6 - Samples

Pagina anterioar

Coninut

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_04Poglavlje.htm (3 of 3)07.May.07 6:21:52 PM

Pagina urmtoare

Chapter 6 - Samples

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

Optocuplor
Optocuplorul combin un LED i un fototranzistor n aceeai capsul. Rolul unui optocuplor este acela de a separa dou
pri de circuit.
Aceasta este realizat pentru un numr de motive:

Interferena. O parte a unui circuit poate fi ntr-o zon unde este influenat de interferene (cum ar fi cele de la motoarele
electrice, echipamente de sudur, motoare termice etc.). Dac ieirea acestui circuit trece printr-un optocuplor spre alt circuit,
numai semnalele dorite vor trece prin optocuplor. Semnalele de interferen nu vor avea destul putere s activeze LEDul din
optocuplor i de aceea ele sunt eliminate. Exemplele tipice sunt unitile industriale care au mai multe interferene care
afecteaz semnalele pe cablu. Dac aceste interferene afecteaz funcia unei seciuni de control, vor apare erori i unitatea nu
va mai funciona.
Separare simultan i intensitatea semnalului. Un semnal mai mic de 3v este capabil s activeze un optocuplor i ieirea
optocuplorului poate fi conectat la o linie de intrare a microcontrolerului. Microcontrolerul are nevoie de un impuls de intrare
de 5v i n caz semnalul de 3v este amplificat la 5v. Poate fi folosit pentru a amplifica curentul semnalului. Uitai-v mai jos
pentru utilizarea unei linii de ieire a microcontrolerului pentru amplificare de curent.
Separare de tensiune mare. Optocuploarele au caliti nnscute pentru separarea tensiunilor mari. Deoarece LEDul este
complet separat de fototranzistor, optocuploarele pot da dovad de izolare de tensiune de 3Kv sau chiar mai mare.

Optocuploarele pot fi folosite ca dispozitive de intrare sau ieire. Ele au funcii adiionale cum ar fi Schmitt triggering (ieirea unui
Schmitt trigger este 0 sau 1 se schimb ncet ridicnd i cobornd forma de und n valori definite LOW sau HIGH). Optocuploarele
sunt mpachetate ca o singur unitate sau n grupuri de dou sau mai multe ntr-o singur capsul. Ele mai sunt denumite fotontreruptoare n care un disc cu fante este introdus ntr-un lca ntre LED i fototranzistor i de fiecare dat cnd lumina este
ntrerupt, tranzistorul produce un impuls. Fiecare optocuplor are nevoie de dou alimentri pentru a funciona. Ele pot fi folosite cu o
alimentare, dar capacitatea de izolare a tensiunii este pierdut.

Optocuplor pe o linie de intrare


Modul de funcionare este simplu: cnd ajunge un semnal, LEDul din optocuplor este aprins i lumineaz pe baza fototranzistorului din
aceeai carcas. n momentul n care tranzistorul este activat, tensiunea dintre colector i emitor cade la 0.5v sau mai puin i
microcontrolerul sesizeaz acest lucru ca zero logic pe pinul RA4. Exemplul de mai jos este un contor, folosit pentru numrarea
produselor de pe o linie de producie, pentru determinarea vitezei motorului, pentru contorizarea numrului de revoluii a unei axe
etc. Considerm senzorul ca un microntreruptor. De fiecare dat cnd ntreruptorul este nchis, LEDul este luminat. LEDul
transfer semnalul ctre fototranzistor i operaia fototranzistorului livreaz LOW ctre intrarea RA4 a microcontrolerului. Un
program n microcontroler va fi necesar pentru a preveni contorizrile false i un indicator conectat la oricare dintre ieirile
microcontrolerului va indica starea curent a contorului.

Exemplu de linie de intrare cu optocuplor

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_05Poglavlje.htm (1 of 3)07.May.07 6:21:53 PM

Chapter 6 - Samples

Optocuplor pe o linie de ieire


Un optocuplor poate fi folosit pentru a separa semnalul de ieire a unui microcontroler fa de un dispozitiv de ieire. Acest lucru poate
fi necesar pentru separarea tensiunilor nalte sau pentru amplificare. Ieirea unor anumite microcontrolere este limitat la 25mA.
Optocuplorul va lua semnal de curent sczut din microcontroler i tranzistorul de ieire va comanda un LED sau un releu, cum este
exemplificat mai jos:

Output line optocoupler example

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_05Poglavlje.htm (2 of 3)07.May.07 6:21:53 PM

Chapter 6 - Samples

Programul pentru acest exemplu este simplu. Prin livrarea unui 1 logic n pinul 4 al portului A, LEDul se va aprinde i tranzistorul va fi
activat n optocuplor. Orice dispozitiv conectat la ieirea optocuplorului va fi activat. Curentul limit pentru tranzistor este n jur de
250mA.

Pagina anterioar

Coninut

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_05Poglavlje.htm (3 of 3)07.May.07 6:21:53 PM

Pagina urmtoare

Chapter 6 - Samples

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

Releul
Releul este un dispozitiv electromecanic care transform un semnal electric ntr-o micare mecanic. El este alctuit dintr-o bobin din
conductori izolai nfurai pe un nucleu metalic i o armtur metalic cu unul sau mai multe contacte. n momentul n care o
tensiune de alimentare este aplicat la bornele unei bobin, curentul circul i va fi produs un cmp magnetic care mic armtura
pentru a nchide un set de contacte i/sau pentru a deschide un alt set. Cnd alimentarea este dezactivat din releu, cade fluxul
magnetic din bobin i se produce o tensiune nalt n direcia opus. Aceast tensiune poate strica tranzistorul de comand i de
aceea este conectat o diod cu polarizare invers de-a lungul bobinei pentru a scurtcircuita vrfurile de tensiune n momentul n care
apar.

Conectarea unui releu la microcontroler prin intermediul unui tranzistor


Multe microcontrolere nu pot comanda un releu direct i de aceea un tranzistor de comand este necesar. Un HIGH pe baza
tranzistorului activeaz tranzistorul i acesta la rndul lui activeaz releul. Releul poate fi conectat la orice dispozitiv electric prin
intermediul contactelor. Rezistena de 10K din baza tranzistorului limiteaz curentul dinspre microcontroler la o valoare solicitat de
tranzistor. Rezistena de 10K dinspre baz i bara negativ previne ca tensiunile de zgomot aplicate n baza tranzistorului s activeze
releul. De aceea numai un semnal clar de la microcontroler va activa releul.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_06Poglavlje.htm (1 of 3)07.May.07 6:21:55 PM

Chapter 6 - Samples

Connecting the optocoupler and relay 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. Optocuploarele HIGH CURRENT deobicei conin un tranzistor cu o ieire
Darlington 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 ajunge n microcontroler
prin intermediul liniilor de alimentare. Optocuplorul comand un releu iar releul activeaz motorul. Figura de mai jos arat programul
necesar pentru activarea releului i include cteva din macrourile deja discutate.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_06Poglavlje.htm (2 of 3)07.May.07 6:21:55 PM

Chapter 6 - Samples

Pagina anterioar

Coninut

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_06Poglavlje.htm (3 of 3)07.May.07 6:21:55 PM

Pagina urmtoare

Chapter 6 - Samples

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

Generarea unui sunet


Un buzzer piezo poate fi adugat la o linie de ieire a unui microcontroler pentru a livra tonuri audio, piuituri i semnale. Este
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. n general tonurile sau beep-urile
emise de aceste difuzoare sau piuitoare nu pot fi schimbate ele sunt fixe 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. Depinznd de
frecvena formei de und, ieirea poate fi ton, melodie, alarm sau chiar un mesaj vocal. Pentru ca ele s funcioneze trebuie s
livrm un ciclu care este alctuit din semnale HIGH i LOW. Tranziia de la HIGH la LOW sau de la LOW la HIGH cauzeaz micri
diafragmei pentru a produce secvene de sunete. Forma de und poate avea o schimbare fin de la o valoare la alta (denumit und
sinusoidal) sau o schimbare rapid (denumit und dreptunghiular). Un calculator este ideal pentru producerea de unde
dreptunghiulare. Livrarea 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 jos. Acesta va
livra o form de und de 5v ctre buzzerul piezo. Pentru a produce o tensiune mai mare, forma de und trebuie amplificat i aceasta
necesit un tranzistor de comand i o bobin.

Conectarea unui buzzer piezo la un microcontroler


Ca i n cazul tastaturii, putei folosi un macro care va furniza o rutin BEEP ntr-un program cnd va fi necesar.
BEEP macro freq, duration
freq: frecvena sunetului. Un numr mai mare produce o frecven mai nalt.
duration: durata sunetului. Un numr mai mare reprezint un sunet mai lung.
Exemplu 1: BEEP 0xFF, 0x02
Ieirea buzzerului piezo are cea mai nalt frecven i durata de 2 cicluri de 65.3ms, ceea ce rezult 130.6ms.
Exemplu 2: BEEP 0x90, 0x05
Ieirea buzzerului piezo are frecvena de 0x90 i durata de 5 cicluri de 65.3ms. Este bine ca argumentele macroului s fie determinate
prin experimente i astfel s fie ales sunetul care se potrivete cel mai bine pentru aplicaie. n continuare este prezentat macroul
BEEP:

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_07Poglavlje.htm (1 of 4)07.May.07 6:21:58 PM

Chapter 6 - Samples

Urmtorul exemplu arat ntrebuinarea unui macro ntr-un program. Programul produce dou melodii care sunt obinute prin
apsarea T1 sau T2. Cteva din macrourile discutate anterior sunt incluse n program.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_07Poglavlje.htm (2 of 4)07.May.07 6:21:58 PM

Chapter 6 - Samples

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_07Poglavlje.htm (3 of 4)07.May.07 6:21:58 PM

Chapter 6 - Samples

Pagina anterioar

Coninut

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_07Poglavlje.htm (4 of 4)07.May.07 6:21:58 PM

Pagina urmtoare

Chapter 6 - Samples

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

Regitrii de deplasare
Exist dou tipuri de regitrii de deplasare: de intrare i de ieire. Regitrii de intrare ncarc datele paralel, prin intermediul a 8
linii, i apoi le trimite serial prin intermediul a dou linii ctre microcontroler. Regitrii de ieire opereaz n direcie opus: primesc
date serial i la un semnal pe linia latch, transform datele n date paralele. Regitrii de deplasare sunt folosii n general pentru a
mri numrul de intrri ieiri ale unui microcontroler. Ei nu prea mai sunt folosii pentru c microcontrolerele moderne au un numr
mare de linii intrare ieire. Oricum, utilizarea lor cu microcontrolere cum ar fi PIC16F84 este foarte important.

Regitrii de deplasare de intrare 74HC597


Reitrii de deplasare de intrare transform datele paralele n date seriale i le transfer ctre microcontroler. Modul lor de funcionare
este simplu. Sunt patru linii pentru transferul datelor: clock, latch, load i data. Datele sunt citite de la pinii de intrare de un
registru intern prin intermediul unui semnal latch. Apoi, cu un semnal load, datele sunt transferate de la registrul latch de intrare
ctre registrul de deplasare, iar de acolo sunt transferate serial ctre un microcontroler prin intermediul liniilor data i clock.

O schem de legtur a registrului de deplasare 74HC597 la un microcontroler este prezentat mai jos:

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_08Poglavlje.htm (1 of 6)07.May.07 6:22:01 PM

Chapter 6 - Samples

Modalitatea de conectare a unui registru de deplasare de intrare la un microcontroler


Pentru simplificarea programului principal, un macro poate fi utilizat pentru registrul de deplasare de intrare. Macroul HC597 are dou
argumente:
HC597 macro Var, Var1
Var variabil unde datele provenite de la pinii registrului de deplasare de intrare sunt transferate.
Var1 contor bucl.
Exemplu: HC597 data, counter
Datele provenite de la pinii registrului de deplasare sunt stocate n variabila data. Variabila Time/counter este folosit pe post de
contor bucl.
Textul macroului:

Exemplul care v arat cum s folosii macroul HC597 este n programul urmtor. Programul recepioneaz date de la intrarea paralel
a registrului de deplasare i le mut serial n variabila RX a microcontrolerului. LEDurile conectate la portul B vor indica rezultatul
datelor de intrare.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_08Poglavlje.htm (2 of 6)07.May.07 6:22:01 PM

Chapter 6 - Samples

Registru de deplasare de ieire


Regitrii de deplasare de ieire transform datele seriale n date paralele. Pe fiecare front cresctor al tactului, registrul de deplasare
citete valoarea de la linia de date, o memoreaz ntr-un registru temporar, apoi repet acest ciclu de 8 ori. La un semnal de la linia
http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_08Poglavlje.htm (3 of 6)07.May.07 6:22:01 PM

Chapter 6 - Samples

latch, datele sunt copiate din registrul de deplasare n registrul de intrare, apoi datele sunt transformate din date seriale n date
paralele.

O schem a registrului de deplasare este prezentat mai jos:

Conectarea unui registru de deplasare de ieire la un microcontroler


Macroul folosit n acest exemplu este localizat n fisierul HC595.INC i se numete HC595.
Macroul HC595 are dou argumente:
Var variabil a crei coninut este transferat la ieirea registrului de deplasare.
Var1 contor bucl.
Exemplu: HC595 Data, Counter
Datele pe care vrem s le transferm sunt stocate n variabila Data, iar variabila Counter este folosit pe post de contor bucl

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_08Poglavlje.htm (4 of 6)07.May.07 6:22:01 PM

Chapter 6 - Samples

Un exemplu al utilizrii macroului HC595 este n programul urmtor. Datele provenite de la variabila TX sunt transferate serial n
registrul de deplasare. LEDurile conectate la ieirea paralel a registrului de deplasare vor indica starea liniilor. n acest exemplu
valoarea 0xCB (11001011) este transmis astfel nct LEDurile 8, 7, 4, 2 i 1 sunt iluminate.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_08Poglavlje.htm (5 of 6)07.May.07 6:22:01 PM

Chapter 6 - Samples

Pagina anterioar

Coninut

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_08Poglavlje.htm (6 of 6)07.May.07 6:22:01 PM

Pagina urmtoare

Chapter 6 - Samples

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

Afiaj cu 7 segmente (multiplexare)


Segmentele ntr-un afiaj cu 7 segmente sunt aranjate astfel nct s formeze un singur digit de la 0 la F, dup cum se observ n
desen:

Putem afia un numr pe mai muli digii prin conectarea de afiaje adiionale. Chiar dac este mult mai confortabil s lucrm cu
LCDuri, afiajele cu 7 segmente sunt nc un standard n industrie. Aceasta din cauza rezistenei la temperatur, vizibilitii i
unghiului larg de observare. Segmentele sunt marcate cu litere mici: a, b, c, d, e, f, g i dp, unde dp este punctul zecimal. Cele 8
LEDuri din cadrul fiecrui afiaj pot fi aranjate cu catod comun sau cu anod comun. La un afiaj cu catod comun, catodul comun
trebuie s fie conectat la linia de 0v i LEDurile sunt activate cu unu logic. Afiajele cu anod comun trebuie s prezinte anodul comun
conectat la linia de +5v. Segmentele sunt activate cu zero logic. Dimensiunea afiajului este msurat n milimetri; se msoar doar
nlimea digitului (nu carcasa, doar digitul!). Afiajele sunt disponibile cu digii de nlimi de 7, 10, 13.5, 20 sau 25 milimetri. Sunt
de diferite culori incluznd: rou, portocaliu i verde. Cea mai simpl metod pentru a comanda un afiaj este prin intermediul unui
driver de afiaj. Acestea sunt disponibile pentru pn la 4 afiaje. Alternativ, afiajele pot fi comandate de un microcontroler, i, dac
este necesar mai mult dect un afiaj, metoda de comandare se numete multiplexare. Principala 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 afiajul. Dac avem doar un singur afiaj de comandat de ctre microcontroler, vor fi necesare 7 linii plus
una pentru punctul zecimal. Pentru fiecare afiaj zecimal, este necesar doar cte o linie n plus. Pentru a produce un afiaj cu 4, 5
sau 6 digii, toate afiajele cu 7 segmente vor fi conectate n paralel. Linia comun (linia catodului comun) este conectat separat i
aceast linie este conectat la zero logic pentru o perioad scurt de timp pentru a activa afiajul. Fiecare afiaj este activat de 100 ori
pe secund i vor da impresia c toate afiajele sunt active n acelai timp. n timp ce fiecare afiaj este activat, informaia trebuie
livrat astfel nct el va afia informaia corect. Pot fi accesate pn la 6 afiaje n acest mod fr ca strlucirea fiecrui afiaj s fie
afectat. Fiecare afiaj este activat efectiv pentru 1/6 din timp i persistena vizual a ochilor d impresia c afiajul este pornit tot
timpul. Toate semnalele de sincronizare pentru afiaj sunt produse de program, avantajul unui afiaj controlat de un microcontroler
este flexibilitatea. Afiajul poate fi configurat ca un contor cresctor, contor descresctor, i poate produce un numr de mesaje
folosind literele alfabetului care pot fi uor de afiat.
Exemplul de mai jos arat cum s controlm dou afiaje.

Conectarea unui microcontroler cu afiaje cu 7 segmente n mod multiplexat

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_09Poglavlje.htm (1 of 4)07.May.07 6:22:03 PM

Chapter 6 - Samples

Fiierul LED.INC conine dou macrouri: LED_Init i LED_Disp2. Primul macro este folosit pentru initializarea afiajului. Aici este
definit perioada de remprosptare ct i pinii microcontrolerului utilizai pentru conectarea afiajelor.
Macroul LED_Disp2 are un argument:
LED_Disp2 macro first
first este numrul de la 0 la 99 care trebuie afiat pe digiii MSD i LSD.
Exemplu: LED_Disp2 0x34
Numrul 34 va fi afiat.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_09Poglavlje.htm (2 of 4)07.May.07 6:22:03 PM

Chapter 6 - Samples

Realizarea macroului arat modalitatea de utilizare a macrourilor ntr-un program. Programul afieaz numrul 21 n 2 digii cu 7
segmente.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_09Poglavlje.htm (3 of 4)07.May.07 6:22:03 PM

Chapter 6 - Samples

Pagina anterioar

Coninut

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_09Poglavlje.htm (4 of 4)07.May.07 6:22:03 PM

Pagina urmtoare

Chapter 6 - Samples

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

Afiaj LCD
Multe dispozitive cu microcontroler folosesc LCDuri inteligente pentru
a afia informaia vizual. Urmtorul material se ocup de conectarea
unui afiaj LDC Hitachi la un microcontroler PIC. Afiajele LCD
proiectate cu HD44780, modulul pentru LCD fabricat de Hitachi, nu
sunt scumpe i sunt uor de folosit, i chiar posibil s produc
verificarea datelor afiate folosind cei 8x80 pixeli ai afiajului.
Afiajele LCD Hitachi conin un set de caractere ASCII plus simboluri
japoneze, greceti i matematice.

A 16x2 line Hitachi HD44780 display

Fiecare dintre cei 640 de pixeli ai afiajului trebuie s poat fi accesat individual i aceasta se poate realiza cu un numr de integrate
SMD pentru control montate pe spatele afiajului. Aceasta ne salveaz de o cantitate enorm de fire i de un control adecvat astfel
nct sunt necesare doar cteva linii pentru a accesa afiajul. Putem comunica cu afiajul prin intermediul unui bus de date pe 8 bii
sau de 4 biti. Pentru un bus de 8 biti, afiajul are nevoie de o tensiune de alimentare de +5v i 11 linii I/O. Pentru un bus de 4 bii
sunt necesare doar liniile de alimentare i 7 linii. Cnd afiajul LCD nu este pornit liniile de date sunt TRI-STATE, ceea ce nseamn c
ele sunt n stare de nalt impedan (ca i cum ar fi deconectate) i astfel nu interfereaz cu funcionabilitatea microcontrolerului
cnd afiajul nu este adresat. LCDul necesit de altfel 3 linii de control de la microcontroler.
Linia Enable (E) permite accesul la afiaj prin intermediul liniilor R/W i RS. Cnd aceast linie este LOW, LCDul este dezactivat i
ignor semnalele de la R/W i RS. Cnd linia (E) este HIGH, LCDul verific starea celor dou linii de control i rspunde corespunztor.
Linia Read/Write (R/W) stabilete direcia datelor dintre LCD i microcontroler. Cnd linia este LOW, datele sunt scrise n LCD.
Cnd este HIGH, datele sunt citite de la LCD.
Cu ajutorul liniei Register select (RS), LCD interpreteaz tipul datelor de pe liniile de date. Cnd este LOW, o instruciune este scris
n LCD. Cnd este HIGH, un caracter este scris n LCD.
Starea logic a liniilor de control:
E 0 Accesul la LCD dezactivat
1 Accesul la LCD activat
R/W 0 Scrie date n LCD

1 Citete date din LCD

RS 0 Instruciuni

1 Caracter

Scrierea datelor n LCD se realizeaz n civa pai:


se seteaz bitul R/W LOW
se seteaz bitul RS n 0 sau 1 logic (instruciune sau caracter)

se trimit datele ctre liniile de date (dac se execut o scriere)


se seteaz linia E HIGH
se citesc datele de la liniile de date (dac se execut o citire)
Citirea datelor de la LCD se realizeaz similar, cu deosebirea c linia de control R/W trebuie s fie HIGH. Cnd trimitem un HIGH ctre
LCD, el se va reseta i va accepta instruciuni. Instruciunile tipice care sunt transmise ctre un afiaj LCD dup reset sunt: pornirea
afiajului, activarea cursorului i scrierea caracterelor de la stnga spre dreapta. n momentul n care un LCD este iniializat, el este
pregtit sa primeasc date sau instruciuni. Dac recepioneaz un caracter, el l va afia i va muta cursorul un spaiu la dreapta.
Cursorul marcheaz locaia urmtoare unde un caracter va fi afiat. Cnd dorim s scriem un ir de caractere, mai nti trebuie s
setm adresa de start, i apoi s trimitem cte un caracter pe rnd. Caracterele care pot fi afiate pe ecran sunt memorate n memoria
video DD RAM (Data Display RAM). Capacitatea memoriei DD RAM este de 80 bytes.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_10Poglavlje.htm (1 of 10)07.May.07 6:22:07 PM

Chapter 6 - Samples

Afiajul LCD mai conine 64 bytes CG RAM ( Character Generator


RAM). Aceast memorie este rezervat pentru caracterele definite
de utilizator. Datele din CG RAM sunt reprezentate sub form de
caractere bitmap de 8 biti. Fiecare caracter ocup maxim 8 bytes
n CG RAM, astfel numrul total de caractere pe care un utilizator
poate s le defineasc este 8. Pentru a afia caracterul bitmap pe
LCD, trebuie setat adresa CG RAM la punctul de start (de obicei
0) i apoi s fie scrise datele n afiaj. Definirea unui caracter
special este exemplificat n figur.

nainte de a accesa DD RAM, dup definirea unui caracter special, programul trebuie s seteze adresa n DD RAM. Orice scriere i citire
a datelor din memoria LCD este realizat de la ultima adres care a fost setat, folosind instruciunea set-adress. Odat ce adresa DD
RAM este setat, un caracter nou va fi afiat n locul potrivit pe ecran. Pn acum am discutat operaia de scriere i citire a memoriei
unui LCD ca i cum ar fi o memorie obinuit. Acest lucru nu este adevrat. Controlerul LCD are nevoie de 40 pn la 120
microsecunde (us) pentru scriere i citire. Alte operaii pot dura pn la 5 ms. n acest timp microcontrolerul nu poate accesa LCDul,
astfel un program trebuie s tie cnd un LCD este ocupat. Putem rezolva aceasta n dou metode.

O metod este verificarea bitului BUSY de pe linia de date D7. Aceasta nu este cea mai bun metod pentru c LCDul se poate bloca i
programul va sta ntr-o bucl infinit verificnd bitul BUSY. O alt metod este introducerea unei ntrzieri n program. ntrzierea
trebuie s fie destul de lung pentru ca LCDul s termine operaia n desfurare. Instruciunile pentru scriere i citire cu memoria
LCDului sunt afiate mai sus. La nceput am menionat c avem nevoie de 11 linii I/O pentru a comunica cu un LCD. Oricum, putem
comunica cu un LCD printr-un bus de 4 linii. Putem reduce numrul total de linii de comunicaie la 7. Schema pentru conectarea printrun bus de 4 biti este n imaginea de mai jos. n acest exemplu folosim un afiaj LCD cu 2x16 caractere, denumit LM16x212 fabricat de
productorul japonez Sharp. Mesajul character este scris pe prima linie urmat de dou caractere speciale ~ i }. Pe a doua linie
este scris cuvntul mikroElektronika.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_10Poglavlje.htm (2 of 10)07.May.07 6:22:07 PM

Chapter 6 - Samples

Conectarea unui afiaj la un microcontroler

Fiierul LCD.inc conine un grup de macrouri pentru lucrul cu afiajele LCD.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_10Poglavlje.htm (3 of 10)07.May.07 6:22:07 PM

Chapter 6 - Samples

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_10Poglavlje.htm (4 of 10)07.May.07 6:22:07 PM

Chapter 6 - Samples

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_10Poglavlje.htm (5 of 10)07.May.07 6:22:07 PM

Chapter 6 - Samples

Macro pentru lucrul cu LCD


Macroul LCDinit este utilizat pentru a iniializa portul conectat la LCD. LCDul este configurat s mearg n modul de 4 bii.
Exemplu: LCDinit
LCDchar LCDarg scrie un caracter ASCII. Argumentul este caracterul ASCII.
Exemplu: LCDchar d
LCDw scrie caracterul din registul W.
Exemplu: movlw p
LCDw
LCDcmd LCDcommand trimite comenzi.
Exemplu: LCDcmd LCDCH
LCD_DDAdr DDRamAddress seteaz adresa DD RAM
Exemplu: LCD_DDAdr .3
LCDline line_num seteaz poziia cursorului la nceputul primei sau celei de-a doua linie.
Exemplu: LCDline 2
Cnd lucrm cu microcontrolere numerele sunt reprezentate n form binar. Din aceast cauz ele nu pot fi afiate. Pentru aceasta
este necesar s schimbm numerele dintr-un sistem binar ntr-un sistem zecimal pentru ca ele s fie uor de neles. Sursele celor
dou macrouri LCDval_08 i LCDval_16 sunt prezentate mai jos.
Macroul LCDval_08 realizeaz conversia unui numr binar de 8 bii ntr-un numr zecimal de la 0 la 255 i l afieaz. Este necesar s
declarm urmtoarele variabile n programul principal: TEMP1, TEMP2, LO, LO_TEMP, Bcheck. Numrul binar de 8 bii este n variabila
LO. Cnd macroul este executat, echivalentul zecimal al acestui numr este afiat. Zerourile precedente numrului nu sunt afiate.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_10Poglavlje.htm (6 of 10)07.May.07 6:22:07 PM

Chapter 6 - Samples

Macroul LCDval_16 realizeaz conversia unui numr binar de 16 bii ntr-un numr zecimal de la 0 la 65535 i l afieaz.
Urmtoarele variabile trebuie declarate n programul pricipal: TEMP1, TEMP2, TEMP3, LO, HI, LO_TEMP. HI_TEMP, Bcheck. Numrul
binar de 16 bii este n variabilele LO i HI. Cnd macroul este executat, echivalentul zecimal al acestui numr este afiat. Zerourile
precedente numrului nu sunt afiate.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_10Poglavlje.htm (7 of 10)07.May.07 6:22:07 PM

Chapter 6 - Samples

Programul principal este o demontraie pentru utilizarea afiajelor LCD i desenarea de noi caractere. La nceputul programului,
trebuie s declarm variabilele LCDbuf i LCDtemp folosite n subrutinele pentru LCD, ct i portul microcontrolerului conectat la
LCD. Programul scrie mesajul characters: pe prima linie urmat de dou caractere speciale ~ i }. Pe cea de-a doua linie este afiat
mikroElektronika.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_10Poglavlje.htm (8 of 10)07.May.07 6:22:07 PM

Chapter 6 - Samples

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_10Poglavlje.htm (9 of 10)07.May.07 6:22:07 PM

Chapter 6 - Samples

Pagina anterioar

Coninut

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_10Poglavlje.htm (10 of 10)07.May.07 6:22:07 PM

Pagina urmtoare

Chapter 6 - Samples

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

Convertor analog digital de 12 bii


Deoarece totul n lumea microcontrolerelor este reprezentat cu 0 i 1, ce facem cu un semnal care este 0.5 sau 0.77? Aproape toat
lumea exterioar unui calculator consist din semnale analogice. n afar de vorbire i muzic, sunt multe cantiti care trebuie
cuantificate ntr-un calculator. Umiditatea, temperatura, presiunea aerului, culoarea, turbidity, i concentraia metanului sunt doar o
parte. Rspunsul este s lum un numr de linii digitale pe care s le combinm asfel nct ele s exprime o valoare analogic. O
valoare analogic este orice valoare dintre 0 i 1. O putei numi valoare fracional. Toate cantitile de mai sus trebuie s fie
convertite la o valoare cuprins ntre 0 i 1 astfel s fie utilizat ntr-un calculator. Acesta este conceptul cel mai rspndit. El devine
ceva mai puin complex n aplicaii. Dac lum 8 linii i le aranjm astfel nct s accepte valori binare, rezultatul total va fi 256
(acesta este obinut de o numrare pn la 255 plus valoarea 0). Dac conectm aceste 8 linii ntr-o cutie neagr, vor fi numite linii
de ieire i astfel trebuie s-i furnizm o singur linie de intrare. Cu acest aranjament putem detecta pn la 255 incrementri ntre 0
i 1. Aceast cutie neagr este denumit CONVERTOR i pentru c noi convertim din Analog n Digital, convertorul se numete
convertor AD sau ADC (Analog to Digital Convertor). Convertoarele AD pot fi clasificate dup parametrii diferii. Cei mai importani
parametri sunt precizia i modul de transfer al datelor. Referitor la precizie, domeniul este: 8 bii, 10 bii, 12 bii, 14 bii, 16 bii.
Deoarece conversia pe 12 bii este un standard industrial, exemplul de mai jos a fost realizat cu ajutorul unui convertor pe 12 bii.
Cellalt parametru important este modul prin care datele sunt transferate n microcontroler. Poate fi paralel sau serial. Transmisia
paralel este mai rapid. Oricum, aceste convertoare sunt deobicei mai scumpe. Transmisia serial este mai lent, dar considernd
preul sczut i numrul redus de linii de intrare la un microcontroler, este transmisia preferat pentru multe aplicaii. Semnalele
analogice pot depi limitele de intrare ale unui ADC. Aceast lucru poate duce la stricarea convertorului. Pentru a proteja intrarea sunt
conectate dou diode, dup cum se observ n schem. Acestea vor proteja de tensiuni de peste 5V i sub 0V. n exemplul nostru am
folosit LTC1286, un ADC pe 12 biti (Linear Technology). Convertorul este conectat cu microcontrolerul prin intermediul a trei linii:
data, clock i CS (Chip Select). Linia CS este folosit pentru a selecta un dispozitiv de intrare ca s fie posibil s fie conectate i alte
dispozitive de intrare (ex. registru de deplasare de intrare, registru de deplasare de ieire, ADC serial) pe aceleai linii ale
microcontrolerului. Circuitul de mai jos arat cum s conectm un ADC, tensiune de referin i un afiaj LCD la un microcontroler.
Afiajul LCD a fost adugat pentru a vizualiza rezultatele conversiei AD.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_11Poglavlje.htm (1 of 4)07.May.07 6:22:10 PM

Chapter 6 - Samples

Conectarea unui convertor AD cu tensiune de referin la un microcontroler


Macroul folosit n acest exemplu este LCD86 i este localizat n fiierul LTC1286.inc.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_11Poglavlje.htm (2 of 4)07.May.07 6:22:10 PM

Chapter 6 - Samples

Macroul LTC86 are trei argumente:


LTC86 macro Var_LO, Var_HI, Var
Variabila Var_LO este unde se stocheaz rezultatul conversiei byte-ului mai puin semnificativ.
Variabila Var_HI este unde se stocheaz rezultatul conversiei byte-ului cel mai semnificativ.
Var este un contor bucl.
Exemplu: LTC86 LO, HI, Count
Cei patru bii ai celei mai mari valori sunt n variabila HI, iar primii 8 bii ai rezultatului conversiei sunt n variabila LO. Count este o
variabil de asisten care numr trecerile prin bucle.
Urmtorul exemplu arat cum macrourile sunt folosite n program. Programul citete valoarea provenit de la ADC i o afieaz pe
LDC. Rezultatul este dat n quantums. Ex: pentru 0V rezultatul este 0, iar pentru 5V este 4095.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_11Poglavlje.htm (3 of 4)07.May.07 6:22:10 PM

Chapter 6 - Samples

Pagina anterioar

Coninut

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_11Poglavlje.htm (4 of 4)07.May.07 6:22:10 PM

Pagina urmtoare

Chapter 6 - Samples

Microcontrolere PIC on-line


GRATIS!
Pagina anterioar

Coninut

Pagina urmtoare

Comunicaia serial
SCI este o abrevire pentru Serial Communication Interface, i ca un subsistem special exist la majoritatea microcontrolerelor. Cnd
nu este disponibil, cum ar fi n cazul lui PIC16F84, poate fi creat n software.

Ca i n cazul comunicaiei hardware, folosim formatul standard NRZ (Non Return to Zero) cunoscut ca 8 (9)-N-1 sau 8 sau 9 bii de
date, fr paritate i cu un bit de stop. Linia liber este definit starea unu logic. Startul transmisiei Bitul de Start, are starea
zero logic. Dup biii de date care urmeaz bitului de start (primul bit este cel mai puin semnificativ bit) urmeaz un Bit de Stop
care are starea unu logic. Durata bitului de stop T depinde de viteza transmisiei i este ajustat dup necesitile transmisiei. Pentru
o vitez de transmisie de 9600 baud, T este 104us.

1.
2.
3.
4.
5.
6.
7.
8.
9.

CD (Carrier Detect)
RXD (Receive Data)
TXD (Transmit Data)
DTR (Data terminal Ready)
GND (Ground)
DSR (Data Set Ready)
RTS (Request To Send)
CTS (Clear To Send)
RI (Ring Indicator)

Descrierea pinilor ai unui conector RS232


Pentru a conecta un microcontroler la un port serial al unui calculator PC, trebuie s ajustm nivelul semnalelor pentru ca s aib loc
comunicaia. Nivelul semnalului la un PC este -10V pentru zero logic i +10V pentru unu logic. Din cauz c nivelul semnalului la un
microcontroler este de +5V pentru unu logic i 0V pentru zero logic, avem nevoie de un stadiu intermediar care s realizeze conversia
nivelurilor. Un integrat special proiectat pentru aceast sarcin este MAX232. Schema interfeei este n diagrama de mai jos:

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_12Poglavlje.htm (1 of 6)07.May.07 6:22:12 PM

Chapter 6 - Samples

Conectarea unui microcontroler la un PC prin intermediul unei interfee realizate cu MAX232.

Fiierul RS232.inc conine un grup de macrouri folosite pentru comunicaia serial.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_12Poglavlje.htm (2 of 6)07.May.07 6:22:12 PM

Chapter 6 - Samples

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_12Poglavlje.htm (3 of 6)07.May.07 6:22:12 PM

Chapter 6 - Samples

Utilizarea macroului:
Macroul RS232init este folosit pentru iniializarea pinului RB0 i liniei pentru transmisia de date (pinul TX).
Exemplu: RS232init
SEND S_string trimite un caracter ASCII. Argumentul este este semnul ASCII.
Exemplu: SEND g
SENDw trimite data din registrul W.
Exemplu: movlw t
SENDw
Macroul RECEICE este o subrutin de tratare a unei ntreruperi care recepioneaz datele pentru RS232 i le memoreaz n registrul
RXD.
Exemplu:

La nceputul programului principal, trebuie s declarm variabilele RS_TEMP1, RE_TEMP2, TXD, RXD i pinul TX al microcontrolerului.
Dup resetarea microcontrolerului programul trimite un mesaj de ntmpinare ctre calculatorul PC: $ PIC16F84 on line $, i apoi
este gata de a recepiona date de pe linia RX. Putem transmite i recepiona date de la calculatorul PC prin acelai program de
comunicaie. Cnd microcontrolerul recepioneaz datele, va transmite un mesaj: Character received from PIC16F84: x, pentru
confirmarea succesului recepionrii.
Programul principal:

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_12Poglavlje.htm (4 of 6)07.May.07 6:22:12 PM

Chapter 6 - Samples

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_12Poglavlje.htm (5 of 6)07.May.07 6:22:12 PM

Chapter 6 - Samples

Pagina anterioar

Coninut

Copyright 2003. mikroElektronika. All Rights Reserved. For any comments contact webmaster.

http://www.mikroelektronika.co.yu/romanian/product/books/PICbook/6_12Poglavlje.htm (6 of 6)07.May.07 6:22:12 PM

Pagina urmtoare