清风逸飞 发表于 2024-10-16 13:44:45

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;
}

乘风飞扬 发表于 2024-10-16 13:51:59

用附件的I2C主从模式例子分别烧录到两个芯片测试,
一个做主机,一个做从机,串口打印通信结果。
用例子调通功能后再进行修改或者移植。

清风逸飞 发表于 2024-10-16 13:57:17

attach://59942.rar

潘豆豆 发表于 2024-10-16 15:04:13

解决了么?

lezjin 发表于 2024-10-16 18:51:36

这个改成I2CIsr.addr++试试
页: [1]
查看完整版本: 8H I2C Slave可以写,但是不能读,读出来是A3 FF