Una interrupción detiene el programa en cualquier punto, inclusive el delay_ms.
Hola Pocher, eso es totalmente cierto:
Hola picalo, en realidad cada que un pin de RB4..RB7 cambia de estado si ocurre una interrupción, o sea que la variable interrupciones toma el valor deseado.
Tengo entendido que al ocurrir una interrupción, el programa detiene o interrumpe lo que está haciendo (inclusive durante un
delay_ms()) para ejecutar el código correspondiente a esa interrupción y que cuando termina de ejecutar ese código vuelve al punto donde ocurrió la interrupción para continuar en lo que estaba. Si te fijas, cuando ya hay una de las rutinas en ejecución, por ejemplo
interrupciones = 1, y otro pin cambia de estado, la interrupción
si ocurre cambiando por ejemplo a
interrupciones = 2, pero inmediatamente el código regresa a donde estaba, o sea al bucle
while(t1>0) correspondiente a
interrupciones = 1 ya que
el cambio de valor de la variable interrupciones no hará que salga de ese bucle while(). Por supuesto solo saldrá de este bucle cuando su condición se haga falsa, o adicionando alguna de las opciones que hemos sugerido jukinch o yo, que tampoco me parecen la mejor opción ya que si agarras ahi un
delay_ms() en ejecución tendrás que esperar a que termine.
Es obligatorio hacer una lectura/escritura del portb al entrar en la interrupcion: http://www.todopic.com.ar/foros/index.php?topic=21226.0
Sobre esto no he tenido ningún problema, puede ser que en las nuevas versiones del CCS ya lo han solucionado.
Saludos!