ATMega8 Timer0 használata
A Timer0 lényegében egy speciális regiszter. Ennek a regiszternek van egy különleges tulajdonsága: működése a CPU-tól független, és az értéke automatikusan nő egy általunk megadott ütemben. Ezért pontos időmérésre, időzitésre használhatjuk. (A timereket sokkal több dologra lehet használni, nemcsak időzítésre. Ezért nem fogom minden regiszter összes bitjének a feladatát elmagyarázni, csak amelyeket most használni fogok, a többi megtalálható az adatlapon.)
A 8 bites Timer0 szolgáltatásai:
- egycsatornás számláló
- frekvencia generátor
- külső esemény számláló
Minden timernek speciális regiszterei vannak, ami a beállításait tartalmazza. A Timer0 használatához csak négy regisztert kell beállítanunk: TCCR0, TCNT0, TIFR és TIMSK.
TCCR0 Regiszter
A Timer0-t a TCCR0 regiszter CS00-CS02 bitjeivel lehet be és kikapcsolni, illetve ezekkel a bitekkel lehet a timer előosztását is kiválasztani. Az előosztás mértékének megadásával tudunk a CPU órajeléből különböző frekvenciájú bemenő órajelet előállítani a timernek. Mint tudjuk a CPU-nak az oszcillátor szolgáltat órajelet (a mi esetünkben ez egy 7,3728MHz-es külső kristály oszcillátor) Az előosztó az órajelfrekvenciát egy általunk megadott értékkel elosztja, ezáltal szabályozza a Timer lépéseit, hogy milyen sebességgel számoljon 0 és 255 között. Az előosztás értéke a Timer0 esetén 1, 8, 64, 256 és 1024 lehet (FCPU/1, FCPU/8, FCPU/64, FCPU/256, FCPU/1024).
TCNT0 Regiszter
TCNT0 a 8 bites Timer0 számláló regisztere, ami közvetlenül írható/olvasható:
TIFR Regiszter
A számláló (TCNT0 regiszter) túlcsordulásakor a TIFR regiszter TOV0 jelzőbitjének az állapota 1 lesz.
TIMSK Regiszter
A TIMSK regiszter TOIE0 bitjével lehet engedélyezni(1)/tiltani(0) a számláló (TCNT0 regiszter) túlcsordulásához tartozó megszakításkérést. Engedélyezés esetén a kiváltott megszakítás neve: TIMER0_OVF_vect
Az ATmega8 Timer0 perifériájának aktiválásához a TCCR0 regiszter megfelelő bitjeinek beállításával engedélyezni kell, hogy a Timer számlálóját (a TCNT0 regisztert ) egy a T0 lábon keresztül érkező külső jel, vagy a Timer előosztóján keresztül a belső rendszerórajel meghajtsa. Ekkor a TCNT0 elkezd 0-tól számlálni egyesével felfelé (a Timer0 számláló regisztere csak felfelé tud számolni), amíg el nem éri a maximális értéket, ami a Timer0 esetén adott, nem változtatható (MAX=255). A számláló 255 után túlcsordul és lenullázódik, majd utána ismét újraindul a számlálás 0-tól.
Amikor a számláló 255 után túlcsordul, a TIFR regiszter küld egy megszakításkérelmet a TOV0 jelzőbit értékének logikai 1-re állításával. Ha a TIMSK regiszterben a TOIE0 bit értéke 1, és az SREG regiszterben lévő I általános megszakítás engedélyező bit értéke is 1 (az általános megszakítások is engedélyezve vannak), akkor a mikrovezérlő végrehajtja a megszakításhoz tartozó ISR rutint. Amikor a mikrovezérlő végrehajtotta az ISR-t, automatikusan törli (nullázza) a TIFR regiszter TOV0 jelzőbitjét és a TCNT0 regiszter újra számolni kezd 0-tól felfelé. A TOV0 jelzőbit úgy viselkedik mintha a számláló regiszter 9.-ik bit-je lenne. Értéket kaphat, de automatikusan csak akkor törlődik (nullázódik), ha a Timer0-hoz tartozó túlcsordulás megszakítás is be van kapcsolva. Ha a megszakítás nincs bekapcsolva, akkor a TOV0 jelzőbit-et a számláló túlcsordulása után a programunkon belül nekünk kell majd törölnünk. Ha a számlálót nem 0-ról akarjuk indítani, akkor a TCNT0 regiszterbe bármikor írhatunk új értéket, a számláló onnan kezdi a számlálást.
A Timer0 működését az alábbi ábra szemlélteti (a piros keretben lévő részek csak akkor aktívak ha a Timer0 túlcsordulásához tartozó megszakítás és az általános megszakítások is engedélyezve vannak):
A cikk még nem ért véget, lapozz!
Értékeléshez bejelentkezés szükséges!