我无法理解如何编写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;
}
}
答案 0 :(得分:2)
使用从属地址编写SMB0ADR
寄存器。地址检测由硬件完成,然后在数据到达时为您提供中断。然后,您可以在SMB0STA
中读取状态以查看发生的情况,并使用SMB0DAT
读取/写入数据。请参阅表18.1,其中解释了SMB0STA
状态机以及代码应采取的操作。