全心思齐网

51单片机I2C总线读一个字节if(SDA==1)retc=retc+1;是什么意思?

上面2个函数看起来像是用IO模拟I2C接口的例子,如果有现成的I2C接口,那么这些事情都是由CPU的

I2C core实现的,也就是硬件实现的。如果需要IO模拟,那么就需要

先设置SCL为高-》延时-》设置 SCL为低-》延时 这样就实现了一个时钟周期,也就可以读到1bit的内容。


先解释下下面那个函数的流程

SDA_DDR_IN() 设置SDA的IO端口为输入状态

循环读取

设置SCL为低(时钟) 延时-》低电平

设置SCL为高 (时钟)延时-》高电平

读取SDA的IO状态,并保存到byte中

//上面i=8,循环读区8bit即一个字节后退出


设置时钟电平为低

设置SDA为输出


上面流程类似,ACK bit使得接收者通知发送者已经成功接收数据并准备接收下一个数据。而NACK信号表示发送没有结束,会发起restart信号,这样一次可以读取2个字节或者4个字节的信号,在一次读取多个字节的场景有应用。

具体参考下链接

i2c信号的ACK与NACK

匿名回答于2023-10-03 22:43:53


相关知识问答