代码从AT24C64中随机读出字节功能正常.但从datasheet上没有看明白.请各位大侠多多指点. 1)读取顺序见Figure5,以下代码功能是在Read命令发送给24C64后,从24C64接收一个字节内容. 2)SCL时钟与SDA OUT的关系见图6. UCHAR I2C_Receive_Byte(void) { UCHAR i = 8, d; while ( i--) { d = d << 1; Delay10uS();I2C_SCK =1; if ( I2C_SDA ) d++; Delay10uS();I2C_SCK =0; } return d; }
问题点: 1.为什么在开始要执行Delay10uS();I2C_SDA = 1; 2. 按以下说明,应该是在下降沿时输出数据(即SCK为0后,再从SDA读出数据),但代码中为什么是在SCL为高电平时从SDA中读取数据: Delay10uS();I2C_SCK =1;if ( I2C_SDA ) d++; SERIAL CLOCK (SCL): The SCL input is used to positive edge clock data into each EEPROM device and negative edge clock data out of each device. 3.Delay10uS()在前或后有区别吗?代码中都是把Delay10uS放在前面,如果改为放在赋值后面,有什么不同吗?即改为: I2C_SDA = 1; Delay10uS(); … I2C_SCK =1; Delay10uS();…I2C_SCK =0; Delay10uS();
|