InformáticaBásico1 respuestas

¿Alguien sabe como se utiliza el Timer0 en el PIC16F877A?

¿Alguien sabe como se utiliza el Timer0 en el PIC16F877A? Quiero hacer oscilar un led a una frecuencia de 1 Hz.

Pregunta de Informática · 1 respuesta · 10 votos · mejor respuesta de Winnyu

En resumen

Hola, el TMR0 no es más que un contador de 8 bits, que puede utilizarse como contador de impulsos por RA4 o temporizador. En este caso lo utilizaremos como un temporizador.

Respuestas de la comunidad

Mejor respuesta

Winnyu
1

Hola, el TMR0 no es más que un contador de 8 bits, que puede utilizarse como contador de impulsos por RA4 o temporizador.

En este caso lo utilizaremos como un temporizador.

Para calcular los tiempos de temporizacion, se tiene la siguiente formula :

t = tcm * prescaler * (256 - Vinicial) * OBS :

tcm es el valor de un ciclo máquina.

Si utilizas un cristal de 4MHZ , tendremos que :

tcm = 4(1 / 4MHZ) = 1us

para otro valor "X" MHZ → tcm = 4(1 / XMHZ)

Sin embargo el máximo tiempo que se puede alcanzar (con un cristal de 4MHZ) es de 65.

536ms por lo que debemos hacer uso de una variable ( registro de proposito general) para extender el tiempo a 500ms (Generaremos una onda cuadrada, de 500ms en estado alto y 500ms en estado alto, con esto logramos que el led oscile a una frecuencia de 1HZ)

Los datos que utilizaremos serán los siguientes :

Prescaler = 256

Valor inicial de TMR0 aproximadamente igual a 61

( eso quiere decir que produciremos una interrupcion aproximadamente cada 50ms)

Variable "contador" : Inicia en 0 y cada vez que llega a 10 (cuenta el nº de interrupciones generadas por desbordamiento del TMR0), encendemos o apagamos el led y reiniciamos su valor nuevamente a 0.

Adicional a esto, se utilizaran algunos bits de los registros OPTION_REG y INTCON * de OPTION_REG :

bit 4 : si es 0 → el divisor se asigna al TMR0 (claro que haremos esto) si es 1 → el divisor se asigna al watchdog

bit2, bit1 y bit0 : Con esto se asigna el valor del prescaler

Para prescaler = 256 → bit2 = 1 , bit1 = 1 , bit0 = 1

El resto de bits, no vienen al caso, y conviene dejarlos en 0 para esta aplicacion.

* de INTCON :

bit7 : Se pone a 1 para activar las interrupciones.

Bit2 : Se pone a 1 para activar la interrupcion por desbordamiento del TMR0

El resto de bits, los dejamos en cero, pues asi conviene para esta aplicacion

Y por ultimo, adjunto el programa hecho en ensamblador!

Saludos!

Preguntas frecuentes

¿Alguien sabe como se utiliza el Timer0 en el PIC16F877A?

Hola, el TMR0 no es más que un contador de 8 bits, que puede utilizarse como contador de impulsos por RA4 o temporizador. En este caso lo utilizaremos como un temporizador.