这时闲着,说下,因为我也曾花了长时间理解这代码,本不想理解,反正套用就是,但后来发现到处都用到这个移位得算法,不理解不得行。不对的地方大伙提出来。
1.DAT初始为0, 先←没影响,反正每一位都是0。但在第二次循环就有用了。这儿一定要清楚。
2.dat|=SDA, 在第一次进循环时,就是吧SDA直接赋值给DAT最低位。“|=”就不解释了,要搞单片机这是基础的基础哦
3.第二次进循环,把上次的DAT最低位←到低二位,再SDA直接赋值给DAT最低位,第一次的SDA就到DAT的第二位啦。
4.以后都类推。。。
5. 传过来的SDA第一次的位是传来的字节的最高位。 循环完了,DAT的最高位就是SDA传过来的第一位。
不晓得我说清楚没得。。
unsigned char I2cReadByte()
{
unsigned char a=0,dat=0;
SDA=1;
Delay10us();
for(a=0;a<8;a++)
{
CSL=1;
Delay10us();
dat<<1;
dat|=SDA;
Delay10us();
SCL=0;
Delay10us();
}
return dat;
}
|