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