版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第9章 串行擴(kuò)展技術(shù) 第1頁,共66頁。教學(xué)目的 了解串行擴(kuò)展的分類和特點(diǎn)。 了解Microware、1-wire、USB和CAN總線。掌握I2C總線的原理。掌握SPI總線的原理。學(xué)習(xí)重點(diǎn)和難點(diǎn) I2C總線的軟件模擬。SPI總線的軟件模擬。 第2頁,共66頁。第9章 串行擴(kuò)展技術(shù) 9.1 串行擴(kuò)展概述 9.2 UART串行擴(kuò)展接口 9.3 I2C串行擴(kuò)展總線 9.4 SPI串行擴(kuò)展接口 本章小結(jié)習(xí)題 第3頁,共66頁。9.1 串行擴(kuò)展概述9.1.1 串行擴(kuò)展的種類 9.1.2 串行擴(kuò)展的特點(diǎn)第4頁,共66頁。9.1.1 串行擴(kuò)展的種類 新一代單片機(jī)技術(shù)的顯著特點(diǎn)之一就是串行擴(kuò)展總線和接口的推出
2、。常用的串行擴(kuò)展總線和接口有I2C總線、SPI總線、Microware總線、1-wire總線和CAN總線等。 (1)UART串行擴(kuò)展接口 (Universal Asynchronous Receiver/Transmitter) UART通用異步收發(fā)器,既能同步又能異步通信的硬件電路稱為UART。UART是用于控制計(jì)算機(jī)與串行設(shè)備的芯片,它提供了RS232C數(shù)據(jù)終端設(shè)備接口,這樣計(jì)算機(jī)就可以和調(diào)制解調(diào)器或其它使用RS232C接口的串行設(shè)備通信了。 第5頁,共66頁。9.1.1 串行擴(kuò)展的種類(2)I2C(Inter Integrated Circuit)串行擴(kuò)展總線 I2C總線是Philip公
3、司推出的芯片間串行傳輸總線。它用兩根線實(shí)現(xiàn)了完善的全雙工同步數(shù)據(jù)傳送,可以極為方便地構(gòu)成多機(jī)系統(tǒng)和外圍器件擴(kuò)展系統(tǒng)。(3)SPI(Serial Peripheral Interface) 串行擴(kuò)展接口 SPI總線是Motorola公司提出的一種同步串行外設(shè)接口。允許MCU與各種外圍設(shè)備以同步串行方式進(jìn)行通信。其外圍設(shè)備種類繁多,從最簡單的TTL移位寄存器到復(fù)雜的LCD顯示驅(qū)動器、網(wǎng)絡(luò)控制器等,可謂應(yīng)有盡有。 第6頁,共66頁。9.1.1 串行擴(kuò)展的種類(4)Microware串行擴(kuò)展接口 Microware總線是NS公司提出的串行同步雙工通信接口,用于8位COP800系列單片機(jī)和16位HPC系
4、列單片機(jī)。(5)單總線(1-wire)串行擴(kuò)展總線 1-wire總線是Dallas公司研制開發(fā)的一種協(xié)議,用于便攜式儀表和現(xiàn)場監(jiān)控系統(tǒng)。(6)USB(Universal Serial BUS)串行擴(kuò)展總線 USB總線是Compaq、Intel、Microsoft、NEC等公司聯(lián)合制定的一種計(jì)算機(jī)串行通信協(xié)議。 第7頁,共66頁。9.1.1 串行擴(kuò)展的種類(7)CAN(Controller Area Network)串行擴(kuò)展總線 CAN總線是德國Bosch公司最先提出的多主機(jī)局域網(wǎng),是國際上應(yīng)用最廣泛的現(xiàn)場總線之一。最初,CAN被設(shè)計(jì)作為汽車環(huán)境中的微控制器通信,在車載各電子控制裝置ECU之間交
5、換信息,形成汽車電子控制網(wǎng)絡(luò)。比如:發(fā)動機(jī)管理系統(tǒng)、變速箱控制器、儀表裝備。 第8頁,共66頁。9.1.2 串行擴(kuò)展的特點(diǎn) 串行擴(kuò)展總線技術(shù)是新一代單片機(jī)技術(shù)發(fā)展的一個顯著特點(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頁,共66頁。9.1.2 串行擴(kuò)展的特點(diǎn)(2)I2C總
6、線 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ì)的可靠性。 第10頁,共66頁。9.1.2 串行擴(kuò)展的特點(diǎn)(4)Microware串行擴(kuò)展接口 Microware總線是三線制,由一根數(shù)據(jù)輸出(SO)線、一根數(shù)據(jù)輸入
7、(SI)線和一根時鐘(SK)線組成。所有從器件的時鐘線連接到同一根SK線上,主器件向SK線發(fā)送時鐘脈沖信號,從器件在時鐘信號的同步沿輸出/輸入數(shù)據(jù)。主器件的數(shù)據(jù)輸出線SO和所有從器件的數(shù)據(jù)輸入線相接,從器件的數(shù)據(jù)輸出線都接到主器件的數(shù)據(jù)輸入線SI上。(5)1-wire總線 1-wire總線是利用一根線實(shí)現(xiàn)雙向通信,由一個總線主節(jié)點(diǎn)、一個或多個從節(jié)點(diǎn)組成系統(tǒng),通過一根信號線對從芯片進(jìn)行數(shù)據(jù)的讀取。每一個符合1-wire協(xié)議的從芯片都有一個唯一的地址,包括8位分類碼、48位的序列號和8位CRC代碼。主芯片對各個從芯片的尋找依據(jù)這64位的不同來進(jìn)行。單總線節(jié)省I/O引腳資源、結(jié)構(gòu)簡單、成本低廉、便于
8、總線擴(kuò)展和維護(hù)。 第11頁,共66頁。9.1.2 串行擴(kuò)展的特點(diǎn)(6)USB串行擴(kuò)展接口 USB比較于其他傳統(tǒng)接口的一個優(yōu)勢是即插即用的實(shí)現(xiàn),即插即用(Plug-and-Play)也稱為熱插拔(Hot Plugging)。數(shù)據(jù)傳輸速度快,USB1.1接口的最高傳輸率可達(dá)12 Mb/s;USB2.0接口的最高傳輸率可達(dá)480 Mb/s。擴(kuò)展方便,使用USB Hub擴(kuò)展,可以連接127個USB設(shè)備,連接的方式十分靈活。(7)CAN總線 在由CAN 總線構(gòu)成的單一網(wǎng)絡(luò)中,理論上可以掛接無數(shù)個節(jié)點(diǎn)。實(shí)際應(yīng)用中,節(jié)點(diǎn)數(shù)目受網(wǎng)絡(luò)硬件的電氣特性所限制。CAN 可提供高達(dá)1Mbit/s的數(shù)據(jù)傳輸速率,這使實(shí)時
9、控制變得非常容易。另外,硬件的錯誤檢定特性也增強(qiáng)了CAN的抗電磁干擾能力。當(dāng)信號傳輸距離達(dá)到10km時,CAN 仍可提供高達(dá)50Kbit/s的數(shù)據(jù)傳輸速率。 第12頁,共66頁。9.2 UART串行擴(kuò)展接口 9.2.1 串行口工作方式 9.2.2 UART串行擴(kuò)展應(yīng)用實(shí)例 第13頁,共66頁。9.2.1 串行口工作方式串行口有四種工作方式,每一種工作方式都有自己的特點(diǎn)。其中方式0是8位同步通信方式,用于串/并或并/串轉(zhuǎn)換中,常用的串/并轉(zhuǎn)換芯片有74LS164和并/串轉(zhuǎn)換芯片74LS165等。74LS164 是一個雙列直插式8位串入/并出移位寄存器,其引腳如下圖所示。其引腳定義如下:A:同步串
10、行數(shù)據(jù)輸入端B:同步串行數(shù)據(jù)輸入端Q0Q7:8位并行數(shù)據(jù)輸出端CK:時鐘脈沖輸入端CLR:數(shù)據(jù)清除端(清除輸出數(shù)據(jù),通常用在移位完成時)GND:接地端VCC:電源端第14頁,共66頁。9.2.1 串行口工作方式74LS165 是一個雙列直插式8位并入/串出移位寄存器,其引腳如下圖所示。其引腳定義如下:LD:重新裝載數(shù)據(jù)端(通常用在數(shù)據(jù)完全移出后)CK:內(nèi)部數(shù)據(jù)移位時鐘脈沖輸入端D0D7:并行數(shù)據(jù)輸入端Q11:取反串行輸出端GND:接地端Q11:串行輸出端SE:用于填充數(shù)據(jù)移出后的空位的邏輯電平信號COK:和CK聯(lián)合控制數(shù)據(jù)移動VCC:電源端第15頁,共66頁。9.2.1 串行口工作方式74LS
11、164引腳圖 74LS165引腳圖 第16頁,共66頁。9.2.2 UART串行擴(kuò)展應(yīng)用實(shí)例【例1】 利用74LS164串行輸入并行輸出芯片作一個簡單的電子鐘,要求四個數(shù)碼管顯示時鐘;其中LED1顯示小時的十位,LED2顯示小時的個位,LED3顯示分鐘的十位,LED4顯示分鐘的個位。解:原理圖如下圖,采用單片機(jī)的串行口輸出字形碼,用74LS164和74LS138作為擴(kuò)展芯片。 74LS164的功能是將AT89C2051串行通信口輸出的串行數(shù)據(jù)譯碼并在其并口線上輸出,從而驅(qū)動LED數(shù)碼管。 74LS138是一個3線-8線譯碼器,它將單片機(jī)輸出的地址信號譯碼后動態(tài)驅(qū)動相應(yīng)的LED。因74LS138
12、電流驅(qū)動能力較小,故用末級驅(qū)動三極管9013作為地址驅(qū)動。將4只LED的字段位都連在一起,它們的公共端則由74LS138分時選通,這樣任何一個時刻,都只有一位LED在點(diǎn)亮,也即動態(tài)掃描顯示方式,其優(yōu)點(diǎn)使用串行口進(jìn)行LED通信程序編寫相當(dāng)簡單,用戶只需將需顯示的數(shù)據(jù)直接送串口發(fā)送緩沖器,等待串行中斷即可。 第17頁,共66頁。9.2.2 UART串行擴(kuò)展應(yīng)用實(shí)例串行動態(tài)LED掃描電路 P3.2P3.3TXRX第18頁,共66頁。9.2.2 UART串行擴(kuò)展應(yīng)用實(shí)例ORG 0000HLJMP MAINORG 0040HMAIN:MOV SCON,#00H;初始化串口為方式0MOV R3,#00HL
13、OOP:MOV R4,#0E8HDELAY:LCALL DISPLAY;動態(tài)掃描顯示DJNZ R4,DELAYINC R3;顯示數(shù)字增1CJNE R3,#0AH,LOOP;不等于10轉(zhuǎn)移LJMP MAIN 下面是一個簡單的動態(tài)掃描程序,如果再利用上第六章的定時器就可做成一個完整的電子鐘,四個數(shù)碼管顯示為00:00這種形式。在本例中冒號就不顯示出來了,分別用20H、21H、22H、23H地址存放時間的時鐘的十位、時鐘的個位、分鐘的十位、分鐘的個位。用中斷方式做一個不帶時鐘芯片的電子鐘,請讀者自己完成。 第19頁,共66頁。9.2.2 UART串行擴(kuò)展應(yīng)用實(shí)例DISPLAY:CLR P3.2;顯示
14、LED1CLR P3.3LCALL DISPLCALL DELAY1SETB P3.3;顯示LED2LCALL DISPLCALL DELAY1SETB P3.3;顯示LED3CLR P3.2LCALL DISPLCALL DELAY1SETB P3.2;顯示LED4SETB P3.3LCALL DISPLCALL DELAY1RET參考程序:第20頁,共66頁。9.2.2 UART串行擴(kuò)展應(yīng)用實(shí)例DISP:MOV A,R3;將字形碼送串口MOV DPTR,#TABLEMOVC A,A+DPTRMOV SBUF,AWAIT:JNB TI,WAIT;等待串口傳送CLR TIRETDELAY1:M
15、OV R6,#10H;動態(tài)掃描的時間LOOP1:MOV R7,#38H;間隔DJNZ R7,$DJNZ R6,LOOP1RETTABLE:DB 3FH, 06H,,5BH;09的字形碼DB 4FH, 66H, 6DHDB 7DH, 07H,,7FH,,6FH參考程序:第21頁,共66頁。9.3 I2C串行擴(kuò)展總線 9.3.1 I2C總線的結(jié)構(gòu)原理 9.3.2 I2C總線的軟件模擬 9.3.3 I2C串行擴(kuò)展應(yīng)用實(shí)例 第22頁,共66頁。9.3.1 I2C總線的結(jié)構(gòu)原理I2C總線是芯片間串行傳輸總線。它用數(shù)據(jù)線SDA和時鐘線SCL兩根線實(shí)現(xiàn)全雙工同步數(shù)據(jù)傳送,可方便地構(gòu)成多機(jī)系統(tǒng)和外圍器件擴(kuò)展系
16、統(tǒng)。I2C總線采用了器件地址的硬件設(shè)置方法,通過軟件尋址完全避免了器件的片選線尋址方法,從而使硬件系統(tǒng)具有簡單靈活的擴(kuò)展方法。按照I2C總線規(guī)范,總線傳輸中的所有狀態(tài)都生成相對應(yīng)的狀態(tài)碼,系統(tǒng)中的主機(jī)能夠依照這些狀態(tài)碼自動地進(jìn)行總線管理,用戶只要在程序中裝入這些標(biāo)準(zhǔn)處理模塊,根據(jù)數(shù)據(jù)操作要求完成I2C總線的初始化,啟動I2C總線,就能自動完成規(guī)定的數(shù)據(jù)傳送操作。 第23頁,共66頁。9.3.1 I2C總線的結(jié)構(gòu)原理I2C總線接口電路結(jié)構(gòu) 第24頁,共66頁。9.3.1 I2C總線的結(jié)構(gòu)原理I2C總線接口為開漏或開集電極輸出,需加上拉電阻。系統(tǒng)中所有的單片機(jī)、外圍器件都將數(shù)據(jù)線SDA和時鐘線SC
17、L的同名端相連在一起,總線上的所有節(jié)點(diǎn)都由器件和管腳給定地址。系統(tǒng)中可以直接連接具有I2C總線接口的單片機(jī),也可以通過總線擴(kuò)展芯片或I/O口的軟件仿真與I2C總線相連。在I2C總線上可以掛接各種類型的外圍器件,如RAM/EEPROM、日歷/時鐘芯片、A/D轉(zhuǎn)換器、D/A轉(zhuǎn)換器、以及由I/O口、顯示驅(qū)動器構(gòu)成的各種模塊。 第25頁,共66頁。9.3.1 I2C總線的結(jié)構(gòu)原理SDA 和SCL 都是雙向線路,都通過一個電流源或上拉電阻連接到正的電源電壓;當(dāng)總線空閑時,這兩條線路都是高電平;連接到總線的器件輸出級必須是漏極開路或集電極開路才能執(zhí)行線與的功能。I2C 總線上數(shù)據(jù)的傳輸速率在標(biāo)準(zhǔn)模式下可達(dá)
18、100kbit/s。在快速模式下可達(dá)400kbit/s。 在高速模式下可達(dá)3.4Mbit/s 。連接到總線的接口數(shù)量只由總線電容是400pF 的限制決定關(guān)于高速模式主機(jī)器件的信息。 第26頁,共66頁。9.3.1 I2C總線的結(jié)構(gòu)原理I2C總線上數(shù)據(jù)傳送的基本單位為字節(jié),采用低位在前的格式。主從器件之間一次傳輸?shù)臄?shù)據(jù)稱為一幀,由啟動信號、若干個數(shù)據(jù)字節(jié)和應(yīng)答位以及停止信號組成。I2C的主要命令只有讀、寫兩種,雖然讀寫的字節(jié)根據(jù)具體器件的不同而不同,但其時序關(guān)系不會發(fā)生改變。下位機(jī)只要具備I2C的基本時序即可。 這些基本時序包括:啟動、寫字節(jié)、讀字節(jié)、應(yīng)答位、停止信號,并可以組合成兩個子程序:讀
19、N字節(jié)子程序、寫N字節(jié)子程序。 第27頁,共66頁。9.3.1 I2C總線的結(jié)構(gòu)原理I2C總線最顯著的特點(diǎn)是規(guī)范的完整性、結(jié)構(gòu)的獨(dú)立性和用戶使用時的“傻瓜”化。I2C總線有嚴(yán)格的規(guī)范,如接口的電氣特性、信號時序、信號傳輸?shù)亩x、總線狀態(tài)設(shè)置、總線管理規(guī)則及總線狀態(tài)處理等。在I2C總線規(guī)范中,總線上的器件節(jié)點(diǎn)的電氣特性及地址給定都具有較強(qiáng)的獨(dú)立性,而且各節(jié)點(diǎn)上的器件、模塊都有相對獨(dú)立的地址編號。嚴(yán)格、完善的規(guī)范,并將這些規(guī)范的應(yīng)用盡可能“傻瓜”化,除了有充分的硬件支持外,在軟件方面,Philips公司為用戶提供了一套完善的總線狀態(tài)處理軟件包,以致于用戶可以不去熟悉I2C總線的規(guī)范,不去理睬總線的
20、管理方法,只要掌握I2C總線的應(yīng)用程序設(shè)計(jì)方法就可方便地使用I2C總線,并且能很快地掌握I2C總線系統(tǒng)的軟、硬件設(shè)計(jì)方法。 第28頁,共66頁。9.3.2 I2C總線的軟件模擬1.產(chǎn)生起始位和停止位 I2C總線的起始和停止條件如下圖所示。 分別用P1.0和P1.1模擬I2C總線的時鐘線和數(shù)據(jù)線,則可給時鐘線SCL和數(shù)據(jù)線SDA賦值。程序如下: SDL EQU P1.0SCA EQU P1.1第29頁,共66頁。9.3.2 I2C總線的軟件模擬2.發(fā)送起始條件 當(dāng)時鐘SCL為高電平時,數(shù)據(jù)線SDA從高電平向低電平切換表示起始條件,即啟動I2C總線數(shù)據(jù)傳送。模擬時序產(chǎn)生時鐘SCL和SDA發(fā)送的起始
21、條件子程序如下: 使用不同頻率的晶體振蕩器,則要相應(yīng)增刪程序段中NOP指令的條數(shù),以滿足時序的要求。 START:SETB SDASETB SCLNOP;NOP的數(shù)目根據(jù)時鐘頻率確定NOP;此處用NOP來延時CLR SDANOPNOPCLR SCLRET第30頁,共66頁。9.3.2 I2C總線的軟件模擬3.發(fā)送停止條件 當(dāng)時鐘SCL為高電平時,數(shù)據(jù)線SDA由低電平向高電平切換表示停止條件,即停止I2C總線數(shù)據(jù)傳送。模擬時序產(chǎn)生時鐘SCL和SDA發(fā)送的停止條件子程序如下: 使用不同頻率的晶體振蕩器,則要相應(yīng)增刪程序段中NOP指令的條數(shù),以滿足時序的要求。 STOP:CLR SDASETB SC
22、LNOP;NOP的數(shù)目根據(jù)時鐘頻率確定NOP;此處用NOP來延時SETB SDANOPNOPCLR SDACLR SCLRET第31頁,共66頁。9.3.2 I2C總線的軟件模擬4.發(fā)送應(yīng)答位、非應(yīng)答位子程序I2C總線上的第9個時鐘脈沖對應(yīng)于應(yīng)答位,當(dāng)該位為低電平表示應(yīng)答ACK,當(dāng)該位為高電平表示非應(yīng)答ACK。 I2C總線的應(yīng)答位和非應(yīng)答位如下圖所示。發(fā)送ACK和ACK子程序如下。 SDASCL第32頁,共66頁。9.3.2 I2C總線的軟件模擬(1) 發(fā)送應(yīng)答位ACK 由上圖可知,當(dāng)發(fā)送應(yīng)答位ACK時,只需將SDA設(shè)為低電平、SCL設(shè)為高電平,其區(qū)間的長短根據(jù)晶振的頻率確定,即改變下列子程序
23、中的NOP數(shù)即可達(dá)到要求,發(fā)送ACK子程序如下: YACK:CLR SDASETB SCLNOP;NOP的數(shù)目根據(jù)時鐘頻率確定NOP;此處用NOP來延時CLR SCLSETB SDARET第33頁,共66頁。9.3.2 I2C總線的軟件模擬(2) 發(fā)送非應(yīng)答位 由上圖可知,當(dāng)發(fā)送非應(yīng)答位ACK時,只需將SDA設(shè)為高電平、SCL設(shè)為高電平,其區(qū)間的長短根據(jù)晶振的頻率確定,即改變下列子程序中的NOP數(shù)即可達(dá)到要求,發(fā)送ACK子程序如下: YNACK:SETB SDASETB SCLNOP;NOP的數(shù)目根據(jù)時鐘頻率確定NOP;此處用NOP來延時CLR SCLCLR SDARET第34頁,共66頁。9
24、.3.2 I2C總線的軟件模擬5.應(yīng)答位檢查子程序根據(jù)I2C總線協(xié)議,在接收到一個字節(jié)后,要發(fā)送一個應(yīng)答位以供檢查,此時可設(shè)置一個標(biāo)志位表示應(yīng)答狀態(tài)。當(dāng)檢查結(jié)果為正常應(yīng)答時,則標(biāo)志位置0;否則,標(biāo)志位置0。應(yīng)答位檢查子程序如下: TACK:SETB SDA;設(shè)置SDA為輸入方式SETB SCL;產(chǎn)生第9個時鐘脈沖NOP;NOP的數(shù)目根據(jù)時鐘頻率確定NOP;此處用NOP來延時CLR 30HMOV C,SDAJNC TEND;若正常應(yīng)答,則轉(zhuǎn)移SETB 30HTEND:CLR SCLRET第35頁,共66頁。9.3.2 I2C總線的軟件模擬6.字節(jié)數(shù)據(jù)發(fā)送子程序根據(jù)I2C總線協(xié)議,數(shù)據(jù)在時鐘線為低
25、電平時變化,高電平時穩(wěn)定,每一個時鐘脈沖傳送一位。模擬I2C總線的SDA接在并行口線,并口中無移位寄存器,要通過指令完成移位后再從SDA串行輸出。I2C總線的字節(jié)數(shù)據(jù)傳送如下圖所示。將待發(fā)送的字節(jié)存于累加器A中,字節(jié)數(shù)據(jù)發(fā)送子程序如下: 第36頁,共66頁。9.3.2 I2C總線的軟件模擬WOBYT:MOV R4,#08H;要發(fā)送的數(shù)據(jù)長度為8位LOOP2:RLC A;將待發(fā)送的位送入位CY中JC LOOP1;CY位為1轉(zhuǎn)到LOOP1CLR SDA;置為低電平,發(fā)送0SETB SCL;時鐘高電平數(shù)據(jù)保持?jǐn)?shù)據(jù)穩(wěn)定NOP;調(diào)節(jié)NOP的個數(shù),使延時4.7u sNOPCLR SCL;時鐘脈沖變?yōu)榈碗娖?/p>
26、,準(zhǔn)備改變數(shù)據(jù)DJNZ R4,LOOP2;若8位未發(fā)送完,轉(zhuǎn)LOOP2繼續(xù)RET;8位發(fā)送完成返回LOOP1:SETB SDA;置為高電平,發(fā)送1SETB SCL;時鐘為高電平保持?jǐn)?shù)據(jù)穩(wěn)定NOP;調(diào)節(jié)NOP的個數(shù),使延時4.7u sNOPCLR SCL;時鐘脈沖變?yōu)榈碗娖?,?zhǔn)備改變數(shù)據(jù)CLR SDA;將數(shù)據(jù)改為低電平DJNZ R4,LOOP2;若8位未發(fā)送完,轉(zhuǎn)LOOP2繼續(xù)RET;8位發(fā)送完成返回字節(jié)數(shù)據(jù)發(fā)送子程序第37頁,共66頁。9.3.2 I2C總線的軟件模擬7.字節(jié)數(shù)據(jù)接收子程序根據(jù)I2C總線協(xié)議,數(shù)據(jù)必須在時鐘處于高電平期間,數(shù)據(jù)穩(wěn)定時才能讀取數(shù)據(jù),在經(jīng)過八次的時鐘轉(zhuǎn)換后,讀出八位
27、即一個字節(jié)數(shù)據(jù)。I2C總線起始字節(jié)如下圖所示。將讀出的字節(jié)數(shù)據(jù)存于R5中,接收字節(jié)數(shù)據(jù)子程序如下: 第38頁,共66頁。9.3.2 I2C總線的軟件模擬接收字節(jié)數(shù)據(jù)子程序ROBYT:MOV R4,#08H;要接收的數(shù)據(jù)長度為8位LOOP3:SETB SDA;設(shè)置SDA為輸入方式SETB SCL;SDA上數(shù)據(jù)有效MOV C,SDA;讀入SDA引腳狀態(tài)MOV A,R5;將存放結(jié)果送入A中RLC A;將讀出的1位移入A中MOV R5,ACLR SCL;一個脈沖結(jié)束,SDA上數(shù)據(jù)無效DJNZ R4,LOOP3;未讀完8位,轉(zhuǎn)到LOOP3RET;讀完返回第39頁,共66頁。9.3.2 I2C總線的軟件模
28、擬8.多個字節(jié)數(shù)據(jù)發(fā)送子程序 在完成上述模擬子程序后,根據(jù)I2C總線協(xié)議,可編寫多個字節(jié)數(shù)據(jù)發(fā)送子程序。要發(fā)送的字節(jié)數(shù)存放在R5中,要發(fā)送的數(shù)據(jù)塊的第一個數(shù)據(jù)的地址為40H,外圍器件的地址存放在60H中,參考程序如下: WDBYT:LCALL START;起始WLP1:MOV A,60H;設(shè)60H為存放的控制字LCALL WOBYT;發(fā)送讀控制字節(jié)LCALL TACK;檢查應(yīng)答位JB 30H,WLP1;無應(yīng)答位,重發(fā)MOV R0,#40H;40H為第一個數(shù)據(jù)的首地址WLP2:MOV A, R0;讀一個字節(jié)數(shù)據(jù)LCALL WOBYT;發(fā)送LCALL TACK;檢查應(yīng)答位JB 30H,WLP1;無
29、應(yīng)答位,重發(fā)INC R0;指向下一個要發(fā)送的數(shù)據(jù)DJNZ R5,WLP2;要發(fā)送數(shù)據(jù)未發(fā)完,再發(fā)送LCALL STOP;全部數(shù)據(jù)發(fā)完,停止RET;返回第40頁,共66頁。9.3.2 I2C總線的軟件模擬9.多個字節(jié)數(shù)據(jù)接收子程序 根據(jù)I2C總線協(xié)議,同樣可編寫多個字節(jié)數(shù)據(jù)接收子程序。要接收的字節(jié)數(shù)存放在R5中,要接收的數(shù)據(jù)塊存放的首地址為50H,外圍器件的地址存放在60H中,參考程序如下: RDBYT:LCALL START;起始RLP1:MOV A,60H;設(shè)60H為存放的控制字LCALL WOBYT;發(fā)送讀控制字節(jié)LCALL TACK;檢查應(yīng)答位JB 30H,RLP1;無應(yīng)答位,重發(fā)MOV
30、 R0,#50H;50H為第一個數(shù)據(jù)的首地址RLP2:LCALL ROBYT;讀入一個字節(jié)MOV R0,ADJNZ R5,RLP3;要接收數(shù)據(jù)未讀完,再讀入LCALL YNACK;發(fā)送非應(yīng)答位LCALL STOP;全部數(shù)據(jù)發(fā)完,停止RET;返回RLP3:LCALL YACK;發(fā)送應(yīng)答位INC R0;指向下一個要存放數(shù)據(jù)的地址SJMP RLP2;調(diào)節(jié)NOP的個數(shù),使延時4.7u s第41頁,共66頁。9.3.3 I2C串行擴(kuò)展應(yīng)用實(shí)例【例2】 將AT89C2051片內(nèi)RAM40H47H單元中的八個8位數(shù)據(jù)通過I2C總線接口傳送到存儲器AT24C01的50H57H單元中。解:AT24C01是Atm
31、el公司生產(chǎn)的具有I2C總線接口的E2PROM,是目前應(yīng)用較多的AT24C系列存儲器中的一種,芯片存儲容量為1Kb(1288位)。AT24C01引腳如下圖所示。其引腳定義如下: SCL:串行時鐘端。SDA:串行數(shù)據(jù)端,漏極開路, 需接上拉電阻到VCC。WP:寫保護(hù), 當(dāng)WP為高電平時存儲器只讀; 當(dāng)WP為低電平時存儲器可讀可寫。A2A0:芯片地址。 第42頁,共66頁。9.3.3 I2C串行擴(kuò)展應(yīng)用實(shí)例 AT89C2051與AT24C01通過串行總線接口傳送數(shù)據(jù)的接線如下圖所示。因AT89C2051沒有I2C總線接口,可用軟件的辦法來模擬I2C總線操作。P1.0模擬I2C總線的時鐘線SCL,P
32、1.1模擬I2C總線的數(shù)據(jù)線SDA。 AT89C2051與AT24C01的接口接線第43頁,共66頁。9.3.3 I2C串行擴(kuò)展應(yīng)用實(shí)例 AT24C01的讀寫操作有多種形式,寫操作有兩種類型:字節(jié)寫和頁面寫;讀操作有三種類型:讀當(dāng)前地址內(nèi)容、讀隨機(jī)地址內(nèi)容和讀順序地址內(nèi)容。 AT24C01寫N個字節(jié)數(shù)據(jù)的操作時序如下圖所示, AT24C01讀N個字節(jié)數(shù)據(jù)的操作時序如下圖所示。 第44頁,共66頁。9.3.3 I2C串行擴(kuò)展應(yīng)用實(shí)例上圖中器件地址說明如下: 器件地址碼的第74位從器件地址位,用于確認(rèn)器件的類型。 AT24C01的器件地址碼為1010,1010 表示從器件為串行E2PROM。 器件
33、地址碼的第31位18片的片選或存儲器內(nèi)的頁面地址選擇位。此三個控制位用于選片或者內(nèi)部頁面選擇。 如在存儲容量8Kb(10248位)的AT24C08內(nèi)部,存儲矩陣分為4個頁面,每一頁面有256個字節(jié)。通過器件地址碼的第2位和第1位,可以選擇數(shù)據(jù)讀寫的頁面。 器件地址碼的第0位讀、寫(R/W)操作控制碼。若此位為1,下一字節(jié)進(jìn)行讀操作(R);此位為0,下一字節(jié)進(jìn)行寫操作(W)。 第45頁,共66頁。9.3.3 I2C串行擴(kuò)展應(yīng)用實(shí)例編程說明:AT24C01每接收一個字節(jié)后,都必須發(fā)送一個確認(rèn)應(yīng)答信號位ACK,即時序中的響應(yīng)信號。此時AT89C2051必須產(chǎn)生一個與此確認(rèn)位相應(yīng)的時鐘脈沖。AT24C
34、01在讀寫操作時,具有地址自動加1功能,即讀、寫完某一地址空間后,會自動指向下一個地址單元。將AT89C2051片內(nèi)RAM40H47H單元中的八個8位數(shù)據(jù)通過I2C總線接口傳送到存儲器AT24C01的50H57H單元中,參考子程序如下。 程序中用到的子程序均為9.3.2節(jié)所編寫的模擬I2C總線的子程序。 第46頁,共66頁。參考子程序ICW:LCALL START;發(fā)送起始信號ICWLP1:MOV A,0A0H;#10100000B器件地址碼,LCALL WOBYT;發(fā)送器件地址LCALL TACK;檢查應(yīng)答位JB 30H,ICWLP1;無應(yīng)答位,重發(fā)ICWLP2:MOV A,50H;50H為
35、待寫存儲單元首地址LCALL WOBYT;發(fā)送待寫存儲單元地址LCALL TACK;檢查應(yīng)答位JB 30H,ICWLP1;無應(yīng)答位,重發(fā)MOV R5,#8;待發(fā)送數(shù)據(jù)塊的長度MOV R0,#40H;40H為第一個數(shù)據(jù)的首地址ICWLP3:MOV A, R0;讀一個字節(jié)數(shù)據(jù)LCALL WOBYT;發(fā)送LCALL TACK;檢查應(yīng)答位JB 30H,ICWLP1;無應(yīng)答位,重發(fā)INC R0;指向下一個要發(fā)送的數(shù)據(jù)DJNZ R5,WLP2;要發(fā)送數(shù)據(jù)未發(fā)完,再發(fā)送LCALL STOP;全部數(shù)據(jù)發(fā)完,停止LCALL DELAY;延時,等待AT24C01內(nèi)部寫操作RET;返回第47頁,共66頁。9.4 S
36、PI串行擴(kuò)展接口 9.4.1 SPI總線的結(jié)構(gòu)原理 9.4.2 SPI總線的軟件模擬 9.4.3 SPI串行擴(kuò)展應(yīng)用實(shí)例 第48頁,共66頁。9.4.1 SPI總線的結(jié)構(gòu)原理SPI總線系統(tǒng)是一種同步串行外設(shè)接口,允許MCU與各種外圍設(shè)備以同步串行方式進(jìn)行通信來交換信息。SPI總線接口一般使用4根線:串行時鐘線SCK、主機(jī)輸入/從機(jī)輸出數(shù)據(jù)線MISO、主機(jī)輸出/從機(jī)輸入數(shù)據(jù)線MOSI和低電平有效的從機(jī)選擇線SS。由于SPI系統(tǒng)總線只需3根公共的時鐘數(shù)據(jù)線和若干位獨(dú)立的從機(jī)選擇線,在SPI從設(shè)備較少而沒有總線擴(kuò)展能力的單片機(jī)系統(tǒng)中使用特別方便。SPI總線包括1根串行同步時鐘信號線以及2根數(shù)據(jù)線。S
37、PI總線接口電路結(jié)構(gòu)如下圖所示。 第49頁,共66頁。9.4.1 SPI總線的結(jié)構(gòu)原理SPI總線接口電路結(jié)構(gòu) 第50頁,共66頁。9.4.1 SPI總線的結(jié)構(gòu)原理SPI模塊為了和外設(shè)進(jìn)行數(shù)據(jù)交換,根據(jù)外設(shè)工作要求,其輸出的串行同步時鐘極性和相位可以進(jìn)行配置。時鐘極性(CPOL)對傳輸協(xié)議沒有重大的影響。如果CPOL=0,串行同步時鐘的空閑狀態(tài)為低電平;如果CPOL=1,串行同步時鐘的空閑狀態(tài)為高電平。時鐘相位(CPHA)能夠用于選擇兩種不同的傳輸協(xié)議進(jìn)行數(shù)據(jù)傳輸。如果CPHA=0,在串行同步時鐘的第一個跳變沿(上升或下降)數(shù)據(jù)被采樣;如果CPHA=1,在串行同步時鐘的第二個跳變沿(上升或下降)
38、數(shù)據(jù)被采樣。SPI主模塊和與之通信的外設(shè)間時鐘相位和極性應(yīng)該一致。 第51頁,共66頁。9.4.1 SPI總線的結(jié)構(gòu)原理特點(diǎn):由于SPI系統(tǒng)總線一共只需34位數(shù)據(jù)線和控制線即可實(shí)現(xiàn)與具有SPI總線接口功能的各種I/O器件進(jìn)行連接,而擴(kuò)展并行總線則需要8根數(shù)據(jù)線、816位地址線、23位控制線,因此,采用SPI總線接口可以簡化電路設(shè)計(jì),節(jié)省很多常規(guī)電路中的接口器件和I/O口線,提高設(shè)計(jì)的可靠性。應(yīng)用:在MCS51系列等不具有SPI接口的單片機(jī)組成的智能儀器和工業(yè)測控系統(tǒng)中,當(dāng)傳輸速度要求不是太高時,使用SPI總線可以增加應(yīng)用系統(tǒng)接口器件的種類,提高應(yīng)用系統(tǒng)的性能。 第52頁,共66頁。9.4.2
39、SPI總線的軟件模擬對于沒有提供SPI接口的單片機(jī)而言,通常可使用軟件的辦法來模擬SPI的總線操作,包括串行時鐘、數(shù)據(jù)輸入和輸出。Atmel公司生產(chǎn)的EEPROM具有SPI接口,存儲容量為4Kb的AT25040就有SPI接口,MCS51系列單片機(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個子程序。 第53頁,共66頁。1. MCU串行輸入子程序SPIIN 從AT25
40、040的SO端接收8位數(shù)據(jù)并放入寄存器R0中。參考程序如下: SPIIN:SETB P1.1 ;使P1.1(時鐘)輸出為1 CLR P1.2 ;選擇從機(jī) MOV R1,#08H ;置循環(huán)次數(shù) SPIIN1:CLR P1.1 ;使P1.1(時鐘)輸出為0 NOP ;延時 NOP MOV C,P1.3 ;從機(jī)輸出送進(jìn)位C RLC A ;左移至累加器A SETB P1.1 ;使P1.0(時鐘)輸出為1 DJNZ R1,SPIIN1 ;判斷是否循環(huán)8次 (8位數(shù)據(jù)) MOV R0,A ;8位數(shù)據(jù)送R0 RET第54頁,共66頁。2. MCU串行輸出子程序SPIOUT 將MCS51單片機(jī)中R0寄存器的內(nèi)
41、容傳送到AT25040的SI端。參考程序如下: SPIOUT:SETB P1.1 ;使P1.1(時鐘)輸出為1 CLR P1.2 ;選擇從機(jī) MOV R1,#08H ;置循環(huán)次數(shù) MOV A,R0 ;8位數(shù)據(jù)送累加器ASPIOUT1:CLR P1.1 ;使P1.1(時鐘)輸出為0 NOP ;延時 NOP RLC A ;左移至累加器A最高位至C MOV P1.0,C ;進(jìn)位C送從機(jī)輸入 SETB P1.1 ;使P1.1(時鐘)輸出為1 DJNZ R1,SPIOUT1 ;判是否循環(huán)8次(8位數(shù)據(jù)) RET第55頁,共66頁。3. MCU串行輸入/輸出子程序SPIIO 將MCS51單片機(jī)R0寄存器的
42、內(nèi)容傳送到AT25040的SI端,同時從AT25040的SO端接收8位數(shù)據(jù)。參考程序如下: SPIIO:SETB P1.1 ;使P1.1(時鐘)輸出為1 CLR P1.2 ;選擇從機(jī) MOV R1,#08H ;置循環(huán)次數(shù) MOV A,R0 ;8位數(shù)據(jù)送累加器A SPIIO1:CLR P1.1 ;使P1.1(時鐘)輸出為0 NOP ;延時 NOP MOV C,P1.3 ;從機(jī)輸出送進(jìn)位C RLC A ;左移至累加器A最高位至C MOV P1.0,C ;進(jìn)位C送從機(jī)輸入 SETB P1.1 ;使P1.1(時鐘)輸出為1 DJNZ R1,SPIIO1 ;判斷是否循環(huán)8次(8位數(shù)據(jù)) RET第56頁,
43、共66頁。9.4.2 SPI總線的軟件模擬這些子程序適用于在串行時鐘的上升沿輸入和下降沿輸出的各種串行外圍接口芯片(如D/A和A/D轉(zhuǎn)換芯片、實(shí)時時鐘芯片、LED顯示驅(qū)動芯片等)。對于下降沿輸入、上升沿輸出的各種串行外圍接口芯片,只要改變P1.1的輸出電平順序,這些子程序也同樣適用。如先置P1.1為低電平,之后再次置P1.1為高電平,再置P1.1為低電平等等。 第57頁,共66頁。9.4.3 SPI串行擴(kuò)展應(yīng)用實(shí)例【例3】 將AT89C2051片內(nèi)RAM30H、31H單元中的16位數(shù)據(jù)通過SPI總線接口傳送到數(shù)/模轉(zhuǎn)換器TLC5615。解:TLC5615是3線串行總線接口10位電壓輸出數(shù)/模轉(zhuǎn)
44、換器,它既可與單片機(jī)的SPI總線接口相連接,又可與單片機(jī)的Microwire總線接口相連接。TLC5615內(nèi)部結(jié)構(gòu)如下圖所示。 第58頁,共66頁。9.4.3 SPI串行擴(kuò)展應(yīng)用實(shí)例 TLC5615內(nèi)部結(jié)構(gòu) 第59頁,共66頁。9.4.3 SPI串行擴(kuò)展應(yīng)用實(shí)例TLC5615通過固定增益為2的運(yùn)放緩沖電阻網(wǎng)絡(luò),把10位數(shù)字?jǐn)?shù)據(jù)轉(zhuǎn)換為模擬電壓。在TLC5615芯片上電時,內(nèi)部電路把D/A寄存器復(fù)位為0。其輸出具有與基準(zhǔn)輸入相同的極性,表達(dá)式為 VO=2REFCODE/1024 其中,CMOD是通過串行總線接口輸入的待轉(zhuǎn)換的數(shù)據(jù);REF是基準(zhǔn)電壓。TLC5615最大的串行時鐘速率不超過14MHz,10位DAC的建立時間為12.5s,通常更新速率限制至80kHz以內(nèi)。TLC5615的16位移位寄存器在SC
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026黑龍江鶴崗市興山區(qū)招聘公益性崗位人員30人考試備考題庫及答案解析
- 2026上海市社會主義學(xué)院公開招聘專職教師筆試模擬試題及答案解析
- 2026年煙臺科技學(xué)院招聘(273人)筆試模擬試題及答案解析
- 2026年阜陽市界首市中醫(yī)院公開招聘專業(yè)技術(shù)人員考試備考題庫及答案解析
- 2026湖南長沙市雨花湘一外國語中學(xué)春季合同制教師招聘考試參考題庫及答案解析
- 2026年甘肅蘭州鐵路技師學(xué)院高校畢業(yè)生招聘考試備考試題及答案解析
- 2026年寵物行為訓(xùn)練與健康管理培訓(xùn)
- 2026中國國際商會新疆商會人員招聘20人考試參考題庫及答案解析
- 2026江蘇南京大學(xué)化學(xué)學(xué)院科研人員招聘筆試備考題庫及答案解析
- 2026曲靖市事業(yè)單位公開招聘工作人員(889人)考試備考題庫及答案解析
- 重慶市2026年高一(上)期末聯(lián)合檢測(康德卷)化學(xué)+答案
- 【四年級】【數(shù)學(xué)】【秋季上】期末家長會:數(shù)海引航愛伴成長【課件】
- 湖北省十堰市城區(qū)2024-2025學(xué)年九年級上學(xué)期期末質(zhì)量檢測道德與法治試題 (含答案)
- 2025年中國船舶集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 辦公樓物業(yè)服務(wù)的品質(zhì)提升策略
- 養(yǎng)殖場土地租賃合同
- JBT 8200-2024 煤礦防爆特殊型電源裝置用鉛酸蓄電池(正式版)
- (正式版)SHT 3078-2024 立式圓筒形料倉工程設(shè)計(jì)規(guī)范
- 計(jì)算機(jī)就業(yè)能力展示
- 設(shè)備維修團(tuán)隊(duì)的協(xié)作與溝通
- 華為三支柱運(yùn)作之HRBP實(shí)踐分享概要課件
評論
0/150
提交評論