普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 2454|回复: 1

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

 关闭 [复制链接]

3

主题

4

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2019-8-16 18:17:25 | 显示全部楼层 |阅读模式
杀我啊┭┮﹏┭┮。
第一个问题是为什么刚开始为什么要拉高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就变吗?但为什么又恰恰只得到了要读的数据的下一位而不会跳过去?
求大佬啊,如果大佬愿意QQ聊请加我QQ826615304,开学大二转专业了刚开始学单片机。
回复

使用道具 举报

0

主题

66

帖子

246

积分

中级会员

Rank: 3Rank: 3

积分
246
发表于 2019-8-17 08:56:56 | 显示全部楼层
别问为什么,自己去看看I2C操作时序。
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2024-4-29 07:16 , Processed in 0.082373 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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