TMR0 TIMER0
En rojo aparecen las instrucciones en MikroBasic.
Timer mode
Para poner el timer TMR0
en modo temporizador hay que poner a 0 el bit 5 del registro OPTION
(T0CS) T0CS_bit=0
Counter mode
Para poner el timer TMR0 en modo contador hay que poner a 1 el bit 5 del registro OPTION (T0CS) T0CS_bit=1
El contador aumentara la cuenta de TMR0 cada vez que detecte
un flanco en el pin 3 (RA4/T0CKl). Podemos seleccionar el tipo de flanco
actuando sobre el bit 4 del registro OPTION (T0SE) T0SE_bit=0
para ascendente y T0SE_bit=1 para descendente.
Para usar un reloj externo en el uso de los flancos a través
del pin 3, debemos realizar la sincronización descrita en el datasheet pag.27,
aptdo 6.2.1.
Interrupciones
Cuando el contador llega a 256 se reinicia pasando a 0 y
hace que el bit de interrupción del TMR0 (T0IF) se ponga a 1. Esto detiene el
timer. Para habilitarlo otra vez, hay que poner el bit T0IF a 0 T0IF_bit=0.
Para deshabilitar la interrupción para que el contador no pare, hay que
poner a 0 el bit 5 del registro INTCON (T0IE) T0IE_bit=0
Prescaler
Sobre el timer TMR0 actúa el prescaler (compartido con el
Wacht Dog Timer). Para asignarlo a TMR0 pondremos a 0 el bit 3 del registro
OPTION (PSA) PSA_bit=0
Para seleccionar el divisor del prescaler escribiremos los
bits PS0, PS1 y PS2 según el valor de la siguiente tabla:
Bit Value TMR0 Rate WDT Rate
000
|
½
|
1/1
|
001
|
¼
|
½
|
010
|
1/8
|
¼
|
011
|
1/16
|
1/8
|
100
|
1/32
|
1/16
|
101
|
1/64
|
1/32
|
110
|
1/128
|
1/64
|
111
|
1/256
|
1/128
|
NOTA:
GIE: Global Interrupt Enable bit INTCON<7> GIE_bit
1 = Enables all un-masked interrupts
0 = Disables all interrupts
Ejemplo:
Habilitar TMR0 en modo temporizador infinito contando lo más lento posible
GIE_bit=0 ‘Deshabilita todas las intrerrupciones del
pic’
T0CS_bit=0 ‘Ponemos el TMR0 en modo
temporizador’
PSA_bit=0 ‘Asignamos el prescaler a TMR0 en
vez de a el WDT’
PS0_bit=1 ‘El divisor del prescaler sera de
1/256, para ello
PS1_bit=1 ponemos el valor 111 a los bits
PS0, PS1 y PS2’
PS2_bit=1