Está en la página 1de 5

P.G.F.

Temporizador Timer 0
El Timer 0 es un modulo temporizador/contador de 8 bits que cuenta con un pre escalador 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 pre escalador). 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 00) 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 flanco ascendente o descendente, al poner a cero el bit T0SE del registro OPTION se selecciona el flanco ascendente. El pre escalador 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 pre escalador se asigna al Watchdog y ponindolo a 0 el pre escalador se asigna al Timer 0.

P.G.F.

El valor del pre escalador se selecciona con los bits PS2:PS0 de la siguiente manera: PS2:P20 000 001 010 011 100 101 110 111 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]*T_Instruccin TMR0 1:2 1:4 1:8 1:16 1:32 1:64 1:128 1:256 WDT 1:1 1:2 1:4 1:8 1:16 1:32 1:64 1:128

P.G.F.

Donde: Precarga = Valor que se le asigna al registro TMR0 al comenzar la temporizacin PS = Pre escalador. Si esta asignado al watchdog tomar el valor de 1 T_Instruccin = 4/frecuencia de oscilacin y la temporizacin est dada en segundos. La temporizacin mxima utilizando el oscilador interno del pic 16f877a es: Temp.max. = [(256 - 0)*256+2]*1uS = 65528uS De modo que la temporizacion mxima que se puede tener con el es solamente de 65.538mS. Si se desea obtener una temporizacin distinta solo se debe escribir en el registro TMR0 el valor de la precarga necesaria. Precarga = -[([Temporizacin/(4/f.osc.)]-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 revisando la bandera T0IF. Utilizando la expresin de la precarga y utilizando el pre escalador 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

P.G.F.

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:
TMRO.ASM (P.G.F.) ; Programa de ejemplo para ver el funcionamiento del mdulo temporizador Timer 0. El programa complementa el puerto B cada 50ms. ; La temporizacin se lleva a cabo a travs del timer 0 funcionando en modo temporizador. ; Se utiliza un PIC 16f877A configurado para operar con un oscilador interno de 4Mhz. List p=16f877a Includep16f877a.inc _config 0x3f18 Org Goto INICIO Org bsf Clrf Movlw Movwf 0x00 INICIO 0x05 STATUS, RP0 TRISB b'00000111' OPTION_REG .60 TMR0 INTCON,T0IF ESPERA INTCON,T0IF PORTB, f ; Cambio al banco 1 ; Configuro puerto B como salida ; Configuracin del Timer 0 ; TOCS = 0 - modo temporizador ; PSA = 0 - PS asignado al timer 0 ; PS2:PS1 = 111 - PS = 256 ; Se realiza la precarga cargando 60 al registro TMR0 ; para tener una temporizacin de 50ms aprox. ; Se termino la temporizacin? ; NO vuelve a preguntar ; SI borra la bandera T0IF ; complementa el puerto B

PRECARGA movlw Movwf ESPERA btfss Goto Bcf Comf

P.G.F.

Goto end

PRECARGA

; regresa a la etiqueta PRECARGA