Sunteți pe pagina 1din 11

PORTURI SPECIALIZATE – Timer/Counter

Ceasuri programabile – noţiuni generale

Funcţionarea sistemelor cu microprocesor în aplicaţii de proces necesită,


în majoritatea cazurilor, realizarea unor temporizări precise între
diversele acţiuni efectuate în sistem sau măsurarea cu precizie a unor
intervale de timp. În acest scop, se utilizează aşa-numitele ceasuri de
timp real (Real Time Clock — RTC), circuite ce pemit obţinerea unor
temporizări programate sau măsurări de intervale, cu precizie ridicată.

Aceste circuite au funcţia de generare de semnale de lăţime programată,


măsurare de intervale de timp sau de numărare de evenimente. În primele
două cazuri funcţia se numeşte TIMER, în cel de-al treilea caz, funcţia se
numeşte COUNTER, de unde şi denumirea circuitului de Timer/Counter.

În cadrul funcţiei de Timer, circuitul foloseşte ca intrare un semnal de


frecvenţă fixă ca Tact sau Ceas de referinţă, pentru măsurare sau
generare. În cadrul funcţiei Counter, circuitul foloseşte ca intrare un
semnal extern pentru care se doreşte măsurarea numărului de tranziţii.

În acest capitol vor fi prezentate două circuite Timer/Counter, o variantă


pentru un sistem cu microprocesor, ca circuit extern, şi o variantă de
circuit inclus într-un microcontroler.

4.2. Circuitul de interfaţă Timer/Counter al microcontrolerului


80C552

Preliminarii
Microcontrolerul 80C552 conţine patru circuite Timer/Counter pe 16 bit
denumite Timer 0 - T0 , Timer 1 - T1, Timer 2 - T2 Timer 3 Watchdog -
T3. Ele sunt grupate, după funcţiile pe care le pot îndeplini astfel: T0 şi
T1 sunt timere cu posibilităţi asemănătoare şi îndeplinesc funcţiile unui
timer de uz general. T2 este un timer cu posibilităţi foarte dezvoltate, este
capabil de a măsura şi genera semnale cu o precizie foarte mare. Timerul
T3 poate fi folosit doar pentru a urmări funcţionarea corectă a
programului microcontrolerului.

Timerele T0 şi T1
Sunt circuite pe 16 bit ce pot fi programate să îndeplinească următoarele
funcţii:
- măsurare de intervale de timp sau de lăţime de impuls
- numărare de evenimente
- generare de cerere de întrerupere către unitatea centrală (CPU)
Acestor circuite le corespund următorii regiştri ai microcontrolerului
(SFR):

TH0, TL0
TH1, TL1
TMOD
TCON.

Programarea lor şi schimbul de date se face prin aceste SFR.

Ambele circuite sunt formate din 2 regiştri de 8 biţi (THx, TLx cu x=0 sau
x=1) care se incrementează la o tranziţie “1”- “0” a semnalului de la
intrare.
Când sunt configurate “Timer” (Temporizator), T0 şi T1 sunt
incrementate de semnalul de ceas sistem (quartz-ul sistemului divizat cu
12) la fiecare ciclu maşină (la o perioadă de (1/frecvenţa sistem)/12, deci
a 12 parte din perioada ceasului sistem, pentru un ceas de 12MHz, ciclul
maşină este de 1 sec).
Când sunt configurate “Counter” (Numărător), T0 şi T1 sunt
incrementate la fiecare tranziţie “1”- “0” a semnalului de pe pinul
corespunzător celor două timere.

T0 şi T1 pot opra în 4 moduri de lucru . Modurile 0, 1 şi 2 sunt comune


celor două timere, pe când modul 3 este diferit.

a) modurile de lucru 0 şi 1 ale T0 şi T1.


În acest mod ele funcţionează ca un numărător (Counter) pe 8 bit cu un
divizor de 1 la 32. (vezi fig.4.1.)

Fig.4.1. Structura T0 şi T1 în modul de lucru 0

Indicele x poate fi 0 sau 1, deoarece ambele circuite au aceeaşi


funcţionare.

Incrementarea poate fi generată de ceas sistem (C/~T=0, timer) sau de


semnal extern (C/~T=1, counter). Validarea incrementării este dată de
bitul GATE (TMOD.7 sau TMOD.3) =0 sau semnalul extern ~INTx=1 şi
simultan bitul TRx (TCON.6)=1.
La atingerea valorii de “1” pentru toţi cei 13 biţi, impulsul următor va
determina trecerea tuturor biţilor pe “0” cu setarea (punerea pe “1”)
bitului TF1 (fanion de depăşire, sau Overflow care poate fi considerat şi
ca fanion de intrerupere). Poziţionarea pe “1” poate însemna şi cerere de
întrerupere care va fi luată în considerare doar dacă a fost validată prin
programarea întreruperilor.

Modul de lucru 1 pentru ambele circuite este identic cu modul 0, cu


diferenţa că registrul de date este pe 16 bit, nu pe 13 bit.

b) Modul de lucru 2 configurează regiştrii T0 şi T1 pe 8 bit (TLx) cu


reîncărcare automată (vezi fig.4.2.)

Fig.4.2. Structura T0 şi T1 în modul de lucru 2

O depăşire la TLx (Overflow) setează bitul TFx şi comandă reînscrierea în


TLx a aceluiaşi octet, pşstrat în THx. Reîncărcarea lasă THx nemodificat.

c)Modul de lucru 3

Acest mod de lucru este diferit pentru cele 2 timere.


T1 menţine în acest mod conţinutul său nemodificat (acelaşi efect ca şi
cum validarea de la TR1=0).
T0 este configurat ca două numărătoare separate de 8 bit ca în fig.4.3.
TL0 foloseşte biţii C/~T, GATE, TR0, ~INT0 şi TF0. TH0 funcţionează ca
timer şi utilizează biţii TR1 şi TF1 de la T1.
Fig.4.3. Structura T0 în modul de lucru 3

Regiştri cu funcţii speciale (SFR) pentru T0 şi T1.

SFR pentru T0 şi T1 sunt TMOD şi TCON. Ei au următoarea configuraţie:

TMOD
pentru timer T1 pentru timer T0
GATE C/T M1 M0 GATE C/T M1 M0
MSB LSB

primii patru biţi se refera la T0 iar următorii patru se referă la T1.

GATE - daca GATE=1 si bitul de control TRx = 1, Tx este validat doar


daca pinul /INTx=1 ( control hard ); daca GATE =0 numaratorul este
validat doar daca TRx=1 ( control soft)
C/~T\ - “0” - Tx functionează ca timer,
“1”- Tx funcţionează ca numarator;
M1 M0 - modul de operare;
0 0 - Modul 0
0 1 - Modul 1
1 0 - Modul 2
1 1 – Modul 3
TCON
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

TF1 - setat hard la depasire T1 ; resetat hard la saltul in rutina de


tratare intrerupere
TR1 - setat/resetat prin program pentru a porni/opri pe T1
TF0 - setat hard la depasire T0 ; resetat hard la saltul in rutina de
tratare intrerupere
TR0 - setat/resetat prin program pentru a porni/opri pe T0
IE1 - setat hard la detectie intrerupere externa 1; resetat hard cind
intreruperea este tratata
IT1 - setat/resetat prin program pentru a stabili semnalul activ la INT1:
front negativ/nivel “0”
IE0 - setat hard la detectie intrerupere externa 0 ; resetat hard cind
intreruperea este tratata
IT0 - setat/resetat prin program pentru a stabili semnalul activ la INT0:
front negativ/nivel “0”

Timer T2

Timer-ul T2 este un numărător pe 16 bit (TMH2 şi TML2) care poate


număra impulsuri de ceas (când este configurat ca Timer) sau semnale
externe de la pinul T2 (când este configurat ca numărător), printr-un
circuit divizor programabil cu 1, 2, 4 sau 8.
Timer-ul T2 poate fi doar citit, nu poate fi înscris, iar resetarea se poate
face de la semnalul RESET extern sau de la semnalul RT2 extern (dacă
acesta este validat prin bitul TM2ER din TM2CON). Oprirea se face din
registrul TM2CON biţii T2MS1 T2MS0.
La depăşire (Overflow) pe 8 sau 16 bit, se poate genera, dacă este
validată, o cerere de întrerupere. Adresa rutinei de tratare a întreruperii
este aceeaşi, selecţia tipului de întrerupere (pe 8 sau 16 bit) se face din
TM2CON, cu biţii T2IS0 respectiv T2IS1. La întrerupere, se mai setează
două fanioane, ce trebuie resetate prin software, T2B0 şi T2OV din
TM2CON respectiv T2IR. Setarea întreruperii se face din registrul de
întreruperi IEN1 bit 7.

Registrul de control a Timerului T2, TM2CON:


TM2CON
T2IS1 T2IS0 T2ER T2BO T2P1 T2P0 T2MS1 T2MS0

T2IS1 - valideaza generare întrerupere la depăşire capacitate T2 ( pe 16


biti )
T2IS0 - valideaza generare întrerupere la depăşire capacitate T2 ( pe 8
biti - octetul inferior )
T2ER - validare reset extern pentru T2;
T2B0 - fanion intrerupere depăşire capacitate T2, pe octet;
T2P1 T2P0 - stabilesc conţinutul registrului de divizare;
0 0 - factor de divizare 1 1 0 - factor de divizare 4
0 1 - factor de divizare 2 1 1 - factor de divizare 8
T2MS1 T2MS0 - selectare mod de lucru pentru T2;
0 0 - T2 este oprit; 1 0 mod test ( nu se foloseşte)
0 1 - se foloseste tact intern 1 1 semnalul de tact este extern la pinul T2.
Structura timerului T2 este prezentată în fig.4.4.

Fig.4.4. Structura timerului T2


Logica de capturare la Timerul T2

Timerul T2 este conectat la 4 regiştri de capturare, CT0, CT1, CT2, CT3.


Aceşti regiştri sunt încărcaţi cu conţinutul timerului T2 (TMH2 şi TML2)
atunci când microcontrolerul primeşte semnalele externe CT0I, CT1I,
CT2I, respectiv CT3I pe front pozitiv sau negativ. În momentul capturii,
se setează fanioane (flag) din TM2IR şi se poate genera de asemenea şi
întrerupere.
Registrul care configurează T2 pentru procesul de capturare este
CTCON:

CTCON
CTN3 CTP3 CTN2 CTP2 CTN1 CTP1 CTN0 CTP0

CTN3 - capturare pe frontul negativ (pentru CT3I)


CTP3 - capturare pe frontul pozitiv (pentru CT3I)
CTN2 - capturare pe frontul negativ (pentru CT2I)
CTP2 - capturare pe frontul pozitiv (pentru CT2I)
CTN1 - capturare pe frontul negativ (pentru CT1I)
CTP1 - capturare pe frontul pozitiv (pentru CT1I)
CTN0 - capturare pe frontul negativ (pentru CT0I)
CTP0 - capturare pe frontul pozitiv (pentru CT0I)

Registrul fanioanelor de întrerupere este TM2IR:

TM2IR
T20V CMI2 CMI1 CMI0 CTI3 CTI2 CTI1 CTI0

T20V - fanion de întrerupere la depăşire pe 16 biti


CMI2 - fanion de întrerupere corespunzător lui CM2
CMI1 - fanion de întrerupere corespunzător lui CM1
CMI0 - fanion de intrerupere corespunzător lui CM0
CTI3 - fanion de întrerupere corespunzător lui CT3
CTI2 - fanion de întrerupere corespunzător lui CT2
CTI1 - fanion de întrerupere corespunzător lui CT1
CTI0 - fanion de întrerupere corespunzător lui CT0

Structura T2 în regim de captură este prezentată în fig.4.5


Fig.4.5. T2 în regim de captură

Exemplu de utilizare a facilităţii de capturare a T2


Dacă se doreşte măsurarea lăţimii unui impuls Tx, acesta este adus la
una dintre intrările de captură (de ex. CT0I). Registrul este setat să
captureze atât pe frontul pozitiv, cât şi pe cel negativ. Se setează şi
întrerupere.
Cînd apare primul front al semnalului, registrul de captură CT0 se
încarcă cu valoarea curentă a timerului T2 şi se generează un semnal de
întrerupere. În rutina de tratare a întreruperii, valoarea din CT0 se
salvează într-o variabilă N1. La apariţia celui de-al doilea front, din nou
conţinutul lui T2 este capturat în CT0, iar în rutina de tratare a
întreruperii se salvează şi această valoare în N2. Prin diferenţa cu
valoarea anterioară se determină durata impulsului. Trebuie să se ţină
seama şi de eventuala depăşire pe 16 bit a T2, contorizată de variabila k.
În acest caz durata impulsului este :

Tx=N2+k*65535-N1.
Logica de comparare la Timerul T2

La fiecare incrementare a T2, conţinutul a trei regiştri CM0, CM1 şi CM2


este comparat cu noua valoare a T2. Când se sesizează o coincidenţă
(match), se setează fanionul corespunzător din TM2IR, se modifică biţii
portului 4 de ieşire conform setării regiştrilor STE şi RTE, şi se poate de
aemenea genera întrerupere dacă este setată această opţiune.

STE
TG47 TG46 SP45 SP44 SP43 SP42 SP41 SP40

TG47- fanion, daca este “1”, P4.7 este setat la urmatoarea comutare;
daca este “0”, P4.7 este resetat la urmatoarea comutare
TG46- fanion, daca este “1”, P4.6 este setat la urmatoarea comutare;
daca este “0”, P4.6 este resetat la urmatoarea comutare
SP45 - dacă este setat "1", P4.5 este setat dacă CM0 si T2 coincid
SP44 - dacă este setat "1", P4.4 este setat dacă CM0 si T2 coincid
SP43 - dacă este setat "1", P4.3 este setat dacă CM0 si T2 coincid
SP42 - dacă este setat "1", P4.2 este setat dacă CM0 si T2 coincid
SP41 - dacă este setat "1", P4.1 este setat dacă CM0 si T2 coincid
SP40 - dacă este setat "1", P4.0 este setat dacă CM0 si T2 coincid
Daca STE.i sunt “0”, atunci P4.i nu este afectat de coincidenta CM0 si
T2 ( i = 0, 1, 2, 3, 4, 5 )

RTE

TP47 TP46 RP45 RP44 RP43 RP42 RP41 RP40

TP47 - dacă este setat "1", P4.7 basculează (toggle) dacă CM2 si T2
coincid
TP46 - dacă este setat "1", P4.6 basculează (toggle) dacă CM2 si T2
coincid
RP45 - dacă este setat "1", P4.5 este resetat dacă CM1 si T2 coincid
RP44 - dacă este setat "1", P4.4 este resetat dacă CM1 si T2 coincid
RP43 - dacă este setat "1", P4.3 este resetat dacă CM1 si T2 coincid
RP42 - dacă este setat "1", P4.2 este resetat dacă CM1 si T2 coincid
RP41 - dacă este setat "1", P4.1 este resetat dacă CM1 si T2 coincid
RP40 - dacă este setat "1", P4.0 este resetat dacă CM1 si T2 coincid
Daca RTE.i este “0”, atunci P4.i nu este afectat de coincidenţa CM1 si T2
sau CM2 si T2

Structura T2 în regim de compăarare este prezentată în fig.4.6.


Fig.4.6. Structura T2 în regim de comparare

Setarea întreruperilor pentru timerul T2

Regiştri care permit selectarea întreruperilor sunt IEN0 şi IEN1. Bitul EA


validează posibilitatea de a selecta o întrerupere. Dacă este pe “0”, toate
întreruperile sunt invalidate. Dacă bitul EN este pe 1, fiecare întrerupere
poate fi selectată individual.

IEN0

EA EAD ES1 ES0 ET1 EX1 ET0 EX0


EA - setat valideaza generarea de intreruperi, iar resetat invalideaza toate
intreruperile
EAD - setat validează întreruperea de la ADC
ES1 - setat validează întreruperea de la interfata I2C
ES0 - setat validează întreruperea de la interfata UART
ET1 - setat validează întreruperea de la Timer T1
EX1 - setat validează întreruperea externa 1
ET0 - setat validează întreruperea de la Timer 0
EX0 - setat validează întreruperea externa 0
IEN1
ET2 ECM2 ECM1 ECM0 ECT3 EXT2 ECT1 ECT0

ET2 - valideaza întreruperea data de depasirea capacitatii lui T2


ECM2 - validează întreruperea de la comparatorul 2 al T2
ECM1 - validează întreruperea de la comparatorul 1 al T2
ECM0 - validează întreruperea de la comparatorul 0 al T2
ECT3 - validează întreruperea de capturare 3 de la T2
ECT2 - validează întreruperea de capturare 2 de la T2
ECT1 - validează întreruperea de capturare 1 de la T2
ECT0 - validează întreruperea de capturare 0 de la T2

Fiecare întrerupere are o adresă fixă a rutinei de tratare a ei, conform


tabelului.

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