TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: hqv en 08 de Julio de 2005, 18:59:00

Título: puntero con interrupciones
Publicado por: hqv en 08 de Julio de 2005, 18:59:00
hola amigod del foro:

Mi consulta es la siguiente estoy tratando de transferir una variable por dirección usando para ello un puntero....defino una variable, defino un puntero luego los asigno a ambos......

la transferencia es que quiero mandar un valor a la interrupción RB0 y que se manipukle ahi y que se vuleva con el nuevo valor al resto del programa....

pero lo que pasa es que cuando reviso dentro de la interrupción no me llega el valor de la variable sino 0 y con eso no hace nada.....

trate de hacerlo por variable..pero cuando salta por primera vez la interrupción no transfiere el valor lo hace en la segunda oportunidad......

aqui les pongo parte del programa .....para ver si me pueden ayudar...
gracias de antemano....

//////////////////////////////////////////////////////
//         Variables Globales            //   
//
int x=1;          defino variable global x
int *px;          defino puntero

px=&x;           asigo puntero a variable...
//////////////////////////////////////////////////////

main()
{

}

#int_ext
int encendido(*px)
{

printf("pase por aqui
"Giño;
printf("valor x= %d
",*px  );
switch(*px)
   {
   
   case(1)://ENCENDIDO
      {

      output_high(PIN_A5);//
   
      output_low(PIN_A0);
      *px=0;   
      ext_int_edge(H_to_L);//   interrupcion ALTO a BAJO
      output_high(PIN_D2);
      enable_interrupts(INT_RDA);
      
      break;
      }
   case(0)://APAGADO
      {
      output_low(PIN_D2);

      output_low(PIN_A5);
      output_High(PIN_A0);
      *px=1;
      ext_int_edge(L_to_H);//interrupcion BAJO a ALTO
      disable_interrupts(INT_RDA);
      break;
      }


   }//Fin switch
}//Fin interrupción ext encendido



Título: RE: puntero con interrupciones
Publicado por: damago en 09 de Julio de 2005, 04:28:00
Hola, como has definido las variables como globales, no tienes que pasar ningun parametro ni puntero al manejador de interrupcion. Simplemente utiliza la variable dentro del manejador, ya que es global y la ves desde todos los sitios.

Por otra parte, el tema este de pasar parametros en el manejador de la interrupcion me parece raro. Yo creo que eso no se puede hacer. Creo que la cosa se limita a un salto de ejecucion a la rutina que sea el manejador y ya esta (sin paso de parametros). Las variables que quieras tocar dentro deberan ser globales.
Si me equivoco respecto a lo de los parametros en el manejador de interrupcion que me corrija alguien y me lo explique.

Un saludo.
Título: RE: puntero con interrupciones
Publicado por: hqv en 10 de Julio de 2005, 03:18:00
Gracias Damago por la respuesta que me diste....

hq
Título: RE: puntero con interrupciones
Publicado por: JorgitoFRyOle en 10 de Julio de 2005, 18:23:00
Buenas:

Creo que lo dice damago es lo correcto, no me parece logico que se le pueda pasar un parametro al manejador de la interrupcion. Yo he manejado la interrupcion externa b0 y la b1 y las variables que utilizo o modifico dentro de la funcion de interrupcion son globales. Sinceramente creo que lo mas comodo es hacerlo asi

1Saludo, Jorge