Sunteți pe pagina 1din 17

Facultatea de Elctrotehnica si Electroenergetica

CAP.IV.Structura microcontrolerului PIC16F876

Schema bloc a microcontrolerului PIC16F876A

61
Facultatea de Elctrotehnica si Electroenergetica

IV.1Regiştrii specifici ai microcontrolerului

Microcontrolerul necesită configurari pentru fucţionare şi setat pentru utilizarea


întreruperilor şi a modulelor disponibile. Pentru configurarea iniţială sunt câţiva regiştrii
importanţi:
1. Registrul STATUS conţine biţii 7,6 şi 5 prin care se selectează bancurile de lucru,
bitul 7 este utilizat pentru modul de adresare indirectă, iar biţii 6 şi 5 pentru modul
de adresare directă. Biţii 4 şi 3 sunt utilizaţi pentru verificarea resetului la
iniţializare. Biţii 2, 1 şi 0 sunt utilizaţi de către unitatea matematica şi cu ajutorul
acestora se poate verifica rezultatul unei operaţii aritmetice.
2. Registrul OPTION_REG. Prin configurarea bitul 7 se acţionează rezistenţele interne
la +5 V pentru portul B, bitul 6 pentru determinarea frontului (pozitiv sau negativ)
pe care este generată întreruperea externă pe pinul RB0, bitul 5 pentru sursa de ceas
pentru Timer0, care poate fi internă sau externă, bitul 4 pentru determinarea
frontului pe care se incrementează Timer0, bitul 3 pentru atribuirea prescaler-ului la
Timer0 sau la WDT, iar biţii 2, 1 şi 0 sunt pentru stabilirea ratei prescaler-ului.
3. Registrul INTCON conţine biţii 7 şi 6 care configurează întreruperile interne şi
externe la caz general, bitul 5 care configurează posibilitatea de acţionare a
întreruperii de Timer0, bitul 4 pentru configurarea întreruperii externe pe pinul RB0,
bitul 3 care configurează întreruperea la schimbarea valorii portului B, bitul 2 pentru
testarea întreruperii de Timer0, bitul 1 pentru testarea întreruperii externe pe RB0 şi
bitul 0 pentru testarea întreruperii la schimbarea valorii portului B.
4. Registrul PIE1 conţine biţi individuali pentru configurarea întreruperilor periferice:
seriale, analog-digitale, comparator, captura, PWM (modulul1) şi temporizatoare.
5. Registrul PIR1 conţine biţii de test pentru întreruperile periferice configurate în
registrul PIE1.
6. Registrul PIE2 este o continuare a registrului PIE1 şi conţine biţi de configurare a
întreruperilor ramase: comparator, captura, PWM (modulul2), EEPROM, coliziune
de magistrala.
7. Registrul PIR2 conţine biţii de test pentru întreruperile configurate în registrul
PIE2.
8. Registrul PCON conţine numai doi biţi pentru diferenţierea reset-urilor apărute în
funcţionare şi permite tratarea acestora şi luarea unor decizii în funcţie de resetul
generat.

62
Facultatea de Elctrotehnica si Electroenergetica

Restul regiştrilor microcontrolerului sunt regiştrii “personalizaţi” pentru fiecare modul


în parte.

IV.2 Convertorul A/D

Mod de utilizare
Convertorul analog-digital are 8 intrări de măsură. În urma conversiei unui
semnal analog se obţine reyultatul digital pe 10 biţi. Modulul A/D are intrări pentru
tensiune de referinţă mare şi mică selectabilă soft prin combinaţii între VDD, VSS, RA2
şi RA3. Modulul A/D poate opera în timp ce microcontrolerul este in modul “SLEEP”.
Pentru a opera în modul “SLEEP” ceasul pentru convertor trebuie obţinut din
oscilatorul RC intern al modulului A/D.
Modulul A/D are 4 regiştri: ADRESH, ADRESL (în aceşti regiştrii este depus rezultatul
după efectuarea conversiei), ADCON0 şi ADCON1 (regiştrii de control).
Registrul ADCON0 controlează operarea modulului A/D. Prin configurarea
biţilor 7 (ADCS1) şi 6 (ADSC0) se setează ceasul pentru conversie. Biţii 5 (CHS2), 4
(CHS1) şi 3 (CHS0) permit 8 configuraţii care selectează canalul activ pe care se face
masurătoarea, la acest microcontroler fiind posibile însă numai primele 5 combinaţii
între cei 3 biţi de configurare având doar 5 canale analogice. Bitul 2 (GO/DONE) al
registrului este bitul de pornire a conversiei analog-digitale prin setarea acestuia, bit
care este resetat la 0 în momentul în care conversia s-a terminat. Bitul 1 nu este folosit
şi este citit “0”. Bitul 0 (ADON) este bitul prin care se porneşte sau se opreşte
convertorul analog-digital.
Registrul ADCON0 configurează funcţiile pinilor prin biţii de la 3 (PCFG3), 2
(PCFG2), 1 (PCFG1) şi 0 (PCFG0). Prin configurarea acestor 4 biţi se setează numarul
de intrări analogice dorite şi selecţia tensiunii de referinţă a modului A/D. Mai prezintă
un bit şi anume bitul 7 (ADFM) care selectează formatul rezultatului (aranjarea spre
dreapta sau spre stânga a rezultatului). Bitul 6 (ADCS2) completeaza biţii din ADCON0

63
Facultatea de Elctrotehnica si Electroenergetica

care selectează ceasul pentru conversie, astfel având de ales între 8 moduri diferite de
ceas. Biţii 5 şi 4 sunt neutilizaţi şi sunt citiţi ca “0”.
În regiştrii ADRESH şi ADRESL este depus rezultatul conversiei analog-digitale
după terminarea acesteia. Terminarea conversiei este semnalizată prin curăţarea bitului
GO/DONE din ADCON0 şi bitul ADIF este setat. Pentru a putea executa o conversie
analog-digitală pinii corespunzatori canalalor analogice folosite trebuie setaţi ca intrare
în registrul TRISA, portul A fiind portul pe care este multiplexat modulul analog-
digital.

IV.3 Operaţiile necesare pentru efectuarea unei conversii


Pentru a realiza o conversie trebuie urmaţi următorii paşi:
1. Configurarea modulului analog-digital: configurarea intrărilor analogice şi a
tensiunii de referinţă din ADCON1, ceasul de conversie din ADCON1 şi ADCON0,
selectarea canalului activ şi pornirea modului A/D din ADCON0.
2. Configurarea întreruperilor analog-digitale în cazul în care se doreşte utilizarea
acestora.
3. Aşteptarea unui timp necesar pentru achiziţia semnalului.
4. Pornirea conversiei prin setarea bitului GO/DONE din ADCON0.
5. Aşteptarea terminării conversiei prin testarea bitului GO/DONE – cât timp acest bit
are valoarea “1” înseamnă că conversia este în desfăşurare, iar dacă este “0” atunci
conversia este terminată şi rezultatul poate fii tratat – sau prin aşteptarea intreruperii
A/D – dacă se foloseşte.
6. Citirea rezultatului din regiştrii ADRESH şi ADRESL şi curăţarea flagului de
întrerupere dacă aceasta se utilizează.
7. Pentru o nouă conversie se trece din nou la pasul 1 sau doi, după cum este nevoie.
In continuare este prezentată diagrama bloc a modulului A/D

Timpul de achiziţie
Pentru ca convertorul sa funcţioneze cu acurateţe maximă trebuie asigurată
încărcarea condensatorului de intern al convertorului (C HOLD) la nivelul tensiunii de
intrare. Impedanţa sursei (RS) şi impedanţa interna (RSS) influenţează direct timpul
necesar încărcării condensatorului intern. Impedanţa interna variază în funcţie de
tensiunea de alimentare. Impedanţa maximă recomandată pentru sursa analogică este de

64
Facultatea de Elctrotehnica si Electroenergetica

10 K. Cu cât impedanţa este mai scăzută scade şi timpul necesar încărcării
condensatorului intern. După schimbarea canalului trebuie să se aştepte timpul necesar
achiziţiei înainte de a începe conversia analog-digitală.

Model de intrare analogică

Selectarea ceasului pentru conversie


Timpul pe bit necesar conversiei analog-digitale este definit ca TAD. Conversia
analog digitală are nevoie de 12*TAD pentru 10 biţi. Sursa ceasului A/D este selectabil
soft. Pentru o conversie corecta ceasul A/D trebuie selectat pentru a asigura timpul
minim necesar acesteia, acesta fiind de 1.6 s, iar opţiunea este aleasă în funcţie de
frecvenţa de oscilaţie a microcontrolerului.

IV.4 Porturile de intrare/ieşire

Porturile de intrare/ieşire sunt în număr de 5: PORTA, PORTB şi PORTC. Pe


pinii acestor porturi sunt multiplexate modulele periferice ale microcontrolerului şi când
acestea sunt activate, funcţia de intrare/ieşire a pinilor utilizaţi de module nu mai poate
fii utilizată.
Portul A (PORTA)

Portul A (PORTA)
Portul A este un port bi-direcţional de 7 biţi. Direcţia corespunzătoare pinilor
portului A este setabilă din registrul TRISA. Setând un bit în TRISA pe “1” are ca efect
activarea funcţiei de intrare pentru pinul corespunzător al portului, iar setarea acestuia
pe “0” are ca efect activarea funcţiei de ieşire pentru pinul corespunzător. Citirea
registrului PORTA înseamnă citirea stării pinilor în momentul în care s-a efectuat
operaţia, iar scrierea în registrul PORTA va afecta buffer-ul de ieşire al portului. Pinul
RA4 este multiplexat cu intrarea de ceas pentru Timer0. Pinul este o intrare Schmitt
65
Facultatea de Elctrotehnica si Electroenergetica

Trigger şi ieşire cu colector în gol. Toţi ceilalţi pini au nivele TTL pe intrare şi drivere
de ieşire CMOS. Ceilalţi pini ai portului sunt multiplexaţi cu modulul A/D şi tensiuni de
referinţa pentru modulele A/D convertor şi comparator. Funcţia pinilor este selectată
prin configurarea biţilor din regiştrii ADCON1 şi CMCON.
Registrul TRISA controlează direcţia portului chiar şi în cazul în care pinii sunt
setaţi ca intrări analogice. Din această cauză utilizatorul trebuie să se asigure ca biţii din
TRISA corespunzători intrărilor analogice folosite să rămână tot timpul setaţi pe “1”.

Diagrama pinilor RA3:RA0 Diagrama pinului RA4

Diagrama pinului RA6

Portul B (PORTB)
La fel ca portul A, portul B are programabilă funcţia de intrare/ieşire sin
registrul corespunzător portului – TRISB. Deosebirea faţa de portul A este ca portul B
66
Facultatea de Elctrotehnica si Electroenergetica

are 8 biţi în loc de 7 şi, bineînţeles, modulele multiplexate cu acest port sunt altele decât
la portul A.
Portul B este multiplexat cu funcţia de In-Circuit Debugger şi Low Voltage
Programming pe pinii RB3 (PGM), RB6 (PGC) şi RB7 (PGD). Fiecare dintre pinii
portului B o rezistenţă internă la +5 V. Activarea acestei funcţii se face prin setarea pe
“0” a bitului RBPU din OPTION_REG. Rezistenţa la +5 V este automat anulată în
cazul în care pinul este setat ca ieşire. Opţiunea este dezactivată la Power-on Reset.
Patru dintre pinii portului B, RB7-RB4, au posibilitatea de a genera întrerupere la
schimbarea stării. Doar pinii configuraţi ca intrare pot genera aceasta întrerupere.
Întreruperea este generată prin setarea bitului RBIF (INTCON,0). Aceasta întrerupere
poate scoate microcontrolerul din “SLEEP”. Tot pe portul B poate fii activată
întreruperea externă pe pinul RB0 prin setarea bitului INTE (INTCON,4) şi setat frontul
pe care să fie generată întreruperea prin bitul INTEDG (OPTION_REG,6).

Diagrama pinilor RB2:RB0

67
Facultatea de Elctrotehnica si Electroenergetica

Diagrama pinilor RB7:RB4

Portul C (PORTC)
Este tot un port de 8 biţi bi-direcţional. Funcţiile de intrare/ieşire a pinilor se
face prin configurarea registrul TRISC. Setaţi ca intrare pinii portului C au buffer
Schmitt Trigger. Pe portul C este multiplexat modulul serial I2C care utilizează pinii
RC4 şi RC3. În stabilirea

68
Facultatea de Elctrotehnica si Electroenergetica

Diagrama pinilor RC7:RC5, RC2:RC0

Diagrama pinilor RC4:RC3

configurării registrului TRISC trebuie avută mare atenţie, deoarece activarea


perifericelor multiplexate pe acest port poate determina rescrierea registrului TRISC
pentru buna funcţionarea a perifericului. Multiplexat pe portul C mai sunt: ieşire de
oscilator pentru Timer1 sau intrare de ceas pentru Timer1 pe pinul RC0, intrare de
69
Facultatea de Elctrotehnica si Electroenergetica

oscilator pentru Timer1 sau ieşire de comparator/captură/PWM pe pinul RC1, ieşire de


comparator/captură/PWM pe pinul RC2, RC3 şi RC4 utilizaţi pentru modulele seriale
SPI şi I2C, RC5 ieşire pentru Portul serial Sincron, RC6 pin de transmisie pentru
USART sau ceas sincron şi RC7 pin de recepţie pentru USART sau date sincrone.

Portul D (PORTD)
Este tot un port de 8 biţi bi-direcţional. Funcţiile de intrare/ieşire a pinilor se
face prin configurarea registrul TRISD. Setaţi ca intrare pinii portului D au buffer
Schmitt Trigger.
Pinii pot fi programati individual ca intrare/iesire digitala

Diagrama bloc a PORT-ului D

Portul E (PORTE)

Este un port de 3 biti, bi-directional. . Funcţiile de intrare/ieşire a pinilor se face


prin configurarea registrul TRISE. Setarea piniilor se face la fel ca la celelalte porturi.

70
Facultatea de Elctrotehnica si Electroenergetica

In figura de mai jos avem diagrama bloc a PORT-ului E

Diagrama bloc a PORT-ului E

Ceasul (Clock-ul)

Clock-ul de la oscilator intră într-un microcontroler prin pinul OSC1, unde


circuitul intern al microcontrolerului divide clock-ul în 4 clock-uri egale Q1, Q2, Q3 şi
Q4, ce nu se suprapun. Aceste 4 clock-uri constituie un ciclu de o singură instrucţiune
(numit de asemenea ciclu maşină), în timpul căruia este executată instrucţiunea.

Executarea instrucţiunii începe prin apelarea unei instrucţiuni care este


următoarea în linie. Instrucţiunea este apelată din memoria program la fiecare Q1 şi este
scrisă în registrul de instrucţiuni la Q4. Decodarea şi executarea instrucţiunii sunt făcute
între următorul ciclu Q1 - Q4. În următoarea diagramă putem vedea relaţia dintre ciclul
instrucţiunii şi clock-ul oscilatorului (OSC1) ca şi aceea a clock-urilor interne Q1- Q4.
Contorul de program (PC) reţine informaţia despre adresa următoarei instrucţiuni.

Memoria
Microcontrolerul are un memorie de tip stivă pe 8 nivele. Stiva nu face parte
nici din memoria de program nici din memoria RAM. Ea nu poate fii citită sau scrisă.
71
Facultatea de Elctrotehnica si Electroenergetica

Registrul de adrese este încărcat în stivă când este apelată instrucţiunea “CALL” sau
când apare o întrerupere. Registrul de adrese este restaurat la executarea uneia dintre
instrucţiunile “RETURN”, “RETLW” sau “RETFIE”. În momentul în care stiva este
plină, următoarea încărcare in stivă a registrului de adrese rescrie la primul nivel, ceea
ce ar duce la o funcţionare eronată a programului, revenirea la adresa care era înscrisă
pe primul nivel al stivei fiind imposibilă. Deoarece nu există biţi de control ai stivei
trebuie avută mare grijă la apelul funcţiilor şi posibilitatea de apariţie a întreruperilor.

Harta memoriei şi a stivei


Memoria de program
Are o dimensiune de 32K. Este împărţită în 4 pagini de memorie, câte 2K în
fiecare. Instrucţiunile de salt “CALL” şi “GOTO” au posibilitatea să adreseze o pagină
întreagă, acestea având adresa destinaţie pe 11 biţi. Pentru toţi cei 32K de memorie de
program adresarea se face pe 13 biţi, 8 biţi fiind încărcaţi în “PCL”, iar ceilalţi 5 în
“PCLATH”, aceşti doi regiştrii alcătuind registrul de adrese. Primii 11 biţi sunt alteraţi
direct de instrucţiunile de salt, iar ceilalţi 2 biţi, care se găsesc în “PCLATH” la poziţiile
4 şi 3 din registru, aceştia trebuie setaţi pentru pagina de memorie în care se doreşte a se
continua lucrul. De aceea utilizatorul trebuie să se asigure că se găseşte în pagina

72
Facultatea de Elctrotehnica si Electroenergetica

corespunzătoare . La revenirea din funcţie sau întrerupere toţi cei 13 biţi ai adresei sunt
descărcaţi din stivă fără a mai fii nevoie de setarea manuală a acestora.

Memoria RAM
Sau memoria de date este separată de memoria de program, fiecare având
magistrală proprie. Memoria RAM este partiţionată în 4 bancuri. Selecţia bancului dorit
se face prin configurarea biţilor 6 (RP1) şi 5 (RP0) din STATUS, bancul corespun zând
combinaţiei binare dintre cei doi biţi. Fiecare banc are 128 de octeţi. Primele locaţii din
cele 4 bancuri sunt rezervate regiştrilor speciali şi astfel adresele disponibile pentru
fiecare banc sunt: 20h-7Fh pentru bancul 0, A0h-FFh pentru bancul 1, 110h-17Fh
pentru bancul 2 şi 190h-1FFh pentru bancul 3. Toate cele 4 bancuri conţin regiştrii
speciali, iar regiştrii cei mai uzuali sunt mapaţi în memorie în toate bancurile pentru a fii
accesaţi mai uşor. Locaţiile de memorie de la adresa 70h până la 7Fh din bancul zero

73
Facultatea de Elctrotehnica si Electroenergetica

sunt adresabile din toate bancurile fără a mai fii nevoie de selecţia acestora. Aceste
adrese sunt folosite la regiştrii temporali utilizaţi la salvarea datelor din regiştrii când
apare o întrerupere.

Memoria EEPROM
Are o dimensiune de 256 octeţi adresabila între 00h şi FFh. Pentru a utiliza
memoria EEPROM se folosesc regiştrii de configurare EECON1 şi EECON2 pentru
controlul operaţiilor desfăşurate şi EEADR şi EEDATA pentru adresare şi respectiv
date.

Adresarea memoriei
Adresarea memoriei se face în două moduri: directă şi indirectă. Adresarea
directa se face foarte simplu prin selectarea bancului de memorie din biţii RP1 şi RP0
din STATUS şi adresa la care se face operaţia care reiese din codul instrucţiunii şi are
dimensiunea de 7 biţi. Toate instrucţiunile realizează adresarea directă.
Adresarea indirectă se realizează prin utilizarea registrului INDF. Prin
adresarea acestui registru are ca efect adresarea indirectă. Orice instrucţiune care
adreseaza registrul INDF, adresează de fapt registrul care se află la valoarea încărcată în
“FSR”, care este de fapt un pointer spre adresa . Registrul INDF este declarat la adresa
00h în toate bancurile de memorie, dar, de fapt, nu există fizic. Prin citirea registrului
INDF (când FSR=0) se va obţine valoarea 0, iar scrierea directă în acest registru nu va
avea nici un efect, cu posibilitatea de a fii afectaţii biţii de stare. Adresa se obţine prin
concatenarea bitului t (IRP) din STATUS cu cei 8 biţi din registrul FSR.

74
Facultatea de Elctrotehnica si Electroenergetica

Modulul USART

Modulul universal de recepţie/transmisie în mod sincron/asincron (USART),


este cel de al doilea modul de comunicaţie serială implementat în microcontroll-er.
Acesta poate fi configurat în mod „full duplex” asincron şi poate comunica cu
dispozitive periferice cum ar fi calculatoarele personale. Bitul SPEN (RCSTA<7>) şi
biţii TRISC <7,6> trebuie setaţi pentru a putea configura pinii RC6/TX şi RC7/RX în
mod USART.
Prin intermediul registrului SPBRG se poate stabilii viteza de transfer (baud rate).
În modul asincron se va folosii un singur bit de START, 8 sau 9 biţi pentru date, şi un
bit de STOP.
Controlul parităţii nu este implementat hardware, dar poate fi implementat cu
uşurinţă software prin utilizarea celui de al nouălea bit de date, ca bit indicator al
parităţii.
Diagrama bloc a modulului USART este prezentată în figura ce urmează:

Inima modulului de transmisie o constituie registrul de deplasare al transmisiei (TSR).


Acest registru este încărcat cu date prin intermediul registrului TXREG. Registrul
TXREG este încărcat cu date în mod software.
Registrul TSR nu este încărcat cu date până în momentul în care un bit de STOP al
transmisiei anterioare a fost trimis. În momentul în care un bit de STOP a fost transmis,

75
Facultatea de Elctrotehnica si Electroenergetica

registrul TSR este încărcat cu noile date din TXREG (dacă acestea există). În momentul
în care datele au fost transferate în TSR (într-un singur ciclu de instrucţiune), registrul
TXREG este şters şi bitul TXIF (PIE1<4>) este setat. În timp ce bitul TXIF indică
starea registrului TXREG, bitul TRMT (TXSTA<1>) indică starea registrului TSR.
Bitul TRMT este un bit ce poate fi doar citit (aidoma TXIF) şi este setat în momentul în
care registrul TSR este gol.
Transmisia este activată în momentul în care bitul TXEN (TXSTA<5>) este setat. În
realitate transmisia nu va fi pornită până în momentul în care TXREG nu a fost încărcat
cu date.
Diagrama bloc a modulului de recepţie este prezentată în figura ce urmează:

Datele sunt recepţionate pe pinul RC7/RX. Blocul de citire a datelor este format
dintr-un registru de deplasare de mare viteză, capabil să opereze la o viteză de 16 ori
mai mare decât rata de transfer. După ce modul asincron a fost selectat, recepţia este
activată prin setare bitului CREN (RCSTA<4>).
Inima blocului de recepţie este reprezentată de registrul de deplasare RSR. În momentul
în care un bit de STOP a fost recepţionat datele vor fi încărcate în buffer-ul RCREG.
Dacă transferul este complet este setat bitul RCIF (PIR1 <5>). Acest bit poate fi doar
citit şi este şters în hardware. Bitul RCIF va fi şters în momentul în care registrul
RCREG a fost citit şi este gol. Registrul RCREG este de fapt un buffer de tip FIFO.
Este posibil ca doi octeţi să fi fost recepţionaţi şi un al treilea octet să aştepte să fie
transferat în RCREG. La detecţia bitului de STOP al celui de al treilea cuvânt dacă
registrul RCREG este în continuare plin bitul de eroare OERR va fi setat.
Cuvântul din registrul RSR va fi pierdut. Bitul de eroare OERR trebuie şters în
software. Această operaţie se poate realiza prin ştergerea şi apoi setarea bitului CREN.
76
Facultatea de Elctrotehnica si Electroenergetica

77

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