MODULO TIMER 0
El módulo Titner0 es temporizador/contador con las siguientes
características:
El temporizador/contador dispone de 8 bits, puede escribirse y leerse Preescaler programable por Software de 8 bits.
Puede trabajar con el reloj interno o con una señal de reloj externa. Dispone de una interrupción por desbordamiento al pasar de FFh a 00h.
Selección de flanco ascendente o descendente para el flaco del reloj
externo.
En la Figura siguiente se muestra un diagrama de bloques del Timer0 y el
preescaler que comparte con el WDT. Puede encontrarse información adicional
sobre el módulo Timer0 en el manual de referencia de los microcontroladores de
la escala media (DS33023).
TOCS, TOSE, PSA,
PS2:PS0 (OPTION_REG<5:0>)
El modo temporizador se selecciona poniendo a cero el bit T0CS (
registro OPTION_REG <5>).
En el modo temporizador, el módulo Timer0 se incremento en cada cielo de
instrucción (sin el preescaler). Si el registro TMR0 se escribe, el incremento
se inhibe durante los siguientes dos ciclos de instrucción. EL usuario puede
trabajar teniendo en cuenta esto y ajustando el valor a cargar en el TMR0.
El modo contador se selecciona poniendo a uno el bit T0CS (registro OPTION_REG <5>). El modo contador, Timer0 se incremento en
cada flaco de subida o de bajada de la señal que le llega por RA4/TOCK1. El flanco de incremento
se determina por el bit T0SE (registro OPTION_REG <4>).
Poniéndose a cero T0SE se selecciona el flanco ascendente. El
preescaler se comparte exclusivamente entre el Timer0 y el WDT. El preescaler no es de lectura/escritura.
Interrupción del Timer0.
La interrupción de TMR0 se produce cuando el registro TMR0 se
desborda al
pasar de FFh a 00h. Este desbordamiento pone a uno el bit T0IF (INTCON<2>).
La ininterrupción puede enmascararse poniendo a cero el bit T0IE (INTCON <5>).
EL bit T0IF debe
ponerse a cero por software al finalizar la rutina de atención a la interrupción del desbordamiento de TMRO. La ininterrupción de TMRO no saca al microcontrolador del estado de SLEEP, debido a que el temporizador está desactivado durante el modo SLEEP.
Utilización del Timer0 con un Reloj Externo
Cuando no se
utiliza el preescaler, la entrada de reloj externa es igual a la salida del
preescaler. Las sincronización de TOCKI con los relojes de fase interior se
acopla, a la salida del preescaler en los ciclos Q2 y Q4 de los relojes de fase internos.
Por consiguiente, es necesario que TOCKI está a nivel alto por al menos
durante 2Tosc (y un pequeño retardo de 20ns) y a nivel bajo por lo menos 2Tosc (y
un retardo RC de 20ns).Ver las características eléctricas del dispositivo deseado.
Preescaler
Hay sólo un
preescaler disponible que es está compartido y puede asignarse indistintamente
al moduló de Timer0 y el al WDT. La asignación del preescaleral Timer0 hace
que no haya ningún preescaler para el WDT, y viceversa. Este preescaler no se
puede leer ni escribir.
El bit PSA y PS2:PS0 (OPTION_REG <3:0>)
determinan la asignación del preescaler y el rango del preescaler. Cuando se le asigna al módulo del
Tirner0, todas las instrucciones, que escriben en el registro TMR0 (por
ejemplo CLRF, TMR0, MOVWF TMR0, BSF TMR0,x... etc.) ponen a cero el
preescaler.
Cuando se le asigna al WDT, una instrucción CLRWDT limpia el preescaler junto con el temporizador del WDT. EL preescaler no se puede leer ni
escribir.
EPS2 PS1 PS0
|
Divisor(timer 0)
|
Divisor(Watchdog)
|
0 0 0
|
1/2
|
1/1
|
0 0 1
|
1/4
|
1/2
|
1/8
|
1/4
|
|
1/16
|
1/8
|
|
1/32
|
1/16
|
|
1/64
|
1/32
|
|
1/128
|
1/64
|
|
1/256
|
1/128
|
Vídeo : TIMER0
Oscilador, cuyo retardo es generado por el timer0, se usa pre escalador
Programa 1
Vídeo: TIMER0 CONTADOR
Programa 2
Este código muestra un contador de eventos externos. La cuenta se incrementa con los pulsos que entran al TIMER0, por PA4.
Disculpe profesor, no se visualiza el diagrama de bloque del Timer 0
ResponderEliminar