8H I2C Slave可以写,但是不能读,读出来是A3 FF
这个是i2c slave的中断,在外面可以写成功,但是读不成功void I2C_Isr() interrupt I2C_VECTOR
{
char store;
store = P_SW2;
P_SW2 |= 0x80;
if (I2CSLST & 0x40)
{
I2CSLST &= ~0x40; //´¦ÀíSTARTʼþ
}
else if (I2CSLST & 0x20)
{
I2CSLST &= ~0x20; //´¦ÀíRECVʼþ£¬SLACKOÉèÖÃΪ0
if (I2CIsr.isda)
{
I2CIsr.isda = 0; //´¦ÀíRECVʼþ£¨RECV DEVICE ADDR£©
}
else if (I2CIsr.isma)
{
I2CIsr.isma = 0; //´¦ÀíRECVʼþ£¨RECV MEMORY ADDR£©
I2CIsr.addr = I2CRXD;
I2CTXD = I2C_Buffer;
}
else
{
I2C_Buffer = I2CRXD; //´¦ÀíRECVʼþ£¨RECV DATA£©
}
}
else if (I2CSLST & 0x10)
{
I2CSLST &= ~0x10; //´¦ÀíSENDʼþ
if (I2CSLST & 0x02)
{
I2CTXD = 0xff;
}
else
{
I2CTXD = I2C_Buffer[++I2CIsr.addr];
}
}
else if (I2CSLST & 0x08)
{
I2CSLST &= ~0x08; //´¦ÀíSTOPʼþ
I2CIsr.isda = 1;
I2CIsr.isma = 1;
DisplayFlag = 1;
}
P_SW2 = store;
}
用附件的I2C主从模式例子分别烧录到两个芯片测试,
一个做主机,一个做从机,串口打印通信结果。
用例子调通功能后再进行修改或者移植。
attach://59942.rar 解决了么? 这个改成I2CIsr.addr++试试
页:
[1]