普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 3466|回复: 3

I2C

[复制链接]

1

主题

3

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2021-1-8 20:25:22 | 显示全部楼层 |阅读模式
1金钱
void I2cStart()
{
        SDA=1;
        Delay10us();
        SCL=1;         //这里标红的,这个可以不写吗?
        Delay10us();
        SDA=0;
        Delay10us();
        SCL=0;                       
        Delay10us();               
}
我时序图,没怎么看懂!
您们好,可以教教吗?
我知道答案 本帖寻求最佳答案回答被采纳后将获得系统奖励10 金钱 , 目前已有3人回答

回复

使用道具 举报

1

主题

3

帖子

11

积分

新手上路

Rank: 1

积分
11
 楼主| 发表于 2021-1-8 20:29:43 | 显示全部楼层
还有延时是啥意思?延时10us后,又怎么了呢?电平保持不变?
回复

使用道具 举报

20

主题

1344

帖子

8372

积分

论坛元老

Rank: 8Rank: 8

积分
8372
发表于 2021-1-10 11:18:33 | 显示全部楼层
当然必须写。
时序图说明了:
SCL拉高,然后SDA拉高至少4.7us,再然后SDA拉低至少4us
所以程序写成:
voidI2cStart()
{
  SDA=1;
  Delay10us();
  SCL=1;
  Delay10us();//建立时间是SDA保持时间>4.7us
  SDA=0;
  Delay10us();//保持时间是>4us
  SCL=0;  
  Delay10us();  
}


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

1

主题

3

帖子

11

积分

新手上路

Rank: 1

积分
11
 楼主| 发表于 2021-1-10 19:26:51 | 显示全部楼层
HC6800-ES-V2.0 发表于 2021-1-10 11:18
当然必须写。
时序图说明了:
SCL拉高,然后SDA拉高至少4.7us,再然后SDA拉低至少4us

voidI2cStart()
{
  SCL=1;
  Delay10us();
  SDA=1;
  Delay10us();
  SDA=0;
  Delay10us();
  SCL=0;  
  Delay10us();  

}
这里面的顺序,我没弄明白。为啥先写SDA=1;延时10us,再写SCL=1;延时10us,先把SCL置高电平,然后SDA置高电平10us,再置低电平10us,然后再把SCL置低电平(为啥把它,置低电平也不懂,我应该再多看看资料再问的
回复

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2024-4-20 21:15 , Processed in 0.089618 second(s), 33 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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