我访问了一些链接并查找了一些用于I2C编程的示例程序。我想编写自己的I2C协议代码。假设DS1307 RTC和LCD连接到8051.我使用Keil软件编写C程序。为我编写完整的I2C程序非常困难,所以我尝试在一小部分中打破程序:
我理解模块1,但我正在寻求帮助以理解模块2.所以我再次希望将模块2分成小部分。
如何将模块2分成小部分以便于理解? module2中应该有多少个函数?
答案 0 :(得分:0)
模块2本质上是使用8051端口的位冲击的I2C驱动程序。 I2C协议遵循一个序列。它由启动序列启动,并由停止序列停止。您可以拥有不同的功能。通信由主设备启动,每个从设备都有一个地址。所以在module2中,你将编写以下所有函数。
例如,I2读取序列将遵循
I2C_Start(); // set I2C start sequence
I2C_Send(slave_address|1); Send I2C slave address in read mode
I2C_read_ACK(); //master will know slave got data
while(number_of bytes){
I2C_Read();
I2C_send_ACK();
number_of bytes--;
}
I2C_NAK(); //slave need to know so it will not prepare next data.
I2C_Stop(); //stop communication
再次写入奴隶将具有以下步骤
I2C_Start(); // set I2C start sequence
I2C_Send(slave_address); Send I2C slave address in write mode
I2C_read_ACK(); //master will know slave got data
while(number_of bytes){
I2C_Write();
I2C_read_ACK(); //master will know slave got data
number_of bytes--;
}
I2C_Stop(); //stop communication
我也看到了司机 https://circuitdigest.com/microcontroller-projects/digital-clock-using-8051-microcontroller
官方I2C协议就在这里