|
第一个问题是为什么刚开始为什么要拉高SDA=1?让什么处于空闲状态?然后为什么拉低了数据就变成了零了?
函数如下:
/*******************************************************************************
* 函数名 : I2cReadByte()
* 函数功能 : 使用I2c读取字节
* 输入 : 无
* 输出 : dat
*备注 : 接收完一个字节SCL=0,SDA=1.
*******************************************************************************/
unsigned char I2cReadByte()
{
unsigned char a=0,dat=0;
SDA=1; //起始和发送一个字节之后SCL都是0
Delay10us();
for(a=0;a<8;a++)//接收8个字节
{
SCL=1;
Delay10us();
dat<<=1;
dat|=SDA;
Delay10us();
SCL=0;
Delay10us();
}
return dat;
}
再然后更想问的,芯片的数据从高位到地位依次通过SDA付给dat吗?但是SDA是怎么变化的?比如芯片里要读出的数据是1000 0001,首先SDA等于芯片的最高位1然后才dat|=SDA的吧?但是什么时候最高位1赋给SDA的?然后又什么时候SDA变成了下一位0?
就是芯片怎么依次把数据通过SDA给了dat?
SCL等于1的时候SDA不会变SDA一等于0SDA就变吗?但为什么又恰恰只得到了要读的数据的下一位而不会跳过去?
求大佬详解一下,跪谢!! |
|