找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2237|回复: 7
收起左侧

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

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

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

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

希望有大佬能指点迷津,非常感谢。
Snipaste_2021-04-27_19-49-44.png
回复

使用道具 举报

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是参与其中的,左移 ...

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

使用道具 举报

ID:825513 发表于 2021-5-5 20:24 | 显示全部楼层
人人学会单片机 发表于 2021-4-28 12:42
可以参考我的贴子 DS3231的时序

好的,谢谢
回复

使用道具 举报

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

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

使用道具 举报

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();

}
回复

使用道具 举报

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 单片机教程网

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