Sunteți pe pagina 1din 2

El temporizador Timer 0 en los microcontroladores PIC.

El Timer 0 es un modulo 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 poniendolo 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 000 001 010 011 100 101 110 111 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

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 isntrucciones 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 esta 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 temporizacion mxima 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. 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 numeros fraccionarios el valor de precarga necesario es 60. Teniendo entonces el valor de la precarga el cdigo del programa sera el siguiente:
INICIO bsf clrf movlw movwf bcf clrf bcf PRECARGA movlw movwf ESPERA btfss goto bcf comf goto STATUS,RP0 TRISB b'00000111' OPTION_REG STATUS,RP0 PORTB INTCON,T0IF .60 TMR0 INTCON,T0IF ESPERA INTCON,T0IF PORTB,f 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 bandera T0IF. 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. Descargar cdigo: Ejemplo del temporizador Timer 0

S-ar putea să vă placă și