首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >I2C协议是如何工作的

I2C协议是如何工作的
EN

Stack Overflow用户
提问于 2017-07-26 04:39:45
回答 1查看 647关注 0票数 2

我访问了一些链接,并寻找一些I2C编程的示例程序。我想为I2C协议编写自己的代码。假设DS1307 RTC和LCD连接到8051。我正在使用Keil软件编写一个C程序。我很难为我编写完整的I2C程序,所以我试着把程序分成几个小部分:

  • 模块1:定义和设置LCD和DS1307 RTC的引脚。
  • 模块2:为DS1307编写C代码(为DS1307编写诸如读、写等函数)
  • 模块3:为LCD编写C代码(数据、命令初始化等)
  • 模块4:主要功能

我理解模块1,但我正在寻找帮助理解模块2。所以,我再次希望打破模块2的小部分。

如何将模块2分解成小部件以便于理解?module2中应该有多少个函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-27 00:53:50

模块2本质上是使用8051端口的位敲击的I2C驱动程序。I2C协议遵循顺序。它由开始序列启动,由停止序列停止。你可以有不同的功能。通信由主程序启动,每个从站都有一个地址。因此,在module2中,您将编写以下所有函数。

例如,I2读取序列如下

代码语言:javascript
复制
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

同样,写入从服务器将有以下步骤

代码语言:javascript
复制
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协议在这里

-gPQ

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45317599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档