再話單片機(jī)通信
前面的文章中已經(jīng)介紹了單片機(jī)的并口通信和UART串口通信,在實(shí)際開發(fā)過程中我們還可能用到很多其他通信協(xié)議,IIC協(xié)議就是其中常見的一種,它的用途很廣,很多資料都講得比較專業(yè)化,這篇文章我們一起通過簡單的文字來熟悉它,以后應(yīng)用時(shí)再講專業(yè)點(diǎn)。
何為IIC
IIC總線全稱是Inter Integrated Circuit總線,也寫做I^2C總線,它是由飛利浦公司推出的一種同步通信協(xié)議,這種協(xié)議只用兩根通信引腳,一根信號(hào)線SDA,另一根時(shí)鐘線SCL,即它使用兩根信號(hào)線就可實(shí)現(xiàn)全雙工的同步數(shù)據(jù)傳輸。 總之,它具有接口線少、占用資源小、控制簡單、通信速率較高等優(yōu)點(diǎn)。 至于為什么,現(xiàn)在我們先不用管,等后面介紹完其他通信協(xié)議后再做對(duì)比了解。
所有與IIC兼容的器件都具有標(biāo)準(zhǔn)的接口,可以把多個(gè)IIC總線器件同時(shí)接到IIC總線上。 *當(dāng)然,因?yàn)镮IC協(xié)議比較簡單,所以我們使用時(shí)通常也會(huì)直接通過軟件模擬協(xié)議來實(shí)現(xiàn),特別是對(duì)于沒有IIC接口的單片機(jī),比如普通51,52單片機(jī)。 * 在總線上通過地址來識(shí)別通信對(duì)象,使它們可以之間可以通過IIC總線直接通信,總線上的各設(shè)備具有唯一的識(shí)別地址,正是因?yàn)榫邆渫ㄐ抛R(shí)別功能,并且簡單容易實(shí)現(xiàn),使得它在電子領(lǐng)域有非常廣的應(yīng)用,比如各種低速存儲(chǔ)IC,各類傳感器等等。
通信線路
因?yàn)樗蠭IC通信引腳內(nèi)部電路使用的是開漏結(jié)構(gòu),所以在實(shí)際應(yīng)用中需要對(duì)其引腳添加上拉電阻,以保證正常通信。
內(nèi)部電路結(jié)構(gòu)
通信協(xié)議總覽
IIC總線協(xié)議上的設(shè)備分主設(shè)備和從設(shè)備,猶如常說的主機(jī)和從機(jī),顧名思義,主設(shè)備是發(fā)送命令或數(shù)據(jù)的器件,從設(shè)備為接收命令或向主設(shè)備傳送數(shù)據(jù)的器件。 并且主設(shè)備控制時(shí)鐘信號(hào),從設(shè)備根據(jù)主設(shè)備的時(shí)鐘信號(hào)和地址信息進(jìn)行響應(yīng)。
主從設(shè)備之間還需要遵循一定的規(guī)則:
- IIC總線空閑狀態(tài)下,SCL和SDA均為高電平,只有在總線空閑時(shí)才允許啟動(dòng)數(shù)據(jù)傳送。
- 起始信號(hào):鐘線SCL為高電平時(shí),數(shù)據(jù)線SDA從高電平到低電平的跳變被定義為起始信號(hào)。
- 停止信號(hào):時(shí)鐘線SCL為高電平時(shí),數(shù)據(jù)線SDA從低電平到高電平的跳變被定義為停止信號(hào)。
- 除以上被定義的起始信號(hào)和停止信號(hào)外,數(shù)據(jù)傳送過程,時(shí)鐘線為高電平時(shí),數(shù)據(jù)線必須保持穩(wěn)定狀態(tài),即時(shí)鐘線為高電平時(shí),數(shù)據(jù)線的任何電平變化都將被看作總線的起始或停止信號(hào)。
協(xié)議總覽
通信一般步驟
發(fā)送命令:
- 發(fā)送起始(START)信號(hào);
- 發(fā)送設(shè)備地址;
- 等待從設(shè)備響應(yīng)(ACK);
- 發(fā)送數(shù)據(jù),一般情況每發(fā)送一個(gè)字節(jié)數(shù)據(jù)后會(huì)等待接收來自從設(shè)備的響應(yīng)(ACK)信號(hào);
- 數(shù)據(jù)發(fā)送完畢,發(fā)送停止(STOP)信號(hào),終止傳輸。
讀取命令:
- 發(fā)送起始(START)信號(hào);
- 發(fā)送設(shè)備地址;
- 等待從設(shè)備響應(yīng)(ACK);
- 接收來自從設(shè)備的數(shù)據(jù),一般情況下每接收一個(gè)字節(jié)數(shù)據(jù)后會(huì)向從設(shè)備發(fā)送一個(gè)響應(yīng)(ACK)信號(hào);
- 接收到最后一個(gè)數(shù)據(jù),發(fā)送一個(gè)無效響應(yīng)(NACK),然后發(fā)送停止(STOP)信號(hào),終止傳輸。
通信程序舉例
- 總線初始化
void init()
{
SCL= 1;
delay ();
SDA= 1;
delay ();
}
- 起始信號(hào)
void start()
{
SDA= 1;
delay ();
SCL= 1;
delay ();
SDA= 0;
delay ();
}
- 應(yīng)答信號(hào)
void respons()
{
uchar i= 0;
SCL= 1;
delay();
while ((SDA== 1)&&(i< 255))
{
i++ ;
}
SCL= 0;
delay();
}
- 停止信號(hào)
void stop()
{
SDA= 0;
delay();
SCL= 1;
delay();
SDA= 1;
delay();
}
- 寫數(shù)據(jù)
void writebyte(uchar date)
{
uchar i,temp;
temp= date;
for(i= 0;i< 8;i++ )
{
temp= temp<< 1;
SCL= 0;
delay();
SDA= CY;
delay();
SCL= 1;
delay();
}
SCL= 0;
delay();
SDA= 1;
delay();
}
- 讀數(shù)據(jù)
void readbyte()
{
uchar i,k;
SCL= 0;
delay();
SDA= 1;
for(i= 0;i< 8;i++ )
{
SCL= 1;
delay();
k= (k<< 1)|SDA;
SCL= 0;
delay();
}
delay();
return k;
}
-
單片機(jī)
+關(guān)注
關(guān)注
6063文章
44915瀏覽量
646904 -
通信協(xié)議
+關(guān)注
關(guān)注
28文章
997瀏覽量
40947 -
IIC
+關(guān)注
關(guān)注
11文章
306瀏覽量
39155 -
uart
+關(guān)注
關(guān)注
22文章
1267瀏覽量
103245 -
串口通信
+關(guān)注
關(guān)注
34文章
1635瀏覽量
56537
發(fā)布評(píng)論請(qǐng)先 登錄
單片機(jī)常用的通信協(xié)議有哪些
單片機(jī)串口通信協(xié)議的實(shí)現(xiàn)實(shí)例分享
單片機(jī)C語言之串口通信協(xié)議

淺析六種常用的單片機(jī)通信協(xié)議
單片機(jī)通信協(xié)議的應(yīng)用情況

單片機(jī)通信協(xié)議有哪一些常用的
單片機(jī)常用的幾種通信協(xié)議

單片機(jī):Modbus 通信協(xié)議介紹

51單片機(jī)IIC通信協(xié)議

單片機(jī)常用的幾種通信協(xié)議

制定通信協(xié)議,實(shí)現(xiàn)單片機(jī)與PC機(jī)通信

如何利用MODBUS通信協(xié)議實(shí)現(xiàn)觸摸屏與單片機(jī)的通信和控制
詳解物聯(lián)網(wǎng)常用協(xié)議:IIC和RS485通信協(xié)議

評(píng)論