九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
iic

折疊 編輯本段 I2C簡(jiǎn)介

即I2C,一種總線結(jié)構(gòu)。

例如:內(nèi)存中的SPD信息,通過(guò)IIC,與BX芯片組聯(lián)系,IIC 存在于英特爾PIIX4結(jié)構(gòu)體系中。

隨著大規(guī)模集成電路技術(shù)的發(fā)展,把CPU和一個(gè)單獨(dú)工作系統(tǒng)所必需的ROM、RAM、I/O端口、A/D、D/A等外圍電路集成在一個(gè)單片內(nèi)而制成的單片機(jī)或微控制器愈來(lái)愈方便。目前,世界上許多公司生產(chǎn)單片機(jī),品種很多。其中包括各種字長(zhǎng)的CPU,各種容量的ROM、RAM以及功能各異的I/O接口電路等等,但是,單片機(jī)的品種規(guī)格仍然有限,所以只能選用某種單片機(jī)來(lái)進(jìn)行擴(kuò)展。擴(kuò)展的方法有兩種:一種是并行總線,另一種是串行總線。由于串行總線的連線少,結(jié)構(gòu)簡(jiǎn)單,往往不用專門的母板和插座而直接用導(dǎo)線連接各個(gè)設(shè)備。因此,采用串行線可大大簡(jiǎn)化系統(tǒng)的硬件設(shè)計(jì)。PHILIPS公司早在十幾年前就推出了I2C串行總線,利用該總線可實(shí)現(xiàn)多主機(jī)系統(tǒng)所需的裁決和高低速設(shè)備同步等功能。因此,這是一種高性能的串行總線

飛利浦電子公司日前推出新型二選一I2C主選擇器,可以使兩個(gè)I2C主設(shè)備中的任何一個(gè)與共享資源連接,廣泛適用于從MP3播放器到服務(wù)器等計(jì)算、通信和網(wǎng)絡(luò)應(yīng)用領(lǐng)域,從而使制造商和終端用戶從中獲益。PCA9541可以使兩個(gè)I2C主設(shè)備在互不連接的情況下與同一個(gè)從設(shè)備相連接,從而簡(jiǎn)化了設(shè)計(jì)的復(fù)雜性。此外,新產(chǎn)品以單器件替代了I2C多個(gè)主設(shè)備應(yīng)用中的多個(gè)芯片,有效節(jié)省了系統(tǒng)成本。

折疊 編輯本段 硬件結(jié)構(gòu)

I2C串行總線一般有兩根信號(hào)線,一根是雙向的數(shù)據(jù)線SDA,另一根是時(shí)鐘線SCL。所有接到I2C總線設(shè)備上的串行數(shù)據(jù)SDA都接到總線的SDA上,各設(shè)備的時(shí)鐘線SCL接到總線的SCL上。

為了避免總線信號(hào)的混亂,要求各設(shè)備連接到總線的輸出端時(shí)必須是漏極開(kāi)路(OD)輸出或集電極開(kāi)路(OC)輸出。設(shè)備上的串行數(shù)據(jù)線SDA接口電路應(yīng)該是雙向的,輸出電路用于向總線上發(fā)送數(shù)據(jù),輸入電路用于接收總線上的數(shù)據(jù)。而串行時(shí)鐘線也應(yīng)是雙向的,作為控制總線數(shù)據(jù)傳送的主機(jī),一方面要通過(guò)SCL輸出電路發(fā)送時(shí)鐘信號(hào),另一方面還要檢測(cè)總線上的SCL電平,以決定什么時(shí)候發(fā)送下一個(gè)時(shí)鐘脈沖電平;作為接受主機(jī)命令的從機(jī),要按總線上的SCL信號(hào)發(fā)出或接收SDA上的信號(hào),也可以向SCL線發(fā)出低電平信號(hào)以延長(zhǎng)總線時(shí)鐘信號(hào)周期。總線空閑時(shí),因各設(shè)備都是開(kāi)漏輸出,上拉電阻Rp使SDA和SCL線都保持高電平。任一設(shè)備輸出的低電平都將使相應(yīng)的總線信號(hào)線變低,也就是說(shuō):各設(shè)備的SDA是"與"關(guān)系,SCL也是"與"關(guān)系。

總線對(duì)設(shè)備接口電路的制造工藝和電平都沒(méi)有特殊的要求(NMOS、CMOS都可以兼容)。在I2C總線上的數(shù)據(jù)傳送率可高達(dá)每秒十萬(wàn)位,高速方式時(shí)在每秒四十萬(wàn)位以上。另外,總線上允許連接的設(shè)備數(shù)以其電容量不超過(guò)400pF為限。

總線的運(yùn)行(數(shù)據(jù)傳輸)由主機(jī)控制。所謂主機(jī)是指啟動(dòng)數(shù)據(jù)的傳送(發(fā)出啟動(dòng)信號(hào))、發(fā)出時(shí)鐘信號(hào)以及傳送結(jié)束時(shí)發(fā)出停止信號(hào)的設(shè)備,通常主機(jī)都是微處理器。被主機(jī)尋訪的設(shè)備稱為從機(jī)。為了進(jìn)行通訊,每個(gè)接到I2C總線的設(shè)備都有一個(gè)唯一的地址,以便于主機(jī)尋訪。主機(jī)和從機(jī)的數(shù)據(jù)傳送,可以由主機(jī)發(fā)送數(shù)據(jù)到從機(jī),也可以由從機(jī)發(fā)到主機(jī)。凡是發(fā)送數(shù)據(jù)到總線的設(shè)備稱為發(fā)送器,從總線上接收數(shù)據(jù)的設(shè)備被稱為接受器。

I2C總線上允許連接多個(gè)微處理器以及各種外圍設(shè)備,如存儲(chǔ)器、LED及LCD驅(qū)動(dòng)器、A/D及D/A轉(zhuǎn)換器等。為了保證數(shù)據(jù)可靠地傳送,任一時(shí)刻總線只能由某一臺(tái)主機(jī)控制,各微處理器應(yīng)該在總線空閑時(shí)發(fā)送啟動(dòng)數(shù)據(jù),為了妥善解決多臺(tái)微處理器同時(shí)發(fā)送啟動(dòng)數(shù)據(jù)的傳送(總線控制權(quán))沖突,以及決定由哪一臺(tái)微處理器控制總線的問(wèn)題,I2C總線允許連接不同傳送速率的設(shè)備。多臺(tái)設(shè)備之間時(shí)鐘信號(hào)的同步過(guò)程稱為同步化。

折疊 編輯本段 數(shù)據(jù)傳輸

在I2C總線傳輸過(guò)程中,將兩種特定的情況定義為開(kāi)始和停止條件(見(jiàn)圖3):當(dāng)SCL保持"高"時(shí),SDA由"高"變?yōu)?低"為開(kāi)始條件;當(dāng)SCL保持"高"且SDA由"低"變?yōu)?高"時(shí)為停止條件。開(kāi)始和停止條件均由主控制器產(chǎn)生。使用硬件接口可以很容易地檢測(cè)到開(kāi)始和停止條件,沒(méi)有這種接口的微機(jī)必須以每時(shí)鐘周期至少兩次對(duì)SDA取樣,以檢測(cè)這種變化。

SDA線上的數(shù)據(jù)在時(shí)鐘"高"期間必須是穩(wěn)定的,只有當(dāng)SCL線上的時(shí)鐘信號(hào)為低時(shí),數(shù)據(jù)線上的"高"或"低"狀態(tài)才可以改變。輸出到SDA線上的每個(gè)字節(jié)必須是8位,每次傳輸?shù)淖止?jié)不受限制,但每個(gè)字節(jié)必須要有一個(gè)應(yīng)答ACK。如果一接收器件在完成其他功能(如一內(nèi)部中斷)前不能接收另一數(shù)據(jù)的完整字節(jié)時(shí),它可以保持時(shí)鐘線SCL為低,以促使發(fā)送器進(jìn)入等待狀態(tài);當(dāng)接收器準(zhǔn)備好接受數(shù)據(jù)的其它字節(jié)并釋放時(shí)鐘SCL后,數(shù)據(jù)傳輸繼續(xù)進(jìn)行。I2C數(shù)據(jù)總線傳送時(shí)序如圖4所示。

數(shù)據(jù)傳送具有應(yīng)答是必須的。與應(yīng)答對(duì)應(yīng)的時(shí)鐘脈沖由主控制器產(chǎn)生,發(fā)送器在應(yīng)答期間必須下拉SDA線。當(dāng)尋址的被控器件不能應(yīng)答時(shí),數(shù)據(jù)保持為高并使主控器產(chǎn)生停止條件而終止傳輸。在傳輸?shù)倪^(guò)程中,在用到主控接收器的情況下,主控接收器必須發(fā)出一數(shù)據(jù)結(jié)束信號(hào)給被控發(fā)送器,從而使被控發(fā)送器釋放數(shù)據(jù)線,以允許主控器產(chǎn)生停止條件。合法的數(shù)據(jù)傳輸格式如下:

I2C總線在開(kāi)始條件后的首字節(jié)決定哪個(gè)被控器將被主控器選擇,例外的是"通用訪問(wèn)"地址,它可以在所有期間尋址。當(dāng)主控器輸出一地址時(shí),系統(tǒng)中的每一器件都將開(kāi)始條件后的前7位地址和自己的地址進(jìn)行比較。如果相同,該器件即認(rèn)為自己被主控器尋址,而作為被控接收器或被控發(fā)送器則取決于R/W位。

折疊 編輯本段 應(yīng)用

I2C總線是各種總線中使用信號(hào)線最少,并具有自動(dòng)尋址、多主機(jī)時(shí)鐘同步和仲裁等功能的總線。因此,使用I2C總線設(shè)計(jì)計(jì)算機(jī)系統(tǒng)十分方便靈活,體積也小,因而在各類實(shí)際應(yīng)用中得到廣泛應(yīng)用。下面舉二個(gè)應(yīng)用示例。

I2C的運(yùn)用比如在鐵電存儲(chǔ)器中,用鐵電存儲(chǔ)數(shù)據(jù)就是用的I2C總線協(xié)議。

折疊 伺服控制系統(tǒng)用I2C擴(kuò)展LCD顯示器

圖5是一個(gè)伺服系統(tǒng)的結(jié)構(gòu)圖。它用8XC752單片機(jī)的PWM輸出經(jīng)放大后來(lái)驅(qū)動(dòng)電機(jī),電機(jī)的轉(zhuǎn)速由測(cè)速機(jī)測(cè)取并直接送到8XC752片內(nèi)的A/D電路。處理后的有關(guān)信息經(jīng)I2C總線送到LCD驅(qū)動(dòng)芯片PCF8577以驅(qū)動(dòng)64段LCD顯示板。

折疊 通用I/O端口作為I2C總線接口

目前,51、96系列的單片機(jī)應(yīng)用很廣,但是由于它們都沒(méi)有I2C總線接口,從而限制了在這些系統(tǒng)中使用具有I2C總線接口的器件。通過(guò)對(duì)I2C總線時(shí)序的分析,可以用51單片機(jī)的兩根I/O線來(lái)實(shí)現(xiàn)I2C總線的功能。接I2C總線規(guī)定:SCL線和SDA線是各設(shè)備對(duì)應(yīng)輸出狀態(tài)相"與"的結(jié)果,任一設(shè)備都可以用輸出低電平的方法來(lái)延長(zhǎng)SCL的低電平時(shí)間,以迫使高速設(shè)備進(jìn)入等待狀態(tài),從而實(shí)現(xiàn)不同速度設(shè)備間的時(shí)鐘同步。因此,即使時(shí)鐘脈沖的高、低電平時(shí)間長(zhǎng)短不一,也能實(shí)現(xiàn)數(shù)據(jù)的可靠傳送,可以用軟件控制I/O口做I2C接口。下面就是用GMS97C2051的通用I/O口來(lái)作為I2C總線接口,并由軟件控制實(shí)現(xiàn)數(shù)據(jù)傳送的例子,圖6為其連線圖。

在單主控器的系統(tǒng)中,時(shí)鐘線僅由主控器驅(qū)動(dòng),因此可以用51系列的一根I/O線作為SCL的信號(hào)線,將其設(shè)置為輸出方式,并由軟件控制來(lái)產(chǎn)生串行時(shí)鐘信號(hào)。在實(shí)際系統(tǒng)中使用了P1.3。另一根I/O線P1.2作為I2C總線的串行數(shù)據(jù)線,可在軟件控制下在時(shí)鐘的低電平期間讀取或輸出數(shù)據(jù)。系統(tǒng)傳輸數(shù)據(jù)的過(guò)程如下:先由單片機(jī)發(fā)出一個(gè)啟始數(shù)據(jù)信號(hào),接著送出要訪問(wèn)器件的7位地址數(shù)據(jù),并等待被控器件的應(yīng)答信號(hào)。當(dāng)收到應(yīng)答信號(hào)后,根據(jù)訪問(wèn)要求進(jìn)行相應(yīng)的操作。如果是讀入數(shù)據(jù),則數(shù)據(jù)線可一直設(shè)為輸入方式,中間不需要改變SDA線的工作方式,每讀入一個(gè)字節(jié)均應(yīng)依次檢測(cè)應(yīng)答信號(hào);如果是輸出數(shù)據(jù),則首先將SDA設(shè)置為輸出方式,當(dāng)發(fā)送完一個(gè)字節(jié)后,需要改變SDA線為輸入方式,此時(shí)讀入被控器件的應(yīng)答信號(hào)就完成了一個(gè)字節(jié)的傳送。當(dāng)所有數(shù)據(jù)傳輸完畢后,應(yīng)向SDA發(fā)出一個(gè)停止信號(hào),以結(jié)束該次數(shù)據(jù)傳輸。

折疊 I2C范例

下面給出51系列用匯編語(yǔ)言實(shí)現(xiàn)啟始、停止、讀、寫、應(yīng)答的程序,讀者也可以根據(jù)I2C總線時(shí)序在96系列或其它單片機(jī)上實(shí)現(xiàn)I2C總線接口。

a.啟動(dòng)位程序

ACK:CLR P1.3

NOP

NOP

SETB P1.2

NOP

NOP

NOP

CPL P1.3 ;P1.3=1

NOP

NOP

NOP

DENGDAI:JB P1.2,DENGDAI

RET

b.讀數(shù)據(jù)程序

字節(jié)可以在當(dāng)前地址讀(CURRENT

READ),也可以隨機(jī)讀(RANDOM READ),讀出數(shù)據(jù)的最后一個(gè)字節(jié)后不用加應(yīng)答信號(hào)。

READ:PUSH 0EH

CLR P1.4

LCALL BSTART ;START

MOV A,#0A0H ;SEND THE CNOTROL BYTE

LCALL SENDBYTE

LCALL ACK

MOV A,R1 ;SEND THE ADDRESS

LCALL SENDBYTE

LCALL ACK

LCALL BSTART ;START

MOV A,#0A1H ;SEND THE CNOTROL BYTE

LCALL SENDBYTE

LCALL ACK

LCALL READBYTE

LCALL BSTOP

POP 0EH

RET

送字節(jié)程序:

SENDBYTE:PUSH 0EH

PUSH 00H

MOV R0,#08H

LOOP1:CLR P1.3

NOP

NOP

RLC A

MOV P1.2,C

CPL P1.3 ;P1.3=1

NOP

NOP

DJNZ R0,LOOP1

POP 00H

POP 0EH

RET

讀字節(jié)子程序:

READBYTE:PUSH 0EH

PUSH 00H

MOV R0,#08H;READ THE CONTENT

CLR A

LOOP4:CLR P1.3

NOP

NOP

NOP

SETB P1.3 ;P1.3=1

MOV C,P1.2

RLC A

DJNZ R0,LOOP4

MOV R2,A

POP 00H

POP 0EH

RET

c.寫數(shù)據(jù)程序:

WRITE:PUSH 0EH

CLR P1.4

LCALL BSTART

MOV A,#0A0H

CLALL SENDBYTE ;SEND THE CONTROL BYTE

LCALL ACK

MOV A,R1 ;SEND THE ADDRESS

LCALL SENDBYTE

LCALL ACK

MOV A,R2 ;WRITE THE CONTENT

LCALL SENDBYTE

LCALL ACK

LCALL BSTOP

POP 0EH

RET

連續(xù)寫的兩個(gè)字節(jié)之間最好是有10ms的延時(shí)。當(dāng)然,也可以進(jìn)行頁(yè)寫(PAGE

WRITE),即一次性連續(xù)寫8個(gè)字節(jié),但采用頁(yè)寫方式時(shí)每個(gè)字節(jié)后要有一個(gè)應(yīng)答信號(hào)。

d.停止位程序:

BSTOP:CLR P1.3

NOP

NOP

CLR P1.2

NOP

NOP

NOP

SETB P1.3

NOP

NOP

NOP

SETB P1.2

RET

折疊 使用C語(yǔ)言在C51的環(huán)境下對(duì)IIC的編程范例

// IIC開(kāi)始

void Start()

{

SDA=1;SCL=1;NOP4();SDA=0;NOP4();SCL=0;

}

// IIC 結(jié)束

void Stop()

{

SDA=0;SCL=0;NOP4();SCL=1;NOP4();SDA=1;

}

// IIC 讀取應(yīng)答

void RACK()

{

SDA=1;NOP4();SCL=1;NOP4();SCL=0;

}

// IIC 發(fā)送非應(yīng)答

void NO_ACK()

{

SDA=1;SCL=1;NOP4();SCL=0;SDA=0;

}

// IIC向從設(shè)備寫入一字節(jié)數(shù)據(jù)

void Write_A_Byte(uchar b)

{

uchar i;

for(i=0;i<8;i++)

{

b<<=1;SDA=CY;_nop_();SCL=1;NOP4();SCL=0;

}

RACK();

}

// IIC 向從設(shè)備的指定地址寫入數(shù)據(jù)

void Write_IIC(uchar addr,uchar dat)

{

Start();

Write_A_Byte(0xa0);

Write_A_Byte(addr);

Write_A_Byte(dat);

Stop();

DelayMS(10);

}

// IIC 從從設(shè)備讀取數(shù)據(jù)

uchar Read_A_Byte()

{

uchar i,b;

for(i=0;i<8;i++)

{

SCL=1;b<<=1;B|=SDA;SCL=0;

}

return b;

}

// IIC 從從設(shè)備的當(dāng)前地址讀取數(shù)據(jù)

uchar Read_Current()

{

uchar d;

Start();

Write_A_Byte(0xa1);

d=Read_A_Byte();

NO_ACK();

Stop();

return d;

}

// IIC 從從設(shè)備的任意地址讀取數(shù)據(jù)

uchar Random_Read(uchar addr)

{

Start();

Write_A_Byte(0xa0);

Write_A_Byte(addr);

Stop();

return Read_Current();

}

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
基于STC89C51單片機(jī)的數(shù)據(jù)采集有效值測(cè)量系統(tǒng)
I2C 串行總線的組成及工作原理
24C01讀寫的C51源程序
基于51單片機(jī)的PCF8591電壓測(cè)量
51入門系列教程| 協(xié)議協(xié)議(IIC篇)
基于51的IIC通訊原理及協(xié)議詳解(I2C)
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服