Vous êtes sur la page 1sur 5

2013

[TIMER 0
MICROELECTRONICA]
Centro de Estudios Cientficos y Tecnolgicos N3 Estanislao Ramrez Ruz
Garca Romero Darwin Arath
Velzquez Mercado Alejandro
Santiago Meja Ulises Abraham
Delavega Buenabad Jos Rubn
Romero Portillo Josu Uziel

Timer 0

El Timer 0 es un mdulo temporizador/contador de 8 bits que cuenta con un preescalador
programable tambin de 8 bits. Puede funcionar como temporizador o como contador. En
modo temporizador el valor del registro TMR0 se incrementa con cada ciclo de instruccin (o cada X
ciclos dependiendo del preescalador). En modo contador el valor del registro TMR0 se incrementa
en cada flanco (ascendente o descendente) del pin RA4/T0CKI. En ambos casos al desbordarse
(pasar de 0xFF a 0x0) el registro TMR0 la bandera de interrupcin del timer 0 (bit T0IF del registro
INTCON) se pone a 1.

El modo temporizador se selecciona poniendo a cero el bit T0CS del registro OPTION. Poniendo a
uno ese bit el modulo trabaja en modo
contador, en este modo de operacin adems se debe seleccionar si el incremento se producir en
cada filo ascendente o descendente, al poner a cero el bit T0SE del registro OPTION se selecciona
el filo ascendente.

El preescalador es compartido por el Timer 0 y por el Watchdog. Se asigna a un mdulo o a otro
mediante el bit PSA del registro OPTION. Poniendo el bit a 1 el preescalador se asigna
al Watchdog y ponindolo a 0 el preescalador se asigna al Timer 0. El valor del preescalador se
selecciona con los bits PS2:PS0 de la siguiente manera:

PS2:P20 TMR0 WDT
000 1:2 1:1
001 1:4 1:2
010 1:8 1:4
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

Carga y temporizacin

En modo temporizador el Timer 0 incrementa su cuenta en cada ciclo de instruccin. Este modo
sirve para generar temporizaciones y bases de tiempo de la misma forma que los retardos por
software, sin embargo las temporizaciones con el Timer 0 pueden ser ms exactas y adems se
cuenta con la ventaja de que el mdulo puede trabajar mediante interrupciones as que el programa
puede ejecutar otras instrucciones mientras se realiza la temporizacin.

La temporizacin que se puede obtener con este mdulo se obtiene de la siguiente relacin:

Temporizacin = [(256 - precarga)*PS+2]*Tinstruccion

Donde:
precarga = Valor que se le asigna al registro TMR0 al comenzar la temporizacin
PS = Preescalador. Si est asignado al watchdog tomar el valor de 1
Tinstruccin = 4/frecuencia de oscilacin
y la temporizacin est dada en segundos.

La temporizacin mxima utilizando el oscilador interno del pic 16f628 es:

Temp.max. = [(256 - 0)*256+2]*1uS = 65528uS

De modo que la temporizacin mxima que se puede tener con el es solamente de65.538mS. Si se
desea obtener una temporizacin distinta solo se debe escribir en el registro TMR0 el valor de
la precarga necesaria.

precarga = -[([Temporizacion/(4/fosc)]-2)/PS]+256

Donde, de nuevo, la temporizacin est dada en segundos.

Veamos un ejemplo de aplicacin: Se desea complementar el valor del puerto B cada 50mS. Se
estar revisando que se haya cumplido el tiempo de la temporizacin checando la bandera T0IF.
Utilizando la expresin de la precarga y utilizando el preescalador ms grande (256) obtenemos el
valor que necesitamos cargar al registro TMR0 para obtener una temporizacin de 50mS.

Precarga = -[([50mS/(4/4Mhz)]-2)/256]+256 = 60.69 60

Ya que no podemos cargar nmeros fraccionarios el valor de precarga necesario es 60. Teniendo
entonces el valor de la precarga el cdigo del programa sera el siguiente:
INICIO
bsf STATUS,RP0
clrf TRISB
movlw b'00000111'
movwf OPTION_REG
bcf STATUS,RP0
clrf PORTB
bcf INTCON,T0IF
PRECARGA
movlw .60
movwf TMR0
ESPERA
btfss INTCON,T0IF
goto ESPERA
bcf INTCON,T0IF
comf PORTB,f
goto PRECARGA
La configuracin del Timer 0 se realiza mediante las lneas "movlw b'00000111'" y "movwf
OPTION_REG". Mediante estas lineas se configura el timer en modo temporizador (T0CS = 0), el
preescalador se asigna al timer 0 (PSA = 0) y se selecciona el preescalador mximo (PS2:PS0 =
111). Una vez configurado el timer 0 se limpia el puerto B y la banderaT0IF. Posteriormente se
realiza la precarga cargando un 60 al registro TMR0 y en ese momento la temporizacin comienza.

Para saber si la temporizacin termin se est revisando la bandera T0IF. Mientras esta sea 0 la
temporizacin an no habr terminado, cuando la bandera es 1 entonces la temporizacin 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.
Uso del Timer0 como contador con clock externo
Cuando una entrada de reloj externa se utiliza para Timer0, se deben resolver ciertos requisitos.
Debido a la sincronizacin de la fase interna del reloj (TOSC). Tambin, hay retraso en el incremento
real de Timer0 despus de la sincronizacin.
Timer0 Prescaler (divisor programable)
Un contador de 8 bit es habilitado como prescaler para el mdulo Timer0 Est disponible como
prescaler para el mdulo Timer0, o como postscaler para el TIMER del WATCHDOG (perro
guardin). Una asignacin del prescaler para el mdulo Timer0 significa que no hay postscaler para
el contador de tiempo del perro guardin, y viceversa. Los pines PSA y PS2:PS0 (OPTION<3:0>)
determinan la asignacin y el cociente del prescaler. Cuando estn asignadas al mdulo Timer0,
todas las instrucciones que escriben al TMR0 se deben colocar, (e.g., CLRF 1, MOVWF 1, BSF 1,
x....etc.) llevando a cero el prescaler. Cuando est asignada a WDT, una instruccin de CLRWDT,
llevara a cero el prescaler, junto con el contador de tiempo del perro guardin, en ese caso el
prescaler no es legible ni escriturable.

Nota: TOSE, TOCS, PSA, PSO-PS2 son los bits en el registro Option

Vous aimerez peut-être aussi