Ⅰ 求教:兩個51單片機之間的IIC通訊
IIC通訊只能是TTL連接通信,要求兩個單片機是近距離的,應在1米以內。既然是TTL連接,為何不用串口呢,也是TTL連接,串口通信簡單多了。
而IIC通信,兩個單片機都是用引腳來模擬的,通信協議比較麻煩,寫程序很麻煩的,又何苦呢?
Ⅱ 有IIC匯流排的單片機和沒有的有什麼區別編程的時候為什麼都需要模擬IIC時序呢
只有STM32F103C8051F 等檔次較高的單片機才賀行有IIC匯流排介面.
大多數單片機都沒有IIC匯流排介面,用普通IO口模擬程序也不復雜禪判嘩,傳輸速度也不低,沖戚所以一般都用模擬IIC時序
Ⅲ 如何實現雙單片機模擬iic通信
對於疑問1:for循環已經把數據從主器件發送到從器件,沒錯,後面加那幾句是為了釋放數據匯流排,這是晶元協議已經規定了的,為什麼是scl=0;而sda=1呢,應該匯流排SCL與SDA都是線與關系,任意一個器件輸出低電平,都使該匯流排的信號變低,你可能會這么想:為什麼不是scl=1;delay();sda=1;delay();呢?那是因為當scl=1;sda=1;這是終止信號。對吧,這樣寫的話IIC將會停止工作。
對於疑問2:加這幾句也一樣,是晶元現已規定:無論是寫數據還是讀數據,寫完讀完之後需釋放匯流排,for循環語句的意思是:
for(i=0;i<8;i++)
{
scl=1; //拉高時鍾匯流排,開始讀數據
delay();
k=(k<<1)|sda; // 將讀取到的sda數據存放到k中,這里你可能有點無法理解,我舉個例子:剛開始k=0x00(系統默認),當讀取到的sda數據為1時,k=0x01;對吧,反之當讀取到的sda數據為0時,k=0x00;
scl=0;// 讀取完一個數據,拉低時鍾匯流排
delay();
}
就這樣循環8次,這樣一個位元組的數據就從主器件讀到了從器件了。對吧。
如果那個釋放匯流排你理解不了,你就記住,這是晶元協議規定,讀完或寫完都必須釋放匯流排。iic協議都是如此。
希望能幫助到你。
Ⅳ 關於IIC匯流排和單片機
I方C
這個辦並知或法不好,編程也復雜絕伍,而且不通用,只有一個好處就是熟悉了IIC匯流排了
建議每個感測器做單一檢測,然後通過通信(有線或無線)方猛納式進行信息傳輸,主機應盡量用上位機.
Ⅳ 單片機iic匯流排問題
I2C匯流排理解上的難點就是在於
ACK和NACK的使用上,估計你就沒看明白I2C協議。簡要的給你說下:ACK的時候,SCL=1,表示時鍾拉高,增加Delay是為了等待SDA的數據回傳(這時master的SDA是輸入態,slave的SDA是輸出態,SDA==0
即表示Slave響應正確)。ACK主要出現在Command、Address、Data數據傳輸時。
而NACK主要是在讀數據後,結束位前出現,這時Master的SDA為輸出,Slave的SDA為輸入,SDA需要輸出『1』,告知Slave即將讀操作結束。
反觀你的代碼,ACK中強加Delay不是不行,但很難做的通用兼容。建議考慮判斷Sda狀態,同時需要有錯誤退出機制。
最後,你還是再看下I2C
Specification
吧,另外,I2C匯流排是OC門,注意這個特點,應用很靈活。
Ⅵ 單片機iic是做什麼的
與使用IIC協議的晶元連接通信。單片機的IIC一般是指的單片機能夠通過編程實現硬體IIC。你說的是STM32單片機吧?
硬體IIC比模擬IIC速度更快,但是介面固定,並不是一個好選擇。用來學習還是不錯。
Ⅶ 請教兩個51單片機間搞軟IIC協議通信
I2C匯流排是PHLIPS公司推出的一種串列匯流排,是具備多主機系統所需的包括匯流排裁決和高低速器件同步功能的高性能串列匯流排。
I2C匯流排只有兩根雙向信號線。一鋒局局臘昌根是數據線SDA,另一根是時鍾線SCL。
I2C匯流排通過上拉電阻接正電源。當匯流排空閑時,兩根線均為高電平。連到匯流排上的任一器件輸出的低電平,都將使匯流排的信號變低,即各器件的SDA及SCL都是線「與」關系。
所以無論P0還是P1、P2、P3都要吧~但P0有了,應該不用了吧。我也不太懂。一樓的應銀讓該對。
Ⅷ 兩個51單片機如何通過i2c通訊
一般情況下,要進行I2C通訊,你最起碼其中有一個晶元要本身就帶有I2C通訊介面,用這個帶有I2C介面的晶元來作從器件,這樣就相對好處理一點。你要是兩個都不帶這個介面,來模擬的話,很有難度。除非你對I2C協議很清楚,不過從樓主的提問來看,估計就不怎麼熟悉這種協議。
所以建議還是用別的通訊方式吧,比如用SPI,相對會好處理一點,用其中一個晶元的INTx來模擬CS介面,作為從器件在中斷中來處理,另外一個就模擬主器件來控制從器件,這樣或許會好弄點。如果樓主確實需要通訊,還是趕快換個思路吧,要是卡在一個地方動不了,會耽誤你的進程的,祝你好運!
Ⅸ 在單片機中IIC中如果沒有應答信號單片機如何處理
IIC匯流排是每發送一個位元組(8位)數據後,從動設備將主動將SDA引腳拉低,表示數據正常。
如果沒有拉低,說明在發送過程中出現了匯流排時序錯誤,可能會導致意外情況,那麼為了將這種意外降到最低,當沒有應答信號時,應採取以下措施:
1.
數據重新發送,以覆蓋原來的錯誤
2.
設置合理的超時時間,以在超時後允許系統重發。
3.
對於重要數據,比如需要保存的系統參數,在無應答信號時,需要將數據讀回進行校驗,防止出現寫錯誤。