hola
yo utilizo el Modbus protocol y para la recepcion de los datos hago lo siguiente:
Codigo:
//Receive routine
#int_RDA
void RDA_isr(void)
{
if (RCSTA & 0x02)
{
RCSTA &= ~0x10;
RCSTA |= 0x10;
}
modbus.rxData[Recindex]=RCREG;
Recindex++;
set_timer3(Timer3_5); // Timer3 will be loaded
bit_clear(*0xFA1,1);
enable_interrupts(int_TIMER3);
}
Como yo tambien tengo tramas con diferentes largos, uso un timer, que despues de determinado tiempo que no lleguen nada, desactiva el interrupt para recibir datos y va al main para procesar los datos recibidos y mandar la respuesta.
Codigo:
#int_TIMER3 // 3.5 Character times
void TIMER3_isr(void)
{
disable_interrupts(int_TIMER3);
modbus.DataReceived=1;
}
Los datos recibidos se encuentran en modbus.rxData[Recindex]. Esto lo programe para un 18F252.
Aloha