请选择 进入手机版 | 继续访问电脑版

普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 2449|回复: 5

EEPROM里使用I2c读取字节函数(新人贴)

 关闭 [复制链接]

5

主题

24

帖子

72

积分

注册会员

Rank: 2

积分
72
QQ
发表于 2019-8-28 21:34:30 | 显示全部楼层 |阅读模式
第一个问题是为什么刚开始为什么要拉高SDA=1?让什么处于空闲状态?然后为什么拉低了数据就变成了零了?
函数如下:
/*******************************************************************************
* 函数名         : I2cReadByte()
* 函数功能      : 使用I2c读取字节
* 输入             : 无
* 输出             : dat
*备注              : 接收完一个字节SCL=0,SDA=1.
*******************************************************************************/
unsigned char I2cReadByte()
{
unsigned char a=0,dat=0;
SDA=1;   //起始和发送一个字节之后SCL都是0
Delay10us();
for(a=0;a<8;a++)//接收8个字节
{
  SCL=1;
  Delay10us();
  dat<<=1;
  dat|=SDA;
  Delay10us();
  SCL=0;
  Delay10us();
}
return dat;  
}
再然后更想问的,芯片的数据从高位到地位依次通过SDA付给dat吗?但是SDA是怎么变化的?比如芯片里要读出的数据是1000 0001,首先SDA等于芯片的最高位1然后才dat|=SDA的吧?但是什么时候最高位1赋给SDA的?然后又什么时候SDA变成了下一位0?
就是芯片怎么依次把数据通过SDA给了dat?
SCL等于1的时候SDA不会变SDA一等于0SDA就变吗?但为什么又恰恰只得到了要读的数据的下一位而不会跳过去?
求大佬详解一下,跪谢!!
回复

使用道具 举报

5

主题

24

帖子

72

积分

注册会员

Rank: 2

积分
72
QQ
 楼主| 发表于 2019-8-28 21:45:44 | 显示全部楼层
求解!!先谢谢各位大神
回复 支持 反对

使用道具 举报

0

主题

66

帖子

246

积分

中级会员

Rank: 3Rank: 3

积分
246
发表于 2019-8-28 22:19:15 | 显示全部楼层
不为什么,I2C的操作时序就是这样子。
回复 支持 反对

使用道具 举报

5

主题

24

帖子

72

积分

注册会员

Rank: 2

积分
72
QQ
 楼主| 发表于 2019-8-29 11:50:55 | 显示全部楼层
神奇 发表于 2019-8-28 22:19
不为什么,I2C的操作时序就是这样子。

能跟我说一下,I2C的操作时序是怎么样的吗?
写入的时候,大概能理解,但是读取的时候有点难以理解,按照上面的程序我的理解是,SDA=1,然后SCL=1,然后数据移位(变化),然后SCL=0,这理解不了呀,不是应该数据先移位,然后稳定了就SCL=1,延时后,SCL=0,然后数据再移位,不是这样循环的吗?
麻烦大神帮我解答一下谢谢谢谢
回复 支持 反对

使用道具 举报

5

主题

24

帖子

72

积分

注册会员

Rank: 2

积分
72
QQ
 楼主| 发表于 2019-8-29 11:58:09 | 显示全部楼层
有没有大佬可以给我解释一下呀
回复 支持 反对

使用道具 举报

5

主题

24

帖子

72

积分

注册会员

Rank: 2

积分
72
QQ
 楼主| 发表于 2019-9-12 16:54:27 | 显示全部楼层
谁能帮我解释一下啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-3-28 23:18 , Processed in 0.086462 second(s), 31 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表