标题: 单片机中i2c数据传输不太理解,求分析 [打印本页]

作者: 帅WQ    时间: 2019-7-13 18:22
标题: 单片机中i2c数据传输不太理解,求分析
这图片里的是i2c读函数,66行给SDA赋值1,然后73行经过或运算给dat赋值,这样dat不应该最后是1111 1111吗?有大佬帮忙解释下吗?就是i2c这里数据是如何传输的还不太了解。

批注 2019-07-13 181807.png (318.29 KB, 下载次数: 26)

批注 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, 下载次数: 6


作者: 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线的电平状态是由从机决定的




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1