![]() |
發布時間: 2021-10-31 11:20
正文摘要:各位大神大家好,誰有時間幫我解答一下這個問題,我寫了一個iic的小程序,可為什仿真時iic監視器顯示有數據,而芯片AT24C02C的存儲器里顯示的全是FF,我程序在18號地址寫的是20,是程序 ... |
多謝大師們指教 |
向I2C總線寫入一個字節時,在FOR循環中,每次左移一位,將SCL設置為高電平,必須延遲7微秒,然后將SCL拉低。 并重復下一個數位。 |
你的應答是錯誤的,SDA=1才是對的,這叫釋放SDA端口 SDA=0了就無法檢測電平狀態了 有電腦,有開發板,不是復雜運算,仿真沒有用,仿真要用在真正需要的地方IIC寫入字節是可以很簡單的,不需要那么復雜 void Write_Byte(unsigned char Byte) //寫入器件的應答信號由從機給出 { unsigned char i; unsigned int k; SCL=0; Delay(); for(i=0;i<8;i++) { if(Byte&0x80)SDA=1; else SDA=0; Delay(); SCL=1; Delay(); SCL=0; Byte<<=1; } SCL=1; //給出一個上升沿,用于產生應答信號 Delay(); SDA=1; while((SDA==1)&(k<1000)) //超時就不再等待應答 { k++; Delay(); } //等待SDA出現低電平,出現低電平就表示器件已經應答 SCL=0; } |
我們都是延時5US,不知道7US會不會影響,手冊上是4.7和4US |
|