Autor Tema: Pregunta sobre interrupciones  (Leído 3825 veces)

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

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Pregunta sobre interrupciones
« Respuesta #15 en: 28 de Marzo de 2008, 05:18:07 »
Para que no te haga el ciclo infinito en los printf mételos en la interrupción y solo los hará una vez.

Un saludo

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Pregunta sobre interrupciones
« Respuesta #16 en: 28 de Marzo de 2008, 05:32:28 »
Para diferenciar las entradas de interrupción RB4..RB7 yo lo haria más fácil así:

#INT_RB
interrupcionRB4_RB7()
{
       if(input(PIN_B4))
             flag_rb4=1;

       if(input(PIN_B5))
             flag_rb5=1;

etc

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Pregunta sobre interrupciones
« Respuesta #17 en: 28 de Marzo de 2008, 06:12:33 »
Y puestos a simplificar, incluso así:
flag_rb4=input(PIN_B4);
flag_rb5=input(PIN_B5);
...

Desconectado scientist

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 999
Re: Pregunta sobre interrupciones
« Respuesta #18 en: 30 de Marzo de 2008, 20:23:38 »
bueno,perdon por responder tan tarde,pero tenia bastantes cosas que hacer; ya resolvi el problema como me lo habian planteado, quedo asi:

////////////////////////
#int_rb
interrup_isr_b(){

 output_high(PIN_C0);

if(input(PIN_B4)){
             flag_rb4=1;
             printf("rb4"); 
}else{
flag_rb4=0;
}
if(input(PIN_B5)){
             flag_rb5=1;
             printf("rb5");
}else{
flag_rb5=0;
}
if(input(PIN_B6)){
             flag_rb6=1;
             printf("rb6");
}else{
flag_rb6=0;
}
if(input(PIN_B7)){
             flag_rb7=1;
             printf("rb7");
}else{
flag_rb7=0;
}
}
/////////////////
void main() {
enable_interrupts(int_rb);
   enable_interrupts(global); 
set_tris_b(0xFF);
   set_tris_a(0x00);
   set_tris_c(0xFE);
   printf("probando el programa Scientist");

   do {
   if (flag_rb4==1){
     
     output_high(pin_a0);
     
     
     }else{
     output_low(pin_a0);
     }
     if (flag_rb5==1){
     
     output_high(pin_a1);
         
     
     
     }else{
     output_low(pin_a1);
     }
     if (flag_rb6==1){
     
     output_high(pin_a2);
         
     
     
     }else{
     output_low(pin_a2);
     }
     if (flag_rb7==1){
     
     output_high(pin_a3);
         
     
     
     }else{
     output_low(pin_a3);
     }

     
   } while (TRUE);
   
}
la verdad bastante mas facil,a como lo venia haciendo, bueno,gracias amigos,una pregunta,como es mas eficiente,asi,o como en el ejemplo que habia puesto anteriormente con la operacion xor?
NO le digas a DIOS que tienes un gran problema, dile a tu problema que tienes un GRAN DIOS!!
Alma mia y castillo mio, mi Dios en quien yo confiare....

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Pregunta sobre interrupciones
« Respuesta #19 en: 31 de Marzo de 2008, 02:41:06 »
Habría que ver cual de las dos soluciones dá lugar a un menor número de instrucciones en ensamblador. Eso se hace revisando el fichero .lst

Un saludo


 

anything