Ir al contenido

Timer 0

Timer0 es el primer temporizador del curso (Tema 8). Sirve para retardos precisos (sustituir bucles vacios), contar pulsos externos en RA4/T0CKI y generar interrupciones periodicas cuando desborda. Lo combinaras con Interrupciones en Practica 3 (frecuencimetro) y Practica 5.

Con cristal 20 MHz y FOSC = HS (config bits), el reloj interno del timer es Fosc/4 = 5 MHz — base de todas las formulas del Tema 8.

Timer0 puede operar en dos modos principales:

ModoT0CON.T0CSEntrada de relojUso tipico
Temporizador0Fosc/4 (interno)Retardos, parpadeo LED
Contador1Pulsos en RA4/T0CKIContar eventos externos

Escribes un valor inicial en TMR0L (y TMR0H si 16 bit). Con TMR0ON = 1, el hardware incrementa el contador cada ciclo de reloj (dividido por prescaler). Al pasar de 255 → 0 (8 bit) o 65535 → 0 (16 bit), hay overflow y TMR0IF = 1.

El prescaler ralentiza la cuenta. Valores en T0CON.PS2:PS0: 1:2, 1:4, …, 1:256. A mayor prescaler, mas tiempo hasta overflow con el mismo valor inicial.

ModoRegistroRango N maxTiempo max @ 20 MHz, PS 1:256
8 bit (T08BIT = 1)TMR0L256~13,1 ms
16 bit (T08BIT = 0)TMR0H:TMR0L65536~3,36 s

Para 2 segundos necesitas 16 bit + prescaler 1:256.

MetodoCodigoCuando
PollingBTFSS INTCON, TMR0IF en bucleRetardo puntual, codigo simple
InterrupcionISR en ORG 0x0008, TMR0IE + GIEParpadeo en background, frecuencimetro

Detalle ISR: Interrupciones — Timer0.

Mapa de bits del registro T0CON del Timer 0
Bits clave de T0CON: TMR0ON habilita el timer, T08BIT selecciona 8 u 16 bits, PS2:PS0 el pre-escalador. — Tema 8 Temporizadores — UNEXPO · Ing. Mecatronica · Microcontroladores
BitNombreFuncion
7TMR0ON1 = Timer activo
6T08BIT1 = modo 8 bit; 0 = 16 bit
5T0CS0 = reloj interno Fosc/4; 1 = externo T0CKI
4T0SEFlanco activo en modo contador (0 = subida)
3PSA0 = prescaler asignado a Timer0
2–0PS2:PS0Pre-divisor 1:2 a 1:256

Ejemplo MOVLW B'00000111' → 16 bit, interno, prescaler 1:256:

TMR0ON=0 (apagado al configurar)
T08BIT=0 → 16 bit
T0CS=0 → temporizador interno
PSA=0, PS=111 → prescaler 1:256

Objetivo: 2 s con Fosc = 20 MHz, prescaler 1:256.

Tiempo = (4 / Fosc) × N × PS
2 s = (4 / 20×10⁶) × N × 256
N = 2 / [(4/20×10⁶) × 256] = 39062 cuentas
Valor inicial = 65536 − 39062 = 26474 = 0x676A
TMR0H = 0x67 , TMR0L = 0x6A

Verifica: N = 65536 − 26474 = 39062 ✓

Polling — subrutina reutilizable:

CONFIGURAR_TIMER_0:
MOVLW B'00000111' ; 16 bit, interno, PS 1:256
MOVWF T0CON
MOVLW B'01100111' ; TMR0H = 0x67
MOVWF TMR0H
MOVLW B'01101010' ; TMR0L = 0x6A
MOVWF TMR0L
RETURN
RETARDO_TMR0_2S:
BCF INTCON, TMR0IF ; limpia bandera vieja
BSF T0CON, TMR0ON ; arranca timer
espera_overflow:
BTFSS INTCON, TMR0IF ; espera overflow
GOTO espera_overflow ; salto → bucle hasta TMR0IF=1
BCF T0CON, TMR0ON ; apaga timer
BCF INTCON, TMR0IF ; limpia bandera
RETURN

Uso desde programa::

CALL CONFIGURAR_TIMER_0
CALL RETARDO_TMR0_2S
BSF LATB, 0 ; accion despues de 2 s

Para contar pulsos externos (ej. frecuencimetro — Practica 3):

BSF TRISA, 4 ; RA4 / T0CKI entrada
MOVLW B'00100000' ; T0CS=1, contador externo
MOVWF T0CON
CLRF TMR0H
CLRF TMR0L
BSF T0CON, TMR0ON
; cada pulso en T0CKI incrementa el contador

Ventana de medicion: combina Timer0 como contador con Timer1 como ventana de tiempo — detalle en Practica 3.

ErrorSintoma
Olvidar limpiar TMR0IF antes de esperarRetardo inmediato o impredecible
8 bit para retardo largoOverflow demasiado rapido (~13 ms max con PS 1:256)
Fosc incorrecta en formulaTiempos proporcionalmente mal (revisa cristal y Proteus)
No apagar TMR0ON al recargar en ISRCuenta extra durante la recarga

¿Que indica TMR0IF = 1?

Timer0 desbordo (paso de FF→00 o FFFF→0000 segun modo).

¿Cual es el tiempo maximo en 8 bit, Fosc = 20 MHz, PS = 1:256?

Tiempo = (4/20×10⁶) × 256 × 256 = 13,1072 ms

¿Donde se configura el prescaler de Timer0?

En T0CON (bits PSA y PS2:PS0).

Ejercicio · Parcial

Calcula el tiempo maximo en 8 bit con Fosc=20MHz y pre-divisor 1:256

Tiempo = (4/20MHz) × 256 × 256 = 13,1072 ms segun el Tema 8 del curso de Microcontroladores (UNEXPO).

Examen interactivo

Timer 0

Basado en: Clase Tema 8. Timer.pdf

0 de 0 respondidas

TMR0IF indica que...
El prescaler del Timer0 se configura en...
Para un retardo de 2 s con Fosc=20 MHz suele usarse Timer0 en...
El reloj interno del Timer0 es...
T0CON.T0CS = 1 significa...
Antes de esperar TMR0IF conviene...
N en la formula del curso es...
T08BIT = 1 en T0CON selecciona...