You are on page 1of 18

PIC16F84

TIMER 0

Timer TMR0
Contador

ascendente de 8 bits, cuya cuenta se encuentra almacenada en un registro SFR (0x01)

Timer TMR0
Una

vez que se ha llegado a la cuenta mxima, el timer se desborda (00000000) y se pone a 1 el bit T0IF del registro INTCON (0x0B)

Timer TMR0
Su

funcionamiento depende de como se configure el bit T0CS del registro OPTION


T0CS = 1: contador T0CS = 0 temporizador

TMR0 como contador


Una

de las funciones corresponde a un contador. En este caso el timer cuenta los pulsos que se introducen a travs del pin RA4/T0CK1 El canto de cuenta (subida o bajada) se configura a travs del bit T0SE
T0SE = 1, canto descendente T0SE = 0, canto ascendente

TMR0 como temporizador


Como

temporizador, el timer cuenta los impulsos provenientes de Fosc/4. Se utiliza para determinar intervalos de tiempos. Los impulsos tienen una duracin de 1 ciclo de mquina (4 ciclos de reloj) Si el cristal es de 4MHz, el timer incrementa su cuenta cada 1s.

TMR0 como temporizador


En

este caso el contador debe ser cargado con el valor de los impulsos que se desean contar restados de 256 (valor de desbordamiento)
Ej. Si se quiere contar 20 impulsos, el TMR0 debe ser cargado con un 256 20 236

TMR0 esquema

TMR0 Registro OPTION


Direccin

0x01 (bco 1)
PS2 PS1 PS0 Divisor TMR0 1:2 1:4 1:8 1:16 1:32 1:64 1:128 1:256 Divisor WDT 1:1 1:2 1:4 1:8 1:16 1:32 1:64 1:128

PS2:PS0: 000 Bits seleccin del 001 010 divisor de frecuencia. 011
100 101 110 111

TMR0 Registro OPTION


Direccin

0x01 (bco 1)

PSA: Asignacin del divisor de frecuencia


0: se asigna al TMR0 1: se asigna al Watchdog

T0SE: Seleccin canto de la seal de entrada del TMR0


0: ascendente de la seal del pin RA4/T0CK1

TMR0 Registro OPTION


Direccin

0x01 (bco 1)

T0CS: Selecciona la fuente de la seal del TMR0


0: pulso de reloj interno Fosc/4 (temporizador) 1: pulso introducido a travs del pin RA4/T0CK1 (contador)

TMR0 Registro INTCON


Direccin

0x0B

T0IF: flag de interrupcin del timer 0.


T0IF = 0: no se ha desbordado T0IF = 1: se ha desbordado (debe borrarse por software)

TMR0 temporizador
Para

definir el nmero de cuentas que debe realizar el timer, se utiliza la siguiente ecuacin:

Temp = TCM * DivFrec * (256 TMR0) Donde:


Temp: tiempo del temporizador TCM: ciclo de instruccin (1s) DivFrec: rango divisor de frecuencia

TMR0 temporizador
Ej:

se quiere un tiempo de 500s

Temp = TCM * DivFrec * (256 TMR0) 500 = 1 * 2 * (256 TMR0) TMR0 = 6 Utilizando un divisor de frecuencia en 2 OBS: Para periodos exactos se debe considerar los tiempos de

TMR0 temporizador
Ej.

Subrutina de retardo con TMR0 (200ms)


Clculo de TMR0:

50m = 1u * 256 * (256-TMR0) TMR0 = 61

TMR0 temporizador
SETP bsf EST,5 clrf PB movlw 0x07 ; b'00000111 movwf TMR0 ; w => OPTION bcf EST,5 movlw 0xff movwf PB call RETARDO clrf PB call RETARDO goto INICIO

INICIO

TMR0 temporizador
RETARDO movlw 0x3d ; d'61 movwf TMR0 ; d'61 ==> TMR0 btfss INTCON,2 goto DESB return

DESB

OBS.: se debe preguntar por programa si se ha desbordado el TMR0

TMR0 temporizador
Ej:

Realice un programa que entregue por el puerto B, una seal cuadrada de 500s en alto y 300s en bajo.

You might also like