Hola, tengo un circuito en el que hablan un pic16f877a y un pic16f882 mediante bus i2c. Lo hago en C con CCS. Para mandar datos del maestro al esclavo no hay porblema, les mando los datos y funcionando perfectamente el esclavo los lee. Pero al intentar mandar datos del esclavo al maestro no funciona, siempre me lee el mismo dato, 0x80, la rutina del maestro es esta:
i2c_start();
i2c_write(0x03);
delay_ms(10);
prueba=(i2c_read(0));
i2c_stop();
la dirección del esclavo es 0x02, y la rutina del esclavo es esta:
#INT_SSP
void actualizar()
{
int1 pilot=0;
int state=0,data=0;
state=i2c_isr_state();
if ((state==0)||(state==0x80))
{
data=i2c_read();
}
if (state==0x80)
{
i2c_write(arranque);
}
else if (state>0)
{
data=i2c_read();
}
switch (data)
{
case(0xFF):estado=emergencia;pilot=1;break;
case(0xFE):estado=ex_inicio;pilot=1;break;
case(0xFD):estado=arranque;pilot=1;break;
}
if ((state>0)&&(pilot==0))
{
buffer[state-1]=data;
if (state==3)
{
estado=actualizacion;
}
}
}
Podeis ver aolgo que haga mal en estas rutinas? gracias