semnificaţia pinilor

23
Semnificaţia pinilor PIC16F84 are un număr total de 18 pini. Cel mai adesea se găseşte într-o capsulă de tip DIP18 dar se poate găsi 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 sugerând că găurile pentru pini unde să intre aceştia, nu sunt necesare în lipirea acestui tip de componentă. Pinii microcontrolerului PIC16F84 au următoarea semnificaţie: Pin nr.1 RA2 Al doilea pin la portul A. Nu are funcţie adiţională. Pin nr.2 RA3 Al treilea pin la portul A. Nu are funcţie adiţională. Pin nr.3 RA4 Al patrulea pin la portul A. TOCK1 care funcţionează ca timer se găseşte 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 funcţie adiţională. Pin nr.7 RB1 Primul pin la portul B. Nu are funcţie adiţională. Pin nr.8 RB2 Al doilea pin la portul B. Nu are funcţie adiţională. Pin nr.9 RB3 Al treilea pin la portul B. Nu are funcţie adiţională. Pin nr.10 RB4 Al patrulea pin la portul B. Nu are funcţie adiţională. Pin nr.11 RB5 Al cincilea pin la portul B. Nu are funcţie adiţională. 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 funcţie adiţională. Pin nr.18 RA1 Primul pin la portul A. Nu are funcţie adiţională.

Upload: damiel-ghiuzan

Post on 07-Feb-2016

39 views

Category:

Documents


0 download

DESCRIPTION

electronica

TRANSCRIPT

Page 1: Semnificaţia pinilor

Semnificaţia pinilor

PIC16F84 are un număr total de 18 pini. Cel mai adesea se găseşte într-o capsulă de tip DIP18 dar se poate găsi 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 sugerând că găurile pentru pini unde să intre aceştia, nu sunt necesare în lipirea acestui tip de componentă.

Pinii microcontrolerului PIC16F84 au următoarea semnificaţie:

Pin nr.1 RA2 Al doilea pin la portul A. Nu are funcţie adiţională.Pin nr.2 RA3 Al treilea pin la portul A. Nu are funcţie adiţională.Pin nr.3 RA4 Al patrulea pin la portul A. TOCK1 care funcţionează ca timer se găseşte 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 funcţie adiţională.Pin nr.7 RB1 Primul pin la portul B. Nu are funcţie adiţională.Pin nr.8 RB2 Al doilea pin la portul B. Nu are funcţie adiţională.Pin nr.9 RB3 Al treilea pin la portul B. Nu are funcţie adiţională.Pin nr.10 RB4 Al patrulea pin la portul B. Nu are funcţie adiţională.Pin nr.11 RB5 Al cincilea pin la portul B. Nu are funcţie adiţională.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 funcţie adiţională.Pin nr.18 RA1 Primul pin la portul A. Nu are funcţie adiţională.

Introducere

Page 2: Semnificaţia pinilor

PIC16F84 aparţine unei clase de microcontrolere de 8 biţi cu arhitectură RISC. Structura lui generală este arătată în schiţa următoare reprezentând blocurile de bază.

Memoria program (FLASH)-pentru memorarea unui program scris. Pentru că memoria ce este făcută în tehnologia FLASH poate fi programată şi ştearsă mai mult decât odată, aceasta face microcontrolerul potrivit pentru dezvoltarea de componentă.

EEPROM-memorie de date ce trebuie să fie salvate când 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 alimentării această dată se pierde, va trebui să facem ajustarea încă o dată la revenirea alimentării. Astfel componenta noastră pierde în privinţa auto-menţinerii.

RAM-memorie de date folosită de un program în timpul executării 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 biţi în interiorul microcontrolerului ce lucrează independent de program. La fiecare al patrulea impuls de ceas al oscilatorului îşi încrementează valoarea lui până ce atinge maximul (255), şi apoi începe să numere tot din nou de la zero. După cum ştim timpul exact dintre fiecare două incrementări ale conţinutului timer-ului, poate fi folosit pentru măsurarea 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.

Page 3: Semnificaţia pinilor

CISC, RISC S-a spus deja că PIC1684 are o arhitectură RISC. Acest termen este adeseori găsit în literatura despre calculatoare, şi are nevoie să fie explicat aici mai în detaliu. Arhitectura Harvard este un concept mai nou decât von-Neumann. S-a născut din nevoia de mărire 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 bineînţeles, o viteză mai mare de lucru. Separarea programului de memoria de date face posibil ca mai departe instrucţiunile să nu trebuiască să fie cuvinte de 8 biţi. PIC16F84 foloseşte 14 biţi pentru instrucţiuni ceea ce permite ca toate instrucţiunile să fie instrucţiuni dintr-un singur cuvânt. Este de asemenea tipic pentru arhitectura Harvard să aibă mai puţine instrucţiuni decât von-Newmann şi să aibă instrucţiuni 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 instrucţiuni, mai precis 35 de instrucţiuni (de ex. microcontrolerele INTEL şi Motorola au peste 100 de instrucţiuni). Toate aceste instrucţiuni sunt executate într-un ciclu cu excepţia instrucţiunilor 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 comparaţie cu alte microcontrolere de 8 biţi 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

Page 4: Semnificaţia pinilor

- Optional – simularea programului pe PC- Incarcarea programului in memoria program a microcontrolerului- Designul si realizarea hardware-ului- Testarea proiectuluiMicrocontrolerul 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

Page 5: Semnificaţia pinilor

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 instrucţiuni, mai precis 35 de instrucţiuni (de ex. microcontrolerele INTEL şi Motorola au peste 100 de instrucţiuni). Toate aceste instrucţiuni sunt executate într-un ciclu cu excepţia instrucţiunilor 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 comparaţie cu alte microcontrolere de 8 biţi din clasa sa.

APLICATIII

PORTB

Page 6: Semnificaţia pinilor

PORTB are 8 pini legaţi la el. Registrul adecvat pentru direcţia datelor este TRISB la adresa 86h. Setarea unui bit în registrul TRISB defineşte pinul portului corespunzător ca pin de intrare, şi resetarea unui bit în registrul TRISB, defineşte pinul portului corespunzător ca pin de ieşire. Fiecare pin la PORTB are un rezistor slab intern pull-up (scoatere) (rezistor care defineşte o linie la unu logic) care poate fi activat prin resetarea celui de-al şaptelea bit RBPU în registrul OPTION. Aceşti rezistori 'pull-up' se închid automat când pinul portului este configurat ca o ieşire. Când porneşte microcontrolerul, 'pull-up'-ii sunt dezactivaţi. 

Patru pini ai portului PORTB, RB7:RB4 pot cauza o întrerupere, care se întâmplă când starea lor se schimbă de la unu logic la zero logic şi invers. Numai pinii configuraţi ca intrare pot cauza această întrerupere să se întâmple (dacă fiecare pin RB7:RB4 este configurat ca o ieşire, nu va fi generată o întrerupere la schimbarea stării). Această opţiune de întrerupere cu rezistorii 'pull-up' fac mai uşoară rezolvarea problemelor din practică, ca de exemplu o tastatură matriceală. Dacă rândurile tastaturii sunt conectate la aceşti pini, fiecare apăsare a unei clape va cauza o întrerupere. Microcontrolerul va determina care clapă este apăsată în timp ce se procesează o întrerupere. Nu se recomandă să apelaţi la portul B în timp ce se procesează întreruperea.

Exemplul de mai sus arată cum pinii 0, 1, 2, şi 3 sunt declaraţi ca intrare, şi pinii 4, 5, 6 şi 7 ca ieşire.

PORTA

PORTA are 5 pini legaţi la el. Registrul corespunzător pentru direcţia datelor este TRISA  la adresa 85h. Ca şi la portul B, setarea unui bit în registrul TRISA defineşte de asemenea pinul portului corespunzător ca un pin de intrare, şi resetarea unui bit în registrul TRISA defineşte pinul portului corespunzător ca pin de ieşire.

Al cincilea pin al portului A are funcţie duală. La acel pin se află de asemenea o intrare externă pentru timer-ul TMRO. Una din aceste două opţiuni este aleasă prin setarea sau resetarea bitului TOCS (TMR0 Clock Source Select bit-bit de Selecţie 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.

Page 7: Semnificaţia pinilor

Exemplul arată cum pinii 0, 1, 2, 3, şi 4 sunt declaraţi ca intrare iar 5, 6 şi 7 ca pini de ieşire.

Bancuri de Memorie

În afară de această diviziune în 'lungime' a regiştrilor SFR şi GPR, harta memoriei este de asemenea împărţită în 'lăţime' (vezi harta precedentă) în două zone numite 'bancuri'. Selectarea unuia din bancuri se face de biţii RPO şi RP1 în registrul STATUS-stare.

Exemplu:

bcf STATUS, RP0

Instrucţiunea BCF şterge bitul RPO (RP0=0) în registrul STATUS şi astfel setează bancul 0.

bsf STATUS, RP0

Instrucţiunea BSF setează bitul RPO (RP0=1) în registrul STATUS şi astfel setează bancul 1.

Uzual, grupurile de instrucţiuni care sunt adesea în uz, sunt conectate într-o singură unitate ce poate fi uşor apelată într-un program, şi a cărei nume are o semnificaţie clară, aşa-numitul Macros-macrocomandă. Cu ajutorul lor, selecţia 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

Page 8: Semnificaţia pinilor

Locaţiile 0Ch - 4Fh sunt regiştri cu scop general (GPR) ce sunt folosiţi ca memorie RAM. Când sunt accesate locaţiile 8Ch - CFh în Bancul 1, accesăm de fapt exact aceleaşi locaţii în Bancul 0. Cu alte cuvinte, când doriţi să accesaţi unul din regiştrii GPR, nu trebuie să vă îngrijoraţi că nu ştiţi în ce banc sunteţi!

PROGRAMATOR SERIAL SI PARALEL

Programatorul paralel este un programator de gabarit relativ mare, având un transformator de reţea încorporat, asigură un curent de programare mare şi o bună izolare între aplicaţie şi calculator fiind controlat de o gamă largă de produse software care pot fi obţinute de pe internet. Acceptă programarea tuturor microcontrolerelor Microchip şi a unor memorii eeprom seriale.

Programatorul serial este un programator de gabarit redus recomandat doar situaţiilor de programare ,,pe teren’’ când transportul unui programator paralel este incomod şi laptop-ul utilizat generează pe COM tensiuni suficient de mari. Utilizează integral tensiunea generată de interfaţa 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 programării.

Se menţionează că există şi programatoare seriale care au sursă de alimentare separată şi care au o funcţionare mai bună decât cele prezentate anterior.

Laborator 2DATE GENERALE DESPRE MICROCONTROLERUL PIC 16F84

PIC16F84 aparţine unei clase de microcontrolere de 8 biţi cu arhitectură RISC (Reduced Instruction Set Computer). Structura lui generală este arătată în fig.1. Arhitectura generală a unui microcontroler de tip RISC este de tip Harvard (fig.2). PIC16F84 are 35 de instrucţiuni. Aproape toate instrucţiunile se realizează într-un ciclu maşină cu excepţia salturilor care sunt realizate în doi cicli. În funcţie de tipul constructiv, frecvenţa de tact este de până la 20 MHz.

Page 9: Semnificaţia pinilor

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 până 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 când 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 alimentării această dată se pierde, va trebui să facem ajustarea încă o dată la revenirea alimentării. PIC16F84 are 64 octeti EEPROM. Memoria EEPROM poate fi programată şi ştearsă de până la 1000000 de ori iar durata de menţinere a informaţiei este mai mare de 40 de ani.

RAM-memorie de date folosită de un program în timpul executării 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 regiştrii cu funcţii speciale (SFR) pe 8 biti. Cei mai importanţi regiştrii sunt: TMR0, PCL, STATUS, FSR, PORTA, PORTB, EEDATA, EEADR, PCLATH, INTCON, TRISA, TRISB, EECON1, EECON2. Aceşti regiştrii au adresele: 00h 0Bh şi 80h 8Bh. PIC16F84 are 68 de regiştrii cu funcţii generale (GPR) pe 8 biti de la adresa 0Ch la 4Fh. Memoria este împărţită în lăţime sub formă de bancuri (zone) de memorie: bancul 0 (adrese 00h 0Bh) şi bancul 1 (adrese 80h 8Bh).

Page 10: Semnificaţia pinilor

Fig.3. Harta memoriei

Unitatea de logică aritmetică este responsabilă de executarea operaţiilor ca adunarea, scăderea, mutarea (la stânga sau la dreapta într-un registru) şi de operaţiile logice. Mutarea datelor într-un registru se mai numeşte 'shifting'- transferare. PIC16F84 conţine o unitate logică aritmetică de 8 biţi şi regiştri de lucru de 8 biţi.

În instrucţiunile cu doi operanzi, în mod obişnuit un operand este în registrul de lucru (registrul W), iar celălalt este unul din regiştri sau o constantă. Prin operand înţelegem conţinutul asupra căruia se fac unele operaţii, iar un registru este oricare din regiştrii GPR sau SFR. GPR este o prescurtare de la 'General Purposes Registers'-Regiştri cu Scopuri Generale, iar SFR de la  'Special Function Registers'-Regiştri cu Funcţie Specială. În instrucţiunile cu un operand, un operand este fie registrul W fie unul din regiştri. Pe lângă operaţiile aritmetice şi logice, ALU controlează biţii de stare (biţi găsiţi în registrul STATUS). Executarea unor instrucţiuni afectează biţii de stare, de care depinde rezultatul însuşi. Depinzând de ce instrucţiune este executată, ALU poate afecta valorile biţilor Carry (C), Digit Carry (DC), şi Zero (Z) în registrul STATUS.

Page 11: Semnificaţia pinilor

Fig.4. Schema bloc a microcontrolerului PIC 16F84

Page 12: Semnificaţia pinilor

Laborator 41. Aprinderea unui led

Pentru experimentări se va utiliza placa cu 5x7 led-uri.Primul experiment aprinde ledul din stânga jos al afişajului. Prima instrucţiune

spune asamblorului să pună programul la începutul memoriei. A doua linie setează primul bank de memorie unde sunt regiştrii 85h (TRISA) şi 86h (TRISB) pentru definirea pinilor ca intrări sau ieşiri şi care au corespondenţă directă cu regiştrii 05h (PORTA) şi 06h (PORTB). Dacă în registrul W este încărcat cu 00h apoi acest registru este transferat în regiştrii TRISA şi TRISB toate liniile ale portului A şi portului B vor fi ieşiri. A şasea intrucţiune setează bancul 0. Intrucţiunile 7 şi 8 determină RA1=1 logic pentru a reseta circuitul MMC4017. RA1 este al doilea din port. Tranzistorul corespunzător primei coloane de leduri va intra în conducţie, ceea ce determină conectarea catozilor ledurilor colanei 1 la masă.

Aprinderea ledului se realizează prin trei linii de program. Prima linie LED_ON pune numărul 01h în W. Următoarea linie mută valoarea din W la portul 06h (PORTB). La această linie primul led de pe coloana 1 se aprinde. Următoarea linie realizează o buclă infinită în program (salt la LED_ON). Astfel, ledul rămâne aprins permanent.Obsevaţii:- liniile care încep cu ; sunt explicaţii în cadrul programului;- există o corespondenţă între regiştrii alăturaţi; pot fi accesaţi în funcţie de bancul selectat;- prin (05h) se înţelege registrul de la adresa 05h.

Programul este următorul.;PIC16F84         ;Aprinderea unui Led din stânga jos a afişajului

  Start   ORG 0x00             BSF 03,5             ;se trece la bancul 1 de regiştrii             MOVLW 00h       ; 0 W                          MOVWF 05h       ;liniile portului A sunt setate ca ieşiri                    MOVWF 06h       ; liniile portului B sunt setate ca ieşiri                    BCF 03,5             ; se trece la bancul 0 de regiştrii             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 ;sfârşit program

Fişierul hexa al programului prezentat anterior are următorul format::10000000831600308500860083120230850001309F:040010008600072837:00000001FF

Această informaţie se află în microcontroler.

Page 13: Semnificaţia pinilor

2. Aprinderea şi stingerea unui led

Acest experiment utilizează acelaşi led pentru experimentări. Se introduce o rutină de întârziere (DELAY). Un microcontroler funcţionează tot timpul. Numai când nu este alimentat cu tensiune nu funcţionează. Pentru un cristal de 4MHz se execută aproximativ 1 milion de instrucţiuni pe secundă. Majoritatea instrucţiunilor se realizează într-o microsecundă. Numai instrucţiunile GOTO şi RETURN sunt executate în două microsecunde. După ce ledul a fost aprins se execută 250000 de instrucţiuni în care nu se face nimic (NOP – no operation). Soluţia se realizează prin introducerea unei rutine DELAY care introduce nişte ,,micro bucle’’ pe lângă un număr de intrucţiuni denumite INNER LOOP şi apoi se execută salturi spre alte bucle. Fiecare buclă conţine un număr care este decrementat (dacă numărul este 255 atunci sunt 256 decrementări până când conţinutul devine 0).Principala parte a programului este o subrutină Flash (de pâlpâire cu frecvenţa 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 întârziere. Ciclul se repetă. Program:

;PIC16F84        ;Aprinderea şi stingerea LED-lui cu frecvenţa 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ă conţinutul nu este zero nu se trece la instr.următoare               GOTO Delay1               DECFSZ 1Ch,1               GOTO Delay1               DECFSZ 1Ah,1               GOTO Delay1               RETURN

               ENDProgramul în hexa este:

Page 14: Semnificaţia pinilor

:10000000831600308500860083120230850001309F:1000100086000E20003086000E20072803309A004C:0E0020009B0B10289C0B10289A0B1028080030:00000001FF

3. Scanarea primei coloane de leduri

Acest experiment determină aprinderea succesivă începând cu ledului din stânga jos spre ledul din stânga sus. Acest efect se realizează prin punerea lui 01 în registrul de ieşire 06h, iar primul led se aprinde. Bitul cu 1 logic este deplasat apoi la stânga printr-o instrucţiune RLF, ceea ce determină aprinderea următorului led. Trebuie şters bitul de carry când se utilizează instrucţiunea de rotire RLF.

Program:;PIC16F84 and only F84 chip         ;prima coloană de leduri vor fi scanate, începând cu ledul de jos cu frecvenţa 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             ; roteşte la stânga conţinutul 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

Page 15: Semnificaţia pinilor

Acest experiment se aseamănă cu experimentul anterior cu diferenţa că atunci când se aprinde ultimul led de pe coloană nu se va aprinde primul led ci ledul alăturat. Se detectează când bitul 6 este 1 logic şi se modifică deplasarea conţinutului registrului spre dreapta. Când bitului 0 este pe 1 logic se deplasează conţinutul spre stânga.

Program:

;PIC16F84         ;prima coloană de leduri este scanată în sus şi în jos cu frecvenţa 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

Page 16: Semnificaţia pinilor
Page 17: Semnificaţia pinilor

Programarea microcontroller-ului PIC16F874Pentru scrierea programului în microcontroller este nevoie o interfaţă hardware

specializată şi o interfaţă software care să o controleze. Interfaţa hardware se conectează la calculator (PC), în funcţie de tipul ei, pe un port serial, paralel sau USB. Ca interfaţă software se foloseşte un program specializat (Pony Prog, PICSTART Plus, PRO MATE 2, etc.).Setul de instrucţiuni

Microcontroller-ul PIC16F874 poate fi programat folosind un set de 35 de instrucţiuni (limbaj de asamblare). Fiecare instrucţiune este codificată pe 14 biţi. Cele 35 de instrucţiuni se împart în 3 categorii:

instrucţiuni la nivel de octet (byte) instrucţiuni la nivel de bit instrucţiuni literale şi de control

Instrucţiunea Descriere Instrucţiuni la nivel de octetADDWF f,d w + f → d (destinaţie)ANDWF f,d w & f → d (destinaţie)CLRF f Şterge fCLRW Şterge acumulatorul (w)COMF f,d Complementul lui f → d (destinaţie)DECF f,d f -1 → d (destinaţie)DECFSZ f,d f -1 → d (destinaţie) daca nu rezultă 0INCF f,d f +1 → d (destinaţie)INCFSZ f,d f +1 → d (destinaţie) daca nu rezultă 0IORWF f,d w sau f → d (destinaţie)MOVF f,d f → d (destinaţie)MOVWF f w → fNOP f,d Nici o operaţie (întârziere)RLF f,d Roteşte spre stânga registrul f → d (destinaţie)RRF f,d Roteşte spre dreapta registrul f → d (destinaţie)SUBWF f,d f – w → d (destinaţie)SWAPF f,d f<3;0>→ d<7;4> şi f<7;4>→ d<3;0>XORWF f,d w sau exclusiv f → d (destinaţie)Instrucţiuni la nivel de bitBCF 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 instrucţiune dacă f<b>=0

Page 18: Semnificaţia pinilor

BTFSS f,b Sare o instrucţiune dacă f<b>=1Instrucţiuni literale şi de controlADDLW k w + k → wANDLW k w & f → wCALL k Cheamă subrutina kCLRWDT - Şterge watchdog timerGOTO k Salt necondiţionat la kIORLW k w sau k → wMOVLW k k → wRETFIE - Revenire din întrerupereRETLW k Revenire din întrerupere şi k → wRETURN - Revenire din subrutinăSLEEP - Standby SUBLW k k – w → wXORLW k w sau exclusiv k → w

d=0 → destinaţia este wd=1 → destinaţia este f