Interrupciones con pic 16f877

#1
muchachos: tengo un gran problema con esta simulacion de un sistema de control,
no ocurre la segunda interrupcion, solamente la primera y no hace nada mas, el programa no esta finalizado, pero esta muy completo, si alguien tiene experincia con mplab y me puede ayudar, gracias a todos :eek:
 

Adjuntos

#2
Hola dancerpr, checando tu programe me topé con esto.
Código:
INTERRUPCION1
		MOVLW     0X0E 	    
		SUBWF     TEC,1
		BTFSS     STATUS,2
        GOTO      LOSTIME
LOSTIME
		NOP
		GOTO	  LOSTIME
Realizas un llamado a una rutina que se queda en un lazó infinito, ten en cuenta que una vez ingresado en el servicio de interrupción este no se vuelve a activar hasta que no apliques la instrucción RETFIE o actives de nuevo el bit de interrupción global GIE. Pon especial atención a esto que es lo que probablemente te esté dando problemas.
Un último consejo, observo que tus rutinas de interrupción las manejas hasta el final del programa ten cuidado ya que si tus rutinas sobrepasan de la página 0 que son los primero 2047 bytes tienes que implementar el pagesel. Yo te recomiendo que las pongas siempre al principio y así te evitas este problemita.
Saludos
 
#4
saludos ericklarva, corregí algunas cosas y no funciona la segunda interrupción, el lostime es un tiempo perdido mientras el usuario digita una de las dos opciones que se le ofrecen, y esta interrupción entra a otra opción, según el numero del contador al final de cada interrupción
 
#5
Hola dancerpr, como comentario ten consideración o precaución cuando intentes llamar a una rutina desde una interrupción si además esa rutina la utilizas en tu programa normal, de preferencia siempre crea subrutinas específicas para las interrupciones. Esto te lo comento ya que si al momento de generarse una interrupción estás en una rutina que luego "llamas" desde la interrupción tus variables cambian de igual forma y por lo tanto cuando "regreses" de la interrupción tus valores anteriores se pierden. Lo anterior también lo puedes evitar salvando estas variables en otras al comienzo de la interrupción y las regresas al final.
Ahora bien con respecto al hecho de no ejecutar tu segunda interrupción, te recuerdo que "una vez ingresado en el servicio de interrupción este no se vuelve a activar hasta que no apliques la instrucción RETFIE o actives de nuevo el bit de interrupción global GIE", tu segunda interrupción jamas se va a generar a menos que apliques alguno de las dos opciones que te acabo de mencionar.
Saludos
 
Arriba