我无法理解我将如何编码我的MCU来监听它在I2C总线上的地址并相应地执行。C语言中的许多示例代码都是针对主设备的。我想更好地理解如何为从属设备编写代码。我是否使用SMB0STA状态寄存器?我在下面发布了一个函数,我认为该函数将“监听”提示以启动和输出数据。0xA8
是“Own address+R received”的状态码。根据我的C8051F020单片机数据表。
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;
}
}
最佳答案
从操作在datasheet的第18.3.3节中描述
用从机地址对SMB0ADR
寄存器进行编程。地址检测是由硬件完成的,当数据到达时,硬件会给你一个中断。然后,您可以读取SMB0STA
中的状态以查看发生了什么,并使用SMB0DAT
读取/写入数据。请参阅表18.1,其中解释了SMB0STA
状态机和代码应该采取的操作。