Hola amigos , les cuento que estoy iniciandome en el PicC y me encuentro intentando modificar el ejemplo de Diego.
Les cuento que he logrado hacer correr el mismo en una red 485 con 5 esclavos y a 57600 bpos y funciona perfectamente.
Ahora , pretendo usar un Maestro para preguntar a los esclavos y sacar al PC de la red 485 para que no le llegue todo el tráfico de la misma.
He logrado que a través de un bucle el Maestro haga las preguntas y los esclavos respondan correctamente , ahora tengo problema para que el Maestro una vez que recibe una respuesta cree un evento (en principio sólo prenda un led PIN_RELE , luego envie la trama ecibida por el esclavo a traves de soft UART al PC)
EL IDentificatorio del maestro es 0 (cero) , o sea que cuando circule un mensaje con prefijo R0X , es una respuesta de un esclavo y sólo lo dee interpretarlo él.
Entonces , el Maestro pregunta (R1X..R9X) y recibe del esclavo 7 lo siguiente R0X$R7X;abcde$! , que se interpretaria asi : mensaje para el Maestr (R0X) , soy el esclavo 7 (R7X) , este es mi mensaje ($R7X;abcde$) , fin de transmisión (!)
Todo va perfecto , el maestro les pregunta a todos y recibe respuesta del 7 (lo veo perfecto en el tráfico de la 485) , el único problema es que el maestro no interpreta la llegada del mensaje para él ya que no realiza el parpadeo del led.
Les pego el bucle , el resto es exactamente igual al código original.
Cualquier ayudita es bien recibida.
Saludos a todos.
do{
for(veces=1; veces<=10; ++veces) { // creo un bucle para realizar las peticiones de consulta a los esclavos
delay_ms(25);
USART_activa_tx();
delay_ms(5);
printf(":R%dX!\r\n",veces);
USART_activa_rx();
delay_ms(10);
enable_interrupts(global);
enable_interrupts(int_rda);
// si recibo alguna contestación de algún esclavo entonces parpadeo un led
if(Command==0x01){
Command =0x00;
// USART_activa_tx();
// printf(USART_buffer);
// USART_activa_rx();
output_high(DRIVER_RELE);
delay_ms(50);
output_low(DRIVER_RELE);
}
}
} while(true);
Edito: Solucionado , tenía mal la trama de recepción.
Les paso el dato , quizás lo sepan , yo como estoy recién mirando el C , lo acabo de descubrir.

Cuando configuramos el define para la comunicación , existe una opción para hacer de habilitador en la comunicación rs485 , y el comando es ENABLE. O sea definiendo un PIN al momento de transmitir se activa a 1 y en cuanto deja de transmitir se pone a 0
#use rs232(baud=9600,xmit=PIN_B2,rcv=PIN_B1) // modo normal
#use rs232(baud=9600,xmit=PIN_B2,rcv=PIN_B1, ENABLED=PIN_B3) // definimos B3 como enabled
Realmente lo he probado y funciona perfectamente , en el ejemplo de Diego deshabilite las funciones activa_tx y activa_rx y funciona sin inconvenientes.
Diego mil gracias por este pedazo de ejemplo que has escrito. Un abrazo.