Hola amigos.
Tengo un problema:
Me dispongo a programar un temporizador para arcades (máquinas de videojuegos) en el cual son varios los procesos que tienen que ejecutarse con precisión como sonidos de frecuencias exactas, multiplexión en displays, tiempo de juego, tiempo de aviso, etc.
Para todo esto estoy utilizando una resolución de tiempo de 50µs y la quiero marcar con el desbordamiento del Timer0.
Quiero que cada ciclo quede exacto pero para esto, quiero que no se me escape ningún ciclo máquina fuera del cálculo, que en mi caso es de 1µs ya que utilizo un cristal de 4MHz.
Yo se que para temporizaciones exactas debo disminuir un poco los pasos de la cuenta del Tmr0 y ajustar el tiempo con algunas instrucciones de relleno como la nop.
Digamos, si quiero contar 50µs entonces cargo al Tmr0 con una cantidad relativamente menor como -.45 (el signo menos es porque se resta de 256 ya que es un contador de 8 bits) que es lo mismo que .211 = 03. Dejo tal holgura para compensar los saltos del algoritmo. Conozco los tiempos de ejecución de cada instrucción de transferencia así como las de salto, pero el problema es que no conozco el tiempo de respuesta de cualquiera de las cuatro interrupciones que maneja este micro. Es decir, no se cuantos ciclos máquina (1µs) transcurren desde que se provoca la interrupción en cualquiera de sus orígenes (en este caso, por desbordamiento del Tmr0) hasta que el PC (contador de programa) se carga con la dirección 0004h.
Y es que en el libro "Microcontrolador PIC16F84 - Desarrollo de proyectos" menciona en el capítulo 17.2 que una interrupción es como una subrutina que atiende inmediatamente a la interrupción, si esto es realmente cierto el PC estaría cargado con la dirección 0x0004 un ciclo máquina (1µs) después de que se detecte la interrupción.
Por otro lado, el mismo libro en el capítulo 17.3 explica que desde el punto de vista del control del programa, una interrupción produce el mismo efecto que si se tuviese un "call 004h" en el instante preciso en que se produjo la interrupción. Si el mecanismo de interrupción trabaja igual en función del tiempo entonces podemos deducir que: desde el momento de la interrupción se ejecuta un salto de 2 ciclos máquina para llegar al vector de interrupción ORG 4.
En verdad necesito saber cuántos ciclos máquina consume el salto provocado por cualquier interrupción hasta el vector de interrupción. Esta información es realmente necesaria para realizar cálculos precisos en función del tiempo.
Les agradeceré cualquier ayuda.
Saludos.
Tengo un problema:
Me dispongo a programar un temporizador para arcades (máquinas de videojuegos) en el cual son varios los procesos que tienen que ejecutarse con precisión como sonidos de frecuencias exactas, multiplexión en displays, tiempo de juego, tiempo de aviso, etc.
Para todo esto estoy utilizando una resolución de tiempo de 50µs y la quiero marcar con el desbordamiento del Timer0.
Quiero que cada ciclo quede exacto pero para esto, quiero que no se me escape ningún ciclo máquina fuera del cálculo, que en mi caso es de 1µs ya que utilizo un cristal de 4MHz.
Yo se que para temporizaciones exactas debo disminuir un poco los pasos de la cuenta del Tmr0 y ajustar el tiempo con algunas instrucciones de relleno como la nop.
Digamos, si quiero contar 50µs entonces cargo al Tmr0 con una cantidad relativamente menor como -.45 (el signo menos es porque se resta de 256 ya que es un contador de 8 bits) que es lo mismo que .211 = 03. Dejo tal holgura para compensar los saltos del algoritmo. Conozco los tiempos de ejecución de cada instrucción de transferencia así como las de salto, pero el problema es que no conozco el tiempo de respuesta de cualquiera de las cuatro interrupciones que maneja este micro. Es decir, no se cuantos ciclos máquina (1µs) transcurren desde que se provoca la interrupción en cualquiera de sus orígenes (en este caso, por desbordamiento del Tmr0) hasta que el PC (contador de programa) se carga con la dirección 0004h.
Y es que en el libro "Microcontrolador PIC16F84 - Desarrollo de proyectos" menciona en el capítulo 17.2 que una interrupción es como una subrutina que atiende inmediatamente a la interrupción, si esto es realmente cierto el PC estaría cargado con la dirección 0x0004 un ciclo máquina (1µs) después de que se detecte la interrupción.
Por otro lado, el mismo libro en el capítulo 17.3 explica que desde el punto de vista del control del programa, una interrupción produce el mismo efecto que si se tuviese un "call 004h" en el instante preciso en que se produjo la interrupción. Si el mecanismo de interrupción trabaja igual en función del tiempo entonces podemos deducir que: desde el momento de la interrupción se ejecuta un salto de 2 ciclos máquina para llegar al vector de interrupción ORG 4.
En verdad necesito saber cuántos ciclos máquina consume el salto provocado por cualquier interrupción hasta el vector de interrupción. Esta información es realmente necesaria para realizar cálculos precisos en función del tiempo.
Les agradeceré cualquier ayuda.
Saludos.