




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 第11章 AT89S51單片機(jī)系統(tǒng)(xtng) 的串行擴(kuò)展1共一百零八頁 單片機(jī)系統(tǒng)擴(kuò)展除并行擴(kuò)展外,串行擴(kuò)展技術(shù)也得到廣泛應(yīng)用。 與并行擴(kuò)展比,串口器件與單片機(jī)相連的I/O口線少(僅需14條),極大簡化(jinhu)器件間連接,進(jìn)而提高可靠性;串行接口器件體積小,占用電路板空間小,減少電路板空間和成本。除上述優(yōu)點外,還有工作電壓寬、抗干擾能力強(qiáng)、功耗低、數(shù)據(jù)不易丟失等特點。因此,目前串行擴(kuò)展技術(shù)在單片機(jī)系統(tǒng)中已得到廣泛應(yīng)用。 常用串行擴(kuò)展接口有I2C(Inter Interface Circuit,內(nèi)部接口電路)串行總線接口、單總線(1-Wire)接口以及SPI串行外設(shè)接口。2共一百零八頁
2、 本章介紹上述幾種串行接口總線的工作原理及特點,以及串行擴(kuò)展的典型設(shè)計案例。11.1 單總線串行擴(kuò)展 單總線(也稱1-Wire bus)由美國DALLAS公司推出的外圍串行擴(kuò)展總線。只有一條數(shù)據(jù)(shj)輸入/輸出線DQ,總線上所有器件都掛在DQ上,電源也通過這條信號線供給。 單總線系統(tǒng)中配置的各種器件,由DALLAS公司提供的專用芯片實現(xiàn)。每個芯片都有64位ROM,廠家對每一芯片都用激光燒寫編碼,其中存有16位十進(jìn)制編碼序列號,它是器件的地址編號,確保它掛在總線上后,可以唯一被確定。除了3共一百零八頁器件的地址編碼外,芯片內(nèi)還包含收發(fā)控制和電源存儲電路(dinl),見圖11-1。這些芯片耗電
3、量都很小(空閑時幾W,工作時幾mW),工作時從總線上饋送電能到大電容中就可以工作,故一般不需另加電源。共一百零八頁5圖11-1 單總線芯片(xn pin)內(nèi)部結(jié)構(gòu)示意圖共一百零八頁11.1.1 單總線器件溫度傳感器DS18B20簡介 單總線應(yīng)用典型案例是采用單總線溫度傳感器DS18B20的溫度測量系統(tǒng)。 DS18B20是美國DALLAS公司生產(chǎn)的數(shù)字溫度傳感器,體積小、低功耗、抗干擾能力強(qiáng)??芍苯訉囟绒D(zhuǎn)化成數(shù)字信號傳送給單片機(jī)處理,因而可省去傳統(tǒng)的信號放大、A/D轉(zhuǎn)換等外圍電路。1. DS18B20的特性 DS18B20測量溫度范圍55+128,在10+ 85范圍內(nèi),測量精度可達(dá)0.5,非常
4、適合于惡劣環(huán)境的現(xiàn)場溫度測量,也可用于各種狹小(xixio)空間內(nèi)設(shè)備的測溫,如環(huán)境控制、過程監(jiān)測6共一百零八頁過程監(jiān)測、測溫類消費電子產(chǎn)品以及多點溫度測控系統(tǒng)。 圖11-2為單片機(jī)與多個帶有單總線接口的數(shù)字(shz)溫度傳感器DS18B20芯片的分布式溫度監(jiān)測系統(tǒng),圖11-2中多個DS18B20都掛在單片機(jī)的1根I/O口線(即DQ線)上。單片機(jī)對每個DS18B20通過總線DQ尋址。DQ為漏極開路,須加上拉電阻。共一百零八頁DS18B20的一種封裝形式見圖11-2。除DS18B20外,在該數(shù)字溫度傳感器系列中還有DS1820、DS18S20、DS1822等其他(qt)型號,工作原理與特性基本相
5、同。 DS18B20每芯片都有唯一64位光刻ROM編碼,它是DS18B20地址序列碼,目的使每個DS18B20地址都不相同,這樣可實現(xiàn)在一根總線上掛接多個DS18B20的目的。8共一百零八頁圖11-2 單總線構(gòu)成的分布式溫度監(jiān)測(jin c)系統(tǒng)共一百零八頁 DS18B20片內(nèi)非易失性溫度報警觸發(fā)器TH和TL可由軟件(run jin)寫入用戶報警的上下限值。高速暫存器中第5個字節(jié)為配置寄存器,可對其更改DS18B20的測溫分辨率。配置寄存器的各位定義如下: 其中,TM位出廠時已被寫入0,用戶不能改變;低5位都為1;R1和R0用來設(shè)置分辨率。表11-1列出了R1、R0與分辨率和轉(zhuǎn)換時間的關(guān)系。用
6、戶可通過修改R1、R0位的編碼,獲得合適的分辨率。共一百零八頁11 由表11-1,DS18B20轉(zhuǎn)換(zhunhun)時間與分辨率有關(guān)。當(dāng)設(shè)定為9位時,轉(zhuǎn)換時間為93.75ms;設(shè)定10位時,轉(zhuǎn)換時間為187.5 ms;當(dāng)設(shè)定11位時,轉(zhuǎn)換時間為375ms;當(dāng)設(shè)定為12位時,轉(zhuǎn)換時間為750ms。共一百零八頁 非易失性溫度報警觸發(fā)器TH、TL以及配置寄存器由9字節(jié)的E2PROM高速暫存器組成。高速暫存器各字節(jié)分配如下: 當(dāng)單片機(jī)發(fā)給DS18B20溫度轉(zhuǎn)換命令后,經(jīng)轉(zhuǎn)換所得溫度值以兩字節(jié)補(bǔ)碼形式存放(cnfng)在高速暫存器的第1字節(jié)和第2字節(jié)。單片機(jī)通過單總線接口讀得該數(shù)據(jù),讀取時低位在前,高
7、位在后,第3、4、5字節(jié)分別是TH、TL以及配置寄存器的臨時副本,每一次上電復(fù)位時被刷新。第6、7、8字節(jié)未用,為12共一百零八頁13全1。讀出的第9字節(jié)是前面所有8個字節(jié)的CRC碼,用來保證正確(zhngqu)通信。一般情況下,用戶只使用第1字節(jié)和第2字節(jié)。 表11-2列出了DS18B20溫度轉(zhuǎn)換后所得到的16位轉(zhuǎn)換結(jié)果的典型值,存儲在DS18B20的兩個8位RAM單元中。共一百零八頁 下面介紹溫度轉(zhuǎn)換的計算方法。 當(dāng)DS18B20采集的溫度為+125時,輸出為0 x07d0,則:實際溫度=(0 x07d0)/16=(0163+7162+13161+0160) /16=125 當(dāng)DS18B2
8、0采集的溫度為-55時,輸出為0 xfc90,由于是補(bǔ)碼(b m),則先11位數(shù)據(jù)取反加1得0 x0370,注意符號位不變,也不參加運(yùn)算,則 實際溫度=(0 x0370)/6=(0163+3162+7161+0160)/16=55 注意,負(fù)號則需對采集的溫度進(jìn)行判斷后,再予以顯示。14共一百零八頁2. DS18B20的工作時序 DS18B20對工作時序要求嚴(yán)格,延時時間需準(zhǔn)確,否則容易出錯。 DS18B20的工作時序包括初始化時序、寫時序和讀時序。 (1)初始化時序,單片機(jī)將數(shù)據(jù)線電平拉低480960s后釋放,等待1560s,單總線器件即可輸出一持續(xù)60240s的低電平,單片機(jī)收到此應(yīng)答后即可
9、進(jìn)行操作(cozu)。 (2)寫時序,當(dāng)單片機(jī)將數(shù)據(jù)線電平從高拉到低時,產(chǎn)生寫時序,有寫“0”和寫“1”兩種時序。寫時序開始后,DS18B20在1560s期間從數(shù)據(jù)線上采樣。如果采樣到低15共一百零八頁電平,則向DS18B20寫的是“0”;如果采樣到高電平,則向DS18B20寫的是“1”。這兩個獨立(dl)時序間至少需拉高總線電平1s時間。 (3)讀時序,當(dāng)單片機(jī)從DS18B20讀取數(shù)據(jù)時,產(chǎn)生讀時序。此時單片機(jī)將數(shù)據(jù)線電平從高拉到低使讀時序被初始化。如果在此后15s內(nèi),單片機(jī)在數(shù)據(jù)線上采樣到低電平,則從DS18B20讀的是“0”;如果在此后的15s內(nèi),單片機(jī)在數(shù)據(jù)線上采樣到高電平,則從DS1
10、8B20讀的是“1”。3. DS18B20的命令 DS18B20所有命令均為8位長,常用的命令代碼見表11-3。16共一百零八頁17共一百零八頁11.1.2 設(shè)計案例:單總線DS18B20溫度測量系統(tǒng) 【例11-1】利用DS18B20和LED數(shù)碼管實現(xiàn)單總線溫度測量系統(tǒng),原理電路見圖11-3。DS18B20測量范圍是55128。本例只顯示0099。通過本例讀者應(yīng)掌握(zhngw)DS18B20特性及單片機(jī)I/O實現(xiàn)單總線協(xié)議的方法。 Proteus仿真時,用手動,即用鼠標(biāo)單擊DS18B20圖標(biāo)上的“”或“”來改變溫度,注意手動調(diào)節(jié)溫度同時,LED數(shù)碼管會顯示出與DS18B20窗口相同的2位溫度
11、數(shù)值。 電路中74LS47是BCD-7段譯碼器/驅(qū)動器,用于將單片機(jī)P0口輸出欲顯示的BCD碼轉(zhuǎn)化成相應(yīng)的數(shù)字顯示的段碼,并直接驅(qū)動LED數(shù)碼管顯示。18共一百零八頁19圖11-3 單總線DS18B20溫度測量(cling)與顯示系統(tǒng)共一百零八頁參考(cnko)程序如下:#include reg51.h#include intrins.h#define uchar unsigned char#define uint unsigned int #define out P0sbit smg1=out4;sbit smg2=out5;sbit DQ=P37;void delay5(uchar);vo
12、id init_ds18b20(void);uchar readbyte(void);void writebyte(uchar);uchar retemp(void);20共一百零八頁void main(void) /主函數(shù)uchar i,temp;delay5(1000);while(1) temp=retemp(); for(i=0;i0;i-) DQ =0; delay5(1); DQ =1;/15s內(nèi)拉釋放總線 date=1; if(DQ) date|=0 x80; delay5(11); return(date);23共一百零八頁void writebyte(uchar dat) /
13、函數(shù)功能(gngnng):寫1字節(jié) uchar i=0; for(i=8;i0;i-) DQ =0; DQ =dat&0 x01;/寫1 在15s內(nèi)拉低 delay5(12); /寫0 拉低60s DQ = 1; dat=1; delay5(5); 24共一百零八頁uchar retemp(void)/函數(shù)(hnsh)功能:讀取溫度uchar a,b,tt;uint t;init_ds18b20();writebyte(0 xCC); writebyte(0 x44);init_ds18b20();writebyte(0 xCC); writebyte(0 xBE); a=readbyte()
14、;b=readbyte();t=b;t=8;t=t|a;tt=t*0.0625;return(tt);25共一百零八頁 DS18B20體積小、適用電壓范圍寬,是世界上第一片支持“單總線”接口的溫度傳感器。 現(xiàn)場溫度測量直接(zhji)以“單總線” 數(shù)字方式傳輸,大大提高系統(tǒng)抗干擾性。所以單總線系統(tǒng)特別適用于測控點多、分布面廣、環(huán)境惡劣以及狹小空間內(nèi)設(shè)備的測溫以及現(xiàn)場溫度測量,如環(huán)境控制、設(shè)備或過程控制、測溫類消費電子產(chǎn)品等。26共一百零八頁11.2 SPI總線串行擴(kuò)展 SPI(Serial Periperal Interface,串行外設(shè)接口)是Motorola公司推出的一種同步串行外設(shè)接口,
15、允許單片機(jī)與多個廠家生產(chǎn)的帶有標(biāo)準(zhǔn)SPI接口的外圍設(shè)備直接連接,以串行方式(fngsh)交換信息。11.2.1 SPI總線的擴(kuò)展結(jié)構(gòu) SPI外圍串行擴(kuò)展結(jié)構(gòu)見圖11-4。使用4條線:串行時鐘SCK,主器件輸入/從器件輸出數(shù)據(jù)線MISO,主器件輸出/從器件輸入數(shù)據(jù)線MOSI和從器件選擇線 。 典型SPI系統(tǒng)是單主器件系統(tǒng),從器件通常是外圍接口器件,如存儲器、I/O接口、A/D、D/A、鍵盤、日歷/時鐘和顯示27共一百零八頁28圖11-4 SPI外圍(wiwi)串行擴(kuò)展結(jié)構(gòu)圖共一百零八頁驅(qū)動等。單片機(jī)擴(kuò)展多個外圍器件時,SPI無法通過數(shù)據(jù)線譯碼選擇,故外圍器件都有片選端 。在擴(kuò)展單個SPI器件時,
16、外圍器件的片選端CS*可接地或通過I/O口控制;在擴(kuò)展多個SPI器件時,單片機(jī)應(yīng)分別通過I/O口線來分時選通外圍器件。 在SPI串行擴(kuò)展系統(tǒng)中,如某一從器件只作輸入(如鍵盤)或只作輸出(如顯示器)時,可省去一條數(shù)據(jù)輸出(MISO)線或一條數(shù)據(jù)輸入(MOSI)線,從而構(gòu)成雙線系統(tǒng)( 接地)。 SPI系統(tǒng)中單片機(jī)對從器件選通需控制其CS*端,由于省去傳輸時的地址字節(jié),數(shù)據(jù)傳送(chun sn)軟件十分簡單。但在擴(kuò)展器件較多時,需制較多的從器件 CS*端,連線較多。共一百零八頁 在SPI串行擴(kuò)展系統(tǒng)中,主器件單片機(jī)在啟動一次傳送時,便產(chǎn)生8個時鐘,傳給接口(ji ku)芯片作為同步時鐘,控制數(shù)據(jù)的輸
17、入和輸出。數(shù)據(jù)的傳送格式是高位(MSB)在前,低位(LSB)在后,見圖11-5。數(shù)據(jù)線上輸出數(shù)據(jù)的變化以及輸入數(shù)據(jù)時的采樣,都取決于SCK。但對不同的外圍芯片,有的可能是SCK的上升沿起作用,有的可能是SCK的下降沿起作用。SPI有較高的數(shù)據(jù)傳輸速度,最高可達(dá)1.05Mbit/s。圖11-5 SPI數(shù)據(jù)(shj)傳送格式共一百零八頁 目前世界各芯片公司為廣大用戶提供一系列具有SPI接口的單片機(jī)和外圍接口芯片,例如(lr)Motorola公司存儲器MC2814、顯示驅(qū)動器MC14499和MC14489等各種芯片;美國TI公司的8位串行A/D轉(zhuǎn)換器TLC549、12位串行A/D轉(zhuǎn)換器TLC2543
18、等。 SPI外圍串行擴(kuò)展系統(tǒng)的從器件要具有SPI接口。主器件是單片機(jī)。目前許多機(jī)型都帶有SPI接口。由于AT89S51不帶有SPI接口,可采用軟件與I/O口結(jié)合來模擬SPI的接口時序。11.2.2 設(shè)計案例:擴(kuò)展帶有SPI接口的8位串行A/D轉(zhuǎn)換器TLC549 下面介紹SPI接口串行擴(kuò)展應(yīng)用案例,AT89S51擴(kuò)展低價位、高性能的8位 A/D轉(zhuǎn)換器TLC549。共一百零八頁 TLC549是美國TI推出的一種低價位、高性能的8位 A/D轉(zhuǎn)換器,它以8位開關(guān)電容逐次逼近(bjn)方法實現(xiàn) A/D轉(zhuǎn)換,其轉(zhuǎn)換速度小于 17s,最大轉(zhuǎn)換速率為 40kHz,內(nèi)部系統(tǒng)時鐘的典型值為4MHz,電源為 36V
19、。它能方便地采用SPI串行接口方式與各種單片機(jī)連接,構(gòu)成廉價的測控應(yīng)用系統(tǒng)。 1. TLC549的引腳及功能 引腳見圖11-6。圖11-6 TLC549的引腳共一百零八頁 引腳功能如下: REF+:正基準(zhǔn)電壓輸入(shr) 2.5VREF+Vcc+0.1V。 REF:負(fù)基準(zhǔn)電壓輸入端,-0.1VREF2.5V。且:(REF+)( REF-)1V。 VCC:電源3VVcc6V。 GND:地。 CS*:片選端。 DATAOUT:轉(zhuǎn)換結(jié)果數(shù)據(jù)串行輸出端,與 TTL 電平兼容,輸出時高位在前 共一百零八頁 ANALOGIN:模擬信號輸入端,0ANALOGINVcc,當(dāng) ANALOGINREF+電壓時,
20、轉(zhuǎn)換結(jié)果為全“1”(0 xff), ANALOGINREF- 電壓時,轉(zhuǎn)換結(jié)果為全“0”(0 x00)。 I/O CLOCK:外接輸入/輸出時鐘輸入端,同于同步芯片的輸入輸出操作(cozu),無需與芯片內(nèi)部系統(tǒng)時鐘同步。2. TLC549 工作時序 工作時序見圖11-7。從圖可知:(1)串行數(shù)據(jù)中高位A7先輸出,最后輸出低位A0;(2)在每一次I/O COLCK高電平期間DATA OUT 線上數(shù)據(jù)產(chǎn) 生有效輸出,每出現(xiàn)一次I/O COLCK,DATA OUT線就輸出共一百零八頁1位數(shù)據(jù)。一個周期出現(xiàn)8 次I/O COLCK 信號并對應(yīng)8位數(shù)據(jù)輸出;(3)在CS*變?yōu)榈碗娖胶?,最高有效位(A7)
21、自動置于DATA OUT 總線 。其余7位(A6A0)在前7 個I/O CLOCK 下降沿由時鐘(shzhng)同步輸出。B7B0 以同樣方式跟在其后;(4)tsu在片選信號CS*變低后,I/O COLCK 開始正跳變的最小時間間隔1.4s;(5)ten是從CS*變低到DATA OUT 線上輸出數(shù)據(jù)最小時間(1.2s);(6)只要I/O COLCK 變高就可讀取DATA OUT 線上數(shù)據(jù);共一百零八頁圖11-7 TLC549工作(gngzu)時序共一百零八頁(7)只有在CS*端為低時,TLC549 才工作;(8)TLC549的A/D轉(zhuǎn)換電路沒有啟動控制端,只要讀取前一次數(shù)據(jù)后馬上就可以開始新的
22、A/D 轉(zhuǎn)換。轉(zhuǎn)換完成后就進(jìn)入保持狀態(tài)。TLC549 每次轉(zhuǎn)換所需時間是17s, 它開始于 變?yōu)榈碗娖胶驣/OCLOCK 的第8個下降沿,沒有轉(zhuǎn)換完成標(biāo)志信號(xnho)。 當(dāng)CS*變?yōu)榈碗娖胶?,TLC549芯片被選中, 同時前次轉(zhuǎn)換結(jié)果的最高有效位MSB (A7)自 DATA OUT 端輸出,接著要求從I/O CLOCK端輸入8個外部時鐘信號,前7個 I/O CLOCK信號的作用,是配合TLC549 輸出前次轉(zhuǎn)換結(jié)果的共一百零八頁的A6A0 位,并為本次轉(zhuǎn)換做準(zhǔn)備:在第4個 I/O CLOCK 信號由高至低的跳變之后,片內(nèi)采樣/保持電路對輸入模擬量采樣開始,第8個 I/O CLOCK 信號的
23、下降沿使片內(nèi)采樣/保持電路進(jìn)入保持狀態(tài)并啟動 A/D開始轉(zhuǎn)換。轉(zhuǎn)換時間為 36 個時鐘周期,最大為 17s。 直到 A/D轉(zhuǎn)換完成前的這段時間內(nèi),TLC549 的控制邏輯要求:或者CS*保持高電平,或者 I/O CLOCK 時鐘端保持36個系統(tǒng)時鐘周期低電平。 由此可見,在TLC549的 I/O CLOCK 端輸入8個外部時鐘信號期間需要(xyo)完成以下工作:讀入前次A/D轉(zhuǎn)換結(jié)果;對共一百零八頁本次轉(zhuǎn)換的輸入模擬信號采樣并保持;啟動本次轉(zhuǎn)換開始。3. 單片機(jī)與TLC549 的接口設(shè)計 【例11-2】單片機(jī)控制串行8位A/D轉(zhuǎn)換器TLC549進(jìn)行A/D轉(zhuǎn)換,原理電路(dinl)與仿真結(jié)果見圖
24、11-8。由電位計RV1提供給TLC549模擬量輸入,通過調(diào)節(jié)RV1上的“+”、“”端,改變輸入電壓值。編寫程序?qū)⒛M電壓量轉(zhuǎn)換成二進(jìn)制數(shù)字量,本例用P0口輸出控制8個發(fā)光二極管的亮與滅顯示轉(zhuǎn)換結(jié)果的二進(jìn)制碼,也可通過LED數(shù)碼管將轉(zhuǎn)換完畢的數(shù)字量以16進(jìn)制數(shù)形式顯示出來。共一百零八頁圖11-8 單片機(jī)與TLC549接口的原理(yunl)電路共一百零八頁參考程序如下:#include#include/包含_nop_()函數(shù)頭文件#define uchar unsigned char#define uint unsigned int#define led P0 sbit sdo=P10; /定義
25、(dngy)P1.0與TLC549的SDO腳(即5腳DATA OUT)連接sbit cs=P11; /定義P1.1與TLC549的 腳連接sbit sclk=P12; /定義P1.2與TLC549的SCLK腳(即7腳I/O CLOCK)連接共一百零八頁void delayms(uint j)/延時函數(shù)(hnsh) uchar i=250; for(;j0;j-) while(-i); i=249; while(-i); i=250;共一百零八頁void delay18us(void)延時約18s函數(shù)(hnsh)_nop_();_nop_();_nop_();_nop_();_nop_();_n
26、op_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); nop_();_nop_();uchar convert(void) uchar i,temp; cs=0; delay18us();共一百零八頁for(i=0;i8;i+) if(sdo=1)temp=temp|0 x01; if(i7)temp=temp1; sclk=1; _nop_(); _nop_(); _nop_();_nop_(); sclk=0; _nop_(); _nop_(); cs=1; return
27、(temp);共一百零八頁void main() uchar result;led=0;cs=1;sclk=0;sdo=1;while(1) result=convert(); led=result;/轉(zhuǎn)換(zhunhun)結(jié)果從P0口輸出驅(qū)動LED delayms(1000);共一百零八頁 由于TLC549 轉(zhuǎn)換時間應(yīng)大于17s,本例采用(ciyng)延時操作方案,延時時間大約18s,每次讀取轉(zhuǎn)換數(shù)據(jù)時間大于17s即可。11.3 I2C總線的串行擴(kuò)展 I2C (Inter Interface Circuit)全稱為芯片間總線,是目前使用廣泛的芯片間串行擴(kuò)展總線。目前世界上采用I2C總線有兩個
28、規(guī)范,荷蘭飛利浦公司和日本索尼公司,現(xiàn)多采用飛利浦公司I2C總線技術(shù)規(guī)范,已成為電子行業(yè)認(rèn)可的總線標(biāo)準(zhǔn)。采用I2C技術(shù)單片機(jī)以及外圍器件種類很多,已廣泛用于各類電子產(chǎn)品、家用電器及通信設(shè)備中。共一百零八頁11.3.1 I2C串行總線系統(tǒng)的基本結(jié)構(gòu) I2C串行總線只有兩條信號線,一條是數(shù)據(jù)線SDA,另一條是時鐘線SCL。SDA和SCL是雙向的, I2C總線上各器件(qjin)數(shù)據(jù)線都接到SDA線上,各器件時鐘線均接到SCL線上。 I2C總線系統(tǒng)基本結(jié)構(gòu)見圖11-9。 帶有I2C接口單片機(jī)可直接與I2C總線接口的各種擴(kuò)展器件(如存儲器、I/O芯片、A/D、D/A、鍵盤、顯示器、日歷/時鐘)連接。由
29、于I2C總線采用純軟件尋址方法,無需片選線連接,大大簡化總線數(shù)量。共一百零八頁圖11-9 I2C串行總線系統(tǒng)(xtng)基本結(jié)構(gòu)共一百零八頁 I2C串行總線運(yùn)行由主器件(qjin)控制。主器件是指啟動數(shù)據(jù)的發(fā)送(發(fā)出起始信號)、發(fā)出時鐘信號、傳送結(jié)束時發(fā)出終止信號的器件,通常由單片機(jī)來擔(dān)當(dāng)。從器件可以是存儲器、LED或LCD驅(qū)動器、A/D或D/A轉(zhuǎn)換器、時鐘/日歷器件等,從器件須帶有I2C串行總線接口。 I2C總線空閑時,SDA和SCL兩條線均為高。連接到總線上器件輸出級必須是漏級或集電極開路,只要有一器件任意時刻輸出低電平,都將使總線上信號變低,即各器件SDA及SCL都是“線與” 關(guān)系。由于
30、各器件輸出為漏級開路,故須通過上拉電阻接正電源(見圖11-9中兩個電阻),以保證SDA和SCL在空閑時被上拉為高電平。SCL線上時鐘信號對SDA線上各器件共一百零八頁間數(shù)據(jù)傳輸起同步控制作用。SDA線上數(shù)據(jù)起始、終止及數(shù)據(jù)的有效性均要根據(jù)SCL線上的時鐘信號來判斷。 在標(biāo)準(zhǔn)I2C普通模式下,數(shù)據(jù)傳輸速率為100kbit/s,高速模式下可達(dá)400kbit/s??偩€(zn xin)上擴(kuò)展器件數(shù)量不是由電流負(fù)載決定的,而是由電容負(fù)載確定。 I2C總線每個器件接口都有一定等效電容,連接器件越多,電容值就越大,這會造成信號傳輸延遲??偩€上允許器件數(shù)以器件電容量不超過400pF(通過驅(qū)動擴(kuò)展可達(dá)4 000
31、pF)為宜,據(jù)此可計算出總線長度及連接器件數(shù)量。每個I2C總線器件都有唯一地址,擴(kuò)展器件時也要受器件地址數(shù)目限制。 共一百零八頁I2C總線應(yīng)用系統(tǒng)允許多主器件,由哪一個主器件來控制(kngzh)總線要通過總線仲裁來決定。如何進(jìn)行總線仲裁,讀者可查閱I2C總線仲裁協(xié)議。但是在實際應(yīng)用中,經(jīng)常遇到的是以單一單片機(jī)為主器件,其他外圍接口器件為從器件的情況。 11.3.2 I2C總線的數(shù)據(jù)傳送規(guī)定1數(shù)據(jù)位的有效性規(guī)定 I2C總線數(shù)據(jù)傳送時,每一數(shù)據(jù)位傳送都與時鐘脈沖相對應(yīng)。時鐘脈沖為高電平期間,數(shù)據(jù)線上數(shù)據(jù)須保持穩(wěn)定,在I2C總線上,只有在時鐘線為低電平期間,數(shù)據(jù)線上電平狀態(tài)才允許變化,見圖11-10
32、。共一百零八頁圖11-10 數(shù)據(jù)位有效性規(guī)定(gudng)共一百零八頁2起始信號和終止信號 由I2C總線協(xié)議,總線上數(shù)據(jù)信號傳送由起始信號(S)開始、由終止信號(P)結(jié)束。起始信號和終止信號都由主機(jī)(zhj)發(fā)出,在起始信號產(chǎn)生后,總線就處于占用狀態(tài);在終止信號產(chǎn)生后,總線就處于空閑狀態(tài)。下面結(jié)合圖11-11介紹有關(guān)起始信號和終止信號的規(guī)定。圖11-11 起始信號和終止(zhngzh)信號共一百零八頁 (1)起始信號(S)。在SCL線為高期間,SDA線由高電平向低電平的變化表示起始信號,只有在起始信號以后,其他命令(mng lng)才有效。 (2)終止信號(P)。在SCL線為高期間,SDA線由
33、低電平向高電平的變化表示終止信號。隨著終止信號出現(xiàn),所有外部操作都結(jié)束。3 I2C總線上數(shù)據(jù)傳送的應(yīng)答 I2C總線數(shù)據(jù)傳送時,傳送字節(jié)數(shù)沒有限制,但每字節(jié)須為8位長。數(shù)據(jù)傳送時,先傳送最高位(MSB),每一個被傳送的字節(jié)后面都必須跟隨1位應(yīng)答位(即1幀共有9位),見圖11-12。共一百零八頁 I2C總線在傳送每1字節(jié)數(shù)據(jù)后都須有應(yīng)答信號A,應(yīng)答信號在第9個時鐘位上出現(xiàn),與應(yīng)答信號對應(yīng)的時鐘信號由主器件(qjin)產(chǎn)生。這時發(fā)方須在這一時鐘位上使SDA線處于高電平狀態(tài),以便收方在這一位上送出低電平應(yīng)答信號A。 由于某種原因收方不對主器件尋址信號應(yīng)答時,例如收方正在進(jìn)行其他處理而無法接收總線上數(shù)據(jù)
34、時,必須釋放總線,將數(shù)據(jù)線置為高電平,而由主器件產(chǎn)生一個終止信號以結(jié)束總線的數(shù)據(jù)傳送。當(dāng)主器件接收來自從機(jī)數(shù)據(jù)時,接收到最后一個數(shù)據(jù)字節(jié)后,須給從器件發(fā)送一個非應(yīng)答信號(A*),使從機(jī)釋放數(shù)據(jù)總線,以便主機(jī)發(fā)送一終止信號,從而結(jié)束數(shù)據(jù)傳送。共一百零八頁圖11-12 I2C總線上的應(yīng)答(yngd)信號共一百零八頁4I2C總線上的數(shù)據(jù)幀格式 I2C總線上傳送數(shù)據(jù)信號即包括真正的數(shù)據(jù)信號,也包括地址信號。 I2C總線規(guī)定,在起始信號后必須傳送一從器件地址(7位),第8位是數(shù)據(jù)傳送的方向(fngxing)位(R/W*),用“0”表示主器件發(fā)送數(shù)據(jù)(W*),“1”表示主器件接收數(shù)據(jù)(R)。每次數(shù)據(jù)傳送總
35、是由主器件產(chǎn)生的終止信號結(jié)束。但是,若主器件希望繼續(xù)占用總線進(jìn)行新的數(shù)據(jù)傳送,則可不產(chǎn)生終止信號,馬上再次發(fā)出起始信號對另一從器件進(jìn)行尋址。因此,在總線一次數(shù)據(jù)傳送過程中,可有以下幾種組合方式:共一百零八頁(1)主器件向從器件發(fā)送n字節(jié)的數(shù)據(jù),數(shù)據(jù)傳送方向(fngxing)在整個傳送過程中不變,數(shù)據(jù)傳送格式:其中:字節(jié)1字節(jié)n為主機(jī)寫入從器件的n字節(jié)的數(shù)據(jù)。格式中陰影部分表示主器件向從機(jī)發(fā)送數(shù)據(jù),無陰影部分表示從器件向主器件發(fā)送,以下同。上述格式中的“從器件地址”為7位,緊接其后的“1”和“0”表示主器件的讀/寫方向,“1”為讀,“0”為寫。(2)主器件讀出來自從機(jī)的n字節(jié)。除第1個尋址字節(jié)由
36、主機(jī)發(fā)出,n字節(jié)都由從器件發(fā)送,主器件接收,數(shù)據(jù)傳送共一百零八頁格式如下(rxi): 其中:字節(jié)1字節(jié)n為從器件被讀出的n字節(jié)數(shù)據(jù)。主器件發(fā)送終止信號前應(yīng)發(fā)送非應(yīng)答信號,向從器件表明讀操作要結(jié)束。(3)主器件的讀、寫操作。在一次數(shù)據(jù)傳送過程中,主器件先發(fā)送1字節(jié)數(shù)據(jù),然后再接收1字節(jié)數(shù)據(jù),此時起始信號和從器件地址都被重新產(chǎn)生一次,但兩次讀寫的方向位正好相反。數(shù)據(jù)傳送格式如下:共一百零八頁格式中的“Sr”表示重新產(chǎn)生的起始信號,“從器件地址r”表示重新產(chǎn)生的從器件地址。 由上可見,無論哪種方式,起始信號、終止信號和從器件地址均由主器件發(fā)送,數(shù)據(jù)字節(jié)傳送方向則由主器件發(fā)出的尋址字節(jié)中的方向位規(guī)定,
37、每個字節(jié)傳送都須有應(yīng)答(yngd)位(A或A*)相隨。60共一百零八頁5尋址字節(jié) 在上面介紹的數(shù)據(jù)幀格式中,均有7位從器件地址和緊跟其后的1位讀/寫方向位,即尋址字節(jié)。I2C總線的尋址采用軟件(run jin)尋址,主器件在發(fā)送完起始信號后,立即發(fā)送尋址字節(jié)來尋址被控的從器件,尋址字節(jié)格式如下: 7位從器件地址為“DA3、DA2、DA1、DA0”和“A2、A1、A0”,其中“DA3、DA2、DA1、DA0”為器件地址,即器件固有地址編碼,出廠時就已給定?!癆2、A1、A0”為引腳地址,由器件61共一百零八頁“A2、A1、A0”為引腳地址,由器件引腳A2、A1、A0在電路中接高電平或接地決定(見
38、圖11-14)。 數(shù)據(jù)方向位(R/W*)規(guī)定了總線上的單片機(jī)(主器件)與從器件數(shù)據(jù)傳送方向。R/W*=1,表示主器件接收(讀)。R/W*=0,表示主器件發(fā)送(寫) 6數(shù)據(jù)傳送格式 I2C總線每傳送一位數(shù)據(jù)都與一個時鐘脈沖對應(yīng),傳送的每一幀數(shù)據(jù)均為一字節(jié)。但啟動I2C總線后傳送的字節(jié)數(shù)沒有限制(xinzh),只要求每傳送一個字節(jié)后,對方回答一個應(yīng)答位。在時鐘線為共一百零八頁高電平期間,數(shù)據(jù)線的狀態(tài)就是要傳送的數(shù)據(jù)。數(shù)據(jù)線上數(shù)據(jù)改變須在時鐘線為低電平間完成。在數(shù)據(jù)傳輸期間,只要時鐘線為高電平,數(shù)據(jù)線都必須穩(wěn)定,否則數(shù)據(jù)線上任何變化都當(dāng)作起始或終止信號。 I2C總線數(shù)據(jù)傳送必須遵循規(guī)定的數(shù)據(jù)傳送格式
39、。圖11-13所示為一次完整的數(shù)據(jù)傳送應(yīng)答時序。由總線規(guī)范,起始信號表明一次數(shù)據(jù)傳送的開始,其后為尋址字節(jié)。在尋址字節(jié)后是按指定讀、寫的數(shù)據(jù)字節(jié)與應(yīng)答位。在數(shù)據(jù)傳送完成后主器件都必須發(fā)送終止信號。在起始與終止信號之間傳輸(chun sh)的數(shù)據(jù)字節(jié)數(shù)由主器件(單片機(jī))決定,理論上講沒有字節(jié)限制。63共一百零八頁64圖11-13 I2C總線一次完整的數(shù)據(jù)(shj)傳送應(yīng)答時序共一百零八頁由上述數(shù)據(jù)傳送格式可看出: (1)無論何種數(shù)據(jù)傳送格式,尋址字節(jié)都由主器件發(fā)出,數(shù)據(jù)字節(jié)傳送方向則由尋址字節(jié)中方向位來規(guī)定。 (2)尋址字節(jié)只表明從器件的地址及數(shù)據(jù)傳送方向。從器件內(nèi)部的n個數(shù)據(jù)地址,由器件設(shè)計者
40、在該器件的I2C總線數(shù)據(jù)操作格式中,指定第1個數(shù)據(jù)字節(jié)作為器件內(nèi)的單元地址指針,并且設(shè)置地址自動加減(ji jin)功能,以減少從器件地址的尋址操作。 (3)每個字節(jié)傳送都必須有應(yīng)答信號(A/A*)相隨。 (4)從器件接收到起始信號后都必須釋放數(shù)據(jù)總線,使其處于高電平,以便主器件發(fā)送從機(jī)地址。共一百零八頁11.3.3 AT89S51的I2C總線(zn xin)擴(kuò)展系統(tǒng) 許多公司都推出帶有I2C接口的單片機(jī)及各種外圍擴(kuò)展器件,常見的有ATMEL的AT24C系列存儲器、PHILIPS的PCF8553(時鐘/日歷且?guī)в?568 RAM)和PCF8570(2568 RAM)、MAXIM的MAX117/
41、118(A/D轉(zhuǎn)換器)和MAX517/518/519(D/A轉(zhuǎn)換器)等。 I2C系統(tǒng)中主器件通常由帶有I2C接口的單片機(jī)擔(dān)當(dāng)。從器件必須帶有I2C總線接口。AT89S51單片機(jī)沒有I2C接口,可利用并行I/O口線結(jié)合軟件來模擬I2C總線時序,可使AT89S51不受沒有I2C接口限制。因此,在許多應(yīng)用中,都將I2C總線模擬66共一百零八頁傳送作為常規(guī)設(shè)計方法。 圖11-14為AT89S51單片機(jī)與具有(jyu)I2C總線器件的擴(kuò)展接口電路。圖中,AT24C02為E2PROM芯片,PCF8570為靜態(tài)2568 RAM,PCF8574為8位I/O接口,SAA1064為4位LED驅(qū)動器。雖然各種器件的
42、原理和功能有很大的差異,但它們與AT89S51單片機(jī)連接是相同的。共一百零八頁68圖11-14 AT89S51單片機(jī)擴(kuò)展I2C總線器件的接口(ji ku)電路共一百零八頁11.3.4 I2C總線數(shù)據(jù)傳送的模擬 由于AT89S51沒有I2C接口,通常用I/O口線結(jié)合軟件來實現(xiàn)I2C總線上的信號模擬。AT89S51為單主器件方式下,沒有其他主器件對總線競爭與同步,只存在著主器件單片機(jī)對I2C總線上各從器件的讀、寫操作。1典型信號模擬 為保證數(shù)據(jù)傳送的可靠性,標(biāo)準(zhǔn)(biozhn)I2C總線數(shù)據(jù)傳送有嚴(yán)格的時序要求。 I2C總線的起始信號、終止信號、應(yīng)答/數(shù)據(jù)“0”及非應(yīng)答/數(shù)據(jù)“1”的模擬時序見圖1
43、1-15圖11-20。 69共一百零八頁 對于終止信號,要保證有大于4.7s信號建立時間。終止信號結(jié)束時,要釋放總線,使SDA、SCL維持在高電平上,在大于4.7s后才可進(jìn)行第1次起始操作。在單主器件系統(tǒng)中,為防止非正常傳送,終止信號后SCL可設(shè)置在低電平。 對發(fā)送應(yīng)答位、非應(yīng)答位來說,與發(fā)送數(shù)據(jù)“0”和“1”的信號定時要求完全相同。只要滿足在時鐘高電平大于4.0s期間(qjin),SDA線上有確定的電平狀態(tài)即可。共一百零八頁2典型信號及字節(jié)收發(fā)的模擬子程序 AT89S51單片機(jī)在模擬I2C總線通信時,需編寫以下5個函數(shù):總線初始化、起始信號、終止信號、應(yīng)答/數(shù)據(jù)“0”以及非應(yīng)答/數(shù)據(jù)“1”函
44、數(shù)。(1)總線初始化函數(shù)。初始化函數(shù)的功能是將SCL和SDA總線拉高以釋放總線。參考(cnko)程序如下:#include #include /包含函數(shù)_nop_ ( )的頭文件 sbit sda=P10; /定義I2C模擬數(shù)據(jù)傳送位sbit scl=P11; /定義I2C模擬時鐘控制位71共一百零八頁void init( )/總線初始化函數(shù)scl=1; /scl為高電平_nop_ ( ); /延時約1ssda=1; /sda為高電平delay5us();/延時約5s (2)起始信號S函數(shù)。圖11-15的起始信號S,要求一個新的起始信號前總線的空閑時間大于4.7s,而對于一個重復(fù)(chngf)
45、的起始信號,要求建立時間也須大于4.7s。圖11-14為起始信號的時序波形在SCL高電平期間SDA發(fā)生負(fù)跳變。起始信號到第1個時鐘脈沖負(fù)跳沿的時間間隔應(yīng)大于4s。72共一百零八頁73圖11-15 起始信號S的模擬(mn)時序共一百零八頁起始信號S的函數(shù)(hnsh)如下:void start(void) /起始信號函數(shù)scl=1;sda=1;delay5us();sda=0;delay4us();scl=0;74共一百零八頁(3)終止(zhngzh)信號P函數(shù)。圖11-16為終止信號P的時序波形。在SCL高電平期間SDA的一個上升沿產(chǎn)生終止信號。75圖11-16 終止(zhngzh)信號P的模擬
46、時序共一百零八頁終止信號函數(shù)(hnsh)如下:void stop(void) /終止信號函數(shù)scl=0;sda=0;delay4us();scl=1;delay4us();sda=1;delay5us();sda=0;76共一百零八頁(4)應(yīng)答位函數(shù)。發(fā)送接收應(yīng)答位與發(fā)送數(shù)據(jù)“0”相同,即在SDA低電平期間SCL發(fā)生一個(y )正脈沖,產(chǎn)生圖11-17的模擬時序。77圖11-17 發(fā)送應(yīng)答位的模擬(mn)時序共一百零八頁發(fā)送(f sn)接收應(yīng)答位的函數(shù)如下:void Ack(void )uchar i; sda=0; scl=1; delay4us(); while(sda=1)&(i255)
47、i+; scl=0; delay4us();78共一百零八頁 SCL在高電平期間,SDA被從器件拉為低表示應(yīng)答。命令行中的 (SDA = 1) 和 (i255) )相與,表示若在這一段時間內(nèi)沒有收到從器件的應(yīng)答,則主器件默認(rèn)從器件已收到數(shù)據(jù)而不再等待應(yīng)答信號(xnho),要是不加該延時退出,一旦從器件沒有發(fā)應(yīng)答信號(xnho),程序?qū)⒂肋h(yuǎn)停在這里,而在實際中是不允許這種情況發(fā)生。 (5)非應(yīng)答位/數(shù)據(jù)“1”函數(shù)。發(fā)送非應(yīng)答位與發(fā)送數(shù)據(jù)“1”相同,即在SDA高電平期間SCL發(fā)生一個正脈沖,產(chǎn)生圖11-18的模擬時序。79共一百零八頁圖11-18 非應(yīng)答(yngd)位/數(shù)據(jù)“1”的模擬時序共一百零
48、八頁發(fā)送非接收應(yīng)答位/數(shù)據(jù)“1”的函數(shù)如下:void NoAck(void ) sda=1;scl=1;delay4us();scl=0;sda=0;3字節(jié)收發(fā)(shuf)的子程序 除上述典型信號模擬外,在I2C總線數(shù)據(jù)傳送中,經(jīng)常使用單字節(jié)數(shù)據(jù)的發(fā)送與接收。81共一百零八頁(1)發(fā)送1字節(jié)數(shù)據(jù)(shj)子程序 下面是模擬I2C數(shù)據(jù)線由SDA發(fā)送1字節(jié)數(shù)據(jù)(可以是地址,也可是數(shù)據(jù)),發(fā)送完后等待應(yīng)答,并對狀態(tài)位ack進(jìn)行操作,即應(yīng)答或非應(yīng)答都使ack=0。發(fā)送數(shù)據(jù)正常ack=1,從器件無應(yīng)答或損壞,則ack=0。發(fā)送1字節(jié)數(shù)據(jù)參考程序如下: void SendByte(uchar data)
49、uchar i,temp; temp=data; for(i=0; i 8; i+) temp= temp1;/左移一位 scl=0; 82共一百零八頁delay4us(); sda=Cy; delay4us();scl=1; delay4us(); scl=0;delay4us();sda=1;delay4us();83共一百零八頁 串行發(fā)送1字節(jié)時,需把該字節(jié)8位逐位發(fā)出,“temp=temp1;”就是將temp中的內(nèi)容(nirng)左移1位,最高位將移入Cy位中,然后將Cy賦給SDA,進(jìn)而在SCL的控制下發(fā)送出去。(2)接收1字節(jié)數(shù)據(jù)子程序下面是模擬從I2C的數(shù)據(jù)線SDA接收從器件傳來的
50、1字節(jié)數(shù)據(jù)的子程序:void rcvbyte()uchar i,temp;scl=0;delay4us();sda=1;共一百零八頁for(i=0; i 8; i+) scl=1;delay4us();temp=(temp1)| sda; scl=0;delay4us(); delay4us(); return temp; 同理,串行接收1字節(jié)時,需將8位一位一位地接收,然后(rnhu)再組合成1個字節(jié)。“temp =(temp1)| SDA;”是將變量共一百零八頁temp左移1位后與SDA進(jìn)行邏輯“或”運(yùn)算,依次把8位數(shù)據(jù)組合成1字節(jié)來完成接收(jishu)。11.3.5 設(shè)計案例:采用AT
51、24C02存儲器的IC卡設(shè)計 通用存儲器IC卡由通用存儲器芯片封裝而成,由于結(jié)構(gòu)和功能簡單,成本低、使用方便,因此在各個領(lǐng)域都得到了廣泛的應(yīng)用。 目前用于IC卡的通用存儲器芯片多為E2PROM,且采用I2C總線接口,典型代表為ATMEL公司的I2C接口的AT24Cxx系列。該系列具有AT24C01/02/04/08/16等型號,它們封裝形式、引腳及內(nèi)部結(jié)構(gòu)類似,只是容量不同,分別為128B/256B/512B/1KB/2KB。下面以AT24C02為例,介紹單片機(jī)通過I2C總線對AT24C02/進(jìn)行讀寫,即IC卡的制作。共一百零八頁1AT24C02芯片簡介(jin ji)(1)封裝與引腳 AT2
52、4C02的封裝形式有雙列直插(DIP)8腳式和貼片8腳式兩種,無論何種封裝,其引腳功能都是一樣的。AT24C02的DIP形式引腳如圖11-19所示,引腳功能見表11-1。(2)存儲結(jié)構(gòu)與尋址 AT24C02存儲容量為256B,分為32頁,每頁8B。有兩種尋址方式:芯片尋址和片內(nèi)子地址尋址。共一百零八頁圖11-19 AT24C02的DIP引腳共一百零八頁表11-1AT24C02的引腳功能(gngnng)共一百零八頁 芯片尋址。AT24C02芯片地址固定為1 010,它是I2C總線器件的特征編碼,其地址控制字的格式為1 010 A2A1A0 R/W* 。A2A1A0引腳接高、低電平后得到確定的3位
53、編碼,與1 010形成7位編碼,即為該器件的地址碼。由于A2A1A0共有8種組合,故系統(tǒng)最多可外接8片AT24C02,R/W*是對芯片的讀/寫控制位。 片內(nèi)子地址尋址。在確定了AT24C02芯片的7位地址碼后,片內(nèi)的存儲空間可用1字節(jié)的地址碼進(jìn)行尋址,尋址范圍(fnwi)為00HFFH,即可對片內(nèi)的256個單元進(jìn)行讀/寫操作。共一百零八頁(3)寫操作 AT24C02有兩種寫入方式,字節(jié)寫入與頁寫入。 字節(jié)寫入方式。單片機(jī)(主器件)先發(fā)送啟動信號和1字節(jié)的控制字,從器件發(fā)出應(yīng)答信號后,單片機(jī)再發(fā)送1字節(jié)的存儲單元子地址(AT24C02內(nèi)部單元(dnyun)的地址碼),單片機(jī)收到AT24C02應(yīng)答
54、后,再發(fā)送8位數(shù)據(jù)和1位終止信號。 頁寫入方式。單片機(jī)先發(fā)送啟動信號和1字節(jié)控制字,再發(fā)送1字節(jié)存儲器起始單元地址,上述幾個字節(jié)都得到AT24C02應(yīng)答后,就可發(fā)送最多1頁的數(shù)據(jù),并順序存放在已指定的起始地址開始的相繼單元,最后以終止信號結(jié)束。共一百零八頁(4)讀操作 AT24C02讀操作也有兩種方式,即指定地址讀和指定地址連續(xù)讀。 指定地址讀方式。單片機(jī)發(fā)送(f sn)啟動信號后,先發(fā)送(f sn)含有芯片地址的寫操作控制字,AT24C02應(yīng)答后,單片機(jī)再發(fā)送1字節(jié)的指定單元地址,AT24C02應(yīng)答后再發(fā)送1個含有芯片地址讀操作控制字,此時如AT24C02應(yīng)答,被訪問單元的數(shù)據(jù)就會按SCL信
55、號同步出現(xiàn)在SDA線上,供單片機(jī)讀取。 指定地址連續(xù)讀方式。指定地址連續(xù)讀方式是單片機(jī)收到每個字節(jié)數(shù)據(jù)后要做出應(yīng)答,只有AT24C02檢測到應(yīng)答信號共一百零八頁后,其內(nèi)部的地址寄存器就自動加1指向下一個單元,并順序?qū)⒅赶騿卧臄?shù)據(jù)送到SDA線上。當(dāng)需要結(jié)束讀操作時,單片機(jī)接收到數(shù)據(jù)后,在需要應(yīng)答的時刻發(fā)送一個非應(yīng)答信號,接著再發(fā)送一個終止信號即可。 【例11-3】單片機(jī)通過I2C串行總線擴(kuò)展1片AT24C02,實現(xiàn)單片機(jī)對存儲器AT24C02的讀、寫。由于Proteus元件庫中沒有AT24C02,可用FM24C02芯片代替,即在Proteus中“關(guān)鍵字”對話框元件查找欄中輸入(shr)“24C
56、02”,就會在左側(cè)的元件列表中顯示,然后在元件列表中選擇即可。 AT89S51與FM24C02的接口原理電路見圖11-20。共一百零八頁圖11-20 AT89S51與AT24C02接口(ji ku)的原理電路共一百零八頁 圖中KEY1作為外部(wib)中斷0的中斷源,當(dāng)按下KEY1,單片機(jī)通過I2C總線發(fā)送數(shù)據(jù)0 xaa給AT24C02,等發(fā)送數(shù)據(jù)完畢后,將0 xaa送P2口通過LED顯示。 KEY2作為外部中斷1的中斷源,當(dāng)按下KEY2時,單片機(jī)通過I2C總線讀AT24C02,等讀數(shù)據(jù)完畢后,將讀出的最后數(shù)據(jù)0 x55送P2口的LED顯示出來。 最終顯示的仿真效果是:按下KEY1,標(biāo)號為D1
57、D8的8個LED中D3、D4、D5、D6燈亮,如圖11-20所示。按下KEY2,則D1、D3、D5、D7燈亮。 Proteus提供的I2C調(diào)試器是調(diào)試I2C系統(tǒng)的得力工具,使用I2C調(diào)試器的觀測窗口可觀察I2C總線上的數(shù)據(jù)流,查看I2C共一百零八頁總線發(fā)送(f sn)的數(shù)據(jù),也可作為從器件向I2C總線發(fā)送數(shù)據(jù)。 在原理電路中添加I2C調(diào)試器具體操作:先單擊圖4-2左側(cè)工具箱中的虛擬儀器圖標(biāo) ,此時在預(yù)覽窗口中顯示出各種虛擬儀器選項,單擊 “I2C DEBUGGER”項,并在原理圖編輯窗口單擊鼠標(biāo)左鍵,就會出現(xiàn)I2C調(diào)試器符號,如圖11-20所示。然后把I2C調(diào)試器的“SDA”端和“SCL” 端
58、分別連接在I2C總線的“SDA”和“SCL”線上。 仿真運(yùn)行時,用鼠標(biāo)右鍵單擊I2C調(diào)試器符號,出現(xiàn)下拉菜單,單擊“Terminal”選項,即可出現(xiàn)I2C調(diào)試器的觀測窗口,如圖11-21所示。從觀測窗口上可看到按一下KEY1時,出現(xiàn)在I2C總線上的數(shù)據(jù)流。共一百零八頁圖11-21 I2C調(diào)試器的觀測(gunc)窗口共一百零八頁本例參考程序:#include reg51.h#include intrins.h/包含有函數(shù)_nop_()的頭文件#define uchar unsigned char #define uint unsigned int#define out P2/發(fā)送緩沖區(qū)的首地址sbit scl=P11;sbit sda=P10;sbit key1=P32;sbit key2=P33;uchar data mem4_at_ 0 x55;/發(fā)送緩沖區(qū)的首地址uchar mem4=0 x41,0 x42,0 x43,0 xaa; /欲發(fā)送(f sn)的數(shù)據(jù)數(shù)組uchar data rec_mem4 _at_ 0 x60 ;/接收緩沖區(qū)的首地址void start(void);/起始信號函數(shù)共一百零八頁vo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智慧課堂省級課題申報書
- 數(shù)字孿生課題申報書
- 課題立項申報書幼兒園
- 孔子學(xué)堂課題申報書
- 兵團(tuán)課題申報書
- 經(jīng)濟(jì)類課題申報書范例
- 城市更新課題申報書范本
- 醫(yī)院消防勞務(wù)合同范本
- 課題申報書是啥
- 教育科研方法課題申報書
- 現(xiàn)代家政導(dǎo)論-課件 3.1.1認(rèn)識家庭生命周期
- 保險公司客戶服務(wù)質(zhì)量提升手冊
- 成語故事-一諾千金-課件
- 餐廚廢棄物處理臺賬記錄表
- 鋼筋工安全操作規(guī)程
- 國家基本藥物培訓(xùn)課件
- 煤礦安全管理人員考試題庫與答案(G卷)
- SMP-07-008-00 印刷性包裝材料管理規(guī)程
- 2024年深圳市優(yōu)才人力資源有限公司招考聘用綜合網(wǎng)格員(派遣至吉華街道)高頻難、易錯點500題模擬試題附帶答案詳解
- 旅游景區(qū)物業(yè)管理服務(wù)方案
- 華能內(nèi)蒙古東部能源有限公司招聘筆試題庫2024
評論
0/150
提交評論