這時閑著,說下,因為我也曾花了長時間理解這代碼,本不想理解,反正套用就是,但后來發現到處都用到這個移位得算法,不理解不得行。不對的地方大伙提出來。
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;
}
|