1

我不明白我将如何编写我的 MCU 以在 I2C 总线上监听它的地址并相应地执行。C 中的许多示例代码都是针对主设备的。我想更好地了解如何为从设备编写代码。我是否使用 SMB0STA 状态寄存器?我在下面发布了一个函数,我认为它会“监听”提示以启动和输出数据。0xA8是“收到自己的地址 + R。ACK 已发送”的状态代码。根据我的 C8051F020 MCU 数据表。

unsigned char i2c_Slave_Read (void)
{
    unsigned char data_out[8];

    data_out[8] = "LED 1 ON";

    while (SI)
    if (SMB0STA == 0xA8)
    {
        P5 = 0x10;
        SMB0DAT = data_out;
    }
}
4

1 回答 1

2

从数据表的第 18.3.3 节开始描述从操作

SMB0ADR您使用您的从地址对寄存器进行编程。地址检测由硬件完成,然后在数据到达时给您一个中断。然后,您可以读取状态SMB0STA以查看发生了什么,并使用SMB0DAT. 见表 18.1,它解释了SMB0STA状态机和你的代码应该采取的行动。

于 2012-10-20T06:22:38.643 回答