curs programare pic

217
PROGRAMAREA PIC® - urilor Autor : BIGONOFF Partea I INTRODUCERE IN MICROCONTROLERE CU PIC16F84 Editia 31

Upload: corado33

Post on 20-Oct-2015

268 views

Category:

Documents


30 download

DESCRIPTION

TECH

TRANSCRIPT

  • PROGRAMAREA PIC - urilor

    Autor : BIGONOFF

    Partea I

    INTRODUCERE IN MICROCONTROLERE CU PIC16F84

    Editia 31

  • II

  • III

    CUPRINS :

    1. INTRODUCERE............................................................................................................................................... 1

    2. SISTEMELE DE NUMERATIE ..................................................................................................................... 3 2.1 SISTEMUL ZECIMAL ....................................................................................................................................... 3 2.2 SISTEMUL BINAR ........................................................................................................................................... 3 2.3 SISTEMUL HEXAZECIMAL .............................................................................................................................. 5 2.4 OPERATIILE ................................................................................................................................................... 6 2.5 NUMERELE CU SEMN ..................................................................................................................................... 6 2.6 OPERATIILE BOOLEENE ................................................................................................................................. 7

    2.6.1 Complementul ( NOT ) ..................................................................................................................... 8 2.6.2 Functia SI ( AND )...................................................................................................................... 8 2.6.3 Functia SAU ( OR ) .................................................................................................................... 9 2.6.4 Functia SAU EXCLUSIV ( Exclusif OR sau XOR ) ............................................................. 9

    2.7 CITEVA CUVINTE DESPRE UNITATI............................................................................................................... 10 3. ALCATUIREA SI FUNCTIONAREA PIC-URILOR.............................................................................. 13

    3.1 CE ESTE UN PIC ? ..................................................................................................................................... 13 3.2 DIFERITELE FAMILII DE PIC-URI............................................................................................................... 14 3.3 IDENTIFICAREA UNUI PIC......................................................................................................................... 14 3.4 ORGANIZAREA UNUI 16F84......................................................................................................................... 15

    3.4.1 Memoria de program.......................................................................................................................... 15 3.4.2 Memoria EEPROM............................................................................................................................. 16 3.4.3 Memoria RAM .................................................................................................................................... 16

    4. ORGANIZAREA INSTRUCTIUNILOR ..................................................................................................... 17 4.1 GENERALITATI ............................................................................................................................................ 17 4.2 TIPURILE DE INSTRUCTIUNI ......................................................................................................................... 17

    4.2.1 Instructiunile orientate pe octet .................................................................................................... 17 4.2.2 Instructiunile orientate pe bit ....................................................................................................... 17 4.2.3 Instructiunile generale........................................................................................................................ 18 4.2.4 Salturile si apelurile de subrutina ...................................................................................................... 18

    4.3 PANORAMICUL INSTRUCTIUNILOR............................................................................................................... 18 4.4 INDICATORII DE STARE ................................................................................................................................ 20

    4.4.1 Indicatorul de stare Z ................................................................................................................... 20 4.4.2 Indicatorul de stare C ................................................................................................................... 21

    5. INTRODUCERE IN MPLAB..................................................................................................................... 23 5.1 PREGATIRI IN VEDEREA UTILIZARII MPLAB ............................................................................................ 23 5.2 CREAREA PRIMULUI NOSTRU PROIECT ......................................................................................................... 23

    6. ORGANIZAREA UNUI FISIER .ASM .................................................................................................. 30 6.1 COMENTARIILE............................................................................................................................................ 30 6.2 DIRECTIVELE............................................................................................................................................... 30 6.3 FISIERELE INCLUDE ................................................................................................................................ 30 6.4 DIRECTIVA _CONFIG................................................................................................................................. 31 6.5 ASIGNARILE ................................................................................................................................................ 32 6.6 DEFINITIILE ................................................................................................................................................. 32 6.7 MACRO-URILE ............................................................................................................................................. 33 6.8 ZONA VARIABILELOR .................................................................................................................................. 33 6.9 ETICHETELE ................................................................................................................................................ 34 6.10 DIRECTIVA ORG ................................................................................................................................. 34 6.11 DIRECTIVA END SI SFIRSITUL PROGRAMULUI...................................................................................... 34

    7. REALIZAREA UNUI PROGRAM............................................................................................................... 36 7.1 CREAREA PRIMULUI NOSTRU PROGRAM ...................................................................................................... 36 7.2 ASAMBLAREA UNUI PROGRAM .................................................................................................................... 37

    8. SIMULAREA UNUI PROGRAM ................................................................................................................. 40 8.1 LANSAREA SIMULATORULUI SI STABILIREA PARAMETRILOR ....................................................................... 40 8.2 EXPLICAREA REGISTRELOR FUNDAMENTALE .............................................................................................. 42

  • IV

    8.2.1 Registrele PCL si PCLATH .................................................................................................... 42 8.2.2 Registrul W ................................................................................................................................... 43 8.2.3 Registrul STATUS ......................................................................................................................... 43

    8.3 LANSAREA SIMULARII ................................................................................................................................. 45 9. SETUL DE INSTRUCTIUNI......................................................................................................................... 50

    9.1 INSTRUCTIUNEA GOTO (DU-TE LA)....................................................................................................... 50 9.2 INSTRUCTIUNEA INCF (INCREMENT FILE)............................................................................................ 51 9.3 INSTRUCTIUNEA DECF (DECREMENT FILE)......................................................................................... 51 9.4 INSTRUCTIUNEA MOVLW (MOVE LITERAL TO W).............................................................................. 52 9.5 INSTRUCTIUNEA MOVF (MOVE FILE).................................................................................................. 52 9.6 INSTRUCTIUNEA MOVWF (MOVE W TO FILE)..................................................................................... 53 9.7 INSTRUCTIUNEA ADDLW (ADD LITERAL AND W) .............................................................................. 54 9.8 INSTRUCTIUNEA ADDWF (ADD W AND F) .......................................................................................... 54 9.9 INSTRUCTIUNEA SUBLW (SUBSTRACT W FROM LITERAL).................................................................. 55 9.10 INSTRUCTIUNEA SUBWF (SUBSTRACT W FROM F)............................................................................ 57 9.11 INSTRUCTIUNEA ANDLW (AND LITERAL WITH W)........................................................................... 57 9.12 INSTRUCTIUNEA ANDWF (AND W WITH F)....................................................................................... 58 9.13 INSTRUCTIUNEA IORLW (INCLUSIVE OR LITERAL WITH W).............................................................. 58 9.14 INSTRUCTIUNEA IORWF (INCLUSIVE OR W WITH FILE)..................................................................... 59 9.15 INSTRUCTIUNEA XORLW (EXCLUSIVE OR LITERAL WITH W) .......................................................... 59 9.16 INSTRUCTIUNEA XORWF (EXCLUSIVE OR W WITH F) ....................................................................... 60 9.17 INSTRUCTIUNEA BSF (BIT SET F)........................................................................................................ 60 9.18 INSTRUCTIUNEA BCF (BIT CLEAR F)................................................................................................... 60 9.19 INSTRUCTIUNEA RLF ( ROTATE LEFT THROUGH CARRY) .................................................................... 61 9.20 INSTRUCTIUNEA RRF ( ROTATE RIGHT THROUGH CARRY).................................................................. 62 9.21 INSTRUCTIUNEA BTFSC (BIT TEST F, SKIP IF CLEAR) ........................................................................ 62 9.22 INSTRUCTIUNEA BTFSS (BIT TEST F, SKIP IF SET).............................................................................. 63 9.23 INSTRUCTIUNEA DECFSZ (DECREMENT F, SKIP IF Z)........................................................................ 64 9.24 INSTRUCTIUNEA INCFSZ (INCREMENT F, SKIP IF ZERO).................................................................... 65 9.25 INSTRUCTIUNEA SWAPF (SWAP NIBBLES IN F) ................................................................................. 65 9.26 INSTRUCTIUNEA CALL (CALL SUBROUTINE)..................................................................................... 66 9.27 INSTRUCTIUNEA RETURN (RETURN FROM SUBROUTINE) ................................................................ 66 9.28 INSTRUCTIUNEA RETLW (RETURN WITH LITERAL IN W) .................................................................. 69 9.29 INSTRUCTIUNEA RETFIE (RETURN FROM INTERRUPT)...................................................................... 70 9.30 INSTRUCTIUNEA CLRF (CLEAR F)...................................................................................................... 70 9.31 INSTRUCTIUNEA CLRW (CLEAR W) .................................................................................................. 70 9.32 INSTRUCTIUNEA CLRWDT (CLEAR WATCHDOG) ............................................................................. 70 9.33 INSTRUCTIUNEA COMF (COMPLEMENT F)......................................................................................... 71 9.34 INSTRUCTIUNEA SLEEP (TRECEREA IN MOD STAND-BY) .................................................................... 71 9.35 INSTRUCTIUNEA NOP (NO OPERATION) .............................................................................................. 72 9.36 INSTRUCTIUNI DEPASITE............................................................................................................................ 72

    10. MODURILE DE ADRESARE..................................................................................................................... 73 10.1 ADRESAREA LITERALA SAU IMEDIATA ...................................................................................................... 73 10.2 ADRESAREA DIRECTA................................................................................................................................ 73 10.3 ADRESAREA INDIRECTA ............................................................................................................................ 73

    10.3.1 Registrele FSR si INDF .................................................................................................................... 74 10.4 CITEVA EXEMPLE ...................................................................................................................................... 75

    11. REALIZAREA UNUI PROGRAM INCORPORAT................................................................................. 77 11.1 MATERIALE NECESARE.............................................................................................................................. 77 11.2 REALIZAREA PLACUTEI DE TEST ................................................................................................................ 77 11.3 REALIZAREA PROIECTULUI........................................................................................................................ 78 11.4 EDITAREA FISIERULUI SURSA .................................................................................................................... 79 11.5 ALEGEREA CONFIGURATIEI ....................................................................................................................... 79 11.6 REGISTRUL OPTION................................................................................................................................. 80 11.7 EDITAREA PROGRAMULUI ......................................................................................................................... 82 11.8 REGISTRUL PORTA .................................................................................................................................. 84

    11.8.1 Functionarea detaliata a PORTURILOR ......................................................................................... 85 11.9 REGISTRUL TRISA.................................................................................................................................... 86 11.10 REGISTRELE PORTB ET TRISB.............................................................................................................. 86 11.11 EXEMPLU DE APLICARE ........................................................................................................................... 87

  • V

    11.12 RUTINA DE INITIALIZARE......................................................................................................................... 87 11.13 REZULTATELE COMPILARII...................................................................................................................... 91 11.14 PROGRAMUL PRINCIPAL .......................................................................................................................... 91 11.15 SUBRUTINA DE TEMPORIZARE ................................................................................................................. 92

    12. INTRERUPERILE ....................................................................................................................................... 98 12.1 CE ESTE O INTRERUPERE ? ......................................................................................................................... 98 12.2 MECANISMUL GENERAL AL UNEI INTRERUPERI ......................................................................................... 98 12.3 MECANISMUL DE INTRERUPERI AL PIC-URILOR ..................................................................................... 99 12.4 SURSELE DE INTRERUPERI ALE LUI 16F84 ............................................................................................... 100 12.5 DISPOZITIVELE PUSE IN PRACTICA ........................................................................................................... 101 12.6 REGISTRUL INTCON (INTERRUPT CONTROL) ...................................................................................... 102 12.7 SALVAREA SI RESTAURAREA STARII ........................................................................................................ 103

    12.7.1 Despre salvarea registrelor............................................................................................................ 104 12.7.2 Metoda de salvare .......................................................................................................................... 104

    12.7.3 METODA DE RESTAURARE .................................................................................................................... 105 12.7.4 Operatii asupra registrului STATUS .............................................................................................. 107 12.7.5 Particularitati ale instructiunii RETFIE ................................................................................... 107

    12.8 UTILIZAREA UNEI RUTINE DE INTRERUPERE ............................................................................................ 108 12.9 ANALIZA RUTINEI DE INTRERUPERE ........................................................................................................ 110 12.10 ADAPTAREA RUTINEI DE INTRERUPERE ................................................................................................. 112 12.11 INITIALIZAREA ...................................................................................................................................... 114 12.12 CONSTRUCTIA PROGRAMULUI PRINCIPAL.............................................................................................. 115 12.13 CONSTRUCTIA RUTINEI DE INTRERUPERE .............................................................................................. 116 12.14 RULAREA PE SIMULATOR A UNEI RUTINE DE INTRERUPERE ................................................................... 116 12.15 PRIMA CORECTIE : RESETAREA FLAG-ULUI ............................................................................................ 119 12.16 SA NE RAPORTAM LA SCARA DE TIMP A PIC-ULUI .............................................................................. 120 12.17 PROBLEMA ELIMINARII VIBRATIILOR..................................................................................................... 121 12.18 FINALIZAREA PROGRAMULUI ................................................................................................................ 122 12.19 OBSERVATII IMPORTANTE ..................................................................................................................... 125 12.20 CONCLUZII ............................................................................................................................................ 126

    13. TIMER-UL 0 ............................................................................................................................................... 126 13.1 DIFERITELE MODURI DE FUNCTIONARE ................................................................................................... 126 13.2 REGISTRUL TMR0 .................................................................................................................................... 127 13.3 METODE DE UTILIZARE A TIMER-ULUI 0 .................................................................................................. 127

    13.3.1 Modul de citire simpla.................................................................................................................... 127 13.3.2 Modul de scanare a flag-ului.......................................................................................................... 127 13.3.3 Modul intrerupere........................................................................................................................... 128 13.3.4 Metodele combinate........................................................................................................................ 128

    13.4 PREDIVIZORUL ........................................................................................................................................ 128 13.5 APLICATIE PRACTICA A TIMER-ULUI 0 ..................................................................................................... 130

    13.5.1 Pregatiri ......................................................................................................................................... 130 13.5.2 Initializarea .................................................................................................................................... 131 13.5.3 Rutina de intrerupere...................................................................................................................... 132

    13.6 MODIFICAREA REGISTRELOR IN SIMULATOR ........................................................................................... 133 13.7 INCERCAREA PE PLACUTA DE TEST .......................................................................................................... 133 13.8 O PRIMA IMBUNATATIRE A PRECIZIEI ...................................................................................................... 134 13.9 O A DOUA IMBUNATATIRE A PRECIZIEI .................................................................................................... 134 13.10 METODA CORECTA : ADAPTAREA CEASULUI.......................................................................................... 135 13.11 METODA DE LUX : CEASUL DUBLU......................................................................................................... 135 13.12 EXEMPLU DE FOLOSIRE A 2 INTRERUPERI .............................................................................................. 135 13.13 CONCLUZIE ........................................................................................................................................... 137

    14. ACCESELE IN MEMORIA EEPROM .............................................................................................. 139 14.1 MARIMEA SI LOCALIZAREA MEMORIEI EEPROM ................................................................................... 139 14.2 PREGATIREA PROGRAMULUI.................................................................................................................... 139 14.3 INITIALIZAREA ZONEI EEPROM ............................................................................................................. 141 14.4 REGISTRUL EEDATA ............................................................................................................................. 142 14.5 REGISTRUL EEADR................................................................................................................................ 142 14.6 REGISTRUL EECON1.............................................................................................................................. 142 14.7 REGISTRUL EECON2.............................................................................................................................. 143 14.8 CITIREA DIN MEMORIA EEPROM ........................................................................................................... 143

  • VI

    14.9 SCRIEREA IN MEMORIA EEPROM........................................................................................................... 144 14.10 UTILIZAREA PRACTICA A MEMORIEI EEPROM ..................................................................................... 145 14.11 SECURIZAREA ACCESULUI IN MEMORIA EEPROM................................................................................ 148 14.12 CONCLUZII ............................................................................................................................................ 148

    15. WATCHDOG-UL ....................................................................................................................................... 148 15.1 PRINCIPIUL DE FUNCTIONARE.................................................................................................................. 148 15.2 PREDIVIZORUL SI WATCHDOG-UL ............................................................................................................ 149 15.3 ROLUL WATCHDOG-ULUI......................................................................................................................... 149 15.4 FOLOSIREA CORECTA A WATCHDOG-ULUI ............................................................................................... 150 15.5 CEEA CE NU TREBUIE FACUT ................................................................................................................... 151 15.6 MASURAREA TIMPULUI REAL AL WATCHDOG-ULUI ................................................................................. 151 15.7 SIMULAREA UNEI BLOCARI DE PROGRAM ................................................................................................ 153

    15.7.1 Corectie prin folosirea watchdog-ului............................................................................................ 153 15.8 ALEGEREA VALORII PREDIVIZORULUI ..................................................................................................... 154 15.9 TIMP TIPIC, MINIM, SI MAXIM................................................................................................................... 154 15.10 CONCLUZIE ........................................................................................................................................... 155

    16. MODUL SLEEP.......................................................................................................................................... 155 16.1 PRINCIPIUL DE FUNCTIONARE.................................................................................................................. 155 16.2 IESIREA DIN MODUL SLEEP ................................................................................................................. 156 16.3 REVENIREA CU BITUL GIE DEZACTIVAT.................................................................................................. 156 16.4 REVENIREA CU BITUL GIE ACTIV ............................................................................................................ 157 16.5 IMPOSIBILITATEA PUNERII IN MOD SLEEP ........................................................................................... 157 16.6 FOLOSIREA MODULUI SLEEP .............................................................................................................. 157 16.7 CAZ TIPIC DE UTILIZARE .......................................................................................................................... 158

    16.7.1 Pentru un consum minim ................................................................................................................ 158 16.8 CONCLUZIE ............................................................................................................................................. 159

    17. CE MAI GASIM IN DATASHEET .......................................................................................................... 159 17.1 STRUCTURA INTERNA .............................................................................................................................. 159 17.2 SECVENTA DE DECODARE........................................................................................................................ 159 17.3 ORGANIZAREA MEMORIEI........................................................................................................................ 160 17.4 REGISTRELE SPECIALE............................................................................................................................. 160 17.5 ELECTRONICA PORTURILOR..................................................................................................................... 160 17.6 REGISTRUL DE CONFIGURARE ................................................................................................................. 160 17.7 DIFERITELE TIPURI DE OSCILATOARE ...................................................................................................... 161

    17.7.1 Precizia oscilatorului ..................................................................................................................... 162 17.8 RESETUL ................................................................................................................................................. 162 17.9 PUNEREA SUB TENSIUNE.......................................................................................................................... 163 17.10 CARACTERISTICI ELECTRICE.................................................................................................................. 164 17.11 PORTABILITATEA PROGRAMELOR.......................................................................................................... 164 17.12 ACTUALIZAREA COMPONENTELOR ........................................................................................................ 165 17.13 CONCLUZII ............................................................................................................................................ 166

    18. SUGESTII, SOLUTII SI SUBTILITATI DE PROGRAMARE............................................................. 168 18.1 COMPARATIILE........................................................................................................................................ 168 18.2 SCADEREA UNEI VALORI DIN W............................................................................................................... 168 18.3 INMULTIRILE ........................................................................................................................................... 169 18.4 INMULTIREA CU O CONSTANTA................................................................................................................ 171 18.5 ADRESARE INDIRECTA CATRE 2 ZONE DIFERITE....................................................................................... 172 18.6 TABELELE IN MEMORIA PROGRAM........................................................................................................... 173 18.7 VARIABILELE LOCALE ............................................................................................................................. 176

    18.7.1 Determinarea variabilelor locale ................................................................................................... 177 18.7.2 Constructia fara variabile locale.................................................................................................... 177 18.7.3 Constructia cu variabile locale ...................................................................................................... 177

    18.8 IMPARTIREA PRINTR-O CONSTANTA......................................................................................................... 178 18.9 CONCLUZIE ............................................................................................................................................. 178

    19. UTILIZAREA DE SUBRUTINE INTR-UN FISIER SEPARAT........................................................... 178 19.1 INTREBARI SI PUNCT DE PLECARE ............................................................................................................ 178 19.2 UTILIZAREA DIRECTA DE RUTINE IN FISIER.............................................................................................. 179 19.3 INCAPSULAREA IN MACRO-URI SIMPLE .................................................................................................... 181

  • VII

    19.4 METODA FINALIZATA .............................................................................................................................. 183 19.5 CONCLUZIE ............................................................................................................................................. 184

    20. NORMA ISO7816 ....................................................................................................................................... 184 20.1 PARTICULARITATI UTILE ALE NORMEI ISO7816...................................................................................... 184

    19.1.1 Comenzile ISO7816 ........................................................................................................................ 184 20.1.2 Protocolul schimbului de informatii ............................................................................................... 185

    20.2 LEGATURILE SERIALE ASINCRONE ........................................................................................................... 186 20.2.1 Bitul de start ................................................................................................................................... 186 20.2.2 Bitii de date..................................................................................................................................... 187 20.2.3 Bitul de paritate .............................................................................................................................. 187 20.2.4 Bitul de stop.................................................................................................................................... 187 20.2.5 Viteza si debitul .............................................................................................................................. 187

    20.3 ACHIZITIA BITILOR .................................................................................................................................. 188 19.4 CARACTERISTICILE CARDURILOR STANDARD .................................................................................... 189 20.5 CREAREA SI INITIALIZAREA PROIECTULUI ............................................................................................... 189 20.6 BAZA DE TIMP ......................................................................................................................................... 190 20.7 RECEPTIA UNUI OCTET ............................................................................................................................ 191 20.8 EMISIA UNUI CARACTER .......................................................................................................................... 193 20.9 INITIALIZAREA ........................................................................................................................................ 195 20.10 TRANSMITEREA ATR-ULUI ................................................................................................................... 195 20.11 TRANSMITEREA STARII .......................................................................................................................... 197 20.12 RECEPTIA CLASEI .................................................................................................................................. 197 20.13 RECEPTIA LUI INS, P1, P2, SI LEN........................................................................................................ 198 20.14 CONTROLUL INSTRUCTIUNII RECEPTIONATE.......................................................................................... 198 20.15 TRATAREA UNEI INSTRUCTIUNI ............................................................................................................. 199 20.16 VARIABILELE ........................................................................................................................................ 200 20.17 CONCLUZII ............................................................................................................................................ 201

    ANEXA 1 : INTREBARI FRECVENTE (F.A.Q.) ......................................................................................... 201 A1.1 CONSIDER CA 8 SUB-PROGRAME ESTE PUTIN .......................................................................................... 201 A1.2 N-AM FOLOSIT DECIT 8 IMBRICATII, SI TOTUSI PROGRAMUL MEU SE BLOCHEAZA................................... 201 A1.3 PROGRAMUL MEU PARE CA NU MAI IESE NICIODATA DIN INTRERUPERI................................................... 201 A1.4 NU POT SA FOLOSESC SIMULATORUL, NU-MI APAR OPTIUNILE................................................................ 202 A1.5 PRIMESC UN MESAJ DE EROARE EOF INAINTEA INSTRUCTIUNII END..................................................... 202 A1.6 CUM DEZASAMBLEZ UN FISIER .HEX ?............................................................................................... 202 A1.7 FOLOSIREA MINUSCULELOR SI MAJUSCULELOR ...................................................................................... 202 A1.8 ALEGEREA UNUI PROGRAMATOR............................................................................................................ 202 A1.9 AM O EROARE DE STACK ................................................................................................................... 203 A1.10 CARE SINT DIFERENTELE INTRE 16F84 SI 16F84A ? ............................................................................. 204 A1.11 AM O EROARE 173 IN CURSUL ASAMBLARII .......................................................................................... 204

    CONTRIBUTII BENEVOLE .......................................................................................................................... 205

    FOLOSIREA PREZENTULUI DOCUMENT............................................................................................... 206

  • 1

    1. Introducere Iata-ne asadar, impreuna, porniti in marea aventura a programarii PIC-urilor. Am sa

    incerc sa ramin cit mai concret posibil, insa totodata este necesara o anumita "cantitate" de teorie pentru a atinge scopul urmarit.

    Am sa incep deci acest mic curs, printr-o recapitulare a sistemelor de numeratie. Nu ma

    indoiesc ca deja cunoasteti aceste notiuni, insa sint sigur ca veti intelege ca este imposibil sa faceti o programare serioasa a unui microcontroler fara sa stiti ce este acela un bit, sau cum se fac conversii din zecimal in hexazecimal si invers.

    Linistiti-va, am sa fiu cit se poate de scurt, ca sa putem trece rapid la abordarea subiectelor

    care ne intereseaza. Daca sinteti deja "profesionisti", puteti sari primul capitol si sa treceti mai departe.

    Nu ezitati niciodata sa-mi faceti observatii, sau sa-mi atrageti atentia asupra erorilor care e

    posibil sa-mi fi scapat (www.abcelectronique.com/bigonoff sau www.bigonoff.org ). Puteti copia sau cita, folositi cum vreti informatiile de aici, traduceti documentul in alta limba sau in alt format. In acest caz, trebuie doar sa respectati dorinta autorului si anume, de a-mi trimite si mie un exemplar al lucrarii dvs. si asta, numai din dorinta de putea profita cit mai multi oameni de acest curs ([email protected]).

    Va atrag atentia asupra faptului ca pentru eficacitatea acestui curs, va trebui sa rezolvati

    toate exercitiile pe care vi le propun. Solutiile exercitiilor sint disponibile ca fisiere-exemplu furnizate ca anexe ale cursului.

    Tot ce va va trebui, este un 16F84, un cuart de 4 MHz, o placuta de test, un LED, un buton

    si programul MPLAB, pus gratuit la dispozitia dvs. de catre firma Microchip la adresa http://www.microchip.com.. De la aceeasi adresa puteti lua si datasheet-ul lui 16F84.

    Am pierdut multe zile ca sa realizez aceste exercitii. Le-am verificat personal pe macheta,

    unul cite unul. Va recomand sa incercati voi insiva aceste programele inainte de a-mi pune pe e-mail intrebari la care puteti obtine raspunsul si singuri daca veti face acest mic efort. Credeti-ma pe cuvint, ca doar la punerea in practica va dati seama ca nu ati inteles bine ceva ce parea a fi evident. Eu raspund intotdeauna mesajelor primite, dar trebuie sa spun ca uneori este deadreptul enervant sa primesti o intrebare de la cineva care afirma ca a asimilat in totalitate acest curs, intr-o ora. Mi-ajunge !

    Eu personal am folosit MPLAB versiunea 6.30 incepind de la editia 13 a cursului. In

    editiile anterioare foloseam versiunea 5.20. Versiunea 6.60 este disponibila in sectiunea "arhiva" de la Microchip.

  • 2

  • 3

    2. Sistemele de numeratie

    2.1 Sistemul zecimal Sintem obisnuiti inca din copilarie sa folosim sistemul de numeratie zecimal, asa incit nu

    ne mai dam seama cum functioneaza de fapt acest sistem, totul devenind un automatism. De ce zecimal ? Pentru ca foloseste o numeratie cu 10 cifre. Spunem ca este un sistem in

    BAZA 10. Ca o istorioara, se foloseste un sistem in baza 10 pentru ca stramosii nostri au inceput sa numere pe cele 10 degete ale lor, fara sa fie nevoie sa caute altceva.

    Pozitia cifrelor are deasemenea o mare importanta. Cifrele mai putin semnificative se

    gasesc in dreapta numarului, ponderea lor crescind pe masura ce ne deplasam spre stinga. Prin urmare, in numarul 502, 5 are o pondere mai mare decit 2. In realitate, fiecare cifra, pe care o putem denumi DIGIT, are o valoare care depinde de RANGUL sau. Cu cit trebuie sa inmultim o cifra in functie de pozitia sa ? Este foarte simplu, se ridica BAZA folosita, la puterea indicata de RANGUL sau.

    Toate acestea par complicat de scris, dar este foarte simplu de inteles. Daca intelegeti acest

    principiu, veti intelege automat orice sistem de numeratie. Sa reluam, de exemplu, numarul nostru, 502. Ce reprezinta 2 ? Ei bine, este foarte simplu,

    valoarea sa este egala cu 2 de inmultit cu baza (10) ridicata la puterea rangului cifrei, adica 0. Dar un numar ridicat la puterea 0 este egal cu 1. 2 reprezinta deci 2 x 1.

    Observati aici un lucru foarte important : numararea rangurilor se face intotdeauna de la

    dreapta la stinga, incepind cu 0. Pentru numarul nostru, 502, valoarea va fi deci : 502 = 2 x 100 + 0 x 101 + 5 x 102 Pentru inmultire puteam folosi si simbolul (*). Si amintiti-va ca 100 = (10/10) = 1, ca 101 = 10, si ca 102 = 10 x 10 = 100 etc.

    2.2 Sistemul binar Ati inteles pina aici ? Atunci, ceea ce urmeaza va va parea simplu. Pentru voi nu e nici o

    problema sa numarati pe degete pina la 10, insa pentru calculatoare nu este asa de simplu. Ele nu stiu sa faca distinctie decit intre 2 nivele (prezenta, sau absenta unei tensiuni). Deci sistemul de numeratie zecimal este complet nepotrivit.

    Vom intelege imediat ca singurul sistem potrivit este un sistem in baza 2, denumit

    SISTEM BINAR. Acest sistem nu are decit 2 cifre, 0 si 1. Cum primele calculatoare (si PIC-urile) lucreaza cu numere de 8 cifre binare, aceste numere au fost denumite octeti (sau bytes, in engleza). Cifra 0 sau 1 este denumita BIT (unitate binara, sau BInary uniT).

    Pentru a ne descurca in continuare, vom adopta urmatoarele conventii : toate numerele

    zecimale vor fi scrise ca atare, sau sub forma Dxxx ; toate numerele binare vor avea forma Bxxxxxxxx unde x inseamna 0 sau 1, dupa cum veti vedea.

  • 4

    Sa analizam acum un numar binar, sa zicem octetul B10010101. Care este deci valoarea sa in zecimal ? Ei bine, este foarte simplu, se aplica acelasi algoritm ca pentru zecimal. Pornind de la dreapta spre stinga, vom gasi :

    B10010101 = 1 x 20 + 0 x 21 + 1 x 22 + 0 x 23 + 1 x 24 + 0 x 25 + 0 x 26 + 1 x 27 Cum, evident 0 de inmultit cu ceva = 0 si 1 inmultit cu o cifra da chiar cifra respectiva,

    putem reduce calculul precedent la : B 10010101 = 1 + 4 + 16 + 128 = 149 Observati deci ca este foarte usor de convertit in zecimal un numar binar de oricite cifre.

    Dar invers ? Ei bine, este la fel de simplu. Va trebui doar sa stiti tabela puterilor lui 2. Aceasta se invata foarte usor dupa ce o folosim de citeva ori.

    Se poate proceda de exemplu in felul urmator (una din metode) : Care este cea mai mare putere a lui 2 cuprinsa in 149 ? Raspuns : 7 (27 = 128) Spunem ca bitul 7 va fi 1. Odata stabilit acest lucru, ne ramine 149 - 128 = 21 Bitul 6 reprezinta 64, care este mai mare decit 21, deci b6 = 0 Bitul 5 reprezinta 32, care este mai mare decit 21, deci b5 = 0 Bitul 4 reprezinta 16, care se cuprinde in 21, deci b4 = 1, ramine 21 - 16 = 5 Bitul 3 reprezinta 8, care este mai mare decit 5, deci b3 = 0 Bitul 2 reprezinta 4, care se cuprinde in 5, deci b2 = 1, ramine 5 - 4 = 1 Bitul 1 reprezinta 2, care e mai mare decit 1, deci b1 = 0 Bitul 0 reprezinta 1, adica tocmai ceea ce a ramas, deci b0 = 1, rest 0. Numarul binar obtinut este deci B10010101, care este tocmai octetul nostru initial.

    Retineti ca, daca obtinem un numar cu mai putin de 8 cifre, vom completa cu zerouri puse la stinga numarului. Adica, B00011111 = B11111, la fel cum 0502 = 502.

    Nu uitati ca intotdeauna sa completati octetii pentru a obtine 8 biti, caci acest lucru este

    impus de marea majoritate a asambloarelor (vom vedea ce sint acestea pe parcursul cursului). Retineti ca cea mai mare valoare ce poate fi reprezentata pe un octet va fi deci :

    B11111111. Daca faceti conversia (sau folositi calculatorul din Windows in mod "Stiintific"), veti obtine 255. Toate numerele mai mari decit 255 necesita deci mai mult de un octet pentru a putea fi reprezentate.

    Am sa va dau o alta metoda simpla pentru conversia din zecimal in binar, procedind invers,

    adica de la dreapta la stinga. Metoda consta in a scrie restul impartirii prin 2 a numarului.

    Sa reluam numarul nostru 149 :

    149 / 2 = 74 Rest 1 74 / 2 = 37 Rest 0 37 / 2 = 18 Rest 1 18/ 2 = 9 Rest 0 9/2 = 4 Rest 1 4 / 2 = 2 Rest 0 2 / 2 = 1 Rest 0 1 / 2 = 0 Rest 1

  • 5

    Reluind toate resturile si incepind cu ultimul (sau completind de la dreapta la stinga), vom obtine B10010101, care este exact valoarea gasita anterior. In general aceasta a doua metoda este mai simpla pentru cei care nu sint obisnuiti sa jongleze cu puterile lui 2, dar prima este mai rapida de efectuat mental daca va obisnuiti cu ea.

    2.3 Sistemul hexazecimal Reprezentarea numerelor binare nu este usor de folosit, si scrierea unei succesiuni lungi de

    1 si 0 poate reprezenta o mare sursa de erori. Se impunea deci gasirea unei solutii mai practice pentru reprezentarea numerelor binare. S-a decis deci ca sa se "taie" in doua fiecare octet si sa se reprezinte fiecare bucata (QUARTET, sau SEMIOCTET) printr-o cifra.

    Cum un quartet poate lua orice valoare intre b0000 si b1111, se constata ca se obtin valori cuprinse intre 0 si 15. Aceasta inseamna in total 16 combinatii. Cele 10 cifre ale sistemului zecimal nu sint deci suficiente pentru a reprezenta aceste valori..

    In loc de a se inventa 6 simboluri noi, s-a decis sa se foloseasca primele 6 litere ale

    alfabetului, pe post de CIFRA. Acest sistem de numeratie in baza 16 a fost deci denumit sistem hexazecimal.

    Retineti ca acest sistem nu este decit o reprezentare mai eficace a numerelor binare, si face

    conversia dintr-unul in altul aproape instantanee. In lectiile urmatoare, vom nota un numar hexazecimal punindu-i in fata 0x. Sa vedem daca ati inteles :

    Tabel de conversie pentru quarteti (semi-octeti)

    Binar Hexazecimal Zecimal

    B0000 0x0 0 B0001 0x1 1 B0010 0x2 2 B0011 0x3 3 B0100 0x4 4 B0101 0x5 5 B0110 0x6 6 B0111 0x7 7 B1000 0x8 8 B1001 0x9 9 B1010 0xA 10 B1011 0xB 11 B1100 0xC 12 B1101 0xD 13 B1110 0xE 14 B1111 0xF 15

    Pentru a reprezenta un octet, ne vor trebui deci doua cifre hexazecimale. De exemplu,

    numarul nostru B10010101 este reprezentat in hexazecimal prin 0x95. Daca faceti conversia din hexazecimal in zecimal, folosind acelasi principiu ca mai sus, veti obtine :

    0x95 = 9 x 161 + 5 x 160 = 149, ceea ce este corect. Ca proba, care este cel mai mare numar care poate fi reprezentat cu 2 cifre hexazecimale

  • 6

    Raspuns : 0xFF, adica 15 x 16 + 15 = 255. Daca ati inteles totul pina aici, veti putea converti orice numar, din orice baza, in oricare

    alta baza. Veti putea intilni in unele carti referiri la sistemul octal, care este un sistem in baza 8 si care a fost larg utilizat in trecut. Astazi, acest sistem aproape ca a disparut.

    2.4 Operatiile Dupa ce ati invatat sa convertiti numere intre diverse formate, veti vedea ca este la fel de

    usor sa faceti operatii cu aceste numere, indiferent de format. Pentru aceasta, este suficient sa urmati aceleasi reguli ca si in sistemul zecimal. Un mic exemplu : Cit face B1011 + B 1110 ? Ei bine, se procedeaza exact in acelasi fel

    ca pentru o operatie in zecimal :

    B1011 + B1110 -------------- ? - Adunam cifrele din dreapta, si obtinem 1 + 0 = 1 - Scriem 1 - Adunam 1 + 1, si obtinem 10 (in binar nu exista 2 !). Scriem 0 si retinem 1 - Adunam 0 + 1 + un 1 retinut si obtinem 10. Scriem 0 si retinem 1 - Adunam 1 + 1 + un 1 retinut si obtinem 11. Scriem 1 si retinem 1 - Ramine un 1 pe care l-am retinut, adica 1. Rezultatul este deci B11001, adica 25.

    Cele 2 numere initiale erau B1011, adica 11, si B1110, adica 14. Veti proceda la fel pentru numerele hexazecimale stiind ca 0xF + 0x1 = 0x10, adica 15 + 1 = 16.

    2.5 Numerele cu semn In unele aplicatii, este necesar sa putem folosi numere negative. Deoarece procesoarele nu

    inteleg semnul - , si deoarece trebuie sa ne limitam la numere de 8 biti, singura metoda gasita, a fost de a introduce semnul in numar.

    S-a ales deci (nu intimplator) bitul 7 pentru a reprezenta semnul. In numerele cu semn,

    daca bitul 7 are valoarea "1", este vorba de un numar negativ. Prin urmare, B10000000 (-0) va fi atunci egal cu B00000000 (0). In plus, din motive de usurare a calculului s-a decis sa se foloseasca o notatie usor diferita.

    Pentru a obtine un numar negativ, va trebui sa parcurgem doua etape : - Se inverseaza toti bitii din numar. - Se adauga 1 Se obtine ceea ce se numeste COMPLEMENTUL FATA DE 2 al numarului.

  • 7

    Exemplu : fie numarul 5 : B00000101. Cum scriem 5 ? - inversam toti bitii (complementul fata de 1) B11111010 - se adauga 1 (complementul fata de 2) 5 = B11111011 Pentru a face conversia inversa, se procedeaza la fel. - Se inverseaza toti bitii B00000100 - Se adauga 1 B00000101 Regasim numarul nostru initial, 5 ceea ce este logic, deoarece - (-5) = 5. In cazul numerelor cu semn, avem deci doua noi limitari : - Cea mai mare valoare este B01111111, adica +127 - Cea mai mica valoare devine B10000000, adica 128. Remarcati ca operatiile continua sa functioneze. Sa luam 3 + 5 :

    B 11111101 (-3) + B 00000101 (5) ----------------------------- = B100000010 (2) Si atunci, imi veti spune, rezultatul nu e 2 ? Ba da, dar daca va uitati bine veti vedea 9 biti,

    ori procesorul nu lucreaza decit cu 8. Al 9-lea bit este pus intr-un bit special pe care-l vom studia mai tirziu. In registrul procesorului ramin deci numai cei 8 biti din dreapta, adica 2 care este rezultatul corect pentru (3 ) + 5.

    Acum, daca m-ati urmarit cu atentie, mi-ati putea pune urmatoarea intrebare : Cind vad B11111101, este vorba despre 3 sau 253 ? Ei bine, nu puteti sti daca nu tineti

    seama de context. Sa stiti ca numerele semnifica numai ceea ce realizatorul programului a decis ca reprezinta:

    daca el lucreaza cu numere cu semn sau nu, sau daca acest octet reprezinta cu totul altceva (o temperatura, un caracter, etc.). Singurul lucru important este ca sa se respecte conventiile stabilite la crearea acestui octet. Este deci la latitudinea voastra de a decide de ce aveti nevoie pentru astfel de tipuri de date.

    2.6 Operatiile booleene Ce sint astea, ma veti intreba ? Ei bine, pentru simplitate, sa spunem ca sint operatii care se

    efectueaza bit cu bit pentru un octet dat. In locul unei teorii stufoase despre algebra lui Boole va voi arata concret operatiile ce trebuie neaparat cunoscute pentru programarea PIC-urilor si a altor microcontrolere.

  • 8

    2.6.1 Complementul ( NOT ) Reprezinta ceea ce mai puteti gasi si sub denumirea de inversare sau NOT sau

    complement fata de 1. El este adesea notat cu ! . Functionarea sa este foarte simpla si consta in inversarea tuturor bitilor dintr-un octet (0 devine 1 si 1 devine 0).

    Exemplu : NOT B10001111 ne da B01110000 . Vedeti aici ca pentru operatiile booleene, este mai usor de lucrat in binar. Convertiti

    exemplul de mai sus in hexazecimal (vom spune de-acum hexa ) sau in zecimal, si incercati sa-l complementati direct. Adio neuroni !

    La ce serveste o astfel de operatie ? De exemplu, pentru a citi o valoare ale carei nivele

    active au fost inversate, pentru a obtine numere negative, sau alte operatii pe care le vom vedea in continuare.

    2.6.2 Functia SI ( AND ) Se mai numeste si inmultirea bit cu bit, sau AND si adesea se noteaza cu & . Ea consta in a "suprapune" doua cuvinte binare si a inmulti fiecare bit cu bitul

    corespunzator de acelasi rang. Deci, pentru a efectua o operatie SI , avem nevoie intotdeauna de 2 octeti.

    Diferitele posibilitati sint prezentate in continuare (tabelul se citeste pe orizontala). Prima

    linie : 0 AND 0 = 0. Acest tip de tabel se numeste tabela de adevar

    Bit 1 Bit 2 AND 0 0 0 0 1 0 1 0 0

    1 1 1 Observam deci ca singura posibilitate de a obtine un 1 , este ca bitul 1 SI bitul 2 sa fie 1 . Acest lucru corespunde unei inmultiri, 1 x 1 = 1, 0 x 1 = 0, 1 x 0 = 0. Exemplu : B11001100 SI B11110000 da B11000000 La ce serveste aceasta instructiune ? Ei bine, ea se foloseste pentru MASCAREA bitilor

    care nu ne intereseaza. Priviti exemplul de mai sus : al 2-lea octet contine 4 biti "1" si 4 biti "0". Priviti rezultatul

    obtinut : primii 4 biti au fost conservati (1100), iar in locul celorlalti 4 gasim "0". In concluzie, cu ajutorul acestei instructiuni se poate pune pe "0" unul sau mai multi biti

    dintr-un cuvint binar indiferent de continutul sau precedent.

  • 9

    2.6.3 Functia SAU ( OR ) Se mai numeste OR ; notata adesea cu | ea permite, dupa cum indica si numele, sa

    pozitionam un bit in "1" daca bitul 1 SAU bitul 2 este "1". Urmatoarea tabela de adevar ilustreaza functionarea acestei functii :

    Bit 1 Bit 2 OR 0 0 0 0 1 1

    1 0 1 1 1 1

    Un mic exemplu : B10001000 SAU B11000000 va da B11001000 La ce serveste aceasta instructiune ? Ea serveste la fortarea in "1" a oricarui bit dintr-un

    cuvint binar, indiferent de continutul sau precedent. In exemplul precedent, observati ca primii 2 biti au fost fortati in "1", indiferent de

    valoarea lor precedenta. 2.6.4 Functia SAU EXCLUSIV ( Exclusif OR sau XOR ) Iata si ultima functie de care ne vom ocupa in aceasta sectiune. Ea este adesea denumita

    XOR (eXclusif OR). Ea se comporta ca si functia OR, cu o mica exceptie. Pentru a obtine 1, trebuie ca bitul 1 sa fie 1 SAU bitul 2 sa fie 1 EXCLUZIND ambii biti

    simultan. Daca ambii biti sint 1, atunci rezultatul va fi 0. Iata deci tabela de adevar :

    Bit 1 Bit 2 XOR 0 0 0 0 1 1

    1 0 1 1 1 0

    Exemplu : B10001000 XOR B11000000 va da B01001000 La ce serveste aceasta instructiune ? Ei bine, ea foloseste la inversarea unuia sau mai

    multor biti, fara a-i modifica pe ceilalti. In exemplul precedent, observati ca prin punerea la 1 a 2 biti din al doilea octet, bitii corespunzatori din primul octet au fost inversati.

    Aici se incheie primul capitol dedicat PIC-urilor. Stiu ca a fost un pic cam plictisitor, dar,

    daca nu va veti insusi temeinic cele ce urmeaza, nu veti putea sa va realizati corect propriile programe.

  • 10

    2.7 Citeva cuvinte despre unitati Am vorbit pina aici de octeti si biti. In informatica, se folosesc curent termenii de Byte

    (octet) si bit (binary unit) pentru a denumi aceste unitati de baza. Simbolurile folosite in mod curent sint :

    pentru OCTET : B (pentru byte) sau O (pentru octet), sau chiar o pentru BIT : b

    Englezii sint obligati sa foloseasca B pentru octet pentru a nu se confunda cu b , simbolul pentru bit. In Franta nu exista aceasta confuzie, deoarece numai termenul "bit" a scapat de traductomania franceza. Deci, pentru octet vom avea notatia B in toata lumea, cu exceptia Frantei unde vom avea O sau o .

    Sa vorbim acum despre multiplii unitatilor de baza (Kilo, Mega, etc.), si situatia se

    inrautateste rapid. De fapt, in baza 10, baza noastra cea de toate zilele, s-a decis sa se adopte multiplii de 3

    ai puterilor lui 10. Avem astfel :

    Kilo = 103 Mega = 106 Giga = 109 Tera = 1012

    Atunci insa cind lucram in baza 2, lucrurile se complica si nu se mai potrivesc cu ceea ce

    sintem obisnuiti. Prin urmare, 103 nu mai reprezinta decit un simplu numar printre altele (va las dvs. placerea sa-l convertiti in binar). Va trebui deci ca pentru multipli sa gasim niste valori particulare care sa fie adoptate ca regula. In prima faza, s-a procedat pur si simplu la "recuperarea" termenilor folositi in baza 10 (Kilo, Mega, Giga, etc.), exact cum au fost "recuperate" literele pentru a le "transforma" in cifre in hexazecimal. Acestor termeni insa, li s-au alocat valori care reprezinta puteri multiplii de 10 ai bazei 2. Astfel, s-au definit :

    Kilo = 210 Mega = 220 Giga = 230 Tera = 240

    Prin urmare, in informatica, 1 Kilooctet reprezinta 210 octeti, adica 1024 de octeti, la fel

    cum 1 Kilogram reprezinta 1000 grame. Situatia se "inrautateste" pentru Mega, deoarece 1 Megaoctet valoreaza 220 octeti, adica 1048576 octeti, la fel cum un Megagram valoreaza 1.000.000 grame.

    Producatorii de dispozitive de stocare (hard-discuri), nu respecta insa aceste reguli. Ei au

    ramas conservatori si considera multiplii ca puteri ale lui 10, in ciuda faptului ca toti informaticienii gindesc in puteri ale lui 2. Astfel, cind cumparati un HDD de 100Mo (100 megaocteti), el va avea fix 100.000.000 octeti. Sistemele de operare din PC-uri (ex: Windows) raporteaza insa Megaoctetii informatici , adica 100.000.000 / 220 = 95.4 Megaocteti ! Pe scurt, 100 Megaocteti ai fabricantului de hard-discuri reprezinta 95.4 Megaocteti pentru informatician.

    Este clar ca aceasta situatie nu putea continua. De aceea, pe la inceputul anilor 2000, s-a

  • 11

    decis sa se faca ordine in acest domeniu. Era clar prin urmare ca se impunea inventarea unor noi termeni, ceea ce s-a si facut, primul dinre ei fiind Kibi (Kilobit binar) care reprezinta un multiplu in baza 2 si anume 210. S-a ajuns deci la conventiile urmatoare :

    Kibi (Ki) 210 1024 1,024k Mebi (Mi) 220 1048576 1,048576 M Gibi (Gi) 230 1073741824 1,073741824 G Tebi (Ti) 240 1099511627776 1,099511627776 T

    Astfel stabilite noile conventii, nu mai existau ambiguitati asupra termenilor folositi.

    Trebuiau deci "adoptati" in informatica termenii Ki, Mi, etc. in locul lui K, M, G.... Situatia reala este insa departe de ceea ce s-a dorit, marea majoritate a lucrarilor de informatica si a softurilor continuind sa foloseasca denumirea de Kilo pentru puterile lui 2. Aceasta situatie va ramine voua in atentie, si probabil ca se va rezolva in anii urmatori.

    Incercati totusi sa nu confundati Gibi cu o celebra marca de wisky, pentru ca nu este decit

    o simpla coincidenta, si v-ar face rau la neuroni !

  • 12

    Note:

  • 13

    3. Alcatuirea si functionarea PIC-urilor In sfirsit, ceva mai interesant Vom incepe sa vorbim despre un PIC, si in particular,

    despre 16F84. Retineti ca tot ce vom invata despre 16F84 va putea fi folosit direct pentru 16F876, care nu sint nimic altceva decit un 16F84 imbunatatit. Fiecare PIC dispune de functionalitatile modelelor anterioare, la care se adauga noi functii. In momentul trecerii la revizia 13 a cursului, modelele pe care le veti intilni vor fi probabil 16F84A, dar acest lucru nu va pune nici un fel de problema pentru studiul cursului.

    Mai intii, va trebui sa descarcati datasheet-ul lui 16F84, caci este un document pe care-l

    vom folosi in restul lectiilor. Va sfatuiesc imperativ sa-l tipariti, caci veti avea nevoie de el tot timpul atunci cind veti incepe sa va realizati propriile programe.

    Aceste datasheet-uri sint cartile mele de capatii. Am considerat mai intelept sa lucram

    practic si sa le comentam, in loc sa traduc orbeste respectivele documente.

    3.1 Ce este un PIC ? Un PIC nu este nimic altceva decit un microcontroler, adica o unitate de prelucrare a

    informatiei de tip microprocesor, la care s-au adaugat periferice interne ce permit realizarea de montaje fara sa fie nevoie sa adaugam componente externe.

    Denumirea "PIC" este un copyright al Microchip, deci ceilalti fabricanti nu mai au

    dreptul sa foloseasca aceasta denumire pentru microcontrolerele lor. PIC-urile sint componente de tip RISC (Reduced Instructions Set Computer), sau

    componente cu set redus de instructiuni. De ce ? Ei bine, sa stiti ca, cu cit este mai redus numarul de instructiuni, cu atit mai usor si mai rapid pot fi ele decodificate si deci cu atit mai rapid poate functiona circuitul.

    Probabil ca ati ghicit ca pe piata se gasesc 2 familii diferite de microprocesoare, RISC si

    CISC (Complex Instructions Set Computer). Circuitele CISC, dispun de o viteza mai redusa de procesare, dar instructiunile sint mai complexe, mai puternice si deci mai numeroase. Deci, se pune problema unei alegeri de strategie.

    Toate PIC-urile Mid-Range (de clasa medie) au un set de 35 instructions, fiecare

    instructiune fiind stocata intr-un singur cuvint de program, iar executarea fiecarei instructiuni (in afara de salturi) dureaza 1 singur ciclu. Se ajunge deci la o viteza de lucru foarte mare, iar invatarea instructiunilor se face foarte rapid. Executia pe un singur ciclu este tipica pentru componentele RISC.

    Ceasul aplicat PIC-ului este predivizat cu 4 in interiorul acestuia. Aceasta este baza de

    timp care stabileste durata unui ciclu. Daca folosim de exemplu, un cuart de 4 MHz , obtinem deci 1.000.000 cicluri/secunda, sau, cum PIC-ul executa practic 1 instructiune pe ciclu, (exceptind salturile) rezulta o viteza de procesare de 1 MIPS (1 Milion de Instructiuni Pe Secunda).

    Ginditi-va ca exista PIC-uri la 20MHz ; rezulta deci o viteza de procesare mai mult decit

    onorabila

  • 14

    3.2 Diferitele familii de PIC-uri In momentul scrierii primei editii a acestui curs, PIC-urile erau impartite in 3 mari

    familii : familia Base-Line (linia de baza), care foloseste cuvinte de instructiuni (vom vedea ce sint acestea) pe 12 biti pentru unele PIC-uri (12C508), familia Mid-Range (clasa medie), care foloseste cuvinte pe 14 biti (si din care fac parte 16F84 si 16F876), si familia High-End (clasa de virf) care foloseste cuvinte de 16 biti. In continuare, au aparut si alte familii, ca Enhanced family, si lucrurile nu se vor opri aici.

    Noi ne vom limita in acest curs la familia Mid-Range, considerind ca daca ati inteles totul,

    veti putea trece usor la alta familie, sau chiar la alt tip de microcontroler. Pentru a va ajuta sa va diversificati cunostintele, mai sint disponibile si alte cursuri.

    Retineti ca datasheet-ul lui 16F84 nu este decit o mica parte din documentatia completa.

    Pentru a obtine documentatia completa, va trebui sa descarcati inca vreo 600 de pagini de la Microchip, si care reprezinta datasheet-urile pentru gama Mid-Range.

    Totusi, documentatia de baza este suficienta pentru 99,9 % din aplicatii, si, in plus,

    datasheet-urile Mid-Range sint disponibile sub forma unui fisier structurat pe capitole. Eu personal, am aproape totul tiparit, dar pe voi va sfatuiesc sa le consultati doar in momentul cind veti avea nevoie de ele.

    3.3 Identificarea unui PIC Pentru a identifica un PIC, va veti folosi de indicativul sau. Primele 2 cifre indica categoria PIC-ului, 16 indicind un PIC Mid-Range. Urmeaza uneori litera L : aceasta indica faptul ca PIC-ul poate functiona si cu o tensiune

    mai redusa (Low Power). In continuare, urmeaza : C arata ca memoria de program este un EPROM sau, mai rar, un EEPROM CR pentru a indica o memorie de tip ROM F pentru a indica o memorie de tip FLASH. Retineti ca numai o memorie de tip FLASH sau EEPROM poate fi stearsa, deci nu sperati

    sa puteti reprograma un PIC de tip CR. Pentru versiunile C, uitati-va cu atentie in datasheet. 16C84 poate fi reprogramat, adica e vorba de o memorie EEPROM. 12C508, de exemplu, are o memorie de program EPROM deci care poate fi stearsa numai prin expunere la lumina ultravioleta. Deci, pentru stergere este necesara o fereastra transparenta pe chip, acestea fiind versiuni speciale pentru dezvoltare si nu versiuni curente ale circuitului.

    O componenta care nu poate fi reprogramata se numeste O.T.P. (One Time Programming)

    adica o componenta cu programare unica. Mai departe veti constata ca ultimele cifre identifica precis PIC-ul (84). La urma veti vedea pe capsula un sufix de forma -XX unde XX reprezinta frecventa

    maxima de ceas ce se poate aplica circuitului. De exemplu, 04 inseamna 4 MHz. De fapt, se pare ca aceste indicatii sint pur comerciale si ca toate PIC-urile de un anumit tip pot rula la

  • 15

    viteza maxima pentru acest model, viteza data la inceputul datasheet-ului. Aceasta inscriptie pare deci complet inutila. Nu imi asum responsabilitatea pentru aceasta afirmatie, insa las la latitudinea voastra sa judecati si sa testati acest aspect.

    Deci, un 16F84-04 este un PIC Mid-Range (16) a carui memorie de program este de tip

    FLASH (F), deci reinscriptibila, de tip 84 si este capabil sa lucreze cu o frecventa de ceas teoretica de 4 MHz, (probabil 10 MHz pentru un 16F84 si 20 MHz pentru un 16F84A).

    O ultima indicatie pe care o veti gasi, este tipul capsulei. Noi vom folosi pentru

    experimentele noastre capsula PDIP, care este o capsula DIL cu 18 pini, cu o distanta intre rinduri de 0.3" (ingusta). Versiunea de 4 MHz va fi mai mult decit suficienta pentru scopurile noastre.

    Retineti tot aici ca PIC-urile sint componente STATICE, ceea ce inseamna ca frecventa

    de ceas poate fi redusa pina la oprirea completa, fara pierdere de date sau disfunctionalitati. Spre deosebire de acestea, componentele DINAMICE (cum sint procesoarele din PC-ul

    vostru), au nevoie ca frecventa de ceas sa ramina in limite foarte precise. Nu incercati deci sa setati Pentium-ul vostru PIII/500 la 166 MHz, caci este o componenta dinamica si nu va functiona

    Deci, daca doriti sa comandati un PIC pentru a-l folosi in restul cursului, cereti un

    PIC16F84-04 in capsula PDIP. N-are importanta daca este un PIC16F84 sau PIC16F84A.

    3.4 Organizarea unui 16F84 Memoria unui 16F84 este impartita in 3 zone. La pagina 4 din datasheet, veti gasi tabela

    1-1 care ofera o imagine a familiei 16F8x. Numerele paginilor poate fi diferit, in functie de actualizarile Microchip. In acest caz, va trebui sa cautati un pic, sau sa folositi datasheet-ul pe care vi l-am dat la curs.

    Pentru cei nerabdatori, figura 3-1 de la pagina 8 arata organizarea interna a unui 16F84. 3.4.1 Memoria de program Memoria de program este constituita din 1 Ki de cuvinte de 14 biti. In aceasta zona va veti

    scrie dvs. programele. Asa se explica de ce fisierele de pe PC au 2 Kio (Kibiocteti). Prin urmare, sint necesari 2 octeti pentru a codifica 14 biti. Deasemenea, asa se explica de

    ce atunci cind cititi un PIC gol, veti citi numai 0x3FFF. Asta face in binar B11111111111111, adica 14 biti. Va voi explica mai departe de unde provin acesti "faimosi" 14 biti.

    Retineti aici ca o instructiune este codificata pe 1 cuvint. Deci, 1 Ki inseamna putin peste o

    mie de instructiuni posibile (ceea ce nu e prea rau !). Cind dvs. veti scrie programe de 1 Ki, fara nici o indoiala, ca nu veti mai avea probleme cu aplicatiile voastre.

  • 16

    3.4.2 Memoria EEPROM Memoria EEPROM (Electrical Erasable Programmable Read Only Memory), consta din

    64 octeti pe care-i puteti scrie prin intermediul programului vostru. Acesti octeti nu se sterg dupa o intrerupere a alimentarii si sint folositi pentru pastrarea de parametrii semi-permanenti. Folosirea lor implica o procedura speciala, pe care o vom vedea in continuare, caci nu este vorba despre o memorie RAM, ci mai degraba un ROM de tip special. Este deci mai rapida la citire decit la scriere. Daca ati programat des EPROM-uri (2416), cred ca ati observat deja acest lucru.

    3.4.3 Memoria RAM Memoria RAM (Random Access Memory) este aceea pe care o folosim tot timpul. Toate

    datele stocate insa in ea, se pierd la oprirea alimentarii. Memoria RAM este organizata in 2 bancuri la 16F84. RAM-ul este sub-imparit in

    continuare in doua zone. In fiecare din aceste bancuri gasim locatii de memorie speciale denumite REGISTRE SPECIALE, si locatii de memorie libere pe care le puteti folosi dupa placul dvs.

    In cazul lui 16F84, dispuneti de 68 de octeti liberi. Organizarea RAM-ului este prezentata

    in tabelul 4-2 de la pagina 13 din datasheet. Observati separarea verticala in 2 bancuri, iar in partea de jos vedeti doua bancuri de 68 de octeti de RAM.

    Din nefericire, indicatia mapped in bank 0 va indica faptul ca accesarea unuia din cei

    68 de octeti din bancul 0 sau din bancul 1, va avea ca efect accesarea aceleiasi locatii de memorie.

    Observati in partea superioara numele tuturor registrelor speciale folosite de PIC. O sa

    vorbim despre fiecare dintre ei, n-aveti grija ! Fiecare registru determina o functionare speciala a PIC-ului, sau activeaza o functie

    speciala. Observati faptul ca unele registre sint identice in cele 2 bancuri (FSR de exemplu). Asta inseamna ca ele pot fi accesate fie din bancul 0 fie din bancul 1, fara nici o diferenta.

    Remarcati faptul ca bancul 0 foloseste adresele de la 0x00 la 0x7F, iar bancul 1 de la 0x80

    la 0xFF. Zonele gri nu sint folosite (si sint deci neutilizabile). Locatia 0x00 este o locatie care nu poate fi accesata.

    Pentru marea majoritate a registrelor, fiecare bit are o functie speciala. Tabelul 4-1 de la

    pagina 14 va arata numele bitilor folositi in aceste registre.

  • 17

    4. Organizarea instructiunilor

    4.1 Generalitati Haideti, curaj, totul devine din ce in ce mai concret. O sa facem un mic survol prin setul de

    instructiuni al PIC-urilor. Vom sari direct la pagina 55 din datasheet, la capitolul 9. Si deoarece acest curs nu este o prezentare a unui manual tehnic, ci are ca scop intelegerea notiunilor, va trebui sa parcurgem capitolele din datasheet pe sarite.

    La pagina indicata, veti gasi un mic dreptunghi gri care ne atrage atentia asupra a doua

    instructiuni vechi, care nu se mai folosesc. Deci, nici noi nu le vom folosi. In tabelul 9-1 se arata cum sint codificate instructiunile in PIC. Si iata, veti descoperi in sfirsit la ce servesc cei 14 biti din memoria de program..

    4.2 Tipurile de instructiuni Veti constata ca exista 4 tipuri de instructiuni : 4.2.1 Instructiunile orientate pe octet Sint instructiuni care manipuleaza datele sub forma de octeti. Ele sint codificate in modul

    urmator :

    6 biti pentru codul instructiunii : e logic, caci existind 35 de instructiuni, vor fi necesari 6 biti pentru a le putea codifica pe toate (26 = 64 > 35).

    1 bit de destinatie (d) pentru a indica daca rezultatul obtinut va trebui sa fie retinut in

    registrul de lucru al unitatii de calcul (W de la Work), sau salvat in operand (F de la File). Ramin 7 biti pentru a codifica operandul (File). Acesti 7 biti reprezinta adresa locatiei din

    RAM de unde se va lua (sau unde se va pune) octetul de prelucrat (respectiv cel rezultat). Hopa, prima problema : cei 7 biti nu permit accesul la toata memoria RAM, deci iata

    explicatia impartirii memoriei RAM in doua bancuri. Prin urmare, va trebui sa gasim o solutie pentru a completa bitul lipsa. Ati spus cumva un

    bit din unul din registre ? BRAVO, vad ca ati inteles bine. In realitate, este vorba de bitul RP0 din registrul STATUS.

    Ah, ati remarcat ca exista si un RP1 ? Ei bine, da, 16F876 are 4 bancuri, si acest bit va fi folosit pentru alte PIC-uri pe care le vom studia in partea a II-a. Va trebui sa lasati RP1 pe 0 pentru 16F84, daca vreti sa portati fara probleme programele dvs. catre un PIC mai evoluat.

    4.2.2 Instructiunile orientate pe bit Sint instructiunile destinate manipularii directe a bitilor unui anumit registru. Ele sint

    codificate in felul urmator :

  • 18

    4 biti pentru codul instructiunii (in spatiul ramas liber de la instructiunile precedente) 3 biti pentru a indica numarul bitului de manipulat (bitul 0 7), si din nou : 7 biti pentru a indica operandul (adresa locatiei din RAM).

    4.2.3 Instructiunile generale Sint instructiunile ce manipuleaza date care sint codificate direct in instructiune. Vom

    vedea acest lucru mai in detaliu atunci cind vom vorbi despre modurile de adresare. Ele sint codificate in modul urmator :

    6 biti pentru codul instructiunii O valoare IMEDIATA codificata pe 8 biti (deci intre 0 si 255).

    4.2.4 Salturile si apelurile de subrutina Sint instructiuni care provoaca o rupere in secventa normala de derulare a programului. Ele

    sint codificate in felul urmator :

    Instructiunile sint codificate pe 3 biti Destinatia (adresa ei) este codificata pe 11 biti

    Putem deduce deja ca salturile nu dau acces decit la 2 Ki din memoria de program (211).

    Acest lucru nu pune nici un fel de problema, 16F84 neavind decit 1 K de memorie. Pentru a codifica deci un salt in interiorul memoriei de program, ne vor trebui deci

    10 bits (210 = 1024 = 1 Ki). Nu uitati ca, reglementarile oficiale ar dori sa folosim termenul kilobinary sau kibi ,

    sau prescurtat Ki pentru a exprima 2 la puterea 10. Se pare totusi ca nu multa lume foloseste acesti termeni in practica.

    4.3 Panoramicul instructiunilor Va voi arata acum cum functioneaza tabelul din figura 9-2, pagina 56. Acest tabel va

    permite ca, dintr-o singura privire sa aflati cum functioneaza fiecare instructiune. Prima coloana va indica MNEMONICUL si OPERANZII pentru fiecare operatie.

    Mnemonicele sint cuvinte rezervate (deci pe care nu le puteti folosi decit pentru acest scop) intelese si interpretate de catre programul de asamblare.

    Remarcati aici confuzia de limbaj obisnuita pentru termenul ASAMBLOR, care se

    foloseste odata pentru a indica programul care permite asamblarea codului (programul de asamblare), iar altadata pentru a denumi limbajul folosit de editor (limbajul de asamblare).

  • 19

    Incercati sa folositi termenii corecti, situatia in domeniul informaticii nefiind totdeauna simpla, nu adaugati confuzii inutile.

    Deci, in acest loc veti gasi instructiunile propriu-zise pe care le veti putea folosi in programele dvs.

    Pentru asamblorul MPLAB, pe care-l vom utiliza in lectiile urmatoare, va trebui sa

    folosim sintaxa care urmeaza. Vom avea, in ordine : - Eticheta (facultativa) - Spatiu(i) sau TAB(-uri), - Mnemonice (cu majuscule sau minuscule), - TAB(-uri) sau Spatiu(i) - Operand sau valoare - Virgula eventuala de separatie - Bit de destinatie W sau F sau eventual numarul bit-ului (de la 0 la 7) daca este necesar - Spatiu(i) sau TAB(-uri) - Punct si virgula (facultativ, daca nu exista comentarii) - Comentariu. (facultativ) Retineti ca mnemonicele nu se pot gasi in prima coloana, si ca tot ce urmeaza dupa punct si

    virgula este ignorat de asamblor (este deci o zona de comentariu). Prima coloana este rezervata pentru etichete (repere).

    Dispuneti deasemenea de posibilitatea de a insera unul sau mai multe spatii sau TAB-uri de

    fiecare parte a virgulei. Iata aici, cu titlu de exemplu, doua linii valide : cuvintele in verde sint cuvinte rezervate,

    cele in albastru sunt instructiunile, cele in galben sint libere, iar restul este comentariu.

    Linia_mea ; aceasta este o eticheta movf STATUS,W ; incarca registrul de stare in registrul de lucru A 2-a coloana a tabelului este o scurta descriere a instructiunii.

    A 3-a coloana ne indica numarul de ciclii necesari pentru executia instructiunii.

    Retineti ca toate instructiunile necesita numai un singur ciclu, in afara de salturi care

    necesita doua cicluri, si operatiile de test cu salt, al caror rezultat al testului produce salt (instructiunile notate 1(2)).

    A 4-a coloana contine ceea ce se numeste OPCODE, adica cuvintul binar de 14 biti pe

    care MPLAB il va genera pentru dvs. plecind de la mnemonic.

    Nu trebuie deci sa va faceti griji, dar sa stiti ca puteti programa direct PIC-ul si fara asamblor, construind direct fisierul .HEX si introducind valorile gasite in aceasta coloana.

    Va trebui insa atunci sa calculati totul, in special salturile. Asa am procedat eu la inceput,

    cu un procesor 6502, caci nu dispuneam de un asamblor. Aceasta tehnica se poate folosi deasemenea pentru construirea de programe auto-modificabile, din cauza restrictiilor de memorie.

  • 20

    Linistiti-va, aceasta tehnica tine acum de evul-mediu al informaticii. Suplimentar, puteti face corelatii intre valorile prezentate aici si valorile din tabelul 9-1, cu titlu pur educativ. Daca nu doriti asta, uitati de aceasta coloana.

    A 5-a coloana este primordiala, caci ea cuprinde INDICATORII DE STARE (sau

    STATUS FLAGS) afectati dupa executarea instructiunii. Vom trata acesti indicatori in detaliu, caci ei constituie cheile programarii..

    Ultima coloana trimite la notele din subsolul paginii.

    - Nota 1 este foarte importanta, ea referindu-se la metoda de citire / modificare / scriere

    proprie porturilor de intrare / iesire (I/O). Vom reveni la acestea in momentul cind vom vorbi despre PORTURI.

    - Nota 2 ne spune ca o modificare a unui timer reseteaza prescaler-ul. Vom reveni cind vom aborda timerul TMR0.

    - Nota 3 spune ca daca veti folosi instructiunea pentru modificarea contorului de program (contorul care contine adresa URMATOAREI instructiuni de executat), va fi necesar un ciclu suplimentar. Acest lucru este logic, caci aceasta echivaleaza cu un salt. Vom vedea ca aceasta tehnica este practica pentru a cauta valori intr-un tabel construit in memoria de program.

    4.4 Indicatorii de stare Acesti indicatori sint indispensabili pentru programare. Este deci absolut necesar sa

    intelegem foarte bine cum functioneaza (cel putin a lui Z si C). Cititi deci cu foarte mare atentie cele ce urmeaza. Toti indicatorii sint biti ai registrului

    STATUS. Uitati-va la tabelul de la pagina 15. Vom discuta aici despre flag-urile Z si C. Ceilalti vor fi tratati la studiul registrelor.

    4.4.1 Indicatorul de stare Z Indicatorul Zero functioneaza in felul urmator : Daca rezultatul unei operatii CARE AFECTEAZA ACEST FLAG este 0, flag-ul Zero

    trece in 1. Deci, sa nu amestecam borcanele Spunem ca daca Z = 1 este echivalent cu a

    spune ca rezultatul = 0 . Tabelul 9-2, coloana 5 va arata instructiunile care modifica flag-ul Z.

    De exemplu, daca faceti o adunare cu ADDWF si rezultatul obtinut este 0, bitul Z va

    deveni 1. Daca rezultatul va fi < > 0 (diferit de zero), bitul Z va fi 0. In cazul al doilea bitul a fost modificat.

    Din contra, daca stocati o valoare cu instructiunea MOVWF, bitul Z nu va fi modificat,

    chiar daca valoarea stocata este 0. Aceste precizari sint valabile si pentru celelalte flag-uri, asa ca nu voi mai reveni.

  • 21

    4.4.2 Indicatorul de stare C Acesta este indicatorul pentru Carry (transport). Daca rezultatul unei operatii produce o

    depasire, bitul C va fi pus in 1. De fapt, acest bit constituie al 9-lea bit al operatiei. Un mic exemplu : Daca adunati B11111110 (254)

    + B00000011 (3) ___________________

    Veti obtine B100000001, (257) deci 9 biti. Cum registrele PIC-ului nu au decit 8 biti, veti obtine B00000001 (1) si bitul C

    pozitionat in 1 (de fapt este al 9-lea bit, caci 28 = 256 si nu este suficient). Prin urmare, rezultatul final va fi :

    256 + 1 = 257 De remarcat ca daca ati fi avut de adunat B11111110 si B00000010, ati fi obtinut

    B00000000. In acest caz insa, veti avea C = 1 SI Z = 1, ceea ce inseamna rezultat nul, dar cu transport (deci rezultatul va fi = 256).

    Ceilalti biti ai registrului de stare vor fi tratati ceva mai departe, pe parcursul cursului,

    atunci cind va fi necesar.

  • 22

    Note:

  • 23

    5. Introducere in MPLAB Vom incepe acum marea aventura cu primul nostru programel. Va voi explica

    instructiunile si registrele pe masura ce le vom folosi. Incepind cu editia a 13-a a cursului, vom lucra cu MPLAB 6.x, care succede versiunii 5.x

    folosita in curs pina la versiunea 12.

    5.1 Pregatiri in vederea utilizarii MPLAB Primul lucru care trebuie facut este de a cauta versiunea curenta de MPLAB 6.60 pe site-

    ul Microchip : http://www.microchip.com , sectiunea "arhive". Puteti deasemenea sa folositi si o versiune 7.xx care este destul de asemanatoare. In acest curs, capturile de ecran au fost facute cu MPLAB 6.3, insa diferentele ar trebui sa fie minore pentru versiunile mai recente.

    Dezarhivati fisierele si instalati programul. Pe parcursul instalarii veti intilni mai multe

    ferestre explicative privind diferite alte "scule" ale Microchip, ca debugger-ul si simulatorul. Presupunind ca nu aveti (inca) aceste scule, inchideti toate aceste ferestre pentru a incheia instalarea.

    Eu personal, nu agreez ideea de a-mi lasa datele impreuna cu programele in partitia

    principala. Daca si dvs. ginditi la fel, creati in alta parte un director in care va veti pastra datele si denumiti-l, de exemplu, DataPIC.

    Copiati acolo fisierul m16F84.asm furnizat impreuna cu cursul. Acesta este un fisier pe

    care l-am creat cu scopul de a putea demara rapid un program nou. L-am denumit m16f84.asm , m provenind de la macheta .

    Daca nu doriti sa creati un director nou, copiati fisierul in directorul de instalare implicit : C:\Program Files\MPLAB IDE. Pentru fiecare program nou pe care-l veti crea, efectuati un copy / paste al fisierului

    m16F84.asm. Pentru primul nostru program, acest fisier va fi redenumit Essai1.asm.

    5.2 Crearea primului nostru proiect Acum puteti lansa MPLAB IDE din meniul de Start sau cu dublu-click pe icoana de pe

    desktop (daca ati acceptat crearea acestei icoane la instalare). Dupa citeva momente, va aparea un ecran gol, cu meniuri si bare de instrumente. Daca aveti vreo fereastra deschisa in MPLAB 6, inchideti-le pe toate, astfel incit sa stiti cum sa le deschideti si toata lumea sa inceapa cu aceasi configuratie.

    MPLAB este un program construit in jurul notiunii de "proiect". Un proiect permite sa se

    memoreze toate variabilele mediului de lucru necesar in realizarea unui proiect. El va va permite refacerea completa a mediul dvs. de lucru atunci cind il redeschideti.

    MPLAB 6 dispune de un "Wizard" pentru crearea de proiecte, care va permite sa creati

    automat noi proiecte. Noi nu vom folosi aceasta facilitate in scopul de a va obisnui cu principalele optiuni ale proiectului si locul in care le gasiti. Daca totusi doriti sa folositi

  • 24

    wizard-ul, il puteti selecta din meniu Project => Wizard. Selectati din meniu Project => New. Fereastra care se deschide va permite sa

    introduceti numele proiectului si directorul de lucru pentru acest proiect. Pentru director, dispuneti de un buton "Browse" care va ajuta sa selectati corect directorul dorit fara sa gresiti.

    Introduceti Essai1 ca nume pentru noul dvs. proiect si alegeti directorul in care ati pus

    fisierul-macheta si fisierul vostru essai1.asm. Am denumit fisierul asm la fel ca numele proiectului, insa nu este neaparat obligatoriu.

    Odata apasat butonul , va apare o noua fereastra in coltul superior stinga al

    desktop-ului MPLAB IDE.

    In aceasta fereastra, vedeti numele proiectului dvs. (essai1.mcp), si fisierele asociate

    acestui proiect. Pentru moment, inca nu aveti niciunul, ceea ce este normal. Vom trece acum la precizarea parametrilor importanti ai proiectului nostru, dar mai intii

    vom preciza tipul de PIC pe care-l vom folosi. Selectati Configure => Select Device; va apare o fereastra din care veti alege PIC-ul. Notati ca implicit, Microchip va propune un PIC din familia 18F; deh, promovarea unui nou produs obliga Alegeti 16F84.

  • 25

    Aceasta fereastra va indica deasemenea, prin intermediul unor LED-uri rosii si verzi, care

    sint sculele suportate de PIC-ul ales. Observati deci ca simulatorul integrat (MPLAB SIM) functioneaza cu acest PIC, dar In-Circuit Debugger (MPLAB ICD 2), nu, etc. Apasati si fereastra se va inchide.

    Va trebui acum sa precizam ce limbaj vom folosi, stiind ca noi lucram in limbaj de

    asamblare, dar ca si alte compilatoare sint propuse de Microchip si de alte firme. Selectati Project => Select language toolsuite In ferastra care se deschide, alegeti din

    meniul derulant Microchip MPASM toolsuite . MPASM este de fapt asamblorul implicit al Microchip.

    In ferestrele inferioare, veti vedea numele executabilelor utilizate de MPASM, care

    deocamdata nu va intereseaza. Apasati si inchideti fereastra.

  • 26

    Va trebui acum sa indicam lui MPASM care este fisierul (sau fisierele) nostru sursa. Aceasta se realizeaza in fereastra "essai1.mcw" care a ramas deschisa in coltul din stinga-sus. Pentru a adauga un fisier sursa, este foarte simplu : faceti click pe source files , apoi alegeti Add . Odata ales fisierul, numele acestuia va aparea in arborescenta.