Autor Tema: Problemas con la interrupcion RB0  (Leído 2011 veces)

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

Desconectado oriolba0007

  • PIC10
  • *
  • Mensajes: 23
Problemas con la interrupcion RB0
« en: 19 de Mayo de 2005, 12:10:00 »
Hola amigos,

Tengo un programa que controla un PIC.

La patilla RB0 se activa cada vez que se detecta un paso por zero de una onda de 50 Hz. Cada vez que esa patilla se activa leo datos de la patilla RC3 i opero con ellos.

Como hago para ke una estructura como la que enseño a continuacion vaya lo suficientemente lenta para que solo se repita una vez por interrupcion RB0?:



While (M!=1) {                      
               if (RB0==1)                
                  if(Ci=3)                
                    {inici[Ci]=RC3;      
                     M=1;}        
                  else if(Ci=2)
                     {inici[Ci]=RC3;      
                     Ci=3;}
                  else if(Ci=1)
                     {inici[Ci]=RC3;
                     Ci=2;}
                  else if(Ci=0)
                     {inici[Ci]=RC3;
                     Ci=1;}
                  }
               



Gracias a todos !!!!

PD: Peazo de Microcursillo que teneis en uno de los temas de este subforo !

Desconectado roc364

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 108
RE: Problemas con la interrupcion RB0
« Respuesta #1 en: 19 de Mayo de 2005, 14:14:00 »
Hola oriolba0007!  primero te sugiero un cambio en tu procedimiento
quedaria mas o menos asi:

While (M!=1)   // siempre es bueno llevar una tabulacion...
{
   if (RB0==1)
   {
      inici[Ci]=RC3;   // la puse aca, ya que se repetia varias veces
      if(Ci=3) M=1;    // y las variables no cambiaban
      else if(Ci=2) Ci=3;
      else if(Ci=1) Ci=2;
      else if(Ci=0) Ci=1;
   }
}

Pero esto no es tan importante, el tema es que si queres que algo se cumpla una sola vez, cuando sucede la interrupcion, deberias declarar el procedimiento inmediatamente despues de la linea #int_ext por ej:


#int_ext
void una_sola_vez (void)
{
             inici[Ci]=RC3;  
             if(Ci=3) M=1;    
             else if(Ci=2) Ci=3;
             else if(Ci=1) Ci=2;
             else if(Ci=0) Ci=1;

}



bueno...  no se me ocurre nada mas...  cualquier cosa aca estamos.
Saludos!!
Hay solo 10 tipos de personas, los que entienden el codigo binario, y los que no.

Viva La Patagonia Argentina!!

Desconectado oriolba0007

  • PIC10
  • *
  • Mensajes: 23
RE: Problemas con la interrupcion RB0
« Respuesta #2 en: 20 de Mayo de 2005, 06:38:00 »
Gracias por la contestacion !!!

Perdon por la duplicacion del mensaje, no me di cuenta !


un saludote amigos y hasta pronto Sonrisa

A ver si acabo por aprender a programar PICS en C y pongo alguna cosa en el microcursillo :P

PD: Gracias Nocturno por la contestacion en el otro duplicado del mensaje !