I2C 协议如何工作
How does I2C Protocol work
我访问了一些链接并寻找了一些用于 I2C 编程的示例程序。我想为 I2C 协议编写自己的代码。假设 DS1307 RTC 和 LCD 连接到 8051。我正在使用 Keil 软件编写 C 程序。对我来说编写整个 I2C 程序非常困难,所以我尝试将程序分成小部分:
- 模块 1:定义和设置 LCD 和 DS1307 RTC 的引脚
- 模块二:为DS1307编写C代码(为DS1307编写读、写等功能)
- 模块 3:为 LCD 编写 C 代码(数据、命令初始化等)
- 模块 4:主要功能
我了解模块 1,但我正在寻求帮助以了解模块 2。因此,我再次希望将模块 2 分成几个小部分。
如何将模块 2 分成小部分以便于理解? module2 中应该有多少个函数?
模块 2 本质上是 I2C driver 使用 8051 端口的位转换。 I2C 协议遵循一个序列。它由启动序列启动,由停止序列停止。你可以有不同的功能。通信由主机启动,每个从机都有一个地址。所以在模块 2 中,您将编写以下所有函数。
例如,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
我也看到了 driver
https://circuitdigest.com/microcontroller-projects/digital-clock-using-8051-microcontroller
官方 I2C 协议在这里
我访问了一些链接并寻找了一些用于 I2C 编程的示例程序。我想为 I2C 协议编写自己的代码。假设 DS1307 RTC 和 LCD 连接到 8051。我正在使用 Keil 软件编写 C 程序。对我来说编写整个 I2C 程序非常困难,所以我尝试将程序分成小部分:
- 模块 1:定义和设置 LCD 和 DS1307 RTC 的引脚
- 模块二:为DS1307编写C代码(为DS1307编写读、写等功能)
- 模块 3:为 LCD 编写 C 代码(数据、命令初始化等)
- 模块 4:主要功能
我了解模块 1,但我正在寻求帮助以了解模块 2。因此,我再次希望将模块 2 分成几个小部分。
如何将模块 2 分成小部分以便于理解? module2 中应该有多少个函数?
模块 2 本质上是 I2C driver 使用 8051 端口的位转换。 I2C 协议遵循一个序列。它由启动序列启动,由停止序列停止。你可以有不同的功能。通信由主机启动,每个从机都有一个地址。所以在模块 2 中,您将编写以下所有函数。
例如,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
我也看到了 driver https://circuitdigest.com/microcontroller-projects/digital-clock-using-8051-microcontroller
官方 I2C 协议在这里