Revelroom.ca te ayuda a encontrar respuestas confiables a todas tus preguntas con la ayuda de expertos. Únete a nuestra plataforma de preguntas y respuestas y obtén soluciones precisas para todas tus dudas de profesionales en diferentes disciplinas. Conéctate con una comunidad de expertos dispuestos a ofrecer soluciones precisas a tus preguntas de manera rápida y eficiente en nuestra amigable plataforma de preguntas y respuestas.
Sagot :
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!
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!
Gracias por pasar por aquí. Nos esforzamos por proporcionar las mejores respuestas para todas tus preguntas. Hasta la próxima. Gracias por tu visita. Nos comprometemos a proporcionarte la mejor información disponible. Vuelve cuando quieras para más. Nos enorgullece proporcionar respuestas en Revelroom.ca. Vuelve a visitarnos para obtener más información.