⑴ 很糾結啊!I2C通信,為什麼晶元有些要寫「讀寫驅動程序」,有些則不要
樓主錯了,51單片機是沒有集成I2C模塊的,那是用普通的IO口去模擬的I2C的時序,所以就需要把IO口隨時的變化成需要的電平,而ARM或者其他的,單片機里集成了IIC模塊,你只需要把寄存器設置好了,由模塊自己按照標準的IIC協議執行。
⑵ 單片機中 I2C匯流排協議中的問題
SCL=0; //拉低時鍾線,准備接收數據,否則後面循環中就無法出第1個上升沿了
delay(); //延時
SDA=1; //釋放數據線(不驅動,懸浮)由發送方驅動此線
delay(); //延時
for(i=0;i<8;i++) //8次循環每次接收1位
{
SCL=1; //拉高時鍾線,出一個上升沿,讀取數據,發送方會保持數據在SDA線上
delay();
k=(k<<1)|SDA;//k的其他位左移,將數據線狀態保存在k的最低位
SCL=0; //拉低時鍾線,等待發送放在數據線上放下1位
delay();
}
⑶ i2c的驅動睡眠和恢復操作怎麼被調用
I2C 有主機模式和從機模式,,所以有2個工程,,分別給2個單片機,,
也可以在一個工程中完成,,也就是1個單片機有時做主機 有時做從機
那你就要寫一個主機和從機的判斷函數了,,
所以樓主你先要搞清楚 誰是主機 誰是從機 誰給誰發數據!!!弄清楚再寫代碼!
至於為什麼加nop延時,,主要是因為I2C協議SCL,SDA的高低電平持續時間要求 是有嚴格的規
定 特別是對頻率晶振比較大的單片機 所以加NOP保證高電平 或者低電平 到位
一般規定5US 如果只持續1US 就不行
⑷ stc89c52單片機 實現i2c的引腳固定嗎
stc89c52單片機 實現i2c的引腳固定嗎?
第一種方式是固定的:如果使用stc89c52單片機I2C控制對EEPROM進行讀寫,讀寫訪問寄存器就好了,不用編代碼,這種情況下只能使用規定的兩個引腳,否則實現不了讀寫;
第二種方式不是固定的:你可以任意使用stc89c52單片機兩個引腳,作為數據和時鍾,然後自己編寫模塊I2C代碼,網上一大把,隨便下載都可以用。
⑸ 51單片機I2C匯流排的問題。關於EEPROM
你剛把數據寫進去立馬從中讀出來,硬體反應不過來,必須要延時一段時間,void delay1(int z)
{
intr x,y;
for(x=z;x>0;x--)
for(y=123;y>0;y--);
}
在寫函數之後加delay1(1000);
就對了
⑹ 1602液晶顯示屏在51單片機上用I2C協議驅動
去網路網頁搜51虛擬I2C,有很多相關資料和程序可供參考。
⑺ 如何用51單片機模擬i2c協議
I2C 協議包含了起始條件,停止條件,串列移位;這裡麵包含了三段時序。
下面根據應用分析:
1,假如你要寫一個ic的通信協議,而這個通信協議用的是I2C。
一般需要I2C通信的ic都會告訴你具體的時序圖,你可以查看具體的IC技術手冊,然後你根據時序圖的高低電位和電平改變的先後順序來寫I2C協議就行了,注意速度。
2,你想做一個模擬 I2C 驅動協議。
你在網上搜索一下I2C時序圖(有很多哦),然後你根據時序圖上面的電平高低,電平改變順序來寫這個協議就行了。
⑻ 現在要寫一個stm32的i2c驅動,以前沒任何單片機基礎,現學的,有軟體編程基礎
不理解你說的I2C驅動是什麼意思,是指用stm32與其他設備進行I2C通信嗎?還是用PC通過I2C控制stm32?
如果是後者,直接看I2C協議。
如果是前者,stm32有硬體I2C,但是都說不太好用bug多,建議用stm32模擬I2C。首先學習如何把程序下載到單片機,然後看stm32的時鍾樹圖和官方庫函數(主要看初始化部分),設備初始化完畢之後就可以執行你的I2C代碼了。
⑼ 這是一個單片機I2C的程序,麻煩高手幫忙指點下;為什麼有時顯示不行呢,雖然概率很低,要隔很長
1、可能延時時間不夠,器件讀寫速度慢,跟不上。
void delay()
{ ;; } //延遲5毫秒左右;
你用多少的晶振?12M的晶振標准51核,只能延時2個微秒。
2、write_byte(0xaa);
respons();
像這種寫入數據的操作需要時間比較長,你的等待時間可能不夠。查看你器件的datasheet,看它的寫入時間需要多久。
3、拿示波器看一下你IIC匯流排的波形的上升時間和下降時間能不能滿足IIC規范的要求。
4、嵌入式系統從穩定性考慮,最好對每個函數的操作成功與否進行判斷,系統要對錯誤的情況進行處理。比如樓主的respons();函數,比較好的一種處理方式是:如果等待超時,那麼返回錯誤碼,由上層函數決定如何處理錯誤。重發or放棄,等等。 樓主剛剛開始學習不必要深究,可以思考下這方面的問題。
⑽ 請問I2C匯流排的驅動程序 要學會自己寫嘛 還是平時寫的時候只要復制過來,拿來用就可以 求指教啊!!!
如果你學單片機的哈,肯定是要學會自己寫的,最起碼你要能把別人的程序能調通,能通信,而且不同單片機的I2C協議是有部分的不同的,例如有的I2C在接收的時候會發兩次,第一次不是數據而是要把它讀空,第二次才是數據,如果你用正常的單片機協議肯定就讀不到數據了