單片機(jī)課件第9章講義_第1頁
單片機(jī)課件第9章講義_第2頁
單片機(jī)課件第9章講義_第3頁
單片機(jī)課件第9章講義_第4頁
單片機(jī)課件第9章講義_第5頁
已閱讀5頁,還剩127頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第9章串行擴(kuò)展技術(shù)

(課時(shí):6學(xué)時(shí))第9章串行擴(kuò)展技術(shù)(課時(shí):6學(xué)時(shí))1教學(xué)目的

了解串行擴(kuò)展的分類和特點(diǎn)。

了解Microware、1-wire、USB和CAN總線。掌握I2C總線的原理。掌握SPI總線的原理。學(xué)習(xí)重點(diǎn)和難點(diǎn)I2C總線的軟件模擬。SPI總線的軟件模擬。

教學(xué)目的了解串行擴(kuò)展的分類和特點(diǎn)。學(xué)習(xí)重點(diǎn)和難點(diǎn)I2C2第9章串行擴(kuò)展技術(shù)

9.1串行擴(kuò)展概述9.2UART串行擴(kuò)展接口9.3I2C串行擴(kuò)展總線9.4SPI串行擴(kuò)展接口本章小結(jié)習(xí)題

第9章串行擴(kuò)展技術(shù)9.1串行擴(kuò)展概述39.1串行擴(kuò)展概述9.1.1串行擴(kuò)展的種類9.1.2串行擴(kuò)展的特點(diǎn)9.1串行擴(kuò)展概述9.1.1串行擴(kuò)展的種類49.1.1串行擴(kuò)展的種類新一代單片機(jī)技術(shù)的顯著特點(diǎn)之一就是串行擴(kuò)展總線和接口的推出。常用的串行擴(kuò)展總線和接口有I2C總線、SPI總線、Microware總線、1-wire總線和CAN總線等。(1)UART串行擴(kuò)展接口(UniversalAsynchronousReceiver/Transmitter)UART通用異步收發(fā)器,既能同步又能異步通信的硬件電路稱為UART。UART是用于控制計(jì)算機(jī)與串行設(shè)備的芯片,它提供了RS-232C數(shù)據(jù)終端設(shè)備接口,這樣計(jì)算機(jī)就可以和調(diào)制解調(diào)器或其它使用RS-232C接口的串行設(shè)備通信了。

9.1.1串行擴(kuò)展的種類新一代單片機(jī)技術(shù)的顯著特點(diǎn)59.1.1串行擴(kuò)展的種類(2)I2C(InterIntegratedCircuit)串行擴(kuò)展總線I2C總線是Philip公司推出的芯片間串行傳輸總線。它用兩根線實(shí)現(xiàn)了完善的全雙工同步數(shù)據(jù)傳送,可以極為方便地構(gòu)成多機(jī)系統(tǒng)和外圍器件擴(kuò)展系統(tǒng)。(3)SPI(SerialPeripheralInterface)串行擴(kuò)展接口SPI總線是Motorola公司提出的一種同步串行外設(shè)接口。允許MCU與各種外圍設(shè)備以同步串行方式進(jìn)行通信。其外圍設(shè)備種類繁多,從最簡單的TTL移位寄存器到復(fù)雜的LCD顯示驅(qū)動(dòng)器、網(wǎng)絡(luò)控制器等,可謂應(yīng)有盡有。

9.1.1串行擴(kuò)展的種類(2)I2C(InterInt69.1.1串行擴(kuò)展的種類(4)Microware串行擴(kuò)展接口Microware總線是NS公司提出的串行同步雙工通信接口,用于8位COP800系列單片機(jī)和16位HPC系列單片機(jī)。(5)單總線(1-wire)串行擴(kuò)展總線1-wire總線是Dallas公司研制開發(fā)的一種協(xié)議,用于便攜式儀表和現(xiàn)場監(jiān)控系統(tǒng)。(6)USB(UniversalSerialBUS)串行擴(kuò)展總線USB總線是Compaq、Intel、Microsoft、NEC等公司聯(lián)合制定的一種計(jì)算機(jī)串行通信協(xié)議。

9.1.1串行擴(kuò)展的種類(4)Microware串行擴(kuò)展79.1.1串行擴(kuò)展的種類(7)CAN(ControllerAreaNetwork)串行擴(kuò)展總線CAN總線是德國Bosch公司最先提出的多主機(jī)局域網(wǎng),是國際上應(yīng)用最廣泛的現(xiàn)場總線之一。最初,CAN被設(shè)計(jì)作為汽車環(huán)境中的微控制器通信,在車載各電子控制裝置ECU之間交換信息,形成汽車電子控制網(wǎng)絡(luò)。比如:發(fā)動(dòng)機(jī)管理系統(tǒng)、變速箱控制器、儀表裝備。

9.1.1串行擴(kuò)展的種類(7)CAN(Controlle89.1.2串行擴(kuò)展的特點(diǎn)

串行擴(kuò)展總線技術(shù)是新一代單片機(jī)技術(shù)發(fā)展的一個(gè)顯著特點(diǎn)。與并行擴(kuò)展總線相比,串行擴(kuò)展總線有電路結(jié)構(gòu)簡單,程序編寫方便,易于實(shí)現(xiàn)用戶系統(tǒng)軟硬件的模塊化、標(biāo)準(zhǔn)化等優(yōu)點(diǎn)。常用串行擴(kuò)展總線和接口的特點(diǎn)簡要說明如下:

(1)UART串行擴(kuò)展接口UART接口是二線制,8051單片機(jī)的UART既能作通用異步接收和發(fā)送器,又能作同步移位寄存器。它可以實(shí)現(xiàn)8051單片機(jī)系統(tǒng)之間點(diǎn)對點(diǎn)的單機(jī)通信或多機(jī)通信,也可以實(shí)現(xiàn)擴(kuò)展I/O口。

9.1.2串行擴(kuò)展的特點(diǎn)串行擴(kuò)展總線技術(shù)是新一代99.1.2串行擴(kuò)展的特點(diǎn)(2)I2C總線I2C總線是二線制,采用器件地址的硬件設(shè)置方法,通過軟件尋址完全避免了器件的片選線尋址方法,從而使硬件系統(tǒng)具有簡單靈活的擴(kuò)展方法。I2C總線簡單,結(jié)構(gòu)緊湊,易于實(shí)現(xiàn)模塊化和標(biāo)準(zhǔn)化。(3)SPI串行擴(kuò)展接口SPI總線是三線制,可直接與多種標(biāo)準(zhǔn)外圍器件直接接口,在SPI從設(shè)備較少而沒有總線擴(kuò)展能力的單片機(jī)系統(tǒng)中使用特別方便。即使在有總線擴(kuò)展能力的系統(tǒng)中采用SPI設(shè)備也可以簡化電路設(shè)計(jì),省掉很多常規(guī)電路中的接口器件,從而提高了設(shè)計(jì)的可靠性。

9.1.2串行擴(kuò)展的特點(diǎn)(2)I2C總線109.1.2串行擴(kuò)展的特點(diǎn)(4)Microware串行擴(kuò)展接口Microware總線是三線制,由一根數(shù)據(jù)輸出(SO)線、一根數(shù)據(jù)輸入(SI)線和一根時(shí)鐘(SK)線組成。所有從器件的時(shí)鐘線連接到同一根SK線上,主器件向SK線發(fā)送時(shí)鐘脈沖信號(hào),從器件在時(shí)鐘信號(hào)的同步沿輸出/輸入數(shù)據(jù)。主器件的數(shù)據(jù)輸出線SO和所有從器件的數(shù)據(jù)輸入線相接,從器件的數(shù)據(jù)輸出線都接到主器件的數(shù)據(jù)輸入線SI上。(5)1-wire總線1-wire總線是利用一根線實(shí)現(xiàn)雙向通信,由一個(gè)總線主節(jié)點(diǎn)、一個(gè)或多個(gè)從節(jié)點(diǎn)組成系統(tǒng),通過一根信號(hào)線對從芯片進(jìn)行數(shù)據(jù)的讀取。每一個(gè)符合1-wire協(xié)議的從芯片都有一個(gè)唯一的地址,包括8位分類碼、48位的序列號(hào)和8位CRC代碼。主芯片對各個(gè)從芯片的尋找依據(jù)這64位的不同來進(jìn)行。單總線節(jié)省I/O引腳資源、結(jié)構(gòu)簡單、成本低廉、便于總線擴(kuò)展和維護(hù)。

9.1.2串行擴(kuò)展的特點(diǎn)(4)Microware串行擴(kuò)展119.1.2串行擴(kuò)展的特點(diǎn)(6)USB串行擴(kuò)展接口USB比較于其他傳統(tǒng)接口的一個(gè)優(yōu)勢是即插即用的實(shí)現(xiàn),即插即用(Plug-and-Play)也稱為熱插拔(HotPlugging)。數(shù)據(jù)傳輸速度快,USB1.1接口的最高傳輸率可達(dá)12Mb/s;USB2.0接口的最高傳輸率可達(dá)480Mb/s。擴(kuò)展方便,使用USBHub擴(kuò)展,可以連接127個(gè)USB設(shè)備,連接的方式十分靈活。(7)CAN總線在由CAN總線構(gòu)成的單一網(wǎng)絡(luò)中,理論上可以掛接無數(shù)個(gè)節(jié)點(diǎn)。實(shí)際應(yīng)用中,節(jié)點(diǎn)數(shù)目受網(wǎng)絡(luò)硬件的電氣特性所限制。CAN可提供高達(dá)1Mbit/s的數(shù)據(jù)傳輸速率,這使實(shí)時(shí)控制變得非常容易。另外,硬件的錯(cuò)誤檢定特性也增強(qiáng)了CAN的抗電磁干擾能力。當(dāng)信號(hào)傳輸距離達(dá)到10km時(shí),CAN仍可提供高達(dá)50Kbit/s的數(shù)據(jù)傳輸速率。

9.1.2串行擴(kuò)展的特點(diǎn)(6)USB串行擴(kuò)展接口129.2UART串行擴(kuò)展接口

9.2.1串行口工作方式9.2.2UART串行擴(kuò)展應(yīng)用實(shí)例9.2UART串行擴(kuò)展接口9.2.1串行口工作方式139.2.1串行口工作方式串行口有四種工作方式,每一種工作方式都有自己的特點(diǎn)。其中方式0是8位同步通信方式,用于串/并或并/串轉(zhuǎn)換中,常用的串/并轉(zhuǎn)換芯片有74LS164和并/串轉(zhuǎn)換芯片74LS165等。74LS164是一個(gè)雙列直插式8位串入/并出移位寄存器,其引腳如下圖所示。其引腳定義如下:A:同步串行數(shù)據(jù)輸入端B:同步串行數(shù)據(jù)輸入端Q0~Q7:8位并行數(shù)據(jù)輸出端CK:時(shí)鐘脈沖輸入端CLR:數(shù)據(jù)清除端(清除輸出數(shù)據(jù),通常用在移位完成時(shí))GND:接地端VCC:電源端9.2.1串行口工作方式串行口有四種工作方式,每一種工作149.2.1串行口工作方式74LS165是一個(gè)雙列直插式8位并入/串出移位寄存器,其引腳如下圖所示。其引腳定義如下:LD:重新裝載數(shù)據(jù)端(通常用在數(shù)據(jù)完全移出后)CK:內(nèi)部數(shù)據(jù)移位時(shí)鐘脈沖輸入端D0~D7:并行數(shù)據(jù)輸入端Q11:取反串行輸出端GND:接地端Q11:串行輸出端SE:用于填充數(shù)據(jù)移出后的空位的邏輯電平信號(hào)COK:和CK聯(lián)合控制數(shù)據(jù)移動(dòng)VCC:電源端9.2.1串行口工作方式74LS165是一個(gè)雙列直插式159.2.1串行口工作方式74LS164引腳圖74LS165引腳圖

9.2.1串行口工作方式74LS164引腳圖169.2.2UART串行擴(kuò)展應(yīng)用實(shí)例【例1】

利用74LS164串行輸入并行輸出芯片作一個(gè)簡單的電子鐘,要求四個(gè)數(shù)碼管顯示時(shí)鐘;其中LED1顯示小時(shí)的十位,LED2顯示小時(shí)的個(gè)位,LED3顯示分鐘的十位,LED4顯示分鐘的個(gè)位。解:原理圖如下圖,采用單片機(jī)的串行口輸出字形碼,用74LS164和74LS138作為擴(kuò)展芯片。74LS164的功能是將AT89C2051串行通信口輸出的串行數(shù)據(jù)譯碼并在其并口線上輸出,從而驅(qū)動(dòng)LED數(shù)碼管。74LS138是一個(gè)3線-8線譯碼器,它將單片機(jī)輸出的地址信號(hào)譯碼后動(dòng)態(tài)驅(qū)動(dòng)相應(yīng)的LED。因74LS138電流驅(qū)動(dòng)能力較小,故用末級(jí)驅(qū)動(dòng)三極管9013作為地址驅(qū)動(dòng)。將4只LED的字段位都連在一起,它們的公共端則由74LS138分時(shí)選通,這樣任何一個(gè)時(shí)刻,都只有一位LED在點(diǎn)亮,也即動(dòng)態(tài)掃描顯示方式,其優(yōu)點(diǎn)使用串行口進(jìn)行LED通信程序編寫相當(dāng)簡單,用戶只需將需顯示的數(shù)據(jù)直接送串口發(fā)送緩沖器,等待串行中斷即可。

9.2.2UART串行擴(kuò)展應(yīng)用實(shí)例【例1】利用74LS179.2.2UART串行擴(kuò)展應(yīng)用實(shí)例串行動(dòng)態(tài)LED掃描電路

P3.2P3.3TXRX9.2.2UART串行擴(kuò)展應(yīng)用實(shí)例串行動(dòng)態(tài)LED掃描電路189.2.2UART串行擴(kuò)展應(yīng)用實(shí)例ORG0000HLJMPMAINORG0040HMAIN:MOVSCON,#00H;初始化串口為方式0MOVR3,#00HLOOP:MOVR4,#0E8HDELAY:LCALLDISPLAY;動(dòng)態(tài)掃描顯示DJNZR4,DELAYINCR3;顯示數(shù)字增1CJNER3,#0AH,LOOP;不等于10轉(zhuǎn)移LJMPMAIN下面是一個(gè)簡單的動(dòng)態(tài)掃描程序,如果再利用上第六章的定時(shí)器就可做成一個(gè)完整的電子鐘,四個(gè)數(shù)碼管顯示為00:00這種形式。在本例中冒號(hào)就不顯示出來了,分別用20H、21H、22H、23H地址存放時(shí)間的時(shí)鐘的十位、時(shí)鐘的個(gè)位、分鐘的十位、分鐘的個(gè)位。用中斷方式做一個(gè)不帶時(shí)鐘芯片的電子鐘,請讀者自己完成。9.2.2UART串行擴(kuò)展應(yīng)用實(shí)例ORG0000HL199.2.2UART串行擴(kuò)展應(yīng)用實(shí)例DISPLAY:CLRP3.2;顯示LED1CLRP3.3LCALLDISPLCALLDELAY1SETBP3.3;顯示LED2LCALLDISPLCALLDELAY1SETBP3.3;顯示LED3CLRP3.2LCALLDISPLCALLDELAY1SETBP3.2;顯示LED4SETBP3.3LCALLDISPLCALLDELAY1RET參考程序:9.2.2UART串行擴(kuò)展應(yīng)用實(shí)例DISPLAY:CLR209.2.2UART串行擴(kuò)展應(yīng)用實(shí)例DISP:MOVA,R3;將字形碼送串口MOVDPTR,#TABLEMOVCA,@A+DPTRMOVSBUF,AWAIT:JNBTI,WAIT;等待串口傳送CLRTIRETDELAY1:MOVR6,#10H;動(dòng)態(tài)掃描的時(shí)間LOOP1:MOVR7,#38H;間隔DJNZR7,$DJNZR6,LOOP1RETTABLE:DB3FH,06H,,5BH;0~9的字形碼DB4FH,66H,6DHDB7DH,07H,,7FH,,6FH參考程序:9.2.2UART串行擴(kuò)展應(yīng)用實(shí)例DISP:MOVA219.3I2C串行擴(kuò)展總線

9.3.1I2C總線的結(jié)構(gòu)原理9.3.2I2C總線的軟件模擬9.3.3I2C串行擴(kuò)展應(yīng)用實(shí)例

9.3I2C串行擴(kuò)展總線9.3.1I2C總線的結(jié)構(gòu)229.3.1I2C總線的結(jié)構(gòu)原理I2C總線是芯片間串行傳輸總線。它用數(shù)據(jù)線SDA和時(shí)鐘線SCL兩根線實(shí)現(xiàn)全雙工同步數(shù)據(jù)傳送,可方便地構(gòu)成多機(jī)系統(tǒng)和外圍器件擴(kuò)展系統(tǒng)。I2C總線采用了器件地址的硬件設(shè)置方法,通過軟件尋址完全避免了器件的片選線尋址方法,從而使硬件系統(tǒng)具有簡單靈活的擴(kuò)展方法。按照I2C總線規(guī)范,總線傳輸中的所有狀態(tài)都生成相對應(yīng)的狀態(tài)碼,系統(tǒng)中的主機(jī)能夠依照這些狀態(tài)碼自動(dòng)地進(jìn)行總線管理,用戶只要在程序中裝入這些標(biāo)準(zhǔn)處理模塊,根據(jù)數(shù)據(jù)操作要求完成I2C總線的初始化,啟動(dòng)I2C總線,就能自動(dòng)完成規(guī)定的數(shù)據(jù)傳送操作。

9.3.1I2C總線的結(jié)構(gòu)原理I2C總線是芯片間串行傳輸239.3.1I2C總線的結(jié)構(gòu)原理I2C總線接口電路結(jié)構(gòu)

9.3.1I2C總線的結(jié)構(gòu)原理I2C總線接口電路結(jié)構(gòu)249.3.1I2C總線的結(jié)構(gòu)原理I2C總線接口為開漏或開集電極輸出,需加上拉電阻。系統(tǒng)中所有的單片機(jī)、外圍器件都將數(shù)據(jù)線SDA和時(shí)鐘線SCL的同名端相連在一起,總線上的所有節(jié)點(diǎn)都由器件和管腳給定地址。系統(tǒng)中可以直接連接具有I2C總線接口的單片機(jī),也可以通過總線擴(kuò)展芯片或I/O口的軟件仿真與I2C總線相連。在I2C總線上可以掛接各種類型的外圍器件,如RAM/EEPROM、日歷/時(shí)鐘芯片、A/D轉(zhuǎn)換器、D/A轉(zhuǎn)換器、以及由I/O口、顯示驅(qū)動(dòng)器構(gòu)成的各種模塊。

9.3.1I2C總線的結(jié)構(gòu)原理I2C總線接口為開漏或開集259.3.1I2C總線的結(jié)構(gòu)原理SDA和SCL都是雙向線路,都通過一個(gè)電流源或上拉電阻連接到正的電源電壓;當(dāng)總線空閑時(shí),這兩條線路都是高電平;連接到總線的器件輸出級(jí)必須是漏極開路或集電極開路才能執(zhí)行線與的功能。I2C總線上數(shù)據(jù)的傳輸速率在標(biāo)準(zhǔn)模式下可達(dá)100kbit/s。在快速模式下可達(dá)400kbit/s。在高速模式下可達(dá)3.4Mbit/s。連接到總線的接口數(shù)量只由總線電容是400pF的限制決定關(guān)于高速模式主機(jī)器件的信息。

9.3.1I2C總線的結(jié)構(gòu)原理SDA和SCL都是雙向269.3.1I2C總線的結(jié)構(gòu)原理I2C總線上數(shù)據(jù)傳送的基本單位為字節(jié),采用低位在前的格式。主從器件之間一次傳輸?shù)臄?shù)據(jù)稱為一幀,由啟動(dòng)信號(hào)、若干個(gè)數(shù)據(jù)字節(jié)和應(yīng)答位以及停止信號(hào)組成。I2C的主要命令只有讀、寫兩種,雖然讀寫的字節(jié)根據(jù)具體器件的不同而不同,但其時(shí)序關(guān)系不會(huì)發(fā)生改變。下位機(jī)只要具備I2C的基本時(shí)序即可。這些基本時(shí)序包括:啟動(dòng)、寫字節(jié)、讀字節(jié)、應(yīng)答位、停止信號(hào),并可以組合成兩個(gè)子程序:讀N字節(jié)子程序、寫N字節(jié)子程序。

9.3.1I2C總線的結(jié)構(gòu)原理I2C總線上數(shù)據(jù)傳送的基本279.3.1I2C總線的結(jié)構(gòu)原理I2C總線最顯著的特點(diǎn)是規(guī)范的完整性、結(jié)構(gòu)的獨(dú)立性和用戶使用時(shí)的“傻瓜”化。

I2C總線有嚴(yán)格的規(guī)范,如接口的電氣特性、信號(hào)時(shí)序、信號(hào)傳輸?shù)亩x、總線狀態(tài)設(shè)置、總線管理規(guī)則及總線狀態(tài)處理等。在I2C總線規(guī)范中,總線上的器件節(jié)點(diǎn)的電氣特性及地址給定都具有較強(qiáng)的獨(dú)立性,而且各節(jié)點(diǎn)上的器件、模塊都有相對獨(dú)立的地址編號(hào)。嚴(yán)格、完善的規(guī)范,并將這些規(guī)范的應(yīng)用盡可能“傻瓜”化,除了有充分的硬件支持外,在軟件方面,Philips公司為用戶提供了一套完善的總線狀態(tài)處理軟件包,以致于用戶可以不去熟悉I2C總線的規(guī)范,不去理睬總線的管理方法,只要掌握I2C總線的應(yīng)用程序設(shè)計(jì)方法就可方便地使用I2C總線,并且能很快地掌握I2C總線系統(tǒng)的軟、硬件設(shè)計(jì)方法。9.3.1I2C總線的結(jié)構(gòu)原理I2C總線最顯著的特點(diǎn)是規(guī)289.3.2I2C總線的軟件模擬1.產(chǎn)生起始位和停止位I2C總線的起始和停止條件如下圖所示。

分別用P1.0和P1.1模擬I2C總線的時(shí)鐘線和數(shù)據(jù)線,則可給時(shí)鐘線SCL和數(shù)據(jù)線SDA賦值。程序如下:SDLEQUP1.0SCAEQUP1.19.3.2I2C總線的軟件模擬1.產(chǎn)生起始位和停止位S299.3.2I2C總線的軟件模擬2.發(fā)送起始條件當(dāng)時(shí)鐘SCL為高電平時(shí),數(shù)據(jù)線SDA從高電平向低電平切換表示起始條件,即啟動(dòng)I2C總線數(shù)據(jù)傳送。模擬時(shí)序產(chǎn)生時(shí)鐘SCL和SDA發(fā)送的起始條件子程序如下:使用不同頻率的晶體振蕩器,則要相應(yīng)增刪程序段中NOP指令的條數(shù),以滿足時(shí)序的要求。START:SETBSDASETBSCLNOP;NOP的數(shù)目根據(jù)時(shí)鐘頻率確定NOP;此處用NOP來延時(shí)CLRSDANOPNOPCLRSCLRET9.3.2I2C總線的軟件模擬2.發(fā)送起始條件START309.3.2I2C總線的軟件模擬3.發(fā)送停止條件當(dāng)時(shí)鐘SCL為高電平時(shí),數(shù)據(jù)線SDA由低電平向高電平切換表示停止條件,即停止I2C總線數(shù)據(jù)傳送。模擬時(shí)序產(chǎn)生時(shí)鐘SCL和SDA發(fā)送的停止條件子程序如下:使用不同頻率的晶體振蕩器,則要相應(yīng)增刪程序段中NOP指令的條數(shù),以滿足時(shí)序的要求。STOP:CLRSDASETBSCLNOP;NOP的數(shù)目根據(jù)時(shí)鐘頻率確定NOP;此處用NOP來延時(shí)SETBSDANOPNOPCLRSDACLRSCLRET9.3.2I2C總線的軟件模擬3.發(fā)送停止條件STOP:319.3.2I2C總線的軟件模擬4.發(fā)送應(yīng)答位、非應(yīng)答位子程序 I2C總線上的第9個(gè)時(shí)鐘脈沖對應(yīng)于應(yīng)答位,當(dāng)該位為低電平表示應(yīng)答ACK,當(dāng)該位為高電平表示非應(yīng)答ACK。I2C總線的應(yīng)答位和非應(yīng)答位如下圖所示。發(fā)送ACK和ACK子程序如下。

SDASCL9.3.2I2C總線的軟件模擬4.發(fā)送應(yīng)答位、非應(yīng)答位子329.3.2I2C總線的軟件模擬(1)發(fā)送應(yīng)答位ACK由上圖可知,當(dāng)發(fā)送應(yīng)答位ACK時(shí),只需將SDA設(shè)為低電平、SCL設(shè)為高電平,其區(qū)間的長短根據(jù)晶振的頻率確定,即改變下列子程序中的NOP數(shù)即可達(dá)到要求,發(fā)送ACK子程序如下:

YACK:CLRSDASETBSCLNOP;NOP的數(shù)目根據(jù)時(shí)鐘頻率確定NOP;此處用NOP來延時(shí)CLRSCLSETBSDARET9.3.2I2C總線的軟件模擬(1)發(fā)送應(yīng)答位ACKY339.3.2I2C總線的軟件模擬(2)發(fā)送非應(yīng)答位由上圖可知,當(dāng)發(fā)送非應(yīng)答位ACK時(shí),只需將SDA設(shè)為高電平、SCL設(shè)為高電平,其區(qū)間的長短根據(jù)晶振的頻率確定,即改變下列子程序中的NOP數(shù)即可達(dá)到要求,發(fā)送ACK子程序如下:

YNACK:SETBSDASETBSCLNOP;NOP的數(shù)目根據(jù)時(shí)鐘頻率確定NOP;此處用NOP來延時(shí)CLRSCLCLRSDARET9.3.2I2C總線的軟件模擬(2)發(fā)送非應(yīng)答位YNA349.3.2I2C總線的軟件模擬5.應(yīng)答位檢查子程序 根據(jù)I2C總線協(xié)議,在接收到一個(gè)字節(jié)后,要發(fā)送一個(gè)應(yīng)答位以供檢查,此時(shí)可設(shè)置一個(gè)標(biāo)志位表示應(yīng)答狀態(tài)。當(dāng)檢查結(jié)果為正常應(yīng)答時(shí),則標(biāo)志位置0;否則,標(biāo)志位置0。應(yīng)答位檢查子程序如下:

TACK:SETBSDA;設(shè)置SDA為輸入方式SETBSCL;產(chǎn)生第9個(gè)時(shí)鐘脈沖NOP;NOP的數(shù)目根據(jù)時(shí)鐘頻率確定NOP;此處用NOP來延時(shí)CLR30HMOVC,SDAJNCTEND;若正常應(yīng)答,則轉(zhuǎn)移SETB30HTEND:CLRSCLRET9.3.2I2C總線的軟件模擬5.應(yīng)答位檢查子程序TAC359.3.2I2C總線的軟件模擬6.字節(jié)數(shù)據(jù)發(fā)送子程序 根據(jù)I2C總線協(xié)議,數(shù)據(jù)在時(shí)鐘線為低電平時(shí)變化,高電平時(shí)穩(wěn)定,每一個(gè)時(shí)鐘脈沖傳送一位。模擬I2C總線的SDA接在并行口線,并口中無移位寄存器,要通過指令完成移位后再從SDA串行輸出。I2C總線的字節(jié)數(shù)據(jù)傳送如下圖所示。將待發(fā)送的字節(jié)存于累加器A中,字節(jié)數(shù)據(jù)發(fā)送子程序如下:

9.3.2I2C總線的軟件模擬6.字節(jié)數(shù)據(jù)發(fā)送子程序369.3.2I2C總線的軟件模擬WOBYT:MOVR4,#08H;要發(fā)送的數(shù)據(jù)長度為8位LOOP2:RLCA;將待發(fā)送的位送入位CY中JCLOOP1;CY位為1轉(zhuǎn)到LOOP1CLRSDA;置為低電平,發(fā)送0SETBSCL;時(shí)鐘高電平數(shù)據(jù)保持?jǐn)?shù)據(jù)穩(wěn)定NOP;調(diào)節(jié)NOP的個(gè)數(shù),使延時(shí)≥4.7usNOPCLRSCL;時(shí)鐘脈沖變?yōu)榈碗娖剑瑴?zhǔn)備改變數(shù)據(jù)DJNZR4,LOOP2;若8位未發(fā)送完,轉(zhuǎn)LOOP2繼續(xù)RET;8位發(fā)送完成返回LOOP1:SETBSDA;置為高電平,發(fā)送1SETBSCL;時(shí)鐘為高電平保持?jǐn)?shù)據(jù)穩(wěn)定NOP;調(diào)節(jié)NOP的個(gè)數(shù),使延時(shí)≥4.7usNOPCLRSCL;時(shí)鐘脈沖變?yōu)榈碗娖?,?zhǔn)備改變數(shù)據(jù)CLRSDA;將數(shù)據(jù)改為低電平DJNZR4,LOOP2;若8位未發(fā)送完,轉(zhuǎn)LOOP2繼續(xù)RET;8位發(fā)送完成返回字節(jié)數(shù)據(jù)發(fā)送子程序9.3.2I2C總線的軟件模擬WOBYT:MOVR4379.3.2I2C總線的軟件模擬7.字節(jié)數(shù)據(jù)接收子程序 根據(jù)I2C總線協(xié)議,數(shù)據(jù)必須在時(shí)鐘處于高電平期間,數(shù)據(jù)穩(wěn)定時(shí)才能讀取數(shù)據(jù),在經(jīng)過八次的時(shí)鐘轉(zhuǎn)換后,讀出八位即一個(gè)字節(jié)數(shù)據(jù)。I2C總線起始字節(jié)如下圖所示。將讀出的字節(jié)數(shù)據(jù)存于R5中,接收字節(jié)數(shù)據(jù)子程序如下:

9.3.2I2C總線的軟件模擬7.字節(jié)數(shù)據(jù)接收子程序389.3.2I2C總線的軟件模擬接收字節(jié)數(shù)據(jù)子程序ROBYT:MOVR4,#08H;要接收的數(shù)據(jù)長度為8位LOOP3:SETBSDA;設(shè)置SDA為輸入方式SETBSCL;SDA上數(shù)據(jù)有效MOVC,SDA;讀入SDA引腳狀態(tài)MOVA,R5;將存放結(jié)果送入A中RLCA;將讀出的1位移入A中MOVR5,ACLRSCL;一個(gè)脈沖結(jié)束,SDA上數(shù)據(jù)無效DJNZR4,LOOP3;未讀完8位,轉(zhuǎn)到LOOP3RET;讀完返回9.3.2I2C總線的軟件模擬接收字節(jié)數(shù)據(jù)子程序ROBY399.3.2I2C總線的軟件模擬8.多個(gè)字節(jié)數(shù)據(jù)發(fā)送子程序在完成上述模擬子程序后,根據(jù)I2C總線協(xié)議,可編寫多個(gè)字節(jié)數(shù)據(jù)發(fā)送子程序。要發(fā)送的字節(jié)數(shù)存放在R5中,要發(fā)送的數(shù)據(jù)塊的第一個(gè)數(shù)據(jù)的地址為40H,外圍器件的地址存放在60H中,參考程序如下:

WDBYT:LCALLSTART;起始WLP1:MOVA,60H;設(shè)60H為存放的控制字LCALLWOBYT;發(fā)送讀控制字節(jié)LCALLTACK;檢查應(yīng)答位JB30H,WLP1;無應(yīng)答位,重發(fā)MOVR0,#40H;40H為第一個(gè)數(shù)據(jù)的首地址WLP2:MOVA,@R0;讀一個(gè)字節(jié)數(shù)據(jù)LCALLWOBYT;發(fā)送LCALLTACK;檢查應(yīng)答位JB30H,WLP1;無應(yīng)答位,重發(fā)INCR0;指向下一個(gè)要發(fā)送的數(shù)據(jù)DJNZR5,WLP2;要發(fā)送數(shù)據(jù)未發(fā)完,再發(fā)送LCALLSTOP;全部數(shù)據(jù)發(fā)完,停止RET;返回9.3.2I2C總線的軟件模擬8.多個(gè)字節(jié)數(shù)據(jù)發(fā)送子程序409.3.2I2C總線的軟件模擬9.多個(gè)字節(jié)數(shù)據(jù)接收子程序根據(jù)I2C總線協(xié)議,同樣可編寫多個(gè)字節(jié)數(shù)據(jù)接收子程序。要接收的字節(jié)數(shù)存放在R5中,要接收的數(shù)據(jù)塊存放的首地址為50H,外圍器件的地址存放在60H中,參考程序如下:RDBYT:LCALLSTART;起始RLP1:MOVA,60H;設(shè)60H為存放的控制字LCALLWOBYT;發(fā)送讀控制字節(jié)LCALLTACK;檢查應(yīng)答位JB30H,RLP1;無應(yīng)答位,重發(fā)MOVR0,#50H;50H為第一個(gè)數(shù)據(jù)的首地址RLP2:LCALLROBYT;讀入一個(gè)字節(jié)MOV@R0,ADJNZR5,RLP3;要接收數(shù)據(jù)未讀完,再讀入LCALLYNACK;發(fā)送非應(yīng)答位LCALLSTOP;全部數(shù)據(jù)發(fā)完,停止RET;返回RLP3:LCALLYACK;發(fā)送應(yīng)答位INCR0;指向下一個(gè)要存放數(shù)據(jù)的地址SJMPRLP2;調(diào)節(jié)NOP的個(gè)數(shù),使延時(shí)≥4.7us9.3.2I2C總線的軟件模擬9.多個(gè)字節(jié)數(shù)據(jù)接收子程序419.3.3I2C串行擴(kuò)展應(yīng)用實(shí)例【例2】

將AT89C2051片內(nèi)RAM40H~47H單元中的八個(gè)8位數(shù)據(jù)通過I2C總線接口傳送到存儲(chǔ)器AT24C01的50H~57H單元中。解:AT24C01是Atmel公司生產(chǎn)的具有I2C總線接口的E2PROM,是目前應(yīng)用較多的AT24C××系列存儲(chǔ)器中的一種,芯片存儲(chǔ)容量為1Kb(128×8位)。AT24C01引腳如下圖所示。其引腳定義如下:

SCL:串行時(shí)鐘端。SDA:串行數(shù)據(jù)端,漏極開路,需接上拉電阻到VCC。WP:寫保護(hù),當(dāng)WP為高電平時(shí)存儲(chǔ)器只讀;當(dāng)WP為低電平時(shí)存儲(chǔ)器可讀可寫。A2~A0:芯片地址。9.3.3I2C串行擴(kuò)展應(yīng)用實(shí)例【例2】將AT89C2429.3.3I2C串行擴(kuò)展應(yīng)用實(shí)例AT89C2051與AT24C01通過串行總線接口傳送數(shù)據(jù)的接線如下圖所示。因AT89C2051沒有I2C總線接口,可用軟件的辦法來模擬I2C總線操作。P1.0模擬I2C總線的時(shí)鐘線SCL,P1.1模擬I2C總線的數(shù)據(jù)線SDA。

AT89C2051與AT24C01的接口接線9.3.3I2C串行擴(kuò)展應(yīng)用實(shí)例AT89C205439.3.3I2C串行擴(kuò)展應(yīng)用實(shí)例AT24C01的讀寫操作有多種形式,寫操作有兩種類型:字節(jié)寫和頁面寫;讀操作有三種類型:讀當(dāng)前地址內(nèi)容、讀隨機(jī)地址內(nèi)容和讀順序地址內(nèi)容。AT24C01寫N個(gè)字節(jié)數(shù)據(jù)的操作時(shí)序如下圖所示,AT24C01讀N個(gè)字節(jié)數(shù)據(jù)的操作時(shí)序如下圖所示。9.3.3I2C串行擴(kuò)展應(yīng)用實(shí)例AT24C01的449.3.3I2C串行擴(kuò)展應(yīng)用實(shí)例上圖中器件地址說明如下:①器件地址碼的第7~4位——從器件地址位,用于確認(rèn)器件的類型。AT24C01的器件地址碼為1010,1010表示從器件為串行E2PROM。②器件地址碼的第3~1位——1~8片的片選或存儲(chǔ)器內(nèi)的頁面地址選擇位。此三個(gè)控制位用于選片或者內(nèi)部頁面選擇。如在存儲(chǔ)容量8Kb(1024×8位)的AT24C08內(nèi)部,存儲(chǔ)矩陣分為4個(gè)頁面,每一頁面有256個(gè)字節(jié)。通過器件地址碼的第2位和第1位,可以選擇數(shù)據(jù)讀寫的頁面。③器件地址碼的第0位——讀、寫(R/W)操作控制碼。若此位為1,下一字節(jié)進(jìn)行讀操作(R);此位為0,下一字節(jié)進(jìn)行寫操作(W)。9.3.3I2C串行擴(kuò)展應(yīng)用實(shí)例上圖中器件地址說明如下:459.3.3I2C串行擴(kuò)展應(yīng)用實(shí)例編程說明:AT24C01每接收一個(gè)字節(jié)后,都必須發(fā)送一個(gè)確認(rèn)應(yīng)答信號(hào)位ACK,即時(shí)序中的響應(yīng)信號(hào)。此時(shí)AT89C2051必須產(chǎn)生一個(gè)與此確認(rèn)位相應(yīng)的時(shí)鐘脈沖。AT24C01在讀寫操作時(shí),具有地址自動(dòng)加1功能,即讀、寫完某一地址空間后,會(huì)自動(dòng)指向下一個(gè)地址單元。將AT89C2051片內(nèi)RAM40H~47H單元中的八個(gè)8位數(shù)據(jù)通過I2C總線接口傳送到存儲(chǔ)器AT24C01的50H~57H單元中,參考子程序如下。程序中用到的子程序均為9.3.2節(jié)所編寫的模擬I2C總線的子程序。9.3.3I2C串行擴(kuò)展應(yīng)用實(shí)例編程說明:46參考子程序ICW:LCALLSTART;發(fā)送起始信號(hào)ICWLP1:MOVA,#0A0H;#10100000B器件地址碼,LCALLWOBYT;發(fā)送器件地址LCALLTACK;檢查應(yīng)答位JB30H,ICWLP1;無應(yīng)答位,重發(fā)ICWLP2:MOVA,#50H;50H為待寫存儲(chǔ)單元首地址LCALLWOBYT;發(fā)送待寫存儲(chǔ)單元地址LCALLTACK;檢查應(yīng)答位JB30H,ICWLP1;無應(yīng)答位,重發(fā)MOVR5,#8;待發(fā)送數(shù)據(jù)塊的長度MOVR0,#40H;40H為第一個(gè)數(shù)據(jù)的首地址ICWLP3:MOVA,@R0;讀一個(gè)字節(jié)數(shù)據(jù)LCALLWOBYT;發(fā)送LCALLTACK;檢查應(yīng)答位JB30H,ICWLP1;無應(yīng)答位,重發(fā)INCR0;指向下一個(gè)要發(fā)送的數(shù)據(jù)DJNZR5,WLP2;要發(fā)送數(shù)據(jù)未發(fā)完,再發(fā)送LCALLSTOP;全部數(shù)據(jù)發(fā)完,停止LCALLDELAY;延時(shí),等待AT24C01內(nèi)部寫操作RET;返回參考子程序ICW:LCALLSTART;發(fā)送起始信號(hào)IC479.4SPI串行擴(kuò)展接口

9.4.1SPI總線的結(jié)構(gòu)原理9.4.2SPI總線的軟件模擬9.4.3SPI串行擴(kuò)展應(yīng)用實(shí)例9.4SPI串行擴(kuò)展接口9.4.1SPI總線的結(jié)構(gòu)489.4.1SPI總線的結(jié)構(gòu)原理SPI總線系統(tǒng)是一種同步串行外設(shè)接口,允許MCU與各種外圍設(shè)備以同步串行方式進(jìn)行通信來交換信息。SPI總線接口一般使用4根線:串行時(shí)鐘線SCK、主機(jī)輸入/從機(jī)輸出數(shù)據(jù)線MISO、主機(jī)輸出/從機(jī)輸入數(shù)據(jù)線MOSI和低電平有效的從機(jī)選擇線SS。由于SPI系統(tǒng)總線只需3根公共的時(shí)鐘數(shù)據(jù)線和若干位獨(dú)立的從機(jī)選擇線,在SPI從設(shè)備較少而沒有總線擴(kuò)展能力的單片機(jī)系統(tǒng)中使用特別方便。SPI總線包括1根串行同步時(shí)鐘信號(hào)線以及2根數(shù)據(jù)線。SPI總線接口電路結(jié)構(gòu)如下圖所示。9.4.1SPI總線的結(jié)構(gòu)原理SPI總線系統(tǒng)是一種同步串499.4.1SPI總線的結(jié)構(gòu)原理SPI總線接口電路結(jié)構(gòu)

9.4.1SPI總線的結(jié)構(gòu)原理SPI總線接口電路結(jié)構(gòu)509.4.1SPI總線的結(jié)構(gòu)原理SPI模塊為了和外設(shè)進(jìn)行數(shù)據(jù)交換,根據(jù)外設(shè)工作要求,其輸出的串行同步時(shí)鐘極性和相位可以進(jìn)行配置。時(shí)鐘極性(CPOL)對傳輸協(xié)議沒有重大的影響。如果CPOL=0,串行同步時(shí)鐘的空閑狀態(tài)為低電平;如果CPOL=1,串行同步時(shí)鐘的空閑狀態(tài)為高電平。時(shí)鐘相位(CPHA)能夠用于選擇兩種不同的傳輸協(xié)議進(jìn)行數(shù)據(jù)傳輸。如果CPHA=0,在串行同步時(shí)鐘的第一個(gè)跳變沿(上升或下降)數(shù)據(jù)被采樣;如果CPHA=1,在串行同步時(shí)鐘的第二個(gè)跳變沿(上升或下降)數(shù)據(jù)被采樣。SPI主模塊和與之通信的外設(shè)間時(shí)鐘相位和極性應(yīng)該一致。9.4.1SPI總線的結(jié)構(gòu)原理SPI模塊為了和外設(shè)進(jìn)行數(shù)519.4.1SPI總線的結(jié)構(gòu)原理特點(diǎn):由于SPI系統(tǒng)總線一共只需3~4位數(shù)據(jù)線和控制線即可實(shí)現(xiàn)與具有SPI總線接口功能的各種I/O器件進(jìn)行連接,而擴(kuò)展并行總線則需要8根數(shù)據(jù)線、8~16位地址線、2~3位控制線,因此,采用SPI總線接口可以簡化電路設(shè)計(jì),節(jié)省很多常規(guī)電路中的接口器件和I/O口線,提高設(shè)計(jì)的可靠性。應(yīng)用:在MCS–51系列等不具有SPI接口的單片機(jī)組成的智能儀器和工業(yè)測控系統(tǒng)中,當(dāng)傳輸速度要求不是太高時(shí),使用SPI總線可以增加應(yīng)用系統(tǒng)接口器件的種類,提高應(yīng)用系統(tǒng)的性能。9.4.1SPI總線的結(jié)構(gòu)原理特點(diǎn):由于SPI系統(tǒng)總線一529.4.2SPI總線的軟件模擬對于沒有提供SPI接口的單片機(jī)而言,通??墒褂密浖霓k法來模擬SPI的總線操作,包括串行時(shí)鐘、數(shù)據(jù)輸入和輸出。Atmel公司生產(chǎn)的EEPROM具有SPI接口,存儲(chǔ)容量為4Kb的AT25040就有SPI接口,MCS–51系列單片機(jī)與AT25010的SPI總線接口接線如下圖所示。

圖中,P1.0模擬SPI的數(shù)據(jù)輸出端(MOSI),P1.1模擬SPI的SCK輸出端,P1.2模擬SPI的從機(jī)選擇端(SS),P1.3模擬SPI的數(shù)據(jù)輸入端(MISO)。下面給出模擬SPI串行輸入、串行輸出和串行輸入/輸出的3個(gè)子程序。9.4.2SPI總線的軟件模擬對于沒有提供SPI接口的單531.MCU串行輸入子程序SPIIN從AT25040的SO端接收8位數(shù)據(jù)并放入寄存器R0中。參考程序如下:SPIIN:SETBP1.1;使P1.1(時(shí)鐘)輸出為1

CLRP1.2;選擇從機(jī)

MOVR1,#08H;置循環(huán)次數(shù)SPIIN1:CLRP1.1;使P1.1(時(shí)鐘)輸出為0

NOP;延時(shí)

NOP

MOVC,P1.3;從機(jī)輸出送進(jìn)位C

RLCA;左移至累加器A

SETBP1.1;使P1.0(時(shí)鐘)輸出為1

DJNZR1,SPIIN1;判斷是否循環(huán)8次(8位數(shù)據(jù))

MOVR0,A;8位數(shù)據(jù)送R0

RET1.MCU串行輸入子程序SPIINSPIIN:SE542.MCU串行輸出子程序SPIOUT將MCS–51單片機(jī)中R0寄存器的內(nèi)容傳送到AT25040的SI端。參考程序如下:SPIOUT:SETBP1.1;使P1.1(時(shí)鐘)輸出為1

CLRP1.2;選擇從機(jī)

MOVR1,#08H;置循環(huán)次數(shù)

MOVA,R0;8位數(shù)據(jù)送累加器ASPIOUT1:CLRP1.1;使P1.1(時(shí)鐘)輸出為0

NOP;延時(shí)

NOP

RLCA;左移至累加器A最高位至C

MOVP1.0,C;進(jìn)位C送從機(jī)輸入

SETBP1.1;使P1.1(時(shí)鐘)輸出為1

DJNZR1,SPIOUT1;判是否循環(huán)8次(8位數(shù)據(jù))

RET2.MCU串行輸出子程序SPIOUTSPIOUT:SETB553.MCU串行輸入/輸出子程序SPIIO將MCS–51單片機(jī)R0寄存器的內(nèi)容傳送到AT25040的SI端,同時(shí)從AT25040的SO端接收8位數(shù)據(jù)。參考程序如下:SPIIO:SETBP1.1;使P1.1(時(shí)鐘)輸出為1

CLRP1.2;選擇從機(jī)

MOVR1,#08H;置循環(huán)次數(shù)

MOVA,R0;8位數(shù)據(jù)送累加器ASPIIO1:CLRP1.1;使P1.1(時(shí)鐘)輸出為0

NOP;延時(shí)

NOP

MOVC,P1.3;從機(jī)輸出送進(jìn)位C

RLCA;左移至累加器A最高位至C

MOVP1.0,C;進(jìn)位C送從機(jī)輸入

SETBP1.1;使P1.1(時(shí)鐘)輸出為1

DJNZR1,SPIIO1;判斷是否循環(huán)8次(8位數(shù)據(jù))

RET3.MCU串行輸入/輸出子程序SPIIOSPIIO:SET569.4.2SPI總線的軟件模擬這些子程序適用于在串行時(shí)鐘的上升沿輸入和下降沿輸出的各種串行外圍接口芯片(如D/A和A/D轉(zhuǎn)換芯片、實(shí)時(shí)時(shí)鐘芯片、LED顯示驅(qū)動(dòng)芯片等)。對于下降沿輸入、上升沿輸出的各種串行外圍接口芯片,只要改變P1.1的輸出電平順序,這些子程序也同樣適用。如先置P1.1為低電平,之后再次置P1.1為高電平,再置P1.1為低電平等等。

9.4.2SPI總線的軟件模擬這些子程序適用于在串行時(shí)鐘579.4.3SPI串行擴(kuò)展應(yīng)用實(shí)例【例3】

將AT89C2051片內(nèi)RAM30H、31H單元中的16位數(shù)據(jù)通過SPI總線接口傳送到數(shù)/模轉(zhuǎn)換器TLC5615。解:TLC5615是3線串行總線接口10位電壓輸出數(shù)/模轉(zhuǎn)換器,它既可與單片機(jī)的SPI總線接口相連接,又可與單片機(jī)的Microwire總線接口相連接。TLC5615內(nèi)部結(jié)構(gòu)如下圖所示。9.4.3SPI串行擴(kuò)展應(yīng)用實(shí)例【例3】將AT89C2589.4.3SPI串行擴(kuò)展應(yīng)用實(shí)例

TLC5615內(nèi)部結(jié)構(gòu)

9.4.3SPI串行擴(kuò)展應(yīng)用實(shí)例TLC5615內(nèi)部結(jié)構(gòu)599.4.3SPI串行擴(kuò)展應(yīng)用實(shí)例TLC5615通過固定增益為2的運(yùn)放緩沖電阻網(wǎng)絡(luò),把10位數(shù)字?jǐn)?shù)據(jù)轉(zhuǎn)換為模擬電壓。在TLC5615芯片上電時(shí),內(nèi)部電路把D/A寄存器復(fù)位為0。其輸出具有與基準(zhǔn)輸入相同的極性,表達(dá)式為VO=2×REF×CODE/1024其中,CMOD是通過串行總線接口輸入的待轉(zhuǎn)換的數(shù)據(jù);REF是基準(zhǔn)電壓。TLC5615最大的串行時(shí)鐘速率不超過14MHz,10位DAC的建立時(shí)間為12.5μs,通常更新速率限制至80kHz以內(nèi)。TLC5615的16位移位寄存器在SCLK的控制下從DIN引腳輸入數(shù)據(jù),高位在前,低位在后。16位移位寄存器中間的10位數(shù)據(jù)在上升沿的作用下輸入10位的D/A寄存器供給D/A轉(zhuǎn)換。9.4.3SPI串行擴(kuò)展應(yīng)用實(shí)例TLC5615通過固定增609.4.3SPI串行擴(kuò)展應(yīng)用實(shí)例AT89C2051與TLC5615通過串行總線接口傳送8位數(shù)據(jù)的接線如下圖所示。因AT89C2051沒有SPI接口,可用軟件的辦法來模擬SPI的總線操作。P1.1模擬SPI的數(shù)據(jù)輸出端(MOSI),P1.2模擬SPI的SCK輸出端,P1.2模擬SPI的從機(jī)選擇端(SS);TLC5615是數(shù)/模轉(zhuǎn)換器,不會(huì)向AT89C2051發(fā)送數(shù)據(jù),故不需要模擬SPI的數(shù)據(jù)輸入端(MISO)。

9.4.3SPI串行擴(kuò)展應(yīng)用實(shí)例AT89C2051與TL619.4.3SPI串行擴(kuò)展應(yīng)用實(shí)例

AT89C2051將片內(nèi)RAM30H、31H單元中的16位數(shù)據(jù)傳送到TLC5615的參考程序如下:DINBITP1.1;定義I/O口SCLKBITP1.2CS5615BITP1.3DataHEQU30HDataLEQU31HTLC5615:CLRSCLK;準(zhǔn)備操作TLC5615

CLRCS5615;選中TLC5615

MOVR7,#08H

MOVA,DataH;裝入高8位數(shù)據(jù)LPH:LCALLDELAY;延時(shí)

RLCA;最高位移向TLC5615

MOVDIN,C

SETBSCLK;產(chǎn)生上升沿,移入1位數(shù)據(jù)

LCALLDELAY

CLRSCLK

DJNZR7,LPH9.4.3SPI串行擴(kuò)展應(yīng)用實(shí)例AT89C205629.4.3SPI串行擴(kuò)展應(yīng)用實(shí)例

MOVR7,#08H

MOVA,DataL;裝入低8位數(shù)據(jù)LPL:LCALLDELAY;延時(shí)

RLCA;最高位移向TLC5615

MOVDIN,C

SETBSCLK;產(chǎn)生上升沿,移入1位數(shù)據(jù)

LCALLDELAY

CLRSCLK

DJNZR7,LPL

SETBCS5615;結(jié)束TLC5615的操作,同時(shí)將轉(zhuǎn)換數(shù)據(jù)代碼存入10位DA寄存器,啟動(dòng)新一輪的DA轉(zhuǎn)換RETDELAY:…(略)

RET參考程序9.4.3SPI串行擴(kuò)展應(yīng)用實(shí)例63本章小結(jié)單片機(jī)中目前常用的串行擴(kuò)展總線和接口可分為以下幾類:UART串行擴(kuò)展接口、I2C總線、SPI總線、Microware總線、1-wire總線、USB總線和CAN總線。I2C總線是芯片間串行傳輸總線。它用兩根線實(shí)現(xiàn)全雙工同步數(shù)據(jù)傳送,可方便地構(gòu)成多機(jī)系統(tǒng)和外圍器件擴(kuò)展系統(tǒng)。I2C總線簡單,結(jié)構(gòu)緊湊,易于實(shí)現(xiàn)模塊化和標(biāo)準(zhǔn)化。SPI總線是同步串行外設(shè)接口。允許MCU與各種外圍設(shè)備以同步串行方式進(jìn)行通信來交換信息。可直接與多種標(biāo)準(zhǔn)外圍器件直接接口,采用SPI設(shè)備可簡化電路設(shè)計(jì)。模擬I2C總線的應(yīng)用程序可使沒有I2C總線的單片機(jī)也能使用I2C總線技術(shù)。模擬SPI總線的應(yīng)用程序也可使沒有SPI總線的單片機(jī)也能使用I2C總線技術(shù)。CAN總線是多主機(jī)局域網(wǎng),是國際上應(yīng)用最廣泛的現(xiàn)場總線之一。USB總線是計(jì)算機(jī)串行通信協(xié)議。是即插即用的,數(shù)據(jù)傳輸速度快,擴(kuò)展方便,連接的方式十分靈活。Microware總線是串行同步雙工通訊接口。1-wire總線也是一種串行通信協(xié)議。

本章小結(jié)單片機(jī)中目前常用的串行擴(kuò)展總線和接口可分為以下幾類:64習(xí)題1.串行擴(kuò)展與并行擴(kuò)展相比的主要優(yōu)點(diǎn)是什么?2.簡述I2C總線的數(shù)據(jù)傳輸方法。3.常用模擬I2C總線的應(yīng)用子程序有哪些?4.簡述SPI總線的數(shù)據(jù)傳輸方法。5.常用模擬SPI總線的應(yīng)用子程序有哪些?習(xí)題1.串行擴(kuò)展與并行擴(kuò)展相比的主要優(yōu)點(diǎn)是什么?65Q&A?

Thanks!Q&A?

Thanks!66第9章串行擴(kuò)展技術(shù)

(課時(shí):6學(xué)時(shí))第9章串行擴(kuò)展技術(shù)(課時(shí):6學(xué)時(shí))67教學(xué)目的

了解串行擴(kuò)展的分類和特點(diǎn)。

了解Microware、1-wire、USB和CAN總線。掌握I2C總線的原理。掌握SPI總線的原理。學(xué)習(xí)重點(diǎn)和難點(diǎn)I2C總線的軟件模擬。SPI總線的軟件模擬。

教學(xué)目的了解串行擴(kuò)展的分類和特點(diǎn)。學(xué)習(xí)重點(diǎn)和難點(diǎn)I2C68第9章串行擴(kuò)展技術(shù)

9.1串行擴(kuò)展概述9.2UART串行擴(kuò)展接口9.3I2C串行擴(kuò)展總線9.4SPI串行擴(kuò)展接口本章小結(jié)習(xí)題

第9章串行擴(kuò)展技術(shù)9.1串行擴(kuò)展概述699.1串行擴(kuò)展概述9.1.1串行擴(kuò)展的種類9.1.2串行擴(kuò)展的特點(diǎn)9.1串行擴(kuò)展概述9.1.1串行擴(kuò)展的種類709.1.1串行擴(kuò)展的種類新一代單片機(jī)技術(shù)的顯著特點(diǎn)之一就是串行擴(kuò)展總線和接口的推出。常用的串行擴(kuò)展總線和接口有I2C總線、SPI總線、Microware總線、1-wire總線和CAN總線等。(1)UART串行擴(kuò)展接口(UniversalAsynchronousReceiver/Transmitter)UART通用異步收發(fā)器,既能同步又能異步通信的硬件電路稱為UART。UART是用于控制計(jì)算機(jī)與串行設(shè)備的芯片,它提供了RS-232C數(shù)據(jù)終端設(shè)備接口,這樣計(jì)算機(jī)就可以和調(diào)制解調(diào)器或其它使用RS-232C接口的串行設(shè)備通信了。

9.1.1串行擴(kuò)展的種類新一代單片機(jī)技術(shù)的顯著特點(diǎn)719.1.1串行擴(kuò)展的種類(2)I2C(InterIntegratedCircuit)串行擴(kuò)展總線I2C總線是Philip公司推出的芯片間串行傳輸總線。它用兩根線實(shí)現(xiàn)了完善的全雙工同步數(shù)據(jù)傳送,可以極為方便地構(gòu)成多機(jī)系統(tǒng)和外圍器件擴(kuò)展系統(tǒng)。(3)SPI(SerialPeripheralInterface)串行擴(kuò)展接口SPI總線是Motorola公司提出的一種同步串行外設(shè)接口。允許MCU與各種外圍設(shè)備以同步串行方式進(jìn)行通信。其外圍設(shè)備種類繁多,從最簡單的TTL移位寄存器到復(fù)雜的LCD顯示驅(qū)動(dòng)器、網(wǎng)絡(luò)控制器等,可謂應(yīng)有盡有。

9.1.1串行擴(kuò)展的種類(2)I2C(InterInt729.1.1串行擴(kuò)展的種類(4)Microware串行擴(kuò)展接口Microware總線是NS公司提出的串行同步雙工通信接口,用于8位COP800系列單片機(jī)和16位HPC系列單片機(jī)。(5)單總線(1-wire)串行擴(kuò)展總線1-wire總線是Dallas公司研制開發(fā)的一種協(xié)議,用于便攜式儀表和現(xiàn)場監(jiān)控系統(tǒng)。(6)USB(UniversalSerialBUS)串行擴(kuò)展總線USB總線是Compaq、Intel、Microsoft、NEC等公司聯(lián)合制定的一種計(jì)算機(jī)串行通信協(xié)議。

9.1.1串行擴(kuò)展的種類(4)Microware串行擴(kuò)展739.1.1串行擴(kuò)展的種類(7)CAN(ControllerAreaNetwork)串行擴(kuò)展總線CAN總線是德國Bosch公司最先提出的多主機(jī)局域網(wǎng),是國際上應(yīng)用最廣泛的現(xiàn)場總線之一。最初,CAN被設(shè)計(jì)作為汽車環(huán)境中的微控制器通信,在車載各電子控制裝置ECU之間交換信息,形成汽車電子控制網(wǎng)絡(luò)。比如:發(fā)動(dòng)機(jī)管理系統(tǒng)、變速箱控制器、儀表裝備。

9.1.1串行擴(kuò)展的種類(7)CAN(Controlle749.1.2串行擴(kuò)展的特點(diǎn)

串行擴(kuò)展總線技術(shù)是新一代單片機(jī)技術(shù)發(fā)展的一個(gè)顯著特點(diǎn)。與并行擴(kuò)展總線相比,串行擴(kuò)展總線有電路結(jié)構(gòu)簡單,程序編寫方便,易于實(shí)現(xiàn)用戶系統(tǒng)軟硬件的模塊化、標(biāo)準(zhǔn)化等優(yōu)點(diǎn)。常用串行擴(kuò)展總線和接口的特點(diǎn)簡要說明如下:

(1)UART串行擴(kuò)展接口UART接口是二線制,8051單片機(jī)的UART既能作通用異步接收和發(fā)送器,又能作同步移位寄存器。它可以實(shí)現(xiàn)8051單片機(jī)系統(tǒng)之間點(diǎn)對點(diǎn)的單機(jī)通信或多機(jī)通信,也可以實(shí)現(xiàn)擴(kuò)展I/O口。

9.1.2串行擴(kuò)展的特點(diǎn)串行擴(kuò)展總線技術(shù)是新一代759.1.2串行擴(kuò)展的特點(diǎn)(2)I2C總線I2C總線是二線制,采用器件地址的硬件設(shè)置方法,通過軟件尋址完全避免了器件的片選線尋址方法,從而使硬件系統(tǒng)具有簡單靈活的擴(kuò)展方法。I2C總線簡單,結(jié)構(gòu)緊湊,易于實(shí)現(xiàn)模塊化和標(biāo)準(zhǔn)化。(3)SPI串行擴(kuò)展接口SPI總線是三線制,可直接與多種標(biāo)準(zhǔn)外圍器件直接接口,在SPI從設(shè)備較少而沒有總線擴(kuò)展能力的單片機(jī)系統(tǒng)中使用特別方便。即使在有總線擴(kuò)展能力的系統(tǒng)中采用SPI設(shè)備也可以簡化電路設(shè)計(jì),省掉很多常規(guī)電路中的接口器件,從而提高了設(shè)計(jì)的可靠性。

9.1.2串行擴(kuò)展的特點(diǎn)(2)I2C總線769.1.2串行擴(kuò)展的特點(diǎn)(4)Microware串行擴(kuò)展接口Microware總線是三線制,由一根數(shù)據(jù)輸出(SO)線、一根數(shù)據(jù)輸入(SI)線和一根時(shí)鐘(SK)線組成。所有從器件的時(shí)鐘線連接到同一根SK線上,主器件向SK線發(fā)送時(shí)鐘脈沖信號(hào),從器件在時(shí)鐘信號(hào)的同步沿輸出/輸入數(shù)據(jù)。主器件的數(shù)據(jù)輸出線SO和所有從器件的數(shù)據(jù)輸入線相接,從器件的數(shù)據(jù)輸出線都接到主器件的數(shù)據(jù)輸入線SI上。(5)1-wire總線1-wire總線是利用一根線實(shí)現(xiàn)雙向通信,由一個(gè)總線主節(jié)點(diǎn)、一個(gè)或多個(gè)從節(jié)點(diǎn)組成系統(tǒng),通過一根信號(hào)線對從芯片進(jìn)行數(shù)據(jù)的讀取。每一個(gè)符合1-wire協(xié)議的從芯片都有一個(gè)唯一的地址,包括8位分類碼、48位的序列號(hào)和8位CRC代碼。主芯片對各個(gè)從芯片的尋找依據(jù)這64位的不同來進(jìn)行。單總線節(jié)省I/O引腳資源、結(jié)構(gòu)簡單、成本低廉、便于總線擴(kuò)展和維護(hù)。

9.1.2串行擴(kuò)展的特點(diǎn)(4)Microware串行擴(kuò)展779.1.2串行擴(kuò)展的特點(diǎn)(6)USB串行擴(kuò)展接口USB比較于其他傳統(tǒng)接口的一個(gè)優(yōu)勢是即插即用的實(shí)現(xiàn),即插即用(Plug-and-Play)也稱為熱插拔(HotPlugging)。數(shù)據(jù)傳輸速度快,USB1.1接口的最高傳輸率可達(dá)12Mb/s;USB2.0接口的最高傳輸率可達(dá)480Mb/s。擴(kuò)展方便,使用USBHub擴(kuò)展,可以連接127個(gè)USB設(shè)備,連接的方式十分靈活。(7)CAN總線在由CAN總線構(gòu)成的單一網(wǎng)絡(luò)中,理論上可以掛接無數(shù)個(gè)節(jié)點(diǎn)。實(shí)際應(yīng)用中,節(jié)點(diǎn)數(shù)目受網(wǎng)絡(luò)硬件的電氣特性所限制。CAN可提供高達(dá)1Mbit/s的數(shù)據(jù)傳輸速率,這使實(shí)時(shí)控制變得非常容易。另外,硬件的錯(cuò)誤檢定特性也增強(qiáng)了CAN的抗電磁干擾能力。當(dāng)信號(hào)傳輸距離達(dá)到10km時(shí),CAN仍可提供高達(dá)50Kbit/s的數(shù)據(jù)傳輸速率。

9.1.2串行擴(kuò)展的特點(diǎn)(6)USB串行擴(kuò)展接口789.2UART串行擴(kuò)展接口

9.2.1串行口工作方式9.2.2UART串行擴(kuò)展應(yīng)用實(shí)例9.2UART串行擴(kuò)展接口9.2.1串行口工作方式799.2.1串行口工作方式串行口有四種工作方式,每一種工作方式都有自己的特點(diǎn)。其中方式0是8位同步通信方式,用于串/并或并/串轉(zhuǎn)換中,常用的串/并轉(zhuǎn)換芯片有74LS164和并/串轉(zhuǎn)換芯片74LS165等。74LS164是一個(gè)雙列直插式8位串入/并出移位寄存器,其引腳如下圖所示。其引腳定義如下:A:同步串行數(shù)據(jù)輸入端B:同步串行數(shù)據(jù)輸入端Q0~Q7:8位并行數(shù)據(jù)輸出端CK:時(shí)鐘脈沖輸入端CLR:數(shù)據(jù)清除端(清除輸出數(shù)據(jù),通常用在移位完成時(shí))GND:接地端VCC:電源端9.2.1串行口工作方式串行口有四種工作方式,每一種工作809.2.1串行口工作方式74LS165是一個(gè)雙列直插式8位并入/串出移位寄存器,其引腳如下圖所示。其引腳定義如下:LD:重新裝載數(shù)據(jù)端(通常用在數(shù)據(jù)完全移出后)CK:內(nèi)部數(shù)據(jù)移位時(shí)鐘脈沖輸入端D0~D7:并行數(shù)據(jù)輸入端Q11:取反串行輸出端GND:接地端Q11:串行輸出端SE:用于填充數(shù)據(jù)移出后的空位的邏輯電平信號(hào)COK:和CK聯(lián)合控制數(shù)據(jù)移動(dòng)VCC:電源端9.2.1串行口工作方式74LS165是一個(gè)雙列直插式819.2.1串行口工作方式74LS164引腳圖74LS165引腳圖

9.2.1串行口工作方式74LS164引腳圖829.2.2UART串行擴(kuò)展應(yīng)用實(shí)例【例1】

利用74LS164串行輸入并行輸出芯片作一個(gè)簡單的電子鐘,要求四個(gè)數(shù)碼管顯示時(shí)鐘;其中LED1顯示小時(shí)的十位,LED2顯示小時(shí)的個(gè)位,LED3顯示分鐘的十位,LED4顯示分鐘的個(gè)位。解:原理圖如下圖,采用單片機(jī)的串行口輸出字形碼,用74LS164和74LS138作為擴(kuò)展芯片。74LS164的功能是將AT89C2051串行通信口輸出的串行數(shù)據(jù)譯碼并在其并口線上輸出,從而驅(qū)動(dòng)LED數(shù)碼管。74LS138是一個(gè)3線-8線譯碼器,它將單片機(jī)輸出的地址信號(hào)譯碼后動(dòng)態(tài)驅(qū)動(dòng)相應(yīng)的LED。因74LS138電流驅(qū)動(dòng)能力較小,故用末級(jí)驅(qū)動(dòng)三極管9013作為地址驅(qū)動(dòng)。將4只LED的字段位都連在一起,它們的公共端則由74LS138分時(shí)選通,這樣任何一個(gè)時(shí)刻,都只有一位LED在點(diǎn)亮,也即動(dòng)態(tài)掃描顯示方式,其優(yōu)點(diǎn)使用串行口進(jìn)行LED通信程序編寫相當(dāng)簡單,用戶只需將需顯示的數(shù)據(jù)直接送串口發(fā)送緩沖器,等待串行中斷即可。

9.2.2UART串行擴(kuò)展應(yīng)用實(shí)例【例1】利用74LS839.2.2UART串行擴(kuò)展應(yīng)用實(shí)例串行動(dòng)態(tài)LED掃描電路

P3.2P3.3TXRX9.2.2UART串行擴(kuò)展應(yīng)用實(shí)例串行動(dòng)態(tài)LED掃描電路849.2.2UART串行擴(kuò)展應(yīng)用實(shí)例ORG0000HLJMPMAINORG0040HMAIN:MOVSCON,#00H;初始化串口為方式0MOVR3,#00HLOOP:MOVR4,#0E8HDELAY:LCALLDISPLAY;動(dòng)態(tài)掃描顯示DJNZR4,DELAYINCR3;顯示數(shù)字增1CJNER3,#0AH,LOOP;不等于10轉(zhuǎn)移LJMPMAIN下面是一個(gè)簡單的動(dòng)態(tài)掃描程序,如果再利用上第六章的定時(shí)器就可做成一個(gè)完整的電子鐘,四個(gè)數(shù)碼管顯示為00:00這種形式。在本例中冒號(hào)就不顯示出來了,分別用20H、21H、22H、23H地址存放時(shí)間的時(shí)鐘的十位、時(shí)鐘的個(gè)位、分鐘的十位、分鐘的個(gè)位。用中斷方式做一個(gè)不帶時(shí)鐘芯片的電子鐘,請讀者自己完成。9.2.2UART串行擴(kuò)展應(yīng)用實(shí)例ORG0000HL859.2.2UART串行擴(kuò)展應(yīng)用實(shí)例DISPLAY:CLRP3.2;顯示LED1CLRP3.3LCALLDISPLCALLDELAY1SETBP3.3;顯示LED2LCALLDISPLCALLDELAY1SETBP3.3;顯示LED3CLRP3.2LCALLDISPLCALLDELAY1SETBP3.2;顯示LED4SETBP3.3LCALLDISPLCALLDELAY1RET參考程序:9.2.2UART串行擴(kuò)展應(yīng)用實(shí)例DISPLAY:CLR869.2.2UART串行擴(kuò)展應(yīng)用實(shí)例DISP:MOVA,R3;將字形碼送串口MOVDPTR,#TABLEMOVCA,@A+DPTRMOVSBUF,AWAIT:JNBTI,WAIT;等待串口傳送CLRTIRETDELAY1:MOVR6,#10H;動(dòng)態(tài)掃描的時(shí)間LOOP1:MOVR7,#38H;間隔DJNZR7,$DJNZR6,LOOP1RETTABLE:DB3FH,06H,,5BH;0~9的字形碼DB4FH,66H,6DHDB7DH,07H,,7FH,,6FH參考程序:9.2.2UART串行擴(kuò)展應(yīng)用實(shí)例DISP:MOVA879.3I2C串行擴(kuò)展總線

9.3.1I2C總線的結(jié)構(gòu)原理9.3.2I2C總線的軟件模擬9.3.3I2C串行擴(kuò)展應(yīng)用實(shí)例

9.3I2C串行擴(kuò)展總線9.3.1I2C總線的結(jié)構(gòu)889.3.1I2C總線的結(jié)構(gòu)原理I2C總線是芯片間串行傳輸總線。它用數(shù)據(jù)線SDA和時(shí)鐘線SCL兩根線實(shí)現(xiàn)全雙工同步數(shù)據(jù)傳送,可方便地構(gòu)成多機(jī)系統(tǒng)和外圍器件擴(kuò)展系統(tǒng)。I2C總線采用了器件地址的硬件設(shè)置方法,通過軟件尋址完全避免了器件的片選線尋址方法,從而使硬件系統(tǒng)具有簡單靈活的擴(kuò)展方法。按照I2C總線規(guī)范,總線傳輸中的所有狀態(tài)都生成相對應(yīng)的狀態(tài)碼,系統(tǒng)中的主機(jī)能夠依照這些狀態(tài)碼自動(dòng)地進(jìn)行總線管理,用戶只要在程序中裝入這些標(biāo)準(zhǔn)處理模塊,根據(jù)數(shù)據(jù)操作要求完成I2C總線的初始化,啟動(dòng)I2C總線,就能自動(dòng)完成規(guī)定的數(shù)據(jù)傳送操作。

9.3.1I2C總線的結(jié)構(gòu)原理I2C總線是芯片間串行傳輸899.3.1I2C總線的結(jié)構(gòu)原理I2C總線接口電路結(jié)構(gòu)

9.3.1I2C總線的結(jié)構(gòu)原理I2C總線接口電路結(jié)構(gòu)909.3.1I2C總線的結(jié)構(gòu)原理I2C總線接口為開漏或開集電極輸出,需加上拉電阻。系統(tǒng)中所有的單片機(jī)、外圍器件都將數(shù)據(jù)線SDA和時(shí)鐘線SCL的同名端相連在一起,總線上的所有節(jié)點(diǎn)都由器件和管腳給定地址。系統(tǒng)中可以直接連接具有I2C總線接口的單片機(jī),也可以通過總線擴(kuò)展芯片或I/O口的軟件仿真與I2C總線相連。在I2C總線上可以掛接各種類型的外圍器件,如RAM/EEPROM、日歷/時(shí)鐘芯片、A/D轉(zhuǎn)換器、D/A轉(zhuǎn)換器、以及由I/O口、顯示驅(qū)動(dòng)器構(gòu)成的各種模塊。

9.3.1I2C總線的結(jié)構(gòu)原理I2C總線接口為開漏或開集919.3.1I2C總線的結(jié)構(gòu)原理SDA和SCL都是雙向線路,都通過一個(gè)電流源或上拉電阻連接到正的電源電壓;當(dāng)總線空閑時(shí),這兩條線路都是高電平;連接到總線的器件輸出級(jí)必須是漏極開路或集電極開路才能執(zhí)行線與的功能。I2C總線上數(shù)據(jù)的傳輸速率在標(biāo)準(zhǔn)模式下可達(dá)100kbit/s。在快速模式下可達(dá)400kbit/s。在高速模式下可達(dá)3.4Mbit/s。連接到總線的接口數(shù)量只由總線電容是400pF的限制決定關(guān)于高速模式主機(jī)器件的信息。

9.3.1I2C總線的結(jié)構(gòu)原理SDA和SCL都是雙向929.3.1I2C總線的結(jié)構(gòu)原理I2C總線上數(shù)據(jù)傳送的基本單位為字節(jié),采用低位在前的格式。主從器件之間一次傳輸?shù)臄?shù)據(jù)稱為一幀,由啟動(dòng)信號(hào)、若干個(gè)數(shù)據(jù)字節(jié)和應(yīng)答位以及停止信號(hào)組成。I2C的主要命令只有讀、寫兩種,雖然讀寫的字節(jié)根據(jù)具體器件的不同而不同,但其時(shí)序關(guān)系不會(huì)發(fā)生改變。下位機(jī)只要具備I2C的基本時(shí)序即可。這些基本時(shí)序包括:啟動(dòng)、寫字節(jié)、讀字節(jié)、應(yīng)答位、停止信號(hào),并可以組合成兩個(gè)子程序:讀N字節(jié)子程序、寫N字節(jié)子程序。

9.3.1I2C總線的結(jié)構(gòu)原理I2C總線上數(shù)據(jù)傳送的基本939.3.1I2C總線的結(jié)構(gòu)原理I2C總線最顯著的特點(diǎn)是規(guī)范的完整性、結(jié)構(gòu)的獨(dú)立性和用戶使用時(shí)的“傻瓜”化。

I2C總線有嚴(yán)格的規(guī)范,如接口的電氣特性、信號(hào)時(shí)序、信號(hào)傳輸?shù)亩x、總線狀態(tài)設(shè)置、總線管理規(guī)則及總線狀態(tài)處理等。在I2C總線規(guī)范中,總線上的器件節(jié)點(diǎn)的電氣特性及地址給定都具有較強(qiáng)的獨(dú)立性,而且各節(jié)點(diǎn)上的器件、模塊都有相對獨(dú)立的地址編號(hào)。嚴(yán)格、完善的規(guī)范,并將這些規(guī)范的應(yīng)用盡可能“傻瓜”化,除了有充分的硬件支持外,在軟件方面,Philips公司為用戶提供了一套完善的總線狀態(tài)處理軟件包,以致于用戶可以不去熟悉I2C總線的規(guī)范,不去理睬總線的管理方法,只要掌握I2C總線的應(yīng)用程序設(shè)計(jì)方法就可方便地使用I2C總線,并且能很快地掌握I2C總線系統(tǒng)的軟、硬件設(shè)計(jì)方法。9.3.1I2C總線的結(jié)構(gòu)原理I2C總線最顯著的特點(diǎn)是規(guī)949.3.2I2C總線的軟件模擬1.產(chǎn)生起始位和停止位I2C總線的起始和停止條件如下圖所示。

分別用P1.0和P1.1模擬I2C總線的時(shí)鐘線和數(shù)據(jù)線,則可給時(shí)鐘線SCL和數(shù)據(jù)線SDA賦值。程序如下:SDLEQUP1.0SCAEQUP1.19.3.2I2C總線的軟件模擬1.產(chǎn)生起始位和停止位S959.3.2I2C總線的軟件模擬2.發(fā)送起始條件當(dāng)時(shí)鐘SCL為高電平時(shí),數(shù)據(jù)線SDA從高電平向低電平切換表示起始條件,即啟動(dòng)I2C總線數(shù)據(jù)傳送。模擬時(shí)序產(chǎn)生時(shí)鐘SCL和SDA發(fā)送的起始條件子程序如下:使用不同頻率的晶體振蕩器,則要相應(yīng)增刪程序段中NOP指令的條數(shù),以滿足時(shí)序的要求。START:SETBSDASETBSCLNOP;NOP的數(shù)目根據(jù)時(shí)鐘頻率確定NOP;此處用NOP來延時(shí)CLRSDANOPNOPCLRSCLRET9.3.2I2C總線的軟件模擬2.發(fā)送起始條件START969.3.2I2C總線的軟件模擬3.發(fā)送停止條件當(dāng)時(shí)鐘SCL為高電平時(shí),數(shù)據(jù)線SDA由低電平向高電平切換表示停止條件,即停止I2C總線數(shù)據(jù)傳送。模擬時(shí)序產(chǎn)生時(shí)鐘SCL和SDA發(fā)送的停止條件子程序如下:使用不同頻率的晶體振蕩器,則要相應(yīng)增刪程序段中NOP指令的條數(shù),以滿足時(shí)序的要求。STOP:CLRSDASETBSCLNOP;NOP的數(shù)目根據(jù)時(shí)鐘頻率確定NOP;此處用NOP來延時(shí)SETBSDANOPNOPCLRSDACLRSCLRET9.3.2I2C總線的軟件模擬3.發(fā)送停止條件STOP:979.3.2I2C總線的軟件模擬4.發(fā)送應(yīng)答位、非應(yīng)答位子程序 I2C總線上的第9個(gè)時(shí)鐘脈沖對應(yīng)于應(yīng)答位,當(dāng)該位為低電平表示應(yīng)答ACK,當(dāng)該位為高電平表示非應(yīng)答ACK。I2C總線的應(yīng)答位和非應(yīng)答位如下圖所示。發(fā)送ACK和ACK子程序如下。

SDASCL9.3.2I2C總線的軟件模擬4.發(fā)送應(yīng)答位、非應(yīng)答位子989.3.2I2C總線的軟件模擬(1)發(fā)送應(yīng)答位ACK由上圖可知,當(dāng)發(fā)送應(yīng)答位ACK時(shí),只需將SDA設(shè)為低電平、SCL設(shè)為高電平,其區(qū)間的長短根據(jù)晶振的頻率確定,即改變下列子程序中的NOP數(shù)即可達(dá)到要求,發(fā)送ACK子程序如下:

YACK:CLRSDASETBSCLNOP;NOP的數(shù)目根據(jù)時(shí)鐘頻率確定NOP;此處用NO

溫馨提示

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

最新文檔

評論

0/150

提交評論