Sunteți pe pagina 1din 4

Utiliza

area tim
merelor
Timerull/Counterul, dup cum i spune i numele ofer facilitateea de a msuura intervalee fixe de
timp i de a generaa ntreruperii la expirareea intervaluului msuratt. Un timer,, odat iniializat va
dent de unittatea centralla (core P)). Acest luccru permite eliminarea buclelor
functionna independ
de delayy din prograamul princippal.
Fizic, tiimerul 0 al
a microconntrolerului PIC16F917
P
este un reegistru a crui
c
valoarre crete
continuuu pn la 2555. Dup fiiecare numrtoare pnn la 255, tiimerul i reeseteaz valloarea la
zero i ncepe

cu unn nou ciclu de contorizzare pn laa 255. n tim


mpul fiecreei tranziii de
d la 255
la zero, bitul T0IF n registruul INTCON este setat. n afar dee ceasul osccilator internn, starea
s creasc prin
p ceasul extern
e
la pinnul T0CKI (v.
( fig. 1). Alegerea
A
timeruluui poate de asemenea s
uneia ddin aceste dou opiuuni se face n registruul OPTION
N_REG priin bitul T00CS. De
asemeneea este posiibil s se deefineasc fro
ontul semnaalului (crescctor sau deescresctor)), la care
timerul s-i creascc valoarea.

Fig. 1 Diaagrama blocck a TMR0


Prescaleerul/divizorrul are rolul de a dividee ceasul osccilatorului nainte

de a ajunge la logica
l
ce
crete starea
s
timerrului. Num
mrul ce div
vide un ceaas este deffinit prin trrei bii n registrul
OPTION
N_REG. Ceel mai maree divizor esste 128. Acceasta nseam
mn de fappt c doar laa fiecare
128-lea tact de ceeas,valoareaa timerului va crete cu
c unu. Aceasta ne d posibilitattea de a
l
msura perioade dee timp mai lungi.
n contiinuare se voor prezenta registrii
r
miccrocontrolerului PIC166F917 utilizzai pentru controlul
c
timeruluui 0. Pentruu fiecare reggistru se vor descrie dooar bii caree sunt utilizzai pentru controlul
c
timeruluui.
OPTIO
ON_REG
Bit 7
CS
T0C

T0SE

PSA

P
PS2

PS1

Bit 0
PS0

T0CS Sursa semn


nalului de taact pentru TMR0
T
1 oscilatoor extern priin intermediiul pinului T0CKI
T
0 oscilatoor intern (!! n acest sittuaie frecveena ceasuluui este divizzat automaat la 4)
T0SE Selactarea tipului de front
f
1 incremeentare pe froontul descreesctor al seemnalului de tact
0 incremeentare pe froontul cresctor al semnnalului de taact

PSA Alocarea circuitului de prescalare


1 circuitul de prescalare nu este utilizat
0 circuitul de prescalare este utilizat
PS<2:0> Rata de divizare a circuitului de prescalare
PS2 PS1 PS0 Rata de divizare
0
0
0
1:1
0
0
1
1:2
0
1
0
1:4
0
1
1
1:8
1
0
0
1:16
1
0
1
1:32
1
1
0
1:64
1
1
1
1:128
INTCON
Bit 7
GIE*
PEIE*
* vezi laboratorul trecut

Bit 0
T0IE

T0IF

T0IE Controlul ntreuperii TMR0


1 permite lansarea intreruperii
0 nu permite lansarea intreruperii
T0IF Flagul ntreruperii TMR0
1 registrul TMR0 a fost depit
0 registrul TMR0 nu a fost deposit
TMR0
Registrul de 8 bii care se incrementeaz.
Exemplu de aplicaie pentru TMR0
S se realizeze un program pentru microcontrolerul PIC16F917 care la fiecare 20mS va
incrementa cu o unitate variabila i declarant global. Se va considera c microcontrolerul
utilizeaz un oscilator intern de 1Mhz.
Soluie:
Avnd n vedere c la fiecare 20ms timerul trebuie s porneasc ntreruperea rezult c
frecvena de apariie a ntreruperii este:
f dorit

1
1

50Hz .
20mS 20 10 3 S

n continuare trebuie configurat timerul n aa fel nct s transforme semnanlul de ceas al


microcontrolerului (cu frecvena de 1MHz) ntr-un semnal cu frecvena de 50Hz.
Frecvena semnalului de intrare n timer este:
fi

1MHz
0,25MHz .
4

Avnd n vedere c registrul TMR0 numra de la 0 la 255 nsemn c la fiecare 255 tacturi
primite acesta genereaz o ntrerupere. De aici rezult c registrul TMR0 mparte frecventa
semnalului primit la 256.
Pentru situaia n care semnalul de intrare n timer (cu frecvena f i ) ajunge direct la registru
TMR0 (bitul PSA=0) frecvena de apariie a ntreruperilor va fi:
f o( PSA 0)

0.25MHz
976Hz .
256

Se poate observa faptul c frecvena obinut pentru cazul n care bitul PSA=0 este mult mai
mare fa de frecvena dorit. De aici rezult ca trebuie utilizat circuitul de prescalare.
Pentru situaia n care semnalul de intrare n timer (cu frecvena f i ) trece prin circuitul de
prescalare (bitul PSA=1) i acesta este configurat s divizeze frecvena semnalului la 2
(PS<2:0>=001) ferecvena de apariie a ntreruperilor este:
0.25MHz
488Hz .
2 256

f o( PSA1; PS 2:0 001;TMR 0 0)

n continuare frecvena de ieire este mult prea mare. Pentru a gsi soluia trebuie realizat o
divizare i mai mare. n urma calculelor rezult c frecvena dorit se ncadreaz ntre:
f o( PSA1; PS 2:0 100;TMR 0 0)

0.25MHz
61Hz ;
16 256

f o( PSA 1; PS 2:0 101; TMR 0 0)

0.25MHz
30Hz .
32 256

Pentru a configura timerul s lanseze ntreruperea la 50Hz trebuie aleas situaia n care
frecvena este mai mic i trebuie modificat valoarea care se ncarc n registrul TMR0. Mai
exact impunem timerului s nu nceap numrtoarea de la 0 ci de la o valoarea mai mare.
Numarul de impulsuri de ceas care trebuie numrate pentru a obine frecvena dorit se
detemin cu ecuaia:
0.25MHz
50Hz
32 n

0.25MHz
156 .
32 50Hz

De aici result c valoarea care trebuie ncrcat n registrul TMR0 este:


TMR 0 255 156 99 .

Sructura programului:
int i=0;
Void interrupt()
{
INTCON.GIE=0;

//oprirea tuturor intreruperilor

if(INTCON.T0IF)
{
i++;
INTCON.T0IF=0;
TMR0=99;
}

//rutina de intrerupere pentru timer

INTCON.GIE=1;

//pornirea intreruperilor

}
void main()

//incrementare i;
//resetare flag
//resetare valoare initiala timer

{
OPTION_REG=0b00000101;
INTCON.T0IE=1;
INTCON.PEIE=1;
INTCON.GIE=0;
TMR0=99;

//oscillator intern; incrementare pe front


//crescator cu prescalare 1:32

//setare valoare initiala timer

While(1)
{
}
}

Pentru a intra la laborator trebuie rezolvat urmtoarea problem:


S se determine valorile registrilor TRM0 i OPTION_REG pentru ca timerul s lanseze la
fiecare 30mS ntreruperea. Se va considera c microcontrolerul are un oscillator intern de
2MHz.
Observaii:

Timp de rezolvare 10 min;


Frecventa oscilatorului, respectiv pauza ntreruperi, vor fi diferite fa de modelul
prezentat;
n timpul examinrii este permis utilizarea unui calculator de buzunar i a acestui
material (varianta printat);
Doi studeni nu pot utiliza acelai material i acelai calculator.

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