Vous êtes sur la page 1sur 3

EL Timer 0

Microcontroladores PIC I

Temporizador Timer 0 En modo contador el valor del registro


TMR0 se incrementa en cada flanco
(ascendente o descendente) del pin
El Timer 0 es un modulo temporizador RA4/T0CKI.
/contador de 8 bits que cuenta con un
preescalador programable también de 8 En ambos casos al desbordarse (pasar de
bits. Puede funcionar como temporizador o 0xFF a 0×0) el registro TMR0 la bandera de
como contador. interrupción del timer 0 (bit T0IF del
registro INTCON) se pone a 1.
El Modulo TMR0 tiene las siguientes
características:

- Contador / temporizador de 8 bits


- Registro de lectura y escritura Esta interrupción puede ser deshabilitada
- Circuito predivisor o prescaler al poner a cero el bit5 (T0IE ) del registro
- Selección de clock interno INTCON. El bit T0IF debe ser borrado por
(temporizador) o externo por software
RA4/T0CKI (contador)
- Interrupción por desborde de FFh a 00h El modo temporizador se selecciona
- Selección de flanco para el clock externo poniendo a cero el bit T0CS del registro
OPTION.

Poniendo a uno ese bit el modulo trabaja en


modo contador, en este modo de operación
además se debe seleccionar si el incremento
se producirá en cada flanco ascendente o
descendente.

Al poner a cero el bit T0SE del registro


OPTION se selecciona el flanco ascendente.

En modo temporizador el valor del registro


TMR0 se incrementa con cada ciclo de
instrucción (o cada X ciclos dependiendo del El preescalador es compartido por el Timer
preescalador). 0 y por el Watchdog. Se asigna a un módulo
o a otro mediante el bit PSA del registro
OPTION.

Poniendo el bit a 1 el preescalador se asigna


al Watchdog y poniendolo a 0 el
preescalador se asigna al Timer 0.

Manuel Alvarado Baldeón -1-


EL Timer 0

Microcontroladores PIC I

El valor del preescalador se selecciona con


los bits PS2:PS0 de la siguiente manera: La temporización máxima utilizando el
oscilador interno del pic 16f628 es:

Temp.max. = ( (256 - 0)256 + 2 )1µ s


Temp.max. = 65528µ s

De modo que la temporizacion máxima que


se puede tener con el es solamente de
65.538mS. Si se desea obtener una
temporizacion distinta solo se debe escribir
en el registro TMR0 el valor de la precarga
necesaria.

Temporizacion
CARGA Y TEMPORIZACIÓN −2
4 fosc
precarga = − + 256
En modo temporizador el Timer 0 PS
incrementa su cuenta en cada ciclo de
instrucción. Este modo sirve para generar Donde, de nuevo, la temporización está
temporizaciones y bases de tiempo de la dada en segundos.
misma forma que los retardos por software, Veamos un ejemplo de aplicación: Se desea
sin embargo las temporizaciones con el complementar el valor del puerto B cada
Timer 0 pueden ser más exactas y además 50mS. Se estará revisando que se haya
se cuenta con la ventaja de que el módulo cumplido el tiempo de la temporización
puede trabajar mediante interrupciones así checando la bandera T0IF. Utilizando la
que el programa puede ejecutar otras expresión de la precarga y utilizando el
instrucciones mientras se realiza la preescalador más grande (256) obtenemos
temporización. el valor que necesitamos cargar al registro
TMR0 para obtener una temporización de
La temporización que se puede obtener con 50mS.
este módulo se obtiene de la siguiente
relación: 50mS
−2
(4 4 Mhz )
precarga = − + 256 = 60.69 ≈ 60
Temporización = ( 256 − precarga ) ⋅ PS + 2  ⋅ TInstrucción 256

Donde: Ya que no podemos cargar números


Precarga = Valor que se le asigna al fraccionarios el valor de precarga necesario
registro TMR0 al comenzar la es 60. Teniendo entonces el valor de la
temporización precarga el código del programa sería el
siguiente:
PS = Preescalador. Si esta asignado al
watchdog tomará el valor de 1

4
TInstrucción =
f ocs
Y la temporización está dada en segundos.

Manuel Alvarado Baldeón -2-


EL Timer 0

Microcontroladores PIC I

La configuración del Timer 0 se realiza


mediante las líneas “movlw b’00000111′”
y “movwf OPTION_REG“. Mediante estas
líneas se configura el timer en modo
temporizador (T0CS = 0), el preescalador se
asigna al timer 0 (PSA = 0) y se selecciona
el preescalador máximo (PS2:PS0 = 111).
Una vez configurado el timer 0 se limpia el
puerto B (PORTB) y la bandera T0IF.
Posteriormente se realiza la precarga
cargando un 60 al registro TMR0 y en ese
momento la temporización comienza.

Para saber si la temporización terminó se


está revisando la bandera T0IF. Mientras
esta sea 0 la temporización aún no habrá
terminado, cuando la bandera es 1 entonces
la temporización finalizó, se borra la
bandera, se complementa el puerto B y se
vuelve a realizar la precarga. De este modo
el programa está complementado el puerto
B cada 50mS.

Manuel Alvarado Baldeón -3-

Vous aimerez peut-être aussi