Hola amigos,
estoy intentando hacer una sencilla comunicacion mediante i2c entre 2 pic 18f452 usando las funciones del i2c que viene en el ccs, y no consigo que haga lo que yo quiero.
La idea es la siguiente: el maestro le manda al esclavo una secuencia de numeros del 0 al 8, y el esclavo los presenta en el puerto B (al cual hay conectados unos led) y los envia por el puerto serie.
Problemas: encender los led del puerto b y mandar por el puerto serie no es posible: solo puede hacer una cosa, las dos a la vez no

si por ejemplo solo presento el dato por el puerto serie, me aparece una cosa rara, como esta:
8
8
0
8
8
1
8
8
2
8
8
3
8
8
4
...
la verdad no se que es lo que puede estar pasando. Os pongo a continuacion el codigo por si podeis mirarlo y proponer alguna idea o lo que sea. Un saludo y gracias.
//////////////////////////////////////////////////////////////////
//MAESTRO
///////////////////////////////////////////////////////////////////
#include <18f452.h>
#device adc=10
#use delay(clock=20000000)
#fuses NOWDT,HS, NOPROTECT, NOOSCSEN, NOBROWNOUT, NOPUT, NOLVP, NOWRT, NOWRTD, NOWRTB, NOWRTC, NOCPD, NOCPB, NOEBTR, NOEBTRB
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7,parity=N,bits=8)
#use standard_io(c)
#use i2c(MASTER, SDA=PIN_C4, SCL=PIN_C3,fast,force_hw)
void main(void)
{
unsigned int dato,i;
delay_ms(2000);
while(1)
{
for(i=0;i<9;i++)
{
dato=i;
i2c_start();
i2c_write(0x08); //direccion del esclavo con el que haremos la comunicacion
delay_ms(3);
i2c_write(dato);
delay_ms(3);
i2c_stop();
delay_ms(1000);
}
}
}
//////////////////////////////////////////////////////////////////
//ESCLAVO
///////////////////////////////////////////////////////////////////
#include <18f452.h>
#device adc=10
#use delay(clock=20000000)
#fuses NOWDT,HS, NOPROTECT, NOOSCSEN, NOBROWNOUT, NOPUT, NOLVP, NOWRT, NOWRTD, NOWRTB, NOWRTC, NOCPD, NOCPB, NOEBTR, NOEBTRB
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7,parity=N,bits=8)
#USE standard_io(B)
#USE standard_io(C)
#use i2c(SLAVE, SDA=PIN_C4, SCL=PIN_C3, ADDRESS=0X08,fast,force_hw)
#byte puerto_b=0xf81
void main(void)
{
unsigned int dato;
puerto_b = 0x00;
set_tris_b( 0x00 );// todo salidas
while(1)
{
dato=i2c_read();
puerto_b=dato;
printf("%u
",dato);
}
}