找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3630|回复: 7
打印 上一主题 下一主题
收起左侧

关于IIC读写EEPROM程序,不太懂为什么要用到进借位sda=CY

[复制链接]
跳转到指定楼层
楼主
昨天获得了一份实机能用的IIC读写EEPROM的源码,在分析的过程中对于  “IIC的发送”  这一部分存在疑惑,思考&&搜索无果后想来请教大佬,如图的红圈所示:1.
sda=CY;
不太懂为什么要用到进借位CY

2.
scl=0;
delay();
sda=1;
delay();

这一部分的内容感觉应该像是主器件等待应答,但对SDA和SCL的设置有点懵

希望有大佬能指点迷津,非常感谢。

Snipaste_2021-04-27_19-49-44.png (71.41 KB, 下载次数: 56)

Snipaste_2021-04-27_19-49-44.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:88256 发表于 2021-4-28 10:32 | 只看该作者
1:IIC的数据是从高位开始的,所以要用左移指令比较合适,而C语言的左移和右移指令,CY是参与其中的,左移指令中,移动一位,D7的内容就移给了CY,这就是为什么要用到CY的原因了,CY并不是只有进位和借位才会用到的。
2:器件时序的差异,一般IIC是需要一定的延时的,否则容易造成因来不及响应而出错,这个可以看IIC器件的时序要求。至于SCL和SDA什么时候为0什么时候为1电平,这个就是IIC的规范了,按要求做就是了。
回复

使用道具 举报

板凳
ID:390416 发表于 2021-4-28 12:42 | 只看该作者
可以参考我的贴子 DS3231的时序
回复

使用道具 举报

地板
ID:825513 发表于 2021-5-5 20:21 | 只看该作者
hhdsdy 发表于 2021-4-28 10:32
1:IIC的数据是从高位开始的,所以要用左移指令比较合适,而C语言的左移和右移指令,CY是参与其中的,左移 ...

原来是这样,我懂了,非常感谢大佬的解答
回复

使用道具 举报

5#
ID:825513 发表于 2021-5-5 20:24 | 只看该作者
人人学会单片机 发表于 2021-4-28 12:42
可以参考我的贴子 DS3231的时序

好的,谢谢
回复

使用道具 举报

6#
ID:609524 发表于 2021-5-14 09:52 | 只看该作者
hhdsdy 发表于 2021-4-28 10:32
1:IIC的数据是从高位开始的,所以要用左移指令比较合适,而C语言的左移和右移指令,CY是参与其中的,左移 ...

大佬那有的芯片不支持cy这个写发怎么办
回复

使用道具 举报

7#
ID:487569 发表于 2021-5-14 14:41 | 只看该作者
杨天想 发表于 2021-5-14 09:52
大佬那有的芯片不支持cy这个写发怎么办

反正就是读temp的位而已。可以这样啊
for(i=0x80;i>0;i>>=1)
{
        scl=0;
        delay();
        if(temp&i)
        {
                sda=1;
        }
        else
        {
                sda=0;
        }
        delay();
        scl=1;
        delay();

}
回复

使用道具 举报

8#
ID:609524 发表于 2021-5-14 14:50 | 只看该作者
ZXWPL 发表于 2021-5-14 14:41
反正就是读temp的位而已。可以这样啊
for(i=0x80;i>0;i>>=1)
{

好的谢谢
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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