|
這時(shí)閑著,說(shuō)下,因?yàn)槲乙苍碎L(zhǎng)時(shí)間理解這代碼,本不想理解,反正套用就是,但后來(lái)發(fā)現(xiàn)到處都用到這個(gè)移位得算法,不理解不得行。不對(duì)的地方大伙提出來(lái)。
1.DAT初始為0, 先←沒(méi)影響,反正每一位都是0。但在第二次循環(huán)就有用了。這兒一定要清楚。
2.dat|=SDA, 在第一次進(jìn)循環(huán)時(shí),就是吧SDA直接賦值給DAT最低位!皘=”就不解釋了,要搞單片機(jī)這是基礎(chǔ)的基礎(chǔ)哦
3.第二次進(jìn)循環(huán),把上次的DAT最低位←到低二位,再SDA直接賦值給DAT最低位,第一次的SDA就到DAT的第二位啦。
4.以后都類推。。。
5. 傳過(guò)來(lái)的SDA第一次的位是傳來(lái)的字節(jié)的最高位。 循環(huán)完了,DAT的最高位就是SDA傳過(guò)來(lái)的第一位。
不曉得我說(shuō)清楚沒(méi)得。。
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;
}
|
|