Autor Tema: envio y recepcion de datos con 2 usart por hard  (Leído 2909 veces)

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

Desconectado pablolode

  • PIC16
  • ***
  • Mensajes: 123
envio y recepcion de datos con 2 usart por hard
« en: 28 de Abril de 2010, 15:08:37 »
Hola compañeros, estoy tratando de comunicar 2 pics enviando datos, cada uno debe poder enviar y recivir.
 Usando un codigo del amigo redpic ''RS232 Buffered'' con 2 18f6520 que tienen 2 usart por hard, he hecho cada rutina por duplicado las dos funcionan bien(individualmente), pero al agregarle la 2da usart (#INT_RDA2) ESTA NO envia nada. lo estoy simulando con proteus 7.6. creo que me esta faltando asociar cada usart con su respectivo canal de comunicacion este es el encabezado:

#USE delay(clock=4000000)
#USE RS232(BAUD=9600, XMIT=PIN_C6, RCV=PIN_C7,stream=rs232)
#USE RS232(BAUD=9600, XMIT=PIN_G1, RCV=PIN_G2,stream=rs485)

#use standard_io(b)
#use standard_io(a)
#use standard_io(c)
#use standard_io(d)
#use standard_io(e)
#use standard_io(f)
#use standard_io(g)

******* interrupciones*******

#INT_RDA  // interrupcion datos disponibles
void serial_isr() {                    // Interrupción recepción serie USART

   rcvchar=0x00;                       // Inicializo caracter recibido                   
   if(kbhit()){                        // Si hay algo pendiente de recibir ...
      rcvchar=fgetc();                  // lo descargo y ...
      addcbuff(rcvchar);               // lo añado al buffer y ...
      echos(rcvchar);                  // hago eco (si procede).

   }
}

#INT_RDA2       
void serial_isr_2() {                    // Interrupción recepción serie USART 2

   rcvchar_2=0x00;                       // Inicializo caracter recibido                   
   if(kbhit()){                        // Si hay algo pendiente de recibir ...
      rcvchar_2=fgetc();                  // lo descargo y ...
      addcbuff_2(rcvchar_2);               // lo añado al buffer y ...
      echos_2(rcvchar_2);                  // hago eco (si procede).
   



**********MAIN***********

 enable_interrupts(INT_RDA);                   // Habilita Interrupción RDA
   enable_interrupts(INT_RDA2);
   enable_interrupts(global);                    // Habilita interrupciones

   do {
   
         if(flagcommand)
          { procesa_comando();         // Si hay comando pendiente
          }                                         // de procesar ... lo procesa.
         if(flagcommand_2)
          {procesa_comando_2();
          }
       } while (TRUE);

}



   }
}

dejo el codigo completo con proteus. Saludos

Desconectado pablolode

  • PIC16
  • ***
  • Mensajes: 123
Re: envio y recepcion de datos con 2 usart por hard
« Respuesta #1 en: 06 de Mayo de 2010, 10:08:56 »

bueno, he solucionado el tema agregando el canal usart ,en la interrupcion,por el cual recibe el dato.
 ya podemos recivir por un canal , enviarlo al otro y viceversa...


#INT_RDA HIGH//
void serial_isr_1() {                    // Interrupción recepción serie USART

   rcvchar=0x00;                       // Inicializo caracter recibido                   
   if(kbhit(rs232)){                        // Si hay algo pendiente de recibir ...
      rcvchar=getc(rs232);                  // lo descargo y ...
      addcbuff(rcvchar);               // lo añado al buffer y ...
      echos(rcvchar);                  // hago eco (si procede).
//fprintf(rs232,"[rda_1_]\r\n\r\n");
   }
}
//*/
#INT_RDA2       //RS485 receive data available
void serial_isr_2() {                    // Interrupción recepción serie USART

   rcvchar_2=0x00;                       // Inicializo caracter recibido                   
   if(kbhit(rs485)){                        // Si hay algo pendiente de recibir ...
      rcvchar_2=getc(rs485);                  // lo descargo y ...
      addcbuff_2(rcvchar_2);               // lo añado al buffer y ...
      echos_2(rcvchar_2);                  // hago eco (si procede).
//   fprintf(rs485,"[rda_2_]\r\n\r\n");

   }
}


y en funcion echos...


void echos(char c){                    // Echo selectivo ----------------------

      switch(c){
         case 0x0D: printf(" [Ent] "); // Si he pulsado la tecla [Intro]
                    break;
                   
         default:   fputc(rcvchar,rs232);     // Echo de cualquier otro caracter
      }
  }
void echos_2(char c){                    // Echo selectivo ----------------------

      switch(c){
         case 0x0D: printf(" [Ent] "); // Si he pulsado la tecla [Intro]
                    break;
                   
         default:   fputc(rcvchar_2,rs485);     // Echo de cualquier otro caracter
      }
}

Desconectado gducos

  • PIC10
  • *
  • Mensajes: 21
Re: envio y recepcion de datos con 2 usart por hard
« Respuesta #2 en: 07 de Mayo de 2010, 23:04:23 »
Hola, te molestaria adjuntar la simulacion en proteus ya que quiero hacer algo parecido?
Muchisimas gracias!

Desconectado pablolode

  • PIC16
  • ***
  • Mensajes: 123
Re: envio y recepcion de datos con 2 usart por hard
« Respuesta #3 en: 10 de Mayo de 2010, 10:01:26 »
ya lo adjuntade, solo cambie las lineas en interrupcion INT_RDA , INT_RDA2 y funcion ECHOS si no te funca avisame.


 

anything