Sunteți pe pagina 1din 18

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 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 adiional.
Pin nr.18 RA1 Primul pin la portul A. Nu are funcie adiional.




Introducere
PIC16F84 aparine unei clase de microcontrolere de 8 bii cu arhitectur RISC.
Structura lui general este artat n schia urmtoare reprezentnd blocurile de
baz.
Memoria program (FLASH)-pentru memorarea unui program scris.
Pentru c memoria ce este fcut n tehnologia FLASH poate fi programat i tears
mai mult dect odat, aceasta face microcontrolerul potrivit pentru dezvoltarea de
component.
EEPROM-memorie de date ce trebuie s fie salvate cnd nu mai este
alimentare.
Este n mod uzual folosit pentru memorarea de date importante ce nu trebuie
pierdute dac sursa de alimentare se ntrerupe dintr-o dat. De exemplu, o astfel de
dat este o temperatur prestabilit n regulatoarele de temperatur. Dac n timpul
ntreruperii alimentrii aceast dat se pierde, va trebui s facem ajustarea nc o
dat la revenirea alimentrii. Astfel componenta noastr pierde n privina auto-
meninerii.
RAM-memorie de date folosit de un program n timpul executrii sale.
n RAM sunt memorate toate rezultatele intermediare sau datele temporare ce nu
sunt cruciale la ntreruperea sursei de alimentare.
PORTUL A i PORTUL B sunt conexiuni fizice ntre microcontroler i lumea de
afar. Portul A are 5 pini, iar portul B are 8 pini.
TIMER-UL LIBER (FREE-RUN) este un registru de 8 bii n interiorul
microcontrolerului ce lucreaz independent de program. La fiecare al patrulea impuls
de ceas al oscilatorului i ncrementeaz valoarea lui pn ce atinge maximul (255),
i apoi ncepe s numere tot din nou de la zero. Dup cum tim timpul exact dintre
fiecare dou incrementri ale coninutului timer-ului, poate fi folosit pentru
msurarea timpului ce este foarte util la unele componente.

UNITATEA DE PROCESARE CENTRAL are rolul unui element de
conectivitate ntre celelalte blocuri ale microcontrolerului. Coordoneaz lucrul altor
blocuri i execut programul utilizatorului.



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 von-Neumann. 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 dintr-un 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.
Etapele de realizare a unei aplicatii cu microcontroller

In practica pentru a functiona si/sau a fi programat, un microcontroler are nevoie
de dispozitive aditionale pentru a fi conectat la calculatorul cu care se programeaza sau
pentru a fi conectat la mediul/dispozitivul pe care il controleaza. Principalele etape pentru
realizarea unui proiect bazat pe un microcontroler sunt:
- Scrierea programului
- Asamblarea compilarea programului
- Optional simularea programului pe PC
- Incarcarea programului in memoria program a microcontrolerului
- Designul si realizarea hardware-ului
- Testarea proiectului
Microcontrolerul executa ciclic programul inscris in memoria program. Conform
programului datele sunt receptionate din exterior prin intermediul porturilor sunt
prelucrate apoi sunt transmise dispozitivelor de iesire. De exemplu, pentru controlul
temperaturii dintr-un cuptor se citeste temperatura dinauntrul sau folosind un senzor de
temperatura. In functie de temperatura citita si de temperatura ce se doreste a fi atinsa se
comanda un ventilator sau un element incalzitor. In figura 1 este prezentata schema bloc
a unui astfel de sitem, la care s-au mai adaugat o tastatura, un alt dispozitiv de intrare,
pentru stabilirea temperaturii doride si un afisaj LCD, element de iesire, pentru afisarea
datelor.



Memoriile

Exista 5 tipuri importante de memorie, ce vor fi prezentate in randurile de mai jos:
1) RAM Inseamna Random Acces Memory Memorie cu Acces Aleatoriu. De
obicei aceasta memorie stocheaza datele ce sunt necesare in executia unui program.
Datele continute in aceasta se pierd in cazul intreruperii alimentarii. Cele mai multe
microcontrolere au 256 bytes, desi exista microcontrolere ce au mult mai mult spatiu intr-
o astfel de memorie. Memoria poate fi extinsa prin adaugarea unor cipuri externe.
2) ROM Read Only Memory Aceasta memorie de obicei stocheaza programul
sau date care nu se modifica. Memoriile ROM sunt programate de fabricant in timpul
procesului de fabricatie si continutul lor nu poate fi modificat de catre utilizator.
Memoriile ROM sunt folositoare daca s-a creat un program si trebuie realizate cateva mii
de copii a acestuia, de exemplu pentru fabricarea unor dispozitive electrocasnice cum ar
fi cuptoarele, televizoarele sau masinile de spalat.
3) EPROM Erasable Programmable Read Only Memory Similar memoriei
ROM, aceasta este o memorie nevolatila, doar ca aceste memorii pot fi programate
folosind unele dispozitive speciale. Memoriile EPROM au o fereastra in partea de sus a
cipului care permite stergerea
datelor sub influenta razelor
UV.
4) EEPROM
Electrically Erasable
Programmable Read Only
Memory este o memorie
nevolatila. Acestea sunt de
obicei folosite pentru a stoca
datele referitoare la
configuratie, valori minime
si maxime date de
identificare etc. Acestea pot fi reprogramate de catre programul ce se executa. Unele
microcontrolere au incluse astfel de memorii (ex. PIC16F84 are o memorie EEPROM de
64B, ce poate si stearsa si reprogramata direct din soft). De obicei memoriile EEPROM
sunt foarte lente.
5) Flash EEPROM O alta versiune a memoriilor EEPROM. Aceasta memorie
este de obicei folosita pentru a memora programul in interiorul microcontrolerului.
Aceste memorii sunt nevolatile sde obicei foarte rapide. Datele pot fi sterse si
reprogramate folosind un dispozitiv de programare. Intregul continut trebuie sters si apoi
reprogramat.


1.3 Ceasul (tactul)

Toate microcontrolerele au nevoie de un ceas (sau de un oscilator) pentru a
functiona. Tactul (ceasul) este de obicei obtinut prin conectarea unui dispozitiv exterior la
microcontroler. De obicei se foloseste un quartz impreuna cu doi condensatori sau se
poate folosi un circuit format dintr-o rezistenta si un condensator. Unele microcontrolere
au circuitul de ceas (tact) inclus si nu este necesara conectarea elementelor exterioare. O
instructiune este de obicei executata prin aducerea ei din memorie si apoi decodarea sa.
Acest lucru necesita de obicei mai multe cicluri de tact, fapt care este cunoscut sub
numele de ciclu instructiune. In cazul microcontrolerelor PIC un ciclu instructiune este
alcatuit din 4 perioade de ceas (tact). Deci, microcontrolerul opereaza la o rata de tact
care este egala cu un sfert din frecventa oscilatorului.






LIMITARI


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.
APLICATIII

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.


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.


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 ;Select memory bank 0
Endm

BANK1 macro
Bsf STATUS, RP0 ;Select memory bank 1
Endm

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


PROGRAMATOR SERIAL SI PARALEL

Programatorul paralel este un programator de gabarit relativ mare, avnd un
transformator de reea ncorporat, asigur un curent de programare mare i o bun izolare
ntre aplicaie i calculator fiind controlat de o gam larg de produse software care pot fi
obinute de pe internet. Accept programarea tuturor microcontrolerelor Microchip i a
unor memorii eeprom seriale.

Programatorul serial este un programator de gabarit redus recomandat doar
situaiilor de programare ,,pe teren cnd transportul unui programator paralel este
incomod i laptop-ul utilizat genereaz pe COM tensiuni suficient de mari. Utilizeaz
integral tensiunea generat de interfaa serial a calculatorului. Permite programarea
microcontrolelor PIC i a memoriilor eeprom seriale. Facilitatea ICSP trebuie utitilizat
cu grij. PIC-ul trebuie s fie total separat de circuit n momentul programrii.
Se menioneaz c exist i programatoare seriale care au surs de alimentare
separat i care au o funcionare mai bun dect cele prezentate anterior.






Laborator 2
DATE GENERALE DESPRE MICROCONTROLERUL PIC 16F84

PIC16F84 aparine unei clase de microcontrolere de 8 bii cu arhitectur RISC (Reduced
Instruction Set Computer). Structura lui general este artat n fig.1. Arhitectura general a unui
microcontroler de tip RISC este de tip Harvard (fig.2). PIC16F84 are 35 de instruciuni. Aproape toate
instruciunile se realizeaz ntr-un ciclu main cu excepia salturilor care sunt realizate n doi cicli. n
funcie de tipul constructiv, frecvena de tact este de pn la 20 MHz.


Fig.1. Schema bloc a microcontrolerului PIC 16F84


Fig.2. Arhitectura de tip Harvard

Memoria program (FLASH)-pentru memorarea unui program scris.
Memoria n tehnologia FLASH i poate fi programat i tears de pn la 1000 de ori. Astfel, acesta este
microcontrolerul potrivit pentru dezvoltarea de component. Memoria flash are 1024 (1K) de cuvinte de 14
biti.
EEPROM - memorie de date ce trebuie s fie salvate cnd nu mai este alimentare.
Este n mod uzual folosit pentru memorarea de date importante ce nu trebuie pierdute dac sursa de
alimentare se ntrerupe dintr-o dat. De exemplu, o astfel de dat este o temperatur prestabilit n
regulatoarele de temperatur. Dac n timpul ntreruperii alimentrii aceast dat se pierde, va trebui s
facem ajustarea nc o dat la revenirea alimentrii. PIC16F84 are 64 octeti EEPROM. Memoria EEPROM
poate fi programat i tears de pn la 1000000 de ori iar durata de meninere a informaiei este mai mare
de 40 de ani.
RAM-memorie de date folosit de un program n timpul executrii sale.
n RAM sunt memorate toate rezultatele intermediare sau datele temporare ce nu sunt cruciale la
ntreruperea sursei de alimentare. PIC16F84 are 68 octeti RAM.
Harta memoriei este prezentat n fig.3. PIC16F84 are 15 regitrii cu funcii speciale (SFR) pe 8
biti. Cei mai importani regitrii sunt: TMR0, PCL, STATUS, FSR, PORTA, PORTB, EEDATA, EEADR,
PCLATH, INTCON, TRISA, TRISB, EECON1, EECON2. Aceti regitrii au adresele: 00h 0Bh i 80h
8Bh. PIC16F84 are 68 de regitrii cu funcii generale (GPR) pe 8 biti de la adresa 0Ch la 4Fh. Memoria
este mprit n lime sub form de bancuri (zone) de memorie: bancul 0 (adrese 00h 0Bh) i bancul 1
(adrese 80h 8Bh).




Fig.3. Harta memoriei

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.
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.

Fig.4. Schema bloc a microcontrolerului PIC 16F84










Laborator 4
1. Aprinderea unui led

Pentru experimentri se va utiliza placa cu 5x7 led-uri.
Primul experiment aprinde ledul din stnga jos al afiajului. Prima instruciune
spune asamblorului s pun programul la nceputul memoriei. A doua linie seteaz
primul bank de memorie unde sunt regitrii 85h (TRISA) i 86h (TRISB) pentru definirea
pinilor ca intrri sau ieiri i care au coresponden direct cu regitrii 05h (PORTA) i
06h (PORTB). Dac n registrul W este ncrcat cu 00h apoi acest registru este transferat
n regitrii TRISA i TRISB toate liniile ale portului A i portului B vor fi ieiri. A asea
intruciune seteaz bancul 0. Intruciunile 7 i 8 determin RA1=1 logic pentru a reseta
circuitul MMC4017. RA1 este al doilea din port. Tranzistorul corespunztor primei
coloane de leduri va intra n conducie, ceea ce determin conectarea catozilor ledurilor
colanei 1 la mas.
Aprinderea ledului se realizeaz prin trei linii de program. Prima linie LED_ON
pune numrul 01h n W. Urmtoarea linie mut valoarea din W la portul 06h (PORTB).
La aceast linie primul led de pe coloana 1 se aprinde. Urmtoarea linie realizeaz o
bucl infinit n program (salt la LED_ON). Astfel, ledul rmne aprins permanent.
Obsevaii:
- liniile care ncep cu ; sunt explicaii n cadrul programului;
- exist o coresponden ntre regitrii alturai; pot fi accesai n funcie de bancul selectat;
- prin (05h) se nelege registrul de la adresa 05h.

Programul este urmtorul.
;PIC16F84
;Aprinderea unui Led din stnga jos a afiajului

Start ORG 0x00
BSF 03,5 ;se trece la bancul 1 de regitrii
MOVLW 00h ; 0 W
MOVWF 05h ;liniile portului A sunt setate ca ieiri
MOVWF 06h ; liniile portului B sunt setate ca ieiri
BCF 03,5 ; se trece la bancul 0 de regitrii
MOVLW 02h ; 2 W
MOVWF 05h ; W (05h); se reseteaz MMC 4017


LED_ON MOVLW 01h ; 1 W
MOVWF 06h ; W (06h); ledul se aprinde
GOTO LED_ON ;bucl

END ;sfrit program

Fiierul hexa al programului prezentat anterior are urmtorul format:
:10000000831600308500860083120230850001309F
:040010008600072837
:00000001FF

Aceast informaie se afl n microcontroler.




2. Aprinderea i stingerea unui led

Acest experiment utilizeaz acelai led pentru experimentri. Se introduce o rutin de ntrziere
(DELAY). Un microcontroler funcioneaz tot timpul. Numai cnd nu este alimentat cu tensiune nu
funcioneaz. Pentru un cristal de 4MHz se execut aproximativ 1 milion de instruciuni pe secund.
Majoritatea instruciunilor se realizeaz ntr-o microsecund. Numai instruciunile GOTO i RETURN sunt
executate n dou microsecunde. Dup ce ledul a fost aprins se execut 250000 de instruciuni n care nu se
face nimic (NOP no operation). Soluia se realizeaz prin introducerea unei rutine DELAY care introduce
nite ,,micro bucle pe lng un numr de intruciuni denumite INNER LOOP i apoi se execut salturi
spre alte bucle. Fiecare bucl conine un numr care este decrementat (dac numrul este 255 atunci sunt
256 decrementri pn cnd coninutul devine 0).
Principala parte a programului este o subrutin Flash (de plpire cu frecvena de 2Hz). Se pune 1 n W,
apoi W este transferat portului B, iar ledul se aprinde. n acest moment se execut rutina de delay. Dup
terminarea rutinei, se pune lui 0 n W, apoi W este transferat portului B, iar ledul se stinge. Din nou se
execut rutina de ntrziere. Ciclul se repet.

Program:


;PIC16F84
;Aprinderea i stingerea LED-lui cu frecvena de 2Hz

Start ORG 0x00
BSF 03,5
MOVLW 00h
MOVWF 05h
MOVWF 06h
BCF 03,5
MOVLW 02h
MOVWF 05h

Flash MOVLW 01h ;1 W
MOVWF 06h ; W (06h); ledul se aprinde
CALL Delay ; Chemare subrutin Delay
MOVLW 00 ; 0 W
MOVWF 06h ; W (06h); ledul se stinge
CALL Delay ; Chemare subrutin Delay
GOTO Flash ; Salt la FLASH

Delay MOVLW 03
MOVWF 1Ah
Delay1 DECFSZ 1Bh,1 ;micro bucle, dac coninutul nu este zero nu se trece la instr.urmtoare
GOTO Delay1
DECFSZ 1Ch,1
GOTO Delay1
DECFSZ 1Ah,1
GOTO Delay1
RETURN

END
Programul n hexa este:
:10000000831600308500860083120230850001309F
:1000100086000E20003086000E20072803309A004C
:0E0020009B0B10289C0B10289A0B1028080030
:00000001FF

3. Scanarea primei coloane de leduri

Acest experiment determin aprinderea succesiv ncepnd cu ledului din stnga jos spre ledul din
stnga sus. Acest efect se realizeaz prin punerea lui 01 n registrul de ieire 06h, iar primul led se aprinde.
Bitul cu 1 logic este deplasat apoi la stnga printr-o instruciune RLF, ceea ce determin aprinderea
urmtorului led. Trebuie ters bitul de carry cnd se utilizeaz instruciunea de rotire RLF.

Program:
;PIC16F84 and only F84 chip
;prima coloan de leduri vor fi scanate, ncepnd cu ledul de jos cu frecvena de 2Hz.

Start ORG 0x00
BSF 03,5
MOVLW 00h
MOVWF 05h
MOVWF 06h
BCF 03,5
MOVLW 02h
MOVWF 05h
Scan BCF 03h,0
MOVLW 01h
MOVWF 06h ; se aprinde primul led
Scan1 CALL Delay ;salt subrutin
RLF 06h,1 ; rotete la stnga coninutul registrului de la adresa 06h
GOTO Scan1

Delay MOVLW 03
MOVWF 1Ah
Delay1 DECFSZ 1Bh,1
GOTO Delay1
DECFSZ 1Ch,1
GOTO Delay1
DECFSZ 1Ah,1
GOTO Delay1
RETURN

END





Programul hexa este:
:1000000083160030850086008312023085000310BD
:10001000013086000D20860D0A2803309A009B0BC4
:0C0020000F289C0B0F289A0B0F280800DB
:00000001FF

4. Scanarea n sus i n jos a primei coloane de leduri

Acest experiment se aseamn cu experimentul anterior cu diferena c atunci cnd se aprinde
ultimul led de pe coloan nu se va aprinde primul led ci ledul alturat. Se detecteaz cnd bitul 6 este 1
logic i se modific deplasarea coninutului registrului spre dreapta. Cnd bitului 0 este pe 1 logic se
deplaseaz coninutul spre stnga.

Program:

;PIC16F84
;prima coloan de leduri este scanat n sus i n jos cu frecvena de 2Hz.

Start ORG 0x00
BSF 03,5
MOVLW 00h
MOVWF 05h
BCF 03,5
MOVLW 02h
MOVWF 05h
UpDown BCF 03h,0 ;tergerea bitului de carry
MOVLW 01h
MOVWF 06h ;aprinderea primului led
CALL Delay
UpDown1 RLF 06h,1 ;aprinderea ledurilor n sus
CALL Delay
BTFSS 06h,6 ;S-a ajuns cu aprinderea ledurilor sus?
GOTO UpDown1 ;nu
UpDown2 RRF 06h,1 ;da. Aprinderea ledurilor n jos
CALL Delay
BTFSS 06h,0 ; S-a ajuns cu aprinderea ledurilor jos?
GOTO UpDown2 ;nu
GOTO UpDown1 ;da. Repetarea ciclului

Delay MOVLW 03
MOVWF 1Ah
Delay1 DECFSZ 1Bh,1
GOTO Delay1
DECFSZ 1Ch,1
GOTO Delay1
DECFSZ 1Ah,1
GOTO Delay1
RETURN

END

Programul n hexa este:
:1000000083160030850086008312023085000310BD
:10001000013086001420860D1420061F0B28860C44
:100020001420061C0F280B2803309A009B0B16285F
:0A0030009C0B16289A0B16280800F6
:00000001FF






Programarea microcontroller-ului PIC16F874
Pentru scrierea programului n microcontroller este nevoie o interfa hardware
specializat i o interfa software care s o controleze. Interfaa hardware se conecteaz
la calculator (PC), n funcie de tipul ei, pe un port serial, paralel sau USB. Ca interfa
software se folosete un program specializat (Pony Prog, PICSTART Plus, PRO MATE
2, etc.).
Setul de instruciuni
Microcontroller-ul PIC16F874 poate fi programat folosind un set de
35 de instruciuni (limbaj de asamblare). Fiecare instruciune este codificat
pe 14 bii.
Cele 35 de instruciuni se mpart n 3 categorii:
instruciuni la nivel de octet (byte)
instruciuni la nivel de bit
instruciuni literale i de control
Instruciunea Descriere
Instruciuni la nivel de octet
ADDWF f,d w + f d (destinaie)
ANDWF f,d w & f d (destinaie)
CLRF f terge f
CLRW terge acumulatorul (w)
COMF f,d Complementul lui f d (destinaie)
DECF f,d f -1 d (destinaie)
DECFSZ f,d f -1 d (destinaie) daca nu rezult 0
INCF f,d f +1 d (destinaie)
INCFSZ f,d f +1 d (destinaie) daca nu rezult 0
IORWF f,d w sau f d (destinaie)
MOVF f,d f d (destinaie)
MOVWF f w f
NOP f,d Nici o operaie (ntrziere)
RLF f,d Rotete spre stnga registrul f d (destinaie)
RRF f,d Rotete spre dreapta registrul f d (destinaie)
SUBWF f,d f w d (destinaie)
SWAPF f,d f<3;0> d<7;4> i f<7;4> d<3;0>
XORWF f,d w sau exclusiv f d (destinaie)
Instruciuni la nivel de bit
BCF f,b terge bitul b al registrului f (0 f<b> )
BSF f,b Seteaz bitul b al registrului f (1 f<b> )
BTFSC f,b Sare o instruciune dac f<b>=0
BTFSS f,b Sare o instruciune dac f<b>=1
Instruciuni literale i de control
ADDLW k w + k w
ANDLW k w & f w
CALL k Cheam subrutina k
CLRWDT - terge watchdog timer
GOTO k Salt necondiionat la k
IORLW k w sau k w
MOVLW k k w
RETFIE - Revenire din ntrerupere
RETLW k Revenire din ntrerupere i k w
RETURN - Revenire din subrutin
SLEEP - Standby
SUBLW k k w w
XORLW k w sau exclusiv k w
d=0 destinaia este w
d=1 destinaia este f

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