单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 228|回复: 6
收起左侧

单片机中i2c数据传输不太理解,求分析

[复制链接]
帅WQ 发表于 2019-7-13 18:22 | 显示全部楼层 |阅读模式
这图片里的是i2c读函数,66行给SDA赋值1,然后73行经过或运算给dat赋值,这样dat不应该最后是1111 1111吗?有大佬帮忙解释下吗?就是i2c这里数据是如何传输的还不太了解。
批注 2019-07-13 181807.png
回复

使用道具 举报

cjm82 发表于 2019-7-14 00:23 | 显示全部楼层
这个,SDA对应的输入口应该是上拉模式,当IO口悬空或者输入为高时,去读IO口状态为1,但输入低电平时,就会把IO口的电位拉低,去读就会读到0.所以说,每一次读SDA到底是1还是0由该IO口实际输入决定的.另外你这个读程序好像有问题,没看错的话,循环上面应该应该先把SCL拉低再进循环.
回复

使用道具 举报

admin520 发表于 2019-7-14 09:21 | 显示全部楼层
这个符号不是或运算?

51黑论坛_c源文件.rar

2.33 KB, 下载次数: 2

回复

使用道具 举报

CTW. 发表于 2019-7-15 11:11 | 显示全部楼层
你这程序有问题,读数据之前应该设置IO口的模式,数据口为输入,时钟口为输出。
回复

使用道具 举报

wj_yuq 发表于 2019-7-15 12:46 | 显示全部楼层
具体还是得认真研读I2C总线的时序图,总的来说,SDA和SCL在上拉电阻的作用下高电平是预备状态,注意程序中的延时,要将程序所描述的时间,SDA和SCL的高低电平变化画出图形与I2C总线的时序图比较才能准确地分析和理解到位。
回复

使用道具 举报

372501hft 发表于 2019-7-15 14:06 | 显示全部楼层
感觉一楼的靠普点。
回复

使用道具 举报

zhanglijin 发表于 2019-7-15 15:37 | 显示全部楼层
I2C读取数据应该把数据项设置为上拉输入模式,主机放弃对SDA线的占用,只从SDA读取数据,此时SDA线的电平状态是由从机决定的
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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