熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
|
lp2323 發(fā)表于 2020-8-14 11:18 謝謝大佬的指教。 |
Y_G_G 發(fā)表于 2020-8-14 13:57 好的,謝謝哈 |
梯度 發(fā)表于 2020-8-14 11:45 I2cReadRespon后面不是完整的代碼,沒(méi)有看到時(shí)鐘的操作 讀取數(shù)據(jù)的應(yīng)答是為了告訴IIC器件下一個(gè)動(dòng)作要做什么 應(yīng)答:繼續(xù)輸出數(shù)據(jù) 不應(yīng)答:停止輸出數(shù)據(jù) |
Y_G_G 發(fā)表于 2020-8-13 22:03 哪為什么I2cReadRespon哪里注釋了呢? |
| 首先baiIIC通信要分清主機(jī)與從機(jī)的關(guān)系,在du主機(jī)對(duì)從機(jī)進(jìn)行寫操zhi作時(shí),一般dao是在傳送完一個(gè)數(shù)據(jù)之后單片機(jī)就進(jìn)入檢測(cè)應(yīng)答信號(hào)狀態(tài):先將兩個(gè)腳置位SDA=1;SCL=1;然后在一定時(shí)間內(nèi)不斷檢測(cè)SDA腳的電平狀態(tài),比如說(shuō)你弄個(gè)循環(huán)for(i=255;i>0;i--){..;if(...)break;...}進(jìn)行不斷判斷,當(dāng)SDA的電平為低時(shí)就跳出循環(huán),說(shuō)明此時(shí)從機(jī)已經(jīng)ACK,就可說(shuō)明是I2C器件拉低;如果為高時(shí),則一直判斷完整個(gè)循環(huán),到最后還為高時(shí),就說(shuō)明沒(méi)有應(yīng)答! 2、寫應(yīng)答和讀應(yīng)答肯定有所區(qū)別的。寫應(yīng)答是在你讀從機(jī)數(shù)據(jù)期間,當(dāng)你接收到一個(gè)數(shù)據(jù)時(shí),可以應(yīng)答的(想繼續(xù)通信就應(yīng)答),就將SDA復(fù)位(拉低),不想應(yīng)答(想結(jié)束通信時(shí))就置位(SDA=1)。讀應(yīng)答則在主機(jī)寫數(shù)據(jù)給從機(jī)期間,每當(dāng)從機(jī)接收到一個(gè)數(shù)據(jù)就會(huì)應(yīng)答一下(將數(shù)據(jù)SDA線拉低),主機(jī)將不斷檢測(cè)SDA線的電平,主機(jī)就是憑SDA的電平狀態(tài)才知道從機(jī)是否已經(jīng)正確地接收了主機(jī)發(fā)送的 |
|
應(yīng)答就是從機(jī)告訴主機(jī)我在聽(tīng)你說(shuō)話,你可以繼續(xù)說(shuō)。如果從機(jī)不在聽(tīng)主機(jī)說(shuō)話,那么主機(jī)就不會(huì)接著往下說(shuō)了。 51里面如果把io口置高就是輸入模式。如果置低就是輸出模式,顯然應(yīng)答是要把io口置高來(lái)接收從機(jī)的信息。 |
|
應(yīng)答: 200us時(shí)間內(nèi),等待從機(jī)回答一個(gè)ACK信號(hào)(就是拉低SDA);如果超過(guò)200us,從機(jī)不會(huì)答,則拉低SCL,等待下一個(gè)操作。 I2cReadRespon怎么注釋了 這個(gè)有沒(méi)有后續(xù)程序? 如果沒(méi)有的話,I2CReadByte()函數(shù)最后第三步 把SCL 拉低了,就不用再重復(fù)低SCL。 |
| 還有在主機(jī)發(fā)送應(yīng)答哪里,等待應(yīng)答是SCL=1,不是應(yīng)該為零才對(duì)嘛? |
|
C語(yǔ)言不會(huì) IIC的應(yīng)答是這樣子的:不管是讀還是寫,每8個(gè)位(一個(gè)字節(jié))之后,一定要有一個(gè)應(yīng)答. 向IIC器件寫入:寫入完成一個(gè)字節(jié)之后,由IIC器件產(chǎn)生應(yīng)答(低電平),單片機(jī)等待低電平,出現(xiàn)低電平就表示器件已經(jīng)有了應(yīng)答 讀取:在讀取完一個(gè)字節(jié)之后,由單片機(jī)向IIC器件發(fā)送應(yīng)答信號(hào)(低電平) |
| 對(duì)方連續(xù)發(fā)送的時(shí)候,也可以不產(chǎn)生應(yīng)答 |
Powered by 單片機(jī)教程網(wǎng)