Sunteți pe pagina 1din 11

Curs 10

Microcontrolere PIC de 8 bii periferice integrate


Sistemul de ntreruperi Microcontrolerele PIC de 8 bii din categoria mid-range pot avea mai multe surse de ntrerupere: - ntreruperea extern INT - depire Timer 0 - modificare stare pini port RB sau GPIO - ntreruperi de la periferice integrate: o Comparator o Parallel slave port o USART o Convertor A/D o Controler LCD o Terminare scriere n EEPROM o Timer 1 o Timer 2 o Port serial sincron - SSP o Unitate de comparare/captur/pwm CCP Fiecare surs de ntreruperi are asociat un flag de ntrerupere, n care este memorat cererea, precum i un flag de validare individual a ntreruperii respective. n plus, perifericele integrate au un flag suplimentar de validare a ntreruperilor, PEIE. De asemenea, exist un flag de ntrerupere global a tuturor ntreruperilor, GIE.

GIE, PEIE, flagurile de validare i de cerere ale ntreruperilor externe (INT), depire Timer 0 i schimbare stare pini port RB (sau GP) se regsesc n registrul INTCON. R/W-0 INTCON GIE Bit 7 R/W-0 PEIE R/W-0 T0IE R/W-0 INTE R/W-0 RBIE R/W-0 T0IF R/W-0 INTF R/W-0 RBIF Bit 0

Celelalte flaguri de validare i de cerere, asociate perifericelor integrate, sunt coninute n unul sau mai multe registre PIE, respectiv PIR (PIE1, PIE2 ... PIR1, PIR2...), n funcie de tipul microcontrolerului. Dac GIE=0, nici o cerere de ntrerupere nu va ajunge la CPU. Dac PEIE=0, nici o ntrerupere de la perifericele integrate din lista anterioar nu va fi acceptat. Dac flagul de validare al unei surse de ntreruperi este 0 (de ex. T0IE=0), cererea de ntrerupere nregistrat n flagul corespunztor (de ex. T0IF=1) nu va fi naintat ctre CPU. Aceasta nsemn c primele 3 surse de ntrerupere au dou niveluri de validare a cererilor: - individual - global (GIE) iar celelalte surse au 3 niveluri de validare: - individual - grup (PEIE) - global (GIE)

Timpul de rspuns la apariia unei cereri de ntrerupere este: - 3 TCY pentru ntreruperile sincrone (interne) - 3 3,75 TCY pentru ntreruperile asincrone (cauzate de evenimente externe: INT, RB). Tratarea ntreruperii la nivel hardware: - GIE=0 - salvarea PC n stiva hardware - salt la adresa 0004h.

Dac se dorete salvarea altor registre (W, STATUS), aceasta trebuie fcut prin program, nainte de modificarea lor. Dup identificarea cauzei care a produs ntreruperea i tratarea ntreruperii (sau ntreruperilor) valide, se reface starea registrelor salvate (W, STATUS), apoi se execut instruciunea RETFIE, care are drept efect: - refacerea PC din vrful stivei hardware - GIE=1.

Porturile de I/E - cele mai simple periferice integrate - permit monitorizarea i controlul dispozitivelor externe - unii pini de I/E au atasate funcii alternative, specifice altor periferice integrate (timere, USART, etc.) - atunci cnd se utilizeaz funciile alternative (ca urmare a validrii funcionrii unui periferic), pinii respectivi nu mai pot fi folosii ca pini de I/E. Pentru cele mai multe porturi, tipul liniilor de port (I sau E) poate fi selectat individual, pentru fiecare pin, cu ajutorul unui registru denumit TRIS. Fiecrui pin al portului PORT (PORT7:0) i corespunde un bit n registrul TRIS (TRIS7:0). TRISi = 1 TRISi = 0 PORTi = intrare PORTi = ieire

Ca ieire, latch-ul TRIS (fiind resetat) permite ca cele dou tranzistoare ale etajului final s fie comandate n opoziie de valoarea bitului de date nscris n Data Latch: cnd unul este deschis, cellalt este blocat, permind conectarea pinului de ieire fie la VDD (bitul de date=1), fie la mas (cnd bitul de date este 0). Ca intrare, latch-ul TRIS (fiind setat) face ca ambele tranzistoare ale etajului final s fie blocate, iar pinul s fie adus n starea de nalt impedan (TRI-State, de unde i denumirea latch-ului TRIS). Se poate citi starea latchului TRIS, dar nu i starea latch-ului Data. Citirea din port aduce pe magistrala intern de date starea pinului i nu starea latch-ului Data.

Structura intern tipic a unui port de I/E

Timerul 0 - numrtor de 8 bii, care poate fi nscris i citit prin program - poate fi folosit i un prescaler programabil de 8 bii (numrtorul postscaler partajat cu WDT) - sursa impulsurilor numrate poate fi intern (fosc/4) sau extern (pinul T0CKI) - poate genera o ntrerupere la depire (FFh00h) - se poate selecta frontul activ al semnalului aplicat pe pinul extern.

Structura intern a Timerului 0 R/W-0 OPTION_REG RPBU R/W-0 INTEDG R/W-0 T0CS R/W-0 T0SE R/W-0 PSA R/W-0 PS2 R/W-0 PS1 R/W-0 PS0 Bit 0

Bit 7 T0SE bit din OPTION_REG, selecteaz frontul activ al semnalului aplicat pe T0CKI T0CS bit din OPTION_REG, selecteaz sursa impulsurilor de numrare

PS2:PS0 bii din OPTION_REG, selecteaz factorul de divizare al prescalerului 2,4,8,16,32,64,128,256. PSA - bit din OPTION_REG, care asigneaz prescalerul fie Timerului 0 (PSA=0), fie WDT (PSA=1).

Modul Timer - sursa impulsurilor este oscilatorul intern (fosc/4) - dac factorul de divizare este 1: o registrul TMR0 este incrementat n fiecare ciclu main o la scrierea n registrul TMR0, incrementarea este blocat pentru 2 perioade de tact. - dac factorul de divizare este altul dect 1 (dac se folosete prescalerul): o prescalerul este incrementat n fiecare ciclu main o la scrierea n registrul TMR0: prescalerul este resetat incrementarea prescalerului este blocat pentru 2 perioade de tact. Modul Counter - sursa impulsurilor este un semnal extern, aplicat pe pinul T0CKI - semnalul este sincronizat cu semnalul de tact intern. La apariia depirii, flagul de ntrerupere T0IF este setat i, dac T0IE=1 i GIE=1, este acceptat cererea de ntrerupere. Flagul de ntrerupere T0IF trebuie resetat prin program, n rutina de tratare a ntreruperii, nainte de revenirea n programul principal.

Timerul 1

Structura intern a Timerului 1 - numrtor de 16 bii, format cu dou registre SFR nseriate: TMR1H i TMR1L, care pot fi nscrise i citite prin program - TMR1H:TMR1L se incrementeaz de la 0000H la FFFFh, iar la depire este setat flagul de ntrerupere TMR1IF - se genereaz o cerere de ntrerupere, care este acceptat de CPU dac TMR1IE=1, PEIE=1 i GIE=1

Timerul 1 poate funciona n unul din urmtoarele 3 moduri: - timer sincron: - numrtor sincron: - numrtor asincron: U-0 T1CON Bit 7 Incrementarea poate fi pornit i oprit cu ajutorul bitului TMR1OFF. Poate fi resetat intern de ctre modulul CCP (Compare/Capture/PWM). Funcionarea n modul timer: TMR1H:TMR1L se incrementeaz n fiecare ciclu main (fosc/4) /T1SYNC nu are nici un efect deoarece semnalul este deja sincronizat cu tactul intern. Funcionarea n modul numrtor: TMR1H:TMR1L se incrementeaz pe frontul cresctor al: o semnalului aplicat pe pinul T1CKI (dac TOSCEN=0) o semnalului aplicat pe pinul T1OSI (dac TOSCEN=1) n modul sincron: - semnalul de incrementare este sincronizat cu tactul intern dup prescaler (care poate diviza frecvena cu un factor egal cu 2, 4 sau 8). - n modul Power-down, blocul de sincronizare este oprit, deci la TMR1H:TMR1L nu vor ajunge impulsuri de incrementare. U-0 TMR1CS=0 TMR1CS=0 i /T1SYNC=0 TMR1CS=0 i /T1SYNC=1 R/W-0 T1CKPS1 R/W-0 T1CKPS0 R/W-0 T1OSCEN R/W-0 /T1SYNC R/W-0 TMR1CS R/W-0 TMR1ON Bit 0

n modul asincron: - semnalul de incrementare nu este sincronizat cu tactul intern - n modul Power-down, TMR1H:TMR1L va continua s se incrementeze, iar la depire poate genera o ntrerupere care s reporneasc dispozitivul - apar probleme legate de citirea/scrierea numrtorului de 16 bii al Timerului 1: o la citire: se efectueaz dou citiri pentru fiecare din TMR1H i TMR1L trebuie s se in cont de o posibil depire sau transport ntre octei o la scriere: se recomand oprirea Timerului 1 nainte de modificarea valorilor din TMR1H sau TMR1L n caz contrar, scrierea poate intra n conflict cu incrementarea, cu rezultate imprevizibile Oscilatorul poate fi pilotat cu un cristal cu frecvena sub 200KHz (tipic 32 KHz). El va continua s funcioneze i n modul Power-down i s creasc astfel consumul dispozitivului. Prescalerul este ters automat la o scriere n TMR1H sau TMR1L. TMR1H:TMR1L nu este ters la resetare, ci numai de un semnal de la unitatea CCP. tergerea poate s nu funcioneze dac Timerul 1 lucreaz ca numrtor asincron, de aceea nu trebuie folosit n acest caz. Atunci cnd tergerea apare simultan cu scrierea n numrtor, prioritatea cea mai mare o are operaia de scriere.

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