Documente Academic
Documente Profesional
Documente Cultură
Fundamente PIC
Fundamente PIC
Introducere n Microcontrolere
Introducere
Circumstanele n care ne gsim astzi n domeniul microcontrolerelor i-au avut nceputurile n
dezvoltarea tehnologiei circuitelor integrate. Aceast dezvoltare a fcut posibil nmagazinarea a
sute de mii de tranzistoare ntr-un singur cip. Aceasta a fost o premiz pentru producia de
microprocesoare, i primele calculatoare au fost fcute prin adugarea perifericelor ca memorie,
linii intrare-ieire, timer-i i altele. Urmtoarea cretere a volumului capsulei a dus la crearea
circuitelor integrate. Aceste circuite integrate conin 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 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.
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 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.3 Bus-ul
Calea este numit "bus"- magistral. Fizic, el reprezint un grup de 8, 16, sau mai multe fire. Sunt
dou tipuri de bus-uri: 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.
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.9 Programul
Scrierea programului este un domeniu special de lucru al microcontolerului i este denumit
"programare". S ncercm s scriem un mic program ce l vom crea singuri i pe care oricine va fi
n stare s-l neleag.
START
REGISTER1=MEMORY LOCATION_A
REGISTER2=MEMORY LOCATION_B
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.
CAPITOLUL 2
Microcontrolerul PIC16F84
Introducere
PIC16F84 aparine unei clase de microcontrolere de 8 bii cu arhitectur RISC. Structura lui
general este artat n schia urmtoare reprezentnd blocurile de baz.
Memoria
program
(FLASH)-pentru
memorarea
unui
program
scris.
Pentru c memoria ce este fcut n tehnologia FLASH poate fi programat i
tears mai mult dect odat, aceasta face microcontrolerul potrivit pentru
dezvoltarea de component.
ncepe s numere tot din nou de la zero. Dup cum tim timpul exact dintre fiecare
dou incrementri ale coninutului timer-ului, poate fi folosit pentru msurarea
timpului ce este foarte util la unele componente.
UNITATEA DE PROCESARE CENTRAL are rolul unui element de conectivitate ntre celelalte
blocuri ale microcontrolerului. Coordoneaz lucrul altor blocuri i execut programul utilizatorului.
CISC, RISC
S-a spus deja c PIC1684 are o arhitectur
RISC. Acest termen este adeseori gsit n
literatura despre calculatoare, i are nevoie s
fie explicat aici mai n detaliu. Arhitectura
Harvard este un concept mai nou dect vonNeumann. S-a nscut din nevoia de mrire a
vitezei
microcontrolerului.
n
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 central, i
bineneles, o vitez mai mare de lucru.
Separarea programului de memoria de date
face posibil ca mai departe instruciunile s nu
trebuiasc s fie cuvinte de 8 bii. PIC16F84
folosete 14 bii pentru instruciuni ceea ce permite ca toate instruciunile s fie instruciuni dintrun singur cuvnt. Este de asemenea tipic pentru arhitectura Harvard s aib mai puine instruciuni
dect von-Newmann i s aib instruciuni
executate uzual intr-un ciclu.
Microcontrolerele cu arhitectur Harvard
sunt
de
asemenea
numite
"microcontrolere
RISC".
RISC
nseamn Reduced Instruction Set
Computer.
Microcontrolerele
cu
arhitectura
von-Newmann
sunt
numite "microcontrolere CISC". Titlul
CISC nseamn Complex Instruction
Set Computer.
Pentru c PIC16F84 este un microcontroler RISC, aceasta nseamn c are 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 ntr-un ciclu cu excepia instruciunilor
jump i branch. Conform cu ceea ce spune constructorul, PIC16F84 ajunge la rezultate de 2:1 n
compresia cod i 4:1 n vitez n comparaie cu alte microcontrolere de 8 bii din clasa sa.
Aplicaii
PIC16F84 se potrivete perfect n multe folosine, de la industriile auto i aplicaiile de control
casnice la instrumentele industriale, senzori la distan, mnere 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 uoar aplicarea microcontrolerelor la aparate unde se cere memorarea
permanent a diferitor parametri (coduri pentru transmitoare, viteza motorului, frecvenele
receptorului, etc.). Costul sczut, consumul sczut, mnuirea uoar i flexibilitatea fac PIC16F84
aplicabil chiar i n domenii unde microcontrolerele nu au fost prevzute nainte (exemple: funcii
de timer, nlocuirea interfeei n sistemele mari, aplicaiile coprocesor, etc.).
Programabilitatea sistemului acestui cip (mpreun cu folosirea a doar doi pini n transferul de date)
face posibil flexibilitatea produsului, dup ce asamblarea i testarea au fost terminate. Aceast
capabilitate poate fi folosit pentru a crea producie pe linie de asamblare, de a nmagazina date de
calibrare disponibile doar dup testarea final, sau poate fi folosit pentru a mbunti programele
la produsele finite.
Pipelining
Ciclul instruciune const din ciclurile Q1, Q2, Q3 i Q4. Ciclurile de instruciuni de apelare i
executare sunt conectate ntr-un aa fel nct pentru a face o apelare, este necesar un ciclu cu o
instruciune, i mai este nevoie de nc unul pentru decodare i executare. Totui, datorit
pipelining-ului (folosirea unei pipeline-conduct, i este aducerea unei instruciuni din memorie n
timp ce se execut alta), fiecare instruciune este executat efectiv ntr-un singur ciclu. Dac
instruciunea cauzeaz o schimbare n contorul programului, i PC-ul nu direcioneaz spre
urmtoarea ci spre alte adrese (poate fi cazul cu subprogramele jumps sau calling), 2 cicluri sunt
necesare pentru executarea unei instruciuni. Aceasta este pentru c instruciunea trebuie
procesat din nou, dar de data aceasta de la adresa corect. Ciclul ncepe cu clock-ul Q1, prin
scrierea n registrul instruction register (IR). Decodarea i executarea ncepe cu clock-urile Q2, Q3
i Q4.
TYC0 citete instruciunea MOVLW 55h (nu are importan pentru noi ce instruciune a fost
executat, ce explic de ce nu este un dreptunghi desenat n partea de jos).
TCYI execut instruciunea MOVLW 55h i citete MOVWF PORTB.
TCY2 execut MOVWF PORTB i citete CALL SUB_1.
TCY3 execut o apelare a subprogramului CALL SUB_1, i citete instruciunea BSF PORTA, BIT3.
Pentru c instruciunea aceasta nu este aceea de care avem nevoie, sau nu este prima instruciune
a subprogramului SUB_1 a crei execuie este urmtoarea n ordine, instruciunea trebuie citit din
nou. Acesta este un bun exemplu a unei instruciuni avnd nevoie de mai mult de un ciclu.
TCY4 ciclul instruciunii este total folosit pentru citirea primei instruciuni din subprogram la adresa
SUB_1.
TCY5 execut prima instruciune din subprogram SUB_1 i citete urmtoarea.
Semnificaia pinilor
PIC16F84 are un numr total de 18 pini. Cel mai adesea se gsete ntr-o capsul de tip DIP18 dar
se poate gsi de asemenea i ntr-o capsul SMD care este mai mic ca cea DIP. DIP este
prescurtarea de la Dual In Package. SMD este prescurtarea de la Surface Mount Devices sugernd
c gurile pentru pini unde s intre acetia, nu sunt necesare n lipirea acestui tip de component.
Pinii microcontrolerului PIC16F84 au urmtoarea semnificaie:
Pin nr.1 RA2 Al doilea pin la portul A. Nu are funcie adiional.
Pin nr.2 RA3 Al treilea pin la portul A. Nu are funcie adiional.
Pin nr.3 RA4 Al patrulea pin la portul A. TOCK1 care funcioneaz ca timer se
gsete de asemenea la acest pin.
Pin nr.4 MCLR Reseteaz intrarea i tensiunea de programare Vpp a
microcontrolerului.
Pin nr.5 VSS Alimentare, mas.
Pin nr.6 RB0 Pin de zero la portul B. Intrarea ntrerupere este o funcie
adiional.
Pin nr.7 RB1 Primul pin la portul B. Nu are funcie adiional.
Pin nr.8 RB2 Al doilea pin la portul B. Nu are funcie adiional.
Pin nr.9 RB3 Al treilea pin la portul B. Nu are funcie adiional.
Pin nr.10 RB4 Al patrulea pin la portul B. Nu are funcie adiional.
Pin nr.11 RB5 Al cincilea pin la portul B. Nu are funcie adiional.
Pin nr.12 RB6 Al aselea pin la portul B. Linia de 'Clock' n mod programare.
Pin nr.13 RB7 Al aptelea pin la portul B. Linia 'Data' n mod programare.
Pin
Pin
Pin
Pin
Pin
nr.14
nr.15
nr.16
nr.17
nr.18
CAPITOLUL 3
Set Instruciuni
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 assembler-ul, sau limbajul de
programare cu nivel sczut pentru microcontrolerele PIC.
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 (SAUEXCLUSIV),
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
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.
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.
List de cuvinte
f
W
b
d
label
TOS
[]
<>
*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
CAPITOLUL 4
Programare n Limbaj de Asamblare
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.
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.
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.
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 a 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
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>
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.
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
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
Directive de Date
4.16 CBLOCK Definind un bloc pentru constantele numite
Sintax:
Cblock [<term>]
<label>[:<increment>], <label>[:<increment>]......
endc
Descriere:
Directiva este folosit pentru a da valori constantelor numite. Fiecare termen ce urmeaz primete
o valoare mai mare cu unu dect precursorul lui. Dac parametrul <increment> este de asemenea
dat, atunci valoarea dat n parametrul <increment> este adugat constantei urmtoare.
Valoarea parametrului <term> este valoarea de pornire. Dac nu este dat, este considerat a fi
zero.
Exemplu:
Cblock 0x02
First, second, third ;first=0x02, second=0x03, third=0x04
endc
cblock 0x02
first : 4, second : 2, third ;first=0x06, second=0x08, third=0x09
endc
Configurnd o directiv
4.21 _CONFIG Setarea the biilor configuraionali
Sintax:
-config<term> or__config<address>,<term>
Descriere:
Sunt definite oscilatorul, aplicaia timer watchdog i circuitul intern de reset. nainte de folosirea
acestei directive, procesorul trebuie definit folosind directiva PROCESSOR.
Exemplu:
_CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC
Directive similare: _IDLOCS, PROCESSOR
4.22 PROCESSOR Definind modeul microcontrolerului
Sintax:
Processor <microcontroller_type>
Descriere:
Instruciunea seteaz tipul microcontrolerului unde programarea este fcut.
Exemplu:
processor 16F84
Primul fiier conine programul translat ce este citit n microcontroler prin programare. 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.
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:
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 macrouri este copiat mai jos de linia #includebank.inc.
CAPITOLUL 5
MPLAB
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.
Pentru a porni MPLAB-ul trebuie s-l instalm. Instalarea este un proces de copiere a fiierelor de
pe CD pe un hard disc al computerului. Este o opiune pentru fiecare fereastr ce v ajut s v
ntoarcei la cea precedent, aa ca erorile s nu prezinte o problem sau s devin o experien
stresant. Instalarea propriu-zis are loc ca la majoritatea programelor Windows. Mai nti apare
ecranul Windows, apoi putei alege opiunile urmate de instalarea propriu-zis, i n sfrit, apare
mesajul care spune programul dumneavoastr instalat este gata de start.
Pai pentru instalarea MPLAB:
1.
2.
3.
4.
5.
6.
7.
Instalarea ncepe dup aceti apte pai. Urmtoarele imagini explic nelesul unor pai ai
instalrii.
dorii s lucrai n DOS, trebuie s deselectai toate opiunile referitoare la Windows, i s alegei
componentele potrivite pentru DOS.
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.
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.
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.
Dup denumirea unui proiect, clic pe OK. O nou fereastr apare n imaginea umtoare.
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.
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.
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.
CAPITOLUL 6
Mostrele
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.
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).
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.
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
timeconst_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:
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, RS-232, 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.
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 printr-un led a fost stabilit
de productor. Ledurile cu randament maxim pot produce rezultate bune cu un curent mai mic de
de 2mA.
Pentru a determina valoarea rezistenei serie, trebuie s
cunoatem valoarea tensiunii de alimentare. De aici scdem
tensiunea care cade pe led. Aceast valoare va varia de la
1,2v la 1,6v, depinznd de culoarea ledului. Rspunsul este
valoarea lui Ur. Folosind aceast valoare i curentul care
vrem s circule prin LED (ntre 0.002A i 0.01A) putem s
aflm valoarea rezistenei cu ajutorul formulei: R=UR / I.
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.
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.
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.
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 acest 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.
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.
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.
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.
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.
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.
crei
coninut
este
transferat
la
ieirea
registrului
de
deplasare.
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.
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 A 16x2
display
matematice.
line
Hitachi
HD44780
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.
Afiajul LCD mai conine 64 bytes CG RAM ( Character
Generator RAM). Aceast memorie este rezervat pentru
caracterele definite de utilizator. Datele din CG RAM sunt
reprezentate sub form de caractere bitmap de 8 biti.
Fiecare caracter ocup maxim 8 bytes n CG RAM, astfel
numrul total de caractere pe care un utilizator poate s le
defineasc este 8. Pentru a afia caracterul bitmap pe LCD,
trebuie setat adresa CG RAM la punctul de start (de obicei
0) i apoi s fie scrise datele n afiaj. Definirea unui
caracter special este exemplificat n figur.
nainte de a accesa DD RAM, dup definirea unui caracter special, programul trebuie s seteze
adresa n DD RAM. Orice scriere i citire a datelor din memoria LCD este realizat de la ultima
adres care a fost setat, folosind instruciunea set-adress. Odat ce adresa DD RAM este setat,
un caracter nou va fi afiat n locul potrivit pe ecran. Pn acum am discutat operaia de scriere i
citire a memoriei unui LCD ca i cum ar fi o memorie obinuit. Acest lucru nu este adevrat.
Controlerul LCD are nevoie de 40 pn la 120 microsecunde (us) pentru scriere i citire. Alte
operaii pot dura pn la 5 ms. n acest timp microcontrolerul nu poate accesa LCDul, astfel un
program trebuie s tie cnd un LCD este ocupat. Putem rezolva aceasta n dou metode.
O metod este verificarea bitului BUSY de pe linia de date D7. Aceasta nu este cea mai bun
metod pentru c LCDul se poate bloca i programul va sta ntr-o bucl infinit verificnd bitul
BUSY. O alt metod este introducerea unei ntrzieri n program. ntrzierea trebuie s fie destul
de lung pentru ca LCDul s termine operaia n desfurare. Instruciunile pentru scriere i citire
cu memoria LCDului sunt afiate mai sus. La nceput am menionat c avem nevoie de 11 linii I/O
pentru a comunica cu un LCD. Oricum, putem comunica cu un LCD printr-un bus de 4 linii. Putem
reduce numrul total de linii de comunicaie la 7. Schema pentru conectarea printr-un bus de 4 biti
este n imaginea de mai jos. n acest exemplu folosim un afiaj LCD cu 2x16 caractere, denumit
LM16x212 fabricat de productorul japonez Sharp. Mesajul character este scris pe prima linie
urmat de dou caractere speciale ~ i }. Pe a doua linie este scris cuvntul mikroElektronika.
Macroul LCDval_16 realizeaz conversia unui numr binar de 16 bii ntr-un numr zecimal de la 0
la 65535 i l afieaz. Urmtoarele variabile trebuie declarate n programul pricipal: TEMP1,
TEMP2, TEMP3, LO, HI, LO_TEMP. HI_TEMP, Bcheck. Numrul binar de 16 bii este n variabilele LO
i HI. Cnd macroul este executat, echivalentul zecimal al acestui numr este afiat. Zerourile
precedente numrului nu sunt afiate.
Programul principal este o demontraie pentru utilizarea afiajelor LCD i desenarea de noi
caractere. La nceputul programului, trebuie s declarm variabilele LCDbuf i LCDtemp folosite n
subrutinele pentru LCD, ct i portul microcontrolerului conectat la LCD. Programul scrie mesajul
characters: pe prima linie urmat de dou caractere speciale ~ i }. Pe cea de-a doua linie este
afiat mikroElektronika.
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. CD (Carrier Detect)
2. RXD (Receive Data)
3. TXD (Transmit Data)
4. DTR (Data terminal Ready)
5. GND (Ground)
6. DSR (Data Set Ready)
7. RTS (Request To Send)
8. CTS (Clear To Send)
9. 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:
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 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:
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
Copiaz W n f
A.3 MOVF
Copiaz f n d
A.4 CLRW
Scrie 0 n W
A.5 CLRF
A.6 SWAPF
Scrie 0 n f
A.7 ADDLW
Adun W la o constant
A.8 ADDWF
Adun W la f
A.9 SUBLW
A.10 SUBWF
Scade W din f
A.11 ANDLW
A.12 ANDWF
W AND(I) logic cu f
A.13 IORLW
A.14 IORWF
W OR(SAU) logic cu f
A.15 XORLW
A.16 XORWF
A.17 INCF
Incrementeaz f
A.18 DECF
Decrementeaz f
A.19 RLF
A.20 RRF
A.21 COMF
Complement f
A.22 BCF
Reseteaz bitul b n f
A.23 BSF
Seteaz bitul b n f
A.24 BTFSC
A.25 BTFSS
A.26 INCFSZ
A.27 DECFSZ
A.28 GOTO
Salt la adres
A.29 CALL
A.30 RETURN
Apeleaz un program
A.31 RETLW
A.32 RETFIE
A.33 NOP
Fr operaii
A.34 CLRWDT
A.35 SLEEP
Modul stand by