找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2260|回復(fù): 5
收起左側(cè)

各位大佬,這個(gè)代碼是i2c總線讀取字節(jié),這個(gè)移位怎么弄啊?可以具體舉個(gè)數(shù)嗎?

[復(fù)制鏈接]
ID:696335 發(fā)表于 2020-4-1 09:35 | 顯示全部樓層 |閱讀模式
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;
}
回復(fù)

使用道具 舉報(bào)

ID:584814 發(fā)表于 2020-4-1 09:55 | 顯示全部樓層
從SDA上讀數(shù)據(jù)一次一個(gè)字節(jié)從高位讀起讀完返回結(jié)果然后玩犢子。
回復(fù)

使用道具 舉報(bào)

ID:720003 發(fā)表于 2020-4-1 10:13 | 顯示全部樓層
確實(shí),我也一直沒(méi)搞懂
回復(fù)

使用道具 舉報(bào)

ID:626079 發(fā)表于 2020-4-1 11:10 | 顯示全部樓層
這時(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;
}
回復(fù)

使用道具 舉報(bào)

ID:696335 發(fā)表于 2020-4-1 15:44 | 顯示全部樓層
xmfjfhcel 發(fā)表于 2020-4-1 11:10
這時(shí)閑著,說(shuō)下,因?yàn)槲乙苍碎L(zhǎng)時(shí)間理解這代碼,本不想理解,反正套用就是,但后來(lái)發(fā)現(xiàn)到處都用到這個(gè)移 ...

第一次循環(huán)時(shí),SDA為什么是賦值給dat最低位,SDA初值是1,dat初值是0,應(yīng)該是0000 0000|1111 1111=1111 1111吧?
回復(fù)

使用道具 舉報(bào)

ID:626079 發(fā)表于 2020-4-3 07:43 | 顯示全部樓層
臭大死王八羔子 發(fā)表于 2020-4-1 15:44
第一次循環(huán)時(shí),SDA為什么是賦值給dat最低位,SDA初值是1,dat初值是0,應(yīng)該是0000 0000|1111 1111=1111 1 ...

SDA是IIC線上SDA線來(lái)的高電平或低電平。高1低0,一次過(guò)來(lái)只有一位吧,只是一位的,不是你說(shuō)的11111111一下都過(guò)來(lái)。一次過(guò)來(lái)只有一位,IIC是一位一位的從SDA線上傳過(guò)來(lái),不是一次就過(guò)來(lái)8位。我的理解是這樣的吧。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表