找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關(guān)于IIC的應(yīng)答,請各位大佬幫幫忙,剛剛學(xué)51單片機(jī)

[復(fù)制鏈接]
ID:808940 發(fā)表于 2020-8-13 21:20 來自手機(jī) | 顯示全部樓層 |閱讀模式
5黑幣
這里的應(yīng)答怎么理解,還有后面的I2cReadRespon怎么注釋了

1597324697053.jpg
1597324790778.jpg
回復(fù)

使用道具 舉報(bào)

ID:813988 發(fā)表于 2020-8-13 21:53 | 顯示全部樓層
對方連續(xù)發(fā)送的時候,也可以不產(chǎn)生應(yīng)答
回復(fù)

使用道具 舉報(bào)

ID:401564 發(fā)表于 2020-8-13 22:03 | 顯示全部樓層
C語言不會
IIC的應(yīng)答是這樣子的:不管是讀還是寫,每8個位(一個字節(jié))之后,一定要有一個應(yīng)答.
向IIC器件寫入:寫入完成一個字節(jié)之后,由IIC器件產(chǎn)生應(yīng)答(低電平),單片機(jī)等待低電平,出現(xiàn)低電平就表示器件已經(jīng)有了應(yīng)答
讀取:在讀取完一個字節(jié)之后,由單片機(jī)向IIC器件發(fā)送應(yīng)答信號(低電平)
回復(fù)

使用道具 舉報(bào)

ID:808940 發(fā)表于 2020-8-13 22:42 來自手機(jī) | 顯示全部樓層
還有在主機(jī)發(fā)送應(yīng)答哪里,等待應(yīng)答是SCL=1,不是應(yīng)該為零才對嘛?
回復(fù)

使用道具 舉報(bào)

ID:713023 發(fā)表于 2020-8-13 22:54 | 顯示全部樓層
應(yīng)答:
     200us時間內(nèi),等待從機(jī)回答一個ACK信號(就是拉低SDA);如果超過200us,從機(jī)不會答,則拉低SCL,等待下一個操作。
I2cReadRespon怎么注釋了
    這個有沒有后續(xù)程序?
    如果沒有的話,I2CReadByte()函數(shù)最后第三步 把SCL 拉低了,就不用再重復(fù)低SCL。
回復(fù)

使用道具 舉報(bào)

ID:654028 發(fā)表于 2020-8-14 09:36 | 顯示全部樓層
應(yīng)答就是從機(jī)告訴主機(jī)我在聽你說話,你可以繼續(xù)說。如果從機(jī)不在聽主機(jī)說話,那么主機(jī)就不會接著往下說了。
51里面如果把io口置高就是輸入模式。如果置低就是輸出模式,顯然應(yīng)答是要把io口置高來接收從機(jī)的信息。
回復(fù)

使用道具 舉報(bào)

ID:814108 發(fā)表于 2020-8-14 11:18 | 顯示全部樓層
首先baiIIC通信要分清主機(jī)與從機(jī)的關(guān)系,在du主機(jī)對從機(jī)進(jìn)行寫操zhi作時,一般dao是在傳送完一個數(shù)據(jù)之后單片機(jī)就進(jìn)入檢測應(yīng)答信號狀態(tài):先將兩個腳置位SDA=1;SCL=1;然后在一定時間內(nèi)不斷檢測SDA腳的電平狀態(tài),比如說你弄個循環(huán)for(i=255;i>0;i--){..;if(...)break;...}進(jìn)行不斷判斷,當(dāng)SDA的電平為低時就跳出循環(huán),說明此時從機(jī)已經(jīng)ACK,就可說明是I2C器件拉低;如果為高時,則一直判斷完整個循環(huán),到最后還為高時,就說明沒有應(yīng)答! 2、寫應(yīng)答和讀應(yīng)答肯定有所區(qū)別的。寫應(yīng)答是在你讀從機(jī)數(shù)據(jù)期間,當(dāng)你接收到一個數(shù)據(jù)時,可以應(yīng)答的(想繼續(xù)通信就應(yīng)答),就將SDA復(fù)位(拉低),不想應(yīng)答(想結(jié)束通信時)就置位(SDA=1)。讀應(yīng)答則在主機(jī)寫數(shù)據(jù)給從機(jī)期間,每當(dāng)從機(jī)接收到一個數(shù)據(jù)就會應(yīng)答一下(將數(shù)據(jù)SDA線拉低),主機(jī)將不斷檢測SDA線的電平,主機(jī)就是憑SDA的電平狀態(tài)才知道從機(jī)是否已經(jīng)正確地接收了主機(jī)發(fā)送的
回復(fù)

使用道具 舉報(bào)

ID:808940 發(fā)表于 2020-8-14 11:45 來自手機(jī) | 顯示全部樓層
Y_G_G 發(fā)表于 2020-8-13 22:03
C語言不會
IIC的應(yīng)答是這樣子的:不管是讀還是寫,每8個位(一個字節(jié))之后,一定要有一個應(yīng)答.
向IIC器件寫入 ...

哪為什么I2cReadRespon哪里注釋了呢?
回復(fù)

使用道具 舉報(bào)

ID:401564 發(fā)表于 2020-8-14 13:57 | 顯示全部樓層
梯度 發(fā)表于 2020-8-14 11:45
哪為什么I2cReadRespon哪里注釋了呢?

I2cReadRespon后面不是完整的代碼,沒有看到時鐘的操作
讀取數(shù)據(jù)的應(yīng)答是為了告訴IIC器件下一個動作要做什么
應(yīng)答:繼續(xù)輸出數(shù)據(jù)
不應(yīng)答:停止輸出數(shù)據(jù)
回復(fù)

使用道具 舉報(bào)

ID:808940 發(fā)表于 2020-8-18 17:31 來自手機(jī) | 顯示全部樓層
Y_G_G 發(fā)表于 2020-8-14 13:57
I2cReadRespon后面不是完整的代碼,沒有看到時鐘的操作
讀取數(shù)據(jù)的應(yīng)答是為了告訴IIC器件下一個動作要做 ...

好的,謝謝哈
回復(fù)

使用道具 舉報(bào)

ID:808940 發(fā)表于 2020-8-18 17:34 來自手機(jī) | 顯示全部樓層
lp2323 發(fā)表于 2020-8-14 11:18
首先baiIIC通信要分清主機(jī)與從機(jī)的關(guān)系,在du主機(jī)對從機(jī)進(jìn)行寫操zhi作時,一般dao是在傳送完一個數(shù)據(jù)之后單 ...

謝謝大佬的指教。
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

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