Autor Tema: Directo de una interrupción a una función  (Leído 1532 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado picalo

  • PIC10
  • *
  • Mensajes: 20
Directo de una interrupción a una función
« en: 31 de Marzo de 2011, 11:44:37 »
Hola amigos de todopic !!!
Quisiera hacerles una consulta sobre un problema que estoy teniendo y buscando por el foro no encontre solucion aun...

Lo que necesito hacer es interrumpir el Main Program mediante una interrupción pero una vez terminada la interrupción que esta no vuelva a donde se produjo, sino a donde yo necesito, el siguiente seria el caso (1º caso)

#include <16F876A.h>
#use delay(clock=20000000)         
#fuses HS,NOWDT,NOPROTECT,PUT   
#use fast_io(A)
#use fast_io(B)
#use fast_io(c)
void fun1(void);
**********************************
#int_ext
void IntRb0 (void)
{

IR A ETIQUETA
}
***********************************
void main(void)
{
set_tris_a(0b000000);
set_tris_b(0b11110001);
set_tris_c(0b00000000);
ext_int_edge(H_to_L);
enable_interrupts(int_ext);
enable_interrupts(GLOBAL);
ETIQUETA
while(true)                     
{

}
 
Trate de utilizar la funcion goto (aunque no es conveniente) pero no la pude compilar ... luego se me ocurrio utilizar una funcion (2º caso)

#include <16F876A.h>
#use delay(clock=20000000)         
#fuses HS,NOWDT,NOPROTECT,PUT   
#use fast_io(A)
#use fast_io(B)
#use fast_io(c)
void fun1(void);
**********************************
#int_ext
void IntRb0 (void)
{

fun1();
}
***********************************
void main(void)
{
set_tris_a(0b000000);
set_tris_b(0b11110001);
set_tris_c(0b00000000);
ext_int_edge(H_to_L);
enable_interrupts(int_ext);
enable_interrupts(GLOBAL);
while(true)                     
{

}
***********************************
void fun1(void)
{

}

Esto tampoco funciono porque parece que si no termino de ejecutar la interrupción, esta me queda deshabilitada

Espero que una vez mas me puedan ayudar y de antemano  LES AGRADESCO POR ESTAR AHÍ               SALUDOS

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Directo de una interrupción a una función
« Respuesta #1 en: 31 de Marzo de 2011, 12:47:43 »
Así no se trabaja con interrupciones, no podes volver a donde quieras  ;-) Lo que podes hacer es setear una bandera y tratarla adecuadamente en el bucle principal.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: Directo de una interrupción a una función
« Respuesta #2 en: 31 de Marzo de 2011, 13:29:52 »
Picalo: como bien dice Suky el propósito de las interrupciones es ese precisamente. Ir a la interrupción y volver a donde fue llamada.
       Podrías usar una bandera y una vez de regreso comprobar cada tanto dentro de tu while con un if para sensar si ocurrió la interrupción y que dispare un break para salir del bucle while. Y una vez allí elegir el camino con un switch o lo que fuere. Pero es una solución poco elegante.
               Saludos a ambos.
                       Jukinch
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes

Desconectado picalo

  • PIC10
  • *
  • Mensajes: 20
Re: Directo de una interrupción a una función
« Respuesta #3 en: 02 de Abril de 2011, 14:02:43 »
BUENO AMIGOS UNA VEZ MAS ESTOY AGRADECIDO POR SUS RESPUESTAS...

Mi idea era interrumpir un delay(500); y no volver al mismo pero bueno intentare de manejarlo de otra manera.

OTRA PREGUNTITA
Para utilizar goto, primero el programa debe encontrarse con la etiqueta y luego con la llamada goto?

                                                                          MUCHISIMAS GRACIAS

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: Directo de una interrupción a una función
« Respuesta #4 en: 02 de Abril de 2011, 14:45:53 »
Te soy sincero al goto lo use muy poco ,creo que tienen  que estar todos los labels dentro de main para que funcione.
Investigo y te cuento.
               Saludos
                     Jukinch
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes


 

anything