㈠ I2C協議從機怎麼發送ACK信號啊,就是把SDA拉低,要怎麼編程實現啊
以AT89c52單片機為例,主機發送指令過程中,當需要判斷SDA是否被拉低時,先值高SDA,然後反復讀取SDA電平,當SDA=0時就判斷SDA被拉低了,在一定時間內沒有讀取到SDA=0就判斷出錯。
匯編舉例:
aACK: MOV R7,#0 ;
LOOP: CLR C ;
MOV C, IO_SDA ;
NOP;
JNC IO_SDA , LOOP_OK ;有確認信號轉
DJNZ R7, LOOP ;
LOOP_ERR: //一定時間內沒有檢測到ACK信號。
......
LOOP_OK: //一定時間內檢測到ACK信號。
......
㈡ 單片機 iic 應答信號程序中有一句 while((sda==1)&&(i<250))i++ 我想知道 為什麼i<250,250這個數字從哪
為了防止IIC的sda信號異常導致在while的死循環,用i來限定sda跳變為0等待時間,如果sda==0則跳出while循環,如果sda==1,最多等待i的255次增量計數後跳出循環,i++是在while循環體內的。IIC對時序有嚴格的要求,由於各種原因介面上信號異常是有可能發生的。
器件地址0101是器件的標識,多種IIC器件通信時沒有這個標識就亂套了,這與i<255八輩子扯不上關系,i就是一個計時等待的變數。
你的問題補充中對24C08器件地址的理解是錯誤的,有的還用i <100,有的連i都沒有,那又怎麼理解呢。
㈢ stm8 硬體i2c從機接收程序
首先,iic做從機的程序源碼網上比較多,我就不發了,說下調試方法。版
相信主機部分已經調權試通過了,在這個前提下,樓主的思路是沒錯的,接收非空,讀數據。iic屬於一個硬體介面,出問題的時候需要藉助示波器,監測每個時候每個數據的波形,同時用JTAG在線調試,分析從機相關寄存器的狀態,與自己計算的理論值做對比看是否正確,最終會找到一個出錯的地方,看著一堆數據確實會枯燥一些,樓主加油,祝成功~
㈣ 51單片機關於IIC的問題
在主機發送應答信號後,把數據匯流排拉高,就是為了下一步檢測從機的應答信號,這程序是連續的,既然前面的程序已經拉高了,准備檢測從機的應答信號了,就不用再拉高一次啦,如果你願意再拉一次也行啊。
㈤ 51單片機如何模擬I2C匯流排中從機接收ID,發送數據的程序
I2C是單主多從的,不是樓主說的從機接受ID,而是單片機發送ID(由晶元的地址和晶元地址管腳的高低電平決定),然後對應ID的從機發送應答信號。
然後兩者再進行數據傳輸。多看一下IIC的Datasheet,不是很難的。收發時的時序是關鍵。