jueves, 4 de julio de 2013

Especificaciones del TMR0 en PIC16F628A



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