Hola.
La idea es tener un protocolo organizado en la comunicacion, es decir, debes definir cual PIC es el MASTER y cuales los SLAVES. El MASTER pide la informacion y solo el micro que la tenga va a contestar.
Gracias por responder. Lo del protocolo más o menos lo tengo claro y lo voy a implementar de forma similar a como han hecho otros foreros pero en el trabajo que estoy haciendo va a haber varios master, es más, todos los dispositivos tienen que comportarse en determinados momentos en master o slave y muchas veces cuando un master envía datos a un slave éste tiene que responder. La duda que tengo es que, por ejemplo, cuando un dispositivo con ID 00 quiera comunicarse con otro con ID 01 primero tiene que comprobar si el bus está libre porque puede darse el caso a que el dispositivo ID 02 esté transmitiendo al dispositivo ID 03 y después de esa transmisión el ID 03 empiece a transmitir para comunicar alguna respuesta, cosa que ID 00 no sabe o no debería saber.
Bueno, se me acaba de ocurrir una manera, aunque no se si sería la más adecuada. Cada vez que un dispositivo inicie una transmición, como los demás van a estar a la escucha para comprobar si el mensaje es para ellos está claro que no van a transmitir en ese momento. Añadiendo un bit en la transmicion se podría indicar con un 1 si la linea seguirá ocupada ya que el dispositivo que inició la transmición puede estar esperando una respuesta de otro dispositivo o con un 0 si en cambio es el final de la transmisión y ya no se espera ninguna respuesta. Programo cada pic para que analice todas las cadenas que circulan en el bus y que lea en cada una la posición del bits que da el estado de la línea y que lo almacene en una variable. Así, si un pic tiene la necesidad de transmitir, primero comprueba el estado de la variable, si es 0 la cambia a 1 y empieza a transmitir. Si necesita respuesta de otro pic, en la cadena de transmición pone un 1 en el bit que indica la disponibilidad del bus. Despues de enviar la cadena el resto de los pic cambian su variable a 1 excepto el que tiene que responder. Éste, al responder, en la cadena manda el bit de disponibilidad a 0 y acto seguido todos los pic cambian su variable a 0 lo que les indica que el bus vuelve a estar libre.
Seguramente me he enrollado mucho pero se me ocurrió ahora mismo y no podía dejar de escribir por miedo a olvidarme (ya estoy bastante cansado, aquí ahora son las 4:40 de la madrugada y todavía sigo dándole al asunto)