Sunteți pe pagina 1din 3

.L.Dr.Ing.

Rodica CONSTANTINESCU

Microcontrolere PIC

2.2.3 Stiva PIC16F84 are o stiv de 13 bii cu 8 nivele, sau cu alte cuvinte, un grup de 8 locaii de memorie de 13 bii lime cu funcii speciale. Rolul su de baz este de a pstra valoarea PC dup un salt din programul principal la o adres a unui subprogram. Pentru ca un program s tie cum s se ntoarc la punctul de unde a pornit, trebuie s napoieze valoarea PC din stiv. Cnd se mut dintr-un program ntr-un subprogram, PC este mpins n stiv (un exemplu de acesta este instruciunea CALL). Cnd se execut instruciuni ca RETURN (ieire din subrutin), RETLW (ieire din subrutin cu extragerea unei constante din memoria de program) sau RETFIE (ieire din rutina de tratare a ntreruperii) ce au fost executate la sfritul unui subprogram, PC a fost luat dintr-o stiv, astfel nct programul s poat continua de unde a fost oprit nainte de a fi ntrerupt. Aceste operaii de plasare ntr-o stiv i de luare dintr-o stiv de contor de program sunt numite PUSH i POP, i sunt numite conform cu instruciunile similare ale microcontrolerelor. 2.2.4 Iniializarea procesorului (Reset-ul) Reset-ul este folosit pentru a pune microcontrolerul ntr-o stare iniial. Pentru a funciona corect trebuie resetat, nsemnnd c toate registrele vor fi puse ntr-o stare de start. Resetul nu este folosit numai cnd microcontrolerul nu se comport cum vrem noi, dar poate, de asemenea, s fie folosit cnd apare o ntrerupere n programul de execuie. Pentru a preveni ajungerea unui zero logic la pinul MCLR accidental (linia de deasupra nseamn c resetul este activat de un zero logic), MCLR trebuie s fie conectat printr-un rezistor la polul pozitiv al sursei de alimentare. Rezistorul trebuie s fie ntre 5 i 10K. Funcia acestui rezistor este de a menine o anumit linie la starea logic unu, preventiv. Microcontrolerul PIC16F84 poate fi iniializat in urmtoarele moduri: a) Reset la alimentare, POR (Power-On Reset); b) Reset n timpul lucrului obinuit prin aducerea unui zero logic la pinul 4 (MCLR) al microcontrolerului; c) Reset n timpul regimului SLEEP; d) Reset la depirea timer-ului watchdog (WDT); e) Reset n timpul depirii WDT n timpul regimului SLEEP; Cele mai importante resurse de reset sunt a) i b). Prima are loc de fiecare dat cnd este alimentat microcontrolerul i servete la aducerea tuturor registrelor la starea iniial a poziiei de start. A doua este pentru a aduce un zero logic la pinul 4 (MCLR) n timpul operaiei normale a microcontrolerului, fiind des folosit n dezvoltarea de programe. n timpul unei iniializri, locaiile de memorie RAM nu sunt resetate. Ele sunt necunoscute la alimentare i nu sunt schimbate la iniializare. Spre deosebire de acestea, registrele SFR sunt resetate la o stare iniial a poziiei de start. Cel mai important efect al iniializrii este setarea numrtorului de program (PC) la zero (0000H), ceea ce permite programului s nceap executarea de la prima instruciune scris.

.L.Dr.Ing. Rodica CONSTANTINESCU

Microcontrolere PIC

Modurile de adresare la PIC16F84 Locaiile de memorie RAM pot fi accesate direct sau indirect, deci modurile de adresare a datelor sunt: direct i indirect. Adresarea direct Adresarea direct se face printr-o adres de 9 bii. Aceast adres este obinut prin conectarea celui de-al aptelea bit al adresei directe a unei instruciuni cu doi bii (biii 5 i RP1, RP0) din registrul STATUS dup cum se arat n figura urmtoare. Orice acces la regitrii SFR pot fi un exemplu de adresare direct. Bsf STATUS, RP0 ;Bankl movlw 0xFF ;w=0xFF movwf TRISA ;address of TRISA register is taken from instruction movwf

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

.L.Dr.Ing. Rodica CONSTANTINESCU

Microcontrolere PIC

Un asemenea exemplu poate trimite un set de date prin comunicaia serial sau s tearg o parte a memoriei RAM (16 locaii) ca n urmtorul exemplu:

Citind datele din registrul INDF cnd coninutul registrului FSR este egal cu zero ntoarce valoarea zero i scrie n el rezultatul n operaia NOP (no operation-fr operaie). Adresarea relativ Adresarea relativ se mai numete i redundant, deoarece se folosesc doar o parte din biii de adres. n cazul adresrii relative registrul referit n mod implicit este PC. Deci adresa instruciunii curente e adunat la coninutul cmpului de adres pentru a genera adresa efectiv. Cmpul de adres e tratat ca un numr n complement fa de 2 pentru aceast operaie. Deci, cmpul de adres este un deplasament relativ la adresa instruciunii. Observaii: - Utilizarea adresrii relative reduce numrul de bii de adres din instruciune, deoarece majoritatea referinelor la memorie sunt relativ apropiate de instruciunea curent. - Adresele (sau o parte dintre acestea) nu sunt folosite la selecia memoriei. n acest fel o celul de memorie se poate gsi la mai multe adrese diferite.