單片機(jī)的串行擴(kuò)展技術(shù)-PPT課件_第1頁(yè)
單片機(jī)的串行擴(kuò)展技術(shù)-PPT課件_第2頁(yè)
單片機(jī)的串行擴(kuò)展技術(shù)-PPT課件_第3頁(yè)
單片機(jī)的串行擴(kuò)展技術(shù)-PPT課件_第4頁(yè)
單片機(jī)的串行擴(kuò)展技術(shù)-PPT課件_第5頁(yè)
已閱讀5頁(yè),還剩66頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第12章 單片機(jī)的串行擴(kuò)展技術(shù)1成都理工大學(xué)工程技術(shù)學(xué)院自動(dòng)化工程系2 第12章 目錄12.1 單總線串行擴(kuò)展12.2 SPI總線串行擴(kuò)展12.3 Microwire總線簡(jiǎn)介12.4 I2C總線的串行擴(kuò)展介紹 12.4.1 I2C串行總線概述 12.4.2 I2C總線的數(shù)據(jù)傳送12.5 AT89S51單片機(jī)的I2C串行擴(kuò)展設(shè)計(jì) 12.5.1 AT89S51的I2C總線擴(kuò)展系統(tǒng) 12.5.2 I2C總線數(shù)據(jù)傳送的模擬 12.5.3 I2C總線模擬通用子程序內(nèi)容概要單片機(jī)的并行總線擴(kuò)展(利用三總線AB、DB、CB進(jìn)行的系統(tǒng)擴(kuò)展)已不再是單片機(jī)系統(tǒng)唯一的擴(kuò)展結(jié)構(gòu),除并行總線擴(kuò)展技術(shù)之外,近年又出現(xiàn)串

2、行總線擴(kuò)展技術(shù)。例如:Philips公司的I2C串行總線接口、DALLAS 公司的單總線(1-Wire)接口、Motorola公司的SPI串行外設(shè)接口以及Microwire總線三線同步串行接口。本章介紹上述串行擴(kuò)展接口總線的工作原理及特點(diǎn),重點(diǎn)介紹I2C串行擴(kuò)展技術(shù),并介紹AT89S51軟件模擬I2C串行接口總線時(shí)序?qū)崿F(xiàn)I2C接口的方法。3單片機(jī)的串行擴(kuò)展技術(shù)與并行擴(kuò)展技術(shù)相比具有顯著的優(yōu)點(diǎn),串行接口器件與單片機(jī)接口時(shí)需要的I/O口線很少(僅需14條),串行接口器件體積小,因而占用電路板的空間小,僅為并行接口器件的10%,明顯減少電路板空間和成本。除上述優(yōu)點(diǎn),還有工作電壓寬、抗干擾能力強(qiáng)、功耗

3、低、數(shù)據(jù)不易丟失等特點(diǎn)。串行擴(kuò)展技術(shù)在IC卡、智能儀器儀表以及分布式控制系統(tǒng)等領(lǐng)域得到廣泛應(yīng)用。412.1 單總線串行擴(kuò)展 單總線(也稱1-Wire bus)是由美國(guó)DALLAS公司推出的外圍串行擴(kuò)展總線。 只有一條數(shù)據(jù)輸入/輸出線DQ,總線上的所有器件都掛在DQ上,電源也通過(guò)這條信號(hào)線供給,使用一條信號(hào)線的串行擴(kuò)展技術(shù),稱為單總線技術(shù)。單總線系統(tǒng)的各種器件,由DALLAS公司提供的專用芯片實(shí)現(xiàn)。每個(gè)芯片都有64位ROM,廠家對(duì)每一個(gè)芯片用激光燒寫(xiě)編碼,其中存有16位十進(jìn)制編碼序列號(hào),它是器件的地址編號(hào),確保它掛在總線上后,可唯一被確定。5除地址編碼外,片內(nèi)還包含收發(fā)控制和電源存儲(chǔ)電路,如圖1

4、2-1所示。這些芯片的耗電量都很?。臻e時(shí)幾微瓦,工作時(shí)幾毫瓦),從總線上饋送電能到大電容中就可以工作,故一般不需另加電源。下面說(shuō)明具體應(yīng)用。 6圖12-1 單總線芯片的內(nèi)部結(jié)構(gòu)示意圖【例12-1】圖12-2所示為一個(gè)由單總線構(gòu)成的分布式溫度監(jiān)測(cè)系統(tǒng),也可用于各種狹小空間內(nèi)設(shè)備的數(shù)字測(cè)溫。圖中多個(gè)帶有單總線接口的數(shù)字溫度傳感器DS18B20芯片都掛在單片機(jī)的1根I/O口線(即DQ線)上。對(duì)每個(gè)DS18B20通過(guò)總線DQ尋址。DQ為漏極開(kāi)路,須加上拉電阻。DS18B20封裝形式多樣,其中的一種封裝形式見(jiàn)圖12-2。在該單總線數(shù)字溫度傳感器系列中還有DS1820、DS18S20、DS1822等其他

5、型號(hào),工作原理與特性基本相同。具有如下特點(diǎn):7(1)體積小、結(jié)構(gòu)簡(jiǎn)單、使用方便。(2)每芯片都有唯一的64位光刻ROM編碼,家族碼為28H。(3)溫度測(cè)量范圍-55+125C,在-10+85C范圍內(nèi),測(cè)量精度可達(dá)0.5C。(4)分辨率為可編程的912位(其中包括1位符號(hào)位),對(duì)應(yīng)的溫度變化量分別為0.5C、0.25C、0.125C、0.0625C。(5)轉(zhuǎn)換時(shí)間與分辨率有關(guān)。當(dāng)設(shè)定為9位,轉(zhuǎn)換時(shí)間93.75ms;設(shè)定為10位,轉(zhuǎn)換時(shí)間為187.5 ms;當(dāng)設(shè)定11位,轉(zhuǎn)換時(shí)間375ms;當(dāng)設(shè)定12位,轉(zhuǎn)換時(shí)間750ms。8(6)片內(nèi)含有SRAM、E2PROM,單片機(jī)寫(xiě)入E2PROM的報(bào)警的上下

6、限溫度值和以及對(duì)DS18B20的設(shè)置,在芯片掉電的情況下不丟失。功能命令包括兩類:1條啟動(dòng)溫度轉(zhuǎn)換命令(44H), 5條讀/寫(xiě)SRAM和E2PROM命令。圖12-2電路如果再擴(kuò)展幾位(根據(jù)需要)LED數(shù)碼管顯示器,即可構(gòu)成簡(jiǎn)易的數(shù)字溫度計(jì)系統(tǒng)。可在圖12-2的基礎(chǔ)上,自行擴(kuò)展設(shè)計(jì)。9 10圖12-2 單總線構(gòu)成的分布式溫度監(jiān)測(cè)系統(tǒng)在1-Wire 總線傳輸?shù)氖菙?shù)字信號(hào),數(shù)據(jù)傳輸均采用CRC碼校驗(yàn)。DALLAS公司為單總線的尋址及數(shù)據(jù)的傳送制定了總線協(xié)議,具體內(nèi)容讀者可查閱相關(guān)資料。1-Wire協(xié)議不足在傳輸速率稍慢,故1-Wire 總線協(xié)議特別適用于測(cè)控點(diǎn)多、分布面廣、種類復(fù)雜,而又需集中監(jiān)控、

7、統(tǒng)一管理的應(yīng)用場(chǎng)合。1112.2 SPI總線串行擴(kuò)展SPI(Serial Periperal Interface)是Motorola公司推出的同步串行外設(shè)接口,允許單片機(jī)與多個(gè)廠家生產(chǎn)的帶有標(biāo)準(zhǔn)SPI接口的外圍設(shè)備直接連接,以串行方式交換信息。圖12-3為SPI外圍串行擴(kuò)展結(jié)構(gòu)圖。SPI使用條線:串行時(shí)鐘SCK,主器件輸入/從器件輸出數(shù)據(jù)線MISO,主器件輸出/從器件輸入數(shù)據(jù)線MOSI和從器件選擇線 。1213圖12-3 SPI外圍串行擴(kuò)展結(jié)構(gòu)圖SPI典型應(yīng)用是單主系統(tǒng),一臺(tái)主器件,從器件通常是外圍接口器件,如存儲(chǔ)器、I/O接口、A/D、D/A、鍵盤(pán)、日歷/時(shí)鐘和顯示驅(qū)動(dòng)等。擴(kuò)展多個(gè)外圍器件時(shí)

8、,SPI無(wú)法通過(guò)數(shù)據(jù)線譯碼選擇,故外圍器件都有片選端 。在擴(kuò)展單個(gè)SPI器件時(shí),外圍器件的片選端 可以接地或通過(guò)I/O口控制;在擴(kuò)展多個(gè)SPI器件時(shí),單片機(jī)應(yīng)分別通過(guò)I/O口線來(lái)分時(shí)選通外圍器件。在SPI串行擴(kuò)展系統(tǒng)中,如果某一從器件只作輸入(如鍵盤(pán))或只作輸出(如顯示器)時(shí),可省去一條數(shù)據(jù)輸出(MISO)線或一條數(shù)據(jù)輸入(MOSI)線,從而構(gòu)成雙線系統(tǒng)( 接地)。14SPI系統(tǒng)中單片機(jī)對(duì)從器件的選通需控制其CS*端,由于省去傳輸時(shí)的地址字節(jié),數(shù)據(jù)傳送軟件十分簡(jiǎn)單。但在擴(kuò)展器件較多時(shí),需要控制較多的從器件 端,連線較多。在SPI系統(tǒng)中,主器件單片機(jī)在啟動(dòng)一次傳送時(shí),便產(chǎn)生8個(gè)時(shí)鐘,傳送給接口芯

9、片作為同步時(shí)鐘,控制數(shù)據(jù)的輸入和輸出。傳送格式是高位(MSB)在前,低位(LSB)在后,如圖12-4所示。輸出數(shù)據(jù)的變化以及輸入數(shù)據(jù)時(shí)的采樣,都取決于SCK。但對(duì)不同外圍芯片,可能是SCK的上升沿起作用,也可能是SCK的下降沿起作用。SPI有較高的數(shù)據(jù)傳輸速度,最高可達(dá)1.05Mbit/s。15 圖12-4 SPI數(shù)據(jù)傳送格式Motorola提供了一系列具有SPI接口的單片機(jī)和外圍接口芯片,如存儲(chǔ)器MC2814、顯示驅(qū)動(dòng)器MC14499和MC14489等各種芯片。16SPI從器件要具有SPI接口。主器件是單片機(jī)。目前已有許多機(jī)型的單片機(jī)都帶有SPI接口。但對(duì)AT89S51,由于不帶SPI接口,

10、SPI接口的實(shí)現(xiàn),可采用軟件與I/O口結(jié)合來(lái)模擬SPI的接口時(shí)序。【例12-2】 設(shè)計(jì)AT89S51單片機(jī)與串行A/D轉(zhuǎn)換器TLC2543的SPI接口。TLC2543是美國(guó)TI公司的12位串行SPI接口的A/D轉(zhuǎn)換器,轉(zhuǎn)換時(shí)間為10s。片內(nèi)有1個(gè)14路模擬開(kāi)關(guān),用來(lái)選擇11路模擬輸入以及3路內(nèi)部測(cè)試電壓中的1路進(jìn)行采樣。17圖12-5為單片機(jī)與TLC2543的SPI接口電路。TLC2543的I/O CLOCK、DATA INPUT和 端由單片機(jī)的P1.0、P1.1和P1.3來(lái)控制。轉(zhuǎn)換結(jié)果的輸出數(shù)據(jù)(DATA OUT)由單片機(jī)的P1.2串行接收,單片機(jī)將命令字通過(guò)P1.1輸入到TLC2543的

11、輸入寄存器中。下面的子程序?yàn)锳T89S51選擇某一通道(例如AIN0通道)進(jìn)行1次數(shù)據(jù)采集,A/D轉(zhuǎn)換結(jié)果共12位,分兩次讀入。先讀入TLC2543中的8位轉(zhuǎn)換結(jié)果到單片機(jī)中,同時(shí)寫(xiě)入下一次轉(zhuǎn)換的命令,然后再讀入4位的轉(zhuǎn)換結(jié)果到單片機(jī)中。18注意:TLC2543在每次I/O周期讀取的數(shù)據(jù)都是上次轉(zhuǎn)換的結(jié)果,當(dāng)前轉(zhuǎn)換結(jié)果要在下一個(gè)I/O周期中被串行移出。TLC2543A/D轉(zhuǎn)換的第1次讀數(shù)由于內(nèi)部調(diào)整,讀取的轉(zhuǎn)換結(jié)果可能不準(zhǔn)確,應(yīng)丟棄。 圖12-5 AT89S51單片機(jī)與TLC2543的SPI接口19子程序如下:ADCOMDBYTE6FH;定義命令存儲(chǔ)單元ADOUTHBYTE6EH;定義存儲(chǔ)轉(zhuǎn)換

12、結(jié)果高4位單元ADOUTLBYTE6DH;定義存儲(chǔ)轉(zhuǎn)換結(jié)果低8位單元ADCONV:CLRP1.0;時(shí)鐘腳為低電平CLRP1.3;片選 有效,選中TLC2543MOVR2,#08H ;送出下一次8位轉(zhuǎn)換命令和;讀8位轉(zhuǎn)換結(jié)果做準(zhǔn)備MOVA,ADCOMD ;下一次轉(zhuǎn)換命令在ADCOMD;單元中送ALOOP1:MOVC,P1.2;讀入1位轉(zhuǎn)換結(jié)果RRCA;1位轉(zhuǎn)換結(jié)果帶進(jìn)位位右移20MOVP1.1,C;送出命令字節(jié)中的1位SETBP1.0;產(chǎn)生1個(gè)時(shí)鐘NOPCLRP1.0NOPDJNZR2,LOOP1;是否完成8次轉(zhuǎn)換結(jié)果讀入和命;令輸出?未完則跳MOVADOUTL,A;讀8位轉(zhuǎn)換結(jié)果存入ADOUT

13、L單元MOVA,#00H;A清0MOVR2,#04H;為讀入4位轉(zhuǎn)換結(jié)果做準(zhǔn)備21SETBP1.0;產(chǎn)生1個(gè)時(shí)鐘NOPCLRP1.0NOPDJNZR2,LOOP2;是否完成4次讀入?未完則跳;LOOP2MOVADOUTH,A;高4位轉(zhuǎn)換結(jié)果存入;ADOUTH單元中的高4位SWAP ADOUTH;ADOUTH單元中的高4位與;低4位互換LOOP2:MOVC,P1.2;讀入高4位轉(zhuǎn)換結(jié)果中的1位RRCA;帶進(jìn)位位循環(huán)右移SETBP1.0;時(shí)鐘無(wú)效RET22執(zhí)行上述程序中的8次循環(huán),執(zhí)行“RRC A”指令8次,每次讀入轉(zhuǎn)換結(jié)果1位,然后送出ADCOMD單元中的下一次轉(zhuǎn)換的命令字節(jié)“G7 G6 G5

14、G4 G3 G2 G1 G0”中的1位,進(jìn)入TLC2543的輸入寄存器。經(jīng)8次右移后,8位A/D轉(zhuǎn)換結(jié)果數(shù)據(jù)“”讀入累加器Acc中,上述的具體數(shù)據(jù)交換過(guò)程如圖12-6所示。子程序中的4次循環(huán),只是讀入轉(zhuǎn)換結(jié)果的4位數(shù)據(jù),圖中沒(méi)有給出,讀者可自行畫(huà)出4次移位的過(guò)程。23圖12-6 單片機(jī)與TLC2543的8位數(shù)據(jù)交換示意圖24由本例見(jiàn),單片機(jī)與TLC2543接口十分簡(jiǎn)單,只需用軟件控制4條I/O腳按規(guī)定時(shí)序?qū)LC2543進(jìn)行訪問(wèn)即可。12.3 Microwire總線簡(jiǎn)介三線同步串行接口,1根數(shù)據(jù)線SO、1根數(shù)據(jù)輸入線S和1根時(shí)鐘線SK組成。該總線最初是內(nèi)建在NS公司COP400/ COP800

15、 HPC系列單片機(jī)中,為單片機(jī)和外圍器件提供串行通信接口。該總線只需要3根信號(hào)線,連接和拆卸都很方便。在需對(duì)一個(gè)系統(tǒng)更改時(shí),只需改變鏈接到總線的單片機(jī)及外器件的數(shù)量和型號(hào)即可。25最初的Microwire總線只能連接一臺(tái)單片機(jī)作為主機(jī),總線上的其他器件都是從設(shè)備。隨著技術(shù)的發(fā)展,NS公司推出了8位的COP800系列單片機(jī),該系列單片機(jī)仍采用原來(lái)的 Microwire總線,但接口功能進(jìn)行了增強(qiáng),稱之為增強(qiáng)型的MicrowirePlus。增強(qiáng)型的MicrowirePlus允許連接多臺(tái)單片機(jī)和外圍器件,應(yīng)用于分布式、多處理器的復(fù)雜系統(tǒng)。NS公司已生產(chǎn)出各種功能的Microwire總線外圍器件,包括存

16、儲(chǔ)器、定時(shí)器/計(jì)數(shù)器、ADC和DAC、LED顯示驅(qū)動(dòng)器和LCD顯示驅(qū)動(dòng)器以及遠(yuǎn)程通信設(shè)備等。2612.4 I2C總線的串行擴(kuò)展介紹 12.4.1 概述I2C總線,PHILIPS推出,使用廣泛、很有發(fā)展前途的芯片間串行擴(kuò)展總線。只有兩條信號(hào)線,一是數(shù)據(jù)線SDA,另一是時(shí)鐘線SCL。兩條線均雙向,所有連到I2C上器件的數(shù)據(jù)線都接到SDA線上,各器件時(shí)鐘線均接到SCL線上。I2C系統(tǒng)基本結(jié)構(gòu)如圖12-7所示。I2C總線單片機(jī)(如PHILIPS公司的8xC552)直接與I2C接口的各種擴(kuò)展器件(如存儲(chǔ)器、I/O芯片、A/D、D/A、鍵盤(pán)、顯示器、日歷/時(shí)鐘)連接。27由于I2C總線的尋址采用純軟件的尋

17、址方法,無(wú)需片選線的連接,這樣就大大簡(jiǎn)化了總線數(shù)量。 28圖12-7 I2C串行總線系統(tǒng)的基本結(jié)構(gòu)I2C的運(yùn)行由主器件(主機(jī))控制。主器件是指啟動(dòng)數(shù)據(jù)的發(fā)送(發(fā)出起始信號(hào))、發(fā)出時(shí)鐘信號(hào)、傳送結(jié)束時(shí)發(fā)出終止信號(hào)的器件,通常由單片機(jī)來(lái)?yè)?dān)當(dāng)。從器件(從機(jī))可以是存儲(chǔ)器、LED或LCD驅(qū)動(dòng)器、A/D或D/A轉(zhuǎn)換器、時(shí)鐘/日歷器件等,從器件必須帶有I2C串行總線接口。當(dāng)I2C總線空閑時(shí),SDA和SCL兩條線均為高電平。由于連接到總線上器件(節(jié)點(diǎn))輸出級(jí)必須是漏極或集電極開(kāi)路,只要有一器件任意時(shí)刻輸出低電平,都將使總線上的信號(hào)變低,即各器件的SDA及SCL都是“線與” 關(guān)系 。29由于各器件輸出端為漏級(jí)

18、開(kāi)路,故必須通過(guò)上拉電阻接正電源(見(jiàn)圖12-7中的兩個(gè)電阻),以保證SDA和SCL在空閑時(shí)被上拉為高電平。SCL線上的時(shí)鐘信號(hào)對(duì)SDA線上的各器件間的數(shù)據(jù)傳輸起同步控制作用。SDA線上的數(shù)據(jù)起始、終止及數(shù)據(jù)的有效性均要根據(jù)SCL線上的時(shí)鐘信號(hào)來(lái)判斷。30 在標(biāo)準(zhǔn)I2C模式,數(shù)據(jù)的傳輸速率為100kbit/s,高速模式下可達(dá)400kbit/s。 總線上擴(kuò)展的器件數(shù)量不是由電流負(fù)載決定的,而是由電容負(fù)載確定的。I2C總線上每個(gè)節(jié)點(diǎn)器件的接口都有一定的等效電容,連接的器件越多,電容值越大,這會(huì)造成信號(hào)傳輸?shù)难舆t??偩€上允許的器件數(shù)以器件的電容量不超過(guò)400pF(通過(guò)驅(qū)動(dòng)擴(kuò)展可達(dá)4000pF)為宜,據(jù)

19、此可計(jì)算出總線長(zhǎng)度及連接器件的數(shù)量。每個(gè)連到I2C總線上的器件都有一個(gè)唯一的地址,擴(kuò)展器件時(shí)也要受器件地址數(shù)目的限制。31I2C系統(tǒng)允許多主器件,究竟哪一主器件控制總線要通過(guò)總線仲裁來(lái)決定。如何仲裁,可查閱I2C仲裁協(xié)議。但在實(shí)際應(yīng)用中,經(jīng)常遇到的是以單一單片機(jī)為主機(jī),其他外圍接口器件為從機(jī)情況。12.4.2 I2C總線的數(shù)據(jù)傳送1數(shù)據(jù)位的有效性規(guī)定I2C總線在進(jìn)行數(shù)據(jù)傳送時(shí),每一數(shù)據(jù)位的傳送都與時(shí)鐘脈沖相對(duì)應(yīng)。時(shí)鐘脈沖為高電平期間,數(shù)據(jù)線上的數(shù)據(jù)必須保持穩(wěn)定,在I2C總線上,只有在時(shí)鐘線為低電平期間,數(shù)據(jù)線上的電平狀態(tài)才允許變化,如圖12-8所示。32 圖12-8 數(shù)據(jù)位的有效性規(guī)定2起始和

20、終止信號(hào)據(jù)I2C總線協(xié)議,總線上數(shù)據(jù)信號(hào)傳送由起始信號(hào)(S)開(kāi)始、由終止信號(hào)(P)結(jié)束。起始信號(hào)和終止信號(hào)都由主機(jī)發(fā)出,在起始信號(hào)產(chǎn)生后,總線就處于占用狀態(tài);在終止信號(hào)產(chǎn)生后,總線就處于空閑狀態(tài)。結(jié)合圖12-9介紹起始信號(hào)和終止信號(hào)規(guī)定。33 圖12-9 起始信號(hào)和終止信號(hào)(1)起始信號(hào)(S)。在SCL線為高期間,SDA線由高向低的變化表示起始信號(hào),只有在起始信號(hào)以后,其他命令才有效。(2)終止信號(hào)(P)。在SCL線為高期間,SDA線由低向高的變化表示終止信號(hào)。隨著終止信號(hào)出現(xiàn),所有外部操作都結(jié)束。343I2C總線上數(shù)據(jù)傳送的應(yīng)答I2C數(shù)據(jù)傳送時(shí),傳送的字節(jié)數(shù)(數(shù)據(jù)幀)沒(méi)有限制,但每一個(gè)字節(jié)必

21、須為8位長(zhǎng)度。數(shù)據(jù)傳送,先傳最高位(MSB),每一個(gè)被傳送字節(jié)后都須跟隨1位應(yīng)答位(即一幀共有9位),如圖12-10所示。I2C總線在傳送每一字節(jié)數(shù)據(jù)后都須有應(yīng)答信號(hào)A,在第9個(gè)時(shí)鐘位上出現(xiàn),與應(yīng)答信號(hào)對(duì)應(yīng)的時(shí)鐘信號(hào)由主機(jī)產(chǎn)生。這時(shí)發(fā)方須在這一時(shí)鐘位上使SDA線處于高電平狀態(tài),以便收方在這一位上送出低電平應(yīng)答信號(hào)A。35由于某種原因接收方不對(duì)主機(jī)尋址信號(hào)應(yīng)答時(shí),例如接收方正在進(jìn)行其他處理而無(wú)法接收總線上的數(shù)據(jù)時(shí),必須釋放總線,將數(shù)據(jù)線置為高電平,而由主機(jī)產(chǎn)生一個(gè)終止信號(hào)以結(jié)束總線的數(shù)據(jù)傳送。 當(dāng)主機(jī)接收來(lái)自從機(jī)的數(shù)據(jù)時(shí),接收到最后一個(gè)數(shù)據(jù)字節(jié)后,必須給從機(jī)發(fā)送一個(gè)非應(yīng)答信號(hào)( ),使從機(jī)釋放數(shù)

22、據(jù)總線,以便主機(jī)發(fā)送一個(gè)終止信號(hào),從而結(jié)束數(shù)據(jù)的傳送。36 圖12-10 I2C總線上的應(yīng)答信號(hào)374I2C總線上的數(shù)據(jù)幀格式I2C傳送的信號(hào)即包括真正的數(shù)據(jù)信號(hào),也包括地址信號(hào)。I2C總線規(guī)定,在起始信號(hào)后必須傳送一個(gè)從機(jī)的地址(7位),第8位是數(shù)據(jù)傳送的方向位(R/ ), “0”表示主機(jī)發(fā)送數(shù)據(jù)( ),“1”表示主機(jī)接收數(shù)據(jù)(R)。每次數(shù)據(jù)傳送總是由主機(jī)產(chǎn)生的終止信號(hào)結(jié)束。但是,若主機(jī)希望繼續(xù)占用總線進(jìn)行新的數(shù)據(jù)傳送,則可不產(chǎn)生終止信號(hào),馬上再次發(fā)出起始信號(hào)對(duì)另一從機(jī)進(jìn)行尋址。因此,在總線一次數(shù)據(jù)傳送過(guò)程中,可以有以下幾種組合方式:38(1)主機(jī)向從機(jī)發(fā)送n個(gè)字節(jié)的數(shù)據(jù),數(shù)據(jù)傳送方向在整個(gè)

23、傳送過(guò)程中不變,傳送格式如下:說(shuō)明:陰影部分表示主機(jī)向從機(jī)發(fā)送數(shù)據(jù),無(wú)陰影部分表示從機(jī)向主機(jī)發(fā)送數(shù)據(jù),以下同。上述格式中的從機(jī)地址為7位,緊接其后的“1”和“0”表示主機(jī)的讀/寫(xiě)方向,“1”為讀,“0”為寫(xiě)。格式中:字節(jié)1字節(jié)n為主機(jī)寫(xiě)入從機(jī)n字節(jié)數(shù)據(jù)。39(2)主機(jī)讀出來(lái)自從機(jī)的n個(gè)字節(jié)。除第一個(gè)尋址字節(jié)由主機(jī)發(fā)出,n字節(jié)都由從機(jī)發(fā)送,主機(jī)接收,數(shù)據(jù)傳送格式如下:其中:字節(jié)1字節(jié)n為從機(jī)被讀出的n個(gè)字節(jié)的數(shù)據(jù)。主機(jī)發(fā)送終止信號(hào)前應(yīng)發(fā)送非應(yīng)答信號(hào) ,向從機(jī)表明讀操作要結(jié)束。40(3)主機(jī)的讀、寫(xiě)操作。在一次數(shù)據(jù)傳送過(guò)程中,主機(jī)先發(fā)送一個(gè)字節(jié)數(shù)據(jù),然后再接收一個(gè)字節(jié)數(shù)據(jù),此時(shí)起始信號(hào)和從機(jī)地址都

24、被重新產(chǎn)生一次,但兩次讀寫(xiě)的方向位正好相反。數(shù)據(jù)傳送的格式如下:“Sr” 表示重新產(chǎn)生的起始信號(hào),“從機(jī)地址r” 表示重新產(chǎn)生的從機(jī)地址。由上可見(jiàn),無(wú)論哪種方式,起始信號(hào)、終止信號(hào)和從機(jī)地址均由主機(jī)發(fā)送,數(shù)據(jù)字節(jié)傳送方向由尋址字節(jié)中方向位規(guī)定,每字節(jié)傳送都必須有應(yīng)答位(A或 )相隨。415尋址字節(jié)在上面數(shù)據(jù)幀格式中,均有7位從機(jī)地址和緊跟其后的1位讀/寫(xiě)方向位,即下面要介紹的尋址字節(jié)。I2C總線的尋址采用軟件尋址,主機(jī)在發(fā)送完起始信號(hào)后,立即發(fā)送尋址字節(jié)來(lái)尋址被控的從機(jī),尋址字節(jié)格式如下:427位從機(jī)地址即為“DA3、DA2、DA1、DA0”和“A2、A1、A0”。其中“DA3、DA2、DA1

25、、DA0”為器件地址,是外圍器件固有的地址編碼,器件出廠時(shí)就已經(jīng)給定?!癆2、A1、A0”為引腳地址,由器件引腳A2、A1、A0在電路中接高電平或接地決定(圖12-12)。數(shù)據(jù)方向位(R/ )規(guī)定了總線上的單片機(jī)(主機(jī))與外圍器件(從機(jī))的數(shù)據(jù)傳送方向。R/ =1,表示主機(jī)接收(讀)。R/ =0,表示主機(jī)發(fā)送(寫(xiě))。436尋址字節(jié)中的特殊地址I2C規(guī)定一些特殊地址,其中兩種固定編號(hào)0000和1111已被保留為作為特殊用途,見(jiàn)表12-1。44起始信號(hào)后第1字節(jié)8位為“0000 0000”,為通用呼叫地址,用于尋訪I2C總線上所有器件的地址。不需從通用呼叫地址命令獲取數(shù)據(jù)的器件可不響應(yīng)通用呼叫地址

26、。否則,接收到這個(gè)地址后應(yīng)作出應(yīng)答,并把自己置為從機(jī)接收方式,以接收隨后的各字節(jié)數(shù)據(jù)。另外,當(dāng)遇到不能處理的數(shù)據(jù)字節(jié)時(shí),不作應(yīng)答,否則收到每個(gè)字節(jié)后都應(yīng)作應(yīng)答。通用呼叫地址的含義在第2字節(jié)中加以說(shuō)明。格式如下:45第2字節(jié)為06H時(shí),所有能響應(yīng)通用呼叫地址的從機(jī)復(fù)位,并由硬件裝入從機(jī)地址的可編程部分。能響應(yīng)命令的從機(jī)復(fù)位時(shí)不拉低SDA和SCL線,以免堵塞總線。第2字節(jié)為04H時(shí),所有能響應(yīng)通用呼叫地址,并通過(guò)硬件來(lái)定義其可編程地址的從機(jī)將鎖定地址中的可編程位,但不進(jìn)行復(fù)位。如果第2字節(jié)的方向位B為“1”,則這兩個(gè)字節(jié)命令稱為硬件通用呼叫命令。就是說(shuō),這是由“硬件主器件”發(fā)出的。所謂硬件主器件,

27、是不能發(fā)送所要尋訪從件地址的發(fā)送器,如鍵盤(pán)掃描器等。46這種器件在制造時(shí)無(wú)法知道信息應(yīng)向哪兒傳送,所以它發(fā)出硬件呼叫命令時(shí),在第2字節(jié)的高7位說(shuō)明自己的地址。接在總線上的智能器件,如單片機(jī)能識(shí)別這個(gè)地址,并與之傳送數(shù)據(jù)。硬件主器件作為從機(jī)使用時(shí),也用這個(gè)地址作為從機(jī)地址。格式為:在系統(tǒng)中另一種選擇可能是系統(tǒng)復(fù)位時(shí)硬件主器件工作在從機(jī)接收方式,這時(shí)由系統(tǒng)中主機(jī)先告訴硬件主器件數(shù)據(jù)應(yīng)送往的從機(jī)地址。當(dāng)硬件主器件要發(fā)數(shù)據(jù)時(shí),就可直接向指定從機(jī)發(fā)送數(shù)據(jù)。477數(shù)據(jù)傳送格式I2C總線上每傳送一位數(shù)據(jù)都與一個(gè)時(shí)鐘脈沖相對(duì)應(yīng),傳送的每一幀數(shù)據(jù)均為一字節(jié)。但啟動(dòng)I2C總線后傳送的字節(jié)數(shù)沒(méi)有限制,只要求每傳送一

28、個(gè)字節(jié)后,對(duì)方回答一個(gè)應(yīng)答位。在時(shí)鐘線為高電平期間,數(shù)據(jù)線的狀態(tài)就是要傳送的數(shù)據(jù)。數(shù)據(jù)線上數(shù)據(jù)的改變必須在時(shí)鐘線為低電平期間完成。在數(shù)據(jù)傳輸期間,只要時(shí)鐘線為高電平,數(shù)據(jù)線都必須穩(wěn)定,否則數(shù)據(jù)線上任何變化都當(dāng)作起始或終止信號(hào)。48I2C總線數(shù)據(jù)傳送是必須遵循規(guī)定的數(shù)據(jù)傳送格式。圖12-11為一完整的數(shù)據(jù)傳送應(yīng)答時(shí)序。據(jù)總線規(guī)范,起始信號(hào)表明一次數(shù)據(jù)傳送開(kāi)始,其后為尋址字節(jié)。在尋址字節(jié)后是按指定讀、寫(xiě)的數(shù)據(jù)字節(jié)與應(yīng)答位。在數(shù)據(jù)傳送完成后主器件都必須發(fā)送停止信號(hào)。在起始與停止信號(hào)間傳輸?shù)淖止?jié)數(shù)由主機(jī)決定,理論上講沒(méi)有字節(jié)限制。49圖12-11 I2C總線一次完整的數(shù)據(jù)傳送應(yīng)答時(shí)序I2C總線上的數(shù)據(jù)

29、傳送有多種組合方式,前面已介紹常見(jiàn)的三種數(shù)據(jù)傳送格式,這里不再贅述。從上述數(shù)據(jù)傳送格式可看出: 無(wú)論何種數(shù)據(jù)傳送格式,尋址字節(jié)都由主機(jī)發(fā)出,數(shù)據(jù)字節(jié)的傳送方向則遵循尋址字節(jié)中的方向位的規(guī)定。 尋址字節(jié)只表明了從機(jī)的地址及數(shù)據(jù)傳送方向。從機(jī)內(nèi)部的n個(gè)數(shù)據(jù)地址,由器件設(shè)計(jì)者在該器件的I2C總線數(shù)據(jù)操作格式中,指定第一個(gè)數(shù)據(jù)字節(jié)作為器件內(nèi)的單元地址指針,且設(shè)置地址自動(dòng)加減功能,以減少?gòu)臋C(jī)地址的尋址操作。50 每個(gè)字節(jié)傳送都必須有應(yīng)答信號(hào)(A/ )相隨。 從機(jī)在接收到起始信號(hào)后都必須釋放數(shù)據(jù)總線,使其處于高電平,以便主機(jī)發(fā)送從機(jī)地址。12.5 AT89S51單片機(jī)的I2C串行擴(kuò)展設(shè)計(jì)許多公司都推出帶有

30、I2C接口的單片機(jī)及各種外圍擴(kuò)展器件,常見(jiàn)有ATMEL公司的AT24C系列存儲(chǔ)器、Philips公司的PCF8553(時(shí)鐘/日歷且?guī)в?568 RAM)和PCF8570(2568 RAM)、MAXIM公司的MAX127/128(A/D)和MAX517/518/519(D/A)等。 I2C總線系統(tǒng)中的主器件通常由帶有I2C總線接口單片51機(jī)來(lái)?yè)?dān)當(dāng),也可用不帶I2C總線接口的單片機(jī)。從器件必須帶有I2C總線接口。AT89S51沒(méi)有I2C總線接口,這可利用其并行I/O口線模擬I2C總線接口的時(shí)序,因此,在許多AT89S51應(yīng)用系統(tǒng)中,都將I2C總線的模擬傳送技術(shù)作為常規(guī)的設(shè)計(jì)方法。本節(jié)首先介紹AT8

31、9S51擴(kuò)展I2C總線器件的硬件接口設(shè)計(jì),然后介紹用單片機(jī)I/O口結(jié)合軟件模擬I2C總線數(shù)據(jù)傳送,以及數(shù)據(jù)傳送模擬通用子程序的設(shè)計(jì)。5212.5.1 AT89S51的I2C總線擴(kuò)展系統(tǒng)圖12-12所示為一個(gè)AT89S51與有I2C總線器件的擴(kuò)展接口電路。圖中,AT24C02為E2PROM芯片,PCF8570為靜態(tài)2568 RAM,PCF8574為8位I/O口,SAA1064為4位LED驅(qū)動(dòng)器。雖然各種器件的原理和功能有很大的差異,但它們與AT89S51的連接是相同的。53 54圖12-12 AT89S51單片機(jī)擴(kuò)展I2C總線器件的接口電路12.5.2 I2C總線數(shù)據(jù)傳送的模擬AT89S51用軟

32、件來(lái)模擬I2C總線上的信號(hào),為單主器件的工作方式下,沒(méi)有其他主器件對(duì)總線的競(jìng)爭(zhēng)與同步,只存在單片機(jī)對(duì)I2C總線上各從器件的讀(單片機(jī)接收)、寫(xiě)(單片機(jī)發(fā)送)操作。1典型信號(hào)模擬為保證數(shù)據(jù)傳送的可靠性,標(biāo)準(zhǔn)I2C的數(shù)據(jù)傳送有嚴(yán)格的時(shí)序要求。I2C總線的起始信號(hào)、終止信號(hào)、應(yīng)答/數(shù)據(jù)“0”及非應(yīng)答/數(shù)據(jù)“1”的模擬時(shí)序如圖12-13、圖12-14、圖12-15、圖12-16所示。55在I2C的數(shù)傳中,可利用時(shí)鐘同步機(jī)制展寬低電平周期,迫使主器件處于等待狀態(tài),使傳送速率降低。對(duì)終止信號(hào),要保證有大于4.7s的信號(hào)建立時(shí)間。終止信號(hào)結(jié)束時(shí),要釋放總線,使SDA、SCL維持在高電平,大于4.7s后才可以

33、進(jìn)行第1次起始操作。單主器件系統(tǒng)中,為防止非正常傳送,終止信號(hào)后SCL可設(shè)置為低。對(duì)于發(fā)送應(yīng)答位、非應(yīng)答位來(lái)說(shuō),與發(fā)送數(shù)據(jù)“0”和“1”的信號(hào)定時(shí)要求完全相同。只要滿足在時(shí)鐘高電平大于4.0s期間,SDA線上有確定的電平狀態(tài)即可。562典型信號(hào)的模擬子程序主器件采用單片機(jī),晶振為6MHz(機(jī)器周期2s),常用的幾個(gè)典型的波形模擬如下。(1)起始信號(hào)S。對(duì)一個(gè)新的起始信號(hào),要求起始前總線空閑時(shí)間大于4.7s,而對(duì)一個(gè)重復(fù)的起始信號(hào),要求建立時(shí)間也須大于4.7s。圖12-13所示的起始信號(hào)的時(shí)序波形在SCL高電平期間SDA發(fā)生負(fù)跳變,該時(shí)序波形適用于數(shù)據(jù)模擬傳送中任何情況下的起始操作。起始信號(hào)到第

34、1個(gè)時(shí)鐘脈沖的時(shí)間間隔應(yīng)大于4.0s。子程序如下:57START:SETB P1.7;SDA=1 SETB P1.6;SCL=1 NOP;SDA=1和SCL=1保持4s NOP CLR P1.7;SDA=0 NOP ;SDA=0和SCL=1(起始信號(hào))保持4s NOP CLR P1.6;SCL=0 RET58 圖12-13 起始信號(hào)S的模擬 圖12-14 終止信號(hào)P的模擬(2)終止信號(hào)P。在SCL高期間SDA發(fā)生正跳變。終止信號(hào)P的波形如圖12-14所示。子程序如下:STOP:CLR P1.7;SDA=0 SETB P1.6;SCL=1 NOP;終止信號(hào)建立時(shí)間4s NOP SETB P1.7

35、;SDA=1 NOP NOP CLR P1.6;SCL=0CLR P1.7;SDA=0 RET59(3)發(fā)送應(yīng)答位/數(shù)據(jù)“0”。在SDA低電平期間SCL發(fā)生一個(gè)正脈沖,波形如圖12-15所示。子程序如下:ACK:CLR P1.7;SDA=0 SETB P1.6;SCL=1 NOP;4s NOPCLR P1.6;SCL=0 SETB P1.7;SDA=1 RET 60圖12-15 應(yīng)答位/數(shù)據(jù)“0”的模擬時(shí)序 圖12-16 非應(yīng)答位/數(shù)據(jù)“1”的模擬時(shí)序(4)發(fā)送非應(yīng)答位/數(shù)據(jù)“1”。在SDA高電平期間SCL發(fā)生一個(gè)正脈沖,時(shí)序波形如圖12-16所示。子程序如下:NACK:SETB P1.7;S

36、DA=1 SETB P1.6;SCL=1 NOP;兩條NOP指令為 4s NOP CLR P1.6;SCL=0 CLR P1.7;SDA=0 RET 6112.5.3 I2C總線模擬通用子程序I2C總線操作中除基本的起始信號(hào)、終止信號(hào)、發(fā)送應(yīng)答位/數(shù)據(jù)“0”和發(fā)送非應(yīng)答位/數(shù)據(jù)“1”外,還需要有應(yīng)答位檢查、發(fā)送1字節(jié)、接收1字節(jié)、發(fā)送n字節(jié)和接收n字節(jié)子程序。1應(yīng)答位檢查子程序在應(yīng)答位檢查子程序CACK中,設(shè)置了標(biāo)志位F0,當(dāng)檢查到正常應(yīng)答位時(shí),F(xiàn)0=0;否則F0=1。參考子程序如下:62CACK:SETB P1.7;SDA為輸入線 SETB P1.6;SCL=1, 使SDA引腳上的數(shù)據(jù)有效

37、CLRF0;預(yù)設(shè)F0=0 MOVC, P1.7;讀入SDA線的狀態(tài) JNCCEND;應(yīng)答正常,轉(zhuǎn)F0=0 SETBF0;應(yīng)答不正常, F0=1CEND:CLR P1.6;子程序結(jié)束, 使SCL=0 RET2發(fā)送1字節(jié)數(shù)據(jù)子程序下面是模擬I2C數(shù)據(jù)線SDA發(fā)送1字節(jié)數(shù)據(jù)的子程序。63調(diào)用本子程序前,先將欲發(fā)送的數(shù)據(jù)送入A中。參考子程序如下:W1BYTE:MOV R6,#08H;8位數(shù)據(jù)長(zhǎng)度送入R6中WLP:RLCA;A左移, 發(fā)送位進(jìn)入C MOVP1.7,C;將發(fā)送位送入SDA引腳SETBP1.6;SCL=1, 使SDA引腳上的數(shù)據(jù)有效 NOP NOP CLR P1.6;SDA線上數(shù)據(jù)變化 DJNZR6,WLP RET643接收1字節(jié)數(shù)據(jù)子程序下面是模擬從I2C的數(shù)據(jù)線SDA讀取1字節(jié)數(shù)據(jù)的子程序,并存入R2中,子程序如下:R1BYTE:MOV R6,#08H;8位數(shù)據(jù)長(zhǎng)度送入R6中RLP:SETBP

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論