Obtén las mejores soluciones a tus preguntas en Revelroom.ca, la plataforma de Q&A de confianza. Únete a nuestra plataforma de preguntas y respuestas y conéctate con profesionales dispuestos a ofrecer respuestas precisas a tus dudas. Haz tus preguntas y recibe respuestas detalladas de profesionales con amplia experiencia en diversos campos.
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 utilizar nuestro servicio. Nuestro objetivo es proporcionar las respuestas más precisas para todas tus preguntas. Visítanos nuevamente para obtener más información. Tu visita es muy importante para nosotros. No dudes en volver para obtener respuestas fiables a cualquier pregunta que tengas. Nos enorgullece proporcionar respuestas en Revelroom.ca. Vuelve a visitarnos para obtener más información.