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.

10Lorena2013mj

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.

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!