我未能理解如何编码我的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;
}
}
从数据表的第18.3.3节中描述了从
的第18.3.3节您使用从属地址编程SMB0ADR
注册。地址检测是由硬件完成的,然后在数据到达时为您提供中断。然后,您可以读取SMB0STA
中的状态以查看正在发生的事情,并使用SMB0DAT
读取/写数据。请参阅表18.1,其中解释了SMB0STA
状态机以及您的代码应采取的操作。