




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第9章串行擴(kuò)展技術(shù) 了解串行擴(kuò)展的分類和特點(diǎn)。 了解Microware、1-wire、USB和CAN總線。 掌握I2C總線的原理。 掌握SPI總線的原理。nI2C總線的軟件模擬。nSPI總線的軟件模擬。 9.1 串行擴(kuò)展概述 9.2 UART串行擴(kuò)展接口 9.3 I2C串行擴(kuò)展總線 9.4 SPI串行擴(kuò)展接口 本章小結(jié)習(xí)題 9.1.1 串行擴(kuò)展的種類 9.1.2 串行擴(kuò)展的特點(diǎn) 新一代單片機(jī)技術(shù)的顯著特點(diǎn)之一就是串行擴(kuò)展總線和接口的推出。常用的串行擴(kuò)展總線和接口有I2C總線、SPI總線、Microware總線、1-wire總線和CAN總線等。 (1)UART串行擴(kuò)展接口 (Universal
2、Asynchronous Receiver/Transmitter) UART通用異步收發(fā)器,既能同步又能異步通信的硬件電路稱為UART。UART是用于控制計(jì)算機(jī)與串行設(shè)備的芯片,它提供了RS232C數(shù)據(jù)終端設(shè)備接口,這樣計(jì)算機(jī)就可以和調(diào)制解調(diào)器或其它使用RS232C接口的串行設(shè)備通信了。 (2)I2C(Inter Integrated Circuit)串行擴(kuò)展總線 I2C總線是Philip公司推出的芯片間串行傳輸總線。它用兩根線實(shí)現(xiàn)了完善的全雙工同步數(shù)據(jù)傳送,可以極為方便地構(gòu)成多機(jī)系統(tǒng)和外圍器件擴(kuò)展系統(tǒng)。(3)SPI(Serial Peripheral Interface) 串行擴(kuò)展接口 S
3、PI總線是Motorola公司提出的一種同步串行外設(shè)接口。允許MCU與各種外圍設(shè)備以同步串行方式進(jìn)行通信。其外圍設(shè)備種類繁多,從最簡(jiǎn)單的TTL移位寄存器到復(fù)雜的LCD顯示驅(qū)動(dòng)器、網(wǎng)絡(luò)控制器等,可謂應(yīng)有盡有。 (4)Microware串行擴(kuò)展接口 Microware總線是NS公司提出的串行同步雙工通信接口,用于8位COP800系列單片機(jī)和16位HPC系列單片機(jī)。(5)單總線(1-wire)串行擴(kuò)展總線 1-wire總線是Dallas公司研制開發(fā)的一種協(xié)議,用于便攜式儀表和現(xiàn)場(chǎng)監(jiān)控系統(tǒng)。(6)USB(Universal Serial BUS)串行擴(kuò)展總線 USB總線是Compaq、Intel、Mi
4、crosoft、NEC等公司聯(lián)合制定的一種計(jì)算機(jī)串行通信協(xié)議。 (7)CAN(Controller Area Network)串行擴(kuò)展總線 CAN總線是德國Bosch公司最先提出的多主機(jī)局域網(wǎng),是國際上應(yīng)用最廣泛的現(xiàn)場(chǎng)總線之一。最初,CAN被設(shè)計(jì)作為汽車環(huán)境中的微控制器通信,在車載各電子控制裝置ECU之間交換信息,形成汽車電子控制網(wǎng)絡(luò)。比如:發(fā)動(dòng)機(jī)管理系統(tǒng)、變速箱控制器、儀表裝備。 串行擴(kuò)展總線技術(shù)是新一代單片機(jī)技術(shù)發(fā)展的一個(gè)顯著特點(diǎn)。與并行擴(kuò)展總線相比,串行擴(kuò)展總線有電路結(jié)構(gòu)簡(jiǎn)單,程序編寫方便,易于實(shí)現(xiàn)用戶系統(tǒng)軟硬件的模塊化、標(biāo)準(zhǔn)化等優(yōu)點(diǎn)。 常用串行擴(kuò)展總線和接口的特點(diǎn)簡(jiǎn)要說明如下: (1)
5、UART串行擴(kuò)展接口 UART接口是二線制,8051單片機(jī)的UART既能作通用異步接收和發(fā)送器,又能作同步移位寄存器。它可以實(shí)現(xiàn)8051單片機(jī)系統(tǒng)之間點(diǎn)對(duì)點(diǎn)的單機(jī)通信或多機(jī)通信,也可以實(shí)現(xiàn)擴(kuò)展I/O口。 (2)I2C總線 I2C總線是二線制,采用器件地址的硬件設(shè)置方法,通過軟件尋址完全避免了器件的片選線尋址方法,從而使硬件系統(tǒng)具有簡(jiǎn)單靈活的擴(kuò)展方法。I2C總線簡(jiǎn)單,結(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è)備也可以簡(jiǎn)化電
6、路設(shè)計(jì),省掉很多常規(guī)電路中的接口器件,從而提高了設(shè)計(jì)的可靠性。 (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)線對(duì)從芯片進(jìn)行數(shù)據(jù)的讀取。每一個(gè)符合1-wire協(xié)議的從
7、芯片都有一個(gè)唯一的地址,包括8位分類碼、48位的序列號(hào)和8位CRC代碼。主芯片對(duì)各個(gè)從芯片的尋找依據(jù)這64位的不同來進(jìn)行。單總線節(jié)省I/O引腳資源、結(jié)構(gòu)簡(jiǎn)單、成本低廉、便于總線擴(kuò)展和維護(hù)。 (6)USB串行擴(kuò)展接口 USB比較于其他傳統(tǒng)接口的一個(gè)優(yōu)勢(shì)是即插即用的實(shí)現(xiàn),即插即用(Plug-and-Play)也稱為熱插拔(Hot Plugging)。數(shù)據(jù)傳輸速度快,接口的最高傳輸率可達(dá)12 Mb/s;接口的最高傳輸率可達(dá)480 Mb/s。擴(kuò)展方便,使用USB Hub擴(kuò)展,可以連接127個(gè)USB設(shè)備,連接的方式十分靈活。(7)CAN總線 在由CAN 總線構(gòu)成的單一網(wǎng)絡(luò)中,理論上可以掛接無數(shù)個(gè)節(jié)點(diǎn)。實(shí)
8、際應(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.2.1 串行口工作方式 9.2.2 UART串行擴(kuò)展應(yīng)用實(shí)例 串行口有四種工作方式,每一種工作方式都有自己的特點(diǎn)。其中方式0是8位同步通信方式,用于串/并或并/串轉(zhuǎn)換中,常用的串/并轉(zhuǎn)換芯片有74LS164和并/串轉(zhuǎn)換芯片74LS165等。74LS164 是一個(gè)雙列直插式8位串入/并出移位寄存器,其引腳如下圖所示。其引腳定義如下:lA
9、:同步串行數(shù)據(jù)輸入端lB:同步串行數(shù)據(jù)輸入端lQ0Q7:8位并行數(shù)據(jù)輸出端lCK:時(shí)鐘脈沖輸入端lCLR:數(shù)據(jù)清除端(清除輸出數(shù)據(jù),通常用在移位完成時(shí))lGND:接地端lVCC:電源端74LS165 是一個(gè)雙列直插式8位并入/串出移位寄存器,其引腳如下圖所示。其引腳定義如下:lLD:重新裝載數(shù)據(jù)端(通常用在數(shù)據(jù)完全移出后)lCK:內(nèi)部數(shù)據(jù)移位時(shí)鐘脈沖輸入端lD0D7:并行數(shù)據(jù)輸入端lQ11:取反串行輸出端lGND:接地端lQ11:串行輸出端lSE:用于填充數(shù)據(jù)移出后的空位的邏輯電平信號(hào)lCOK:和CK聯(lián)合控制數(shù)據(jù)移動(dòng)lVCC:電源端 1 2 3 4 5 6 7 10 9 8 11 12 13
10、14 A B Q7 GND CK CLR VCC Q6 Q5 Q4 Q3 Q2 Q1 Q0 12 13 14 15 16 SE D7 VCC D6 D5 D4 COK Q11 1 2 3 4 5 6 7 LD CK D3 Q11 D2 D1 D0 GND 9 11 10 8 74LS164引腳圖 74LS165引腳圖 【例1】 利用74LS164串行輸入并行輸出芯片作一個(gè)簡(jiǎn)單的電子鐘,要求四個(gè)數(shù)碼管顯示時(shí)鐘;其中LED1顯示小時(shí)的十位,LED2顯示小時(shí)的個(gè)位,LED3顯示分鐘的十位,LED4顯示分鐘的個(gè)位。解:原理圖如下圖,采用單片機(jī)的串行口輸出字形碼,用74LS164和74LS138作為擴(kuò)展
11、芯片。 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)簡(jiǎn)單,用戶只需將需顯示的數(shù)據(jù)直接送串口發(fā)送緩沖器,等待串行中斷即可。 串行動(dòng)態(tài)LED掃描電路 TXRXORG 0000HLJMP MAI
12、NORG 0040HMAIN:MOV SCON,#00H;初始化串口為方式0MOV R3,#00HLOOP:MOV R4,#0E8HDELAY:LCALL DISPLAY;動(dòng)態(tài)掃描顯示DJNZ R4,DELAYINC R3;顯示數(shù)字增1CJNE R3,#0AH,LOOP;不等于10轉(zhuǎn)移LJMP MAIN 下面是一個(gè)簡(jiǎn)單的動(dòng)態(tài)掃描程序,如果再利用上第六章的定時(shí)器就可做成一個(gè)完整的電子鐘,四個(gè)數(shù)碼管顯示為00:00這種形式。在本例中冒號(hào)就不顯示出來了,分別用20H、21H、22H、23H地址存放時(shí)間的時(shí)鐘的十位、時(shí)鐘的個(gè)位、分鐘的十位、分鐘的個(gè)位。用中斷方式做一個(gè)不帶時(shí)鐘芯片的電子鐘,請(qǐng)讀者自己完
13、成。 DISPLAY:CLR P3.2;顯示LED1CLR P3.3LCALL DISPLCALL DELAY1SETB P3.3;顯示LED2LCALL DISPLCALL DELAY1SETB P3.3;顯示LED3CLR P3.2LCALL DISPLCALL DELAY1SETB P3.2;顯示LED4SETB P3.3LCALL DISPLCALL DELAY1RET參考程序:DISP:MOV A,R3;將字形碼送串口MOV DPTR,#TABLEMOVC A,A+DPTRMOV SBUF,AWAIT:JNB TI,WAIT;等待串口傳送CLR TIRETDELAY1:MOV R6,
14、#10H;動(dòng)態(tài)掃描的時(shí)間LOOP1:MOV R7,#38H;間隔DJNZ R7,$DJNZ R6,LOOP1RETTABLE:DB 3FH, 06H,,5BH;09的字形碼DB 4FH, 66H, 6DHDB 7DH, 07H,,7FH,,6FH參考程序:9.3.1 I2C總線的結(jié)構(gòu)原理 9.3.2 I2C總線的軟件模擬 9.3.3 I2C串行擴(kuò)展應(yīng)用實(shí)例 I2C總線是芯片間串行傳輸總線。它用數(shù)據(jù)線SDA和時(shí)鐘線SCL兩根線實(shí)現(xiàn)全雙工同步數(shù)據(jù)傳送,可方便地構(gòu)成多機(jī)系統(tǒng)和外圍器件擴(kuò)展系統(tǒng)。I2C總線采用了器件地址的硬件設(shè)置方法,通過軟件尋址完全避免了器件的片選線尋址方法,從而使硬件系統(tǒng)具有簡(jiǎn)單靈
15、活的擴(kuò)展方法。按照I2C總線規(guī)范,總線傳輸中的所有狀態(tài)都生成相對(duì)應(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ù)傳送操作。 #1 #2 #3 #4 VDD SDA SCL RP RP SDA SDA SDA SDA SCL SCL SCL SCL I2C總線接口電路結(jié)構(gòu) I2C總線接口為開漏或開集電極輸出,需加上拉電阻。系統(tǒng)中所有的單片機(jī)、外圍器件都將數(shù)據(jù)線SDA和時(shí)鐘線SCL的同名端相連在一起,總線上的所有節(jié)點(diǎn)都由器件和管腳給定地址。系統(tǒng)中可以直接連接具有I2C總
16、線接口的單片機(jī),也可以通過總線擴(kuò)展芯片或I/O口的軟件仿真與I2C總線相連。在I2C總線上可以掛接各種類型的外圍器件,如RAM/EEPROM、日歷/時(shí)鐘芯片、A/D轉(zhuǎn)換器、D/A轉(zhuǎn)換器、以及由I/O口、顯示驅(qū)動(dòng)器構(gòu)成的各種模塊。 SDA 和SCL 都是雙向線路,都通過一個(gè)電流源或上拉電阻連接到正的電源電壓;當(dāng)總線空閑時(shí),這兩條線路都是高電平;連接到總線的器件輸出級(jí)必須是漏極開路或集電極開路才能執(zhí)行線與的功能。I2C 總線上數(shù)據(jù)的傳輸速率l在標(biāo)準(zhǔn)模式下可達(dá)100kbit/s。l在快速模式下可達(dá)400kbit/s。 l在高速模式下可達(dá)。連接到總線的接口數(shù)量只由總線電容是400pF 的限制決定關(guān)于高
17、速模式主機(jī)器件的信息。 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í)序包括:?jiǎn)?dòng)、寫字節(jié)、讀字節(jié)、應(yīng)答位、停止信號(hào),并可以組合成兩個(gè)子程序:讀N字節(jié)子程序、寫N字節(jié)子程序。 I2C總線最顯著的特點(diǎn)是規(guī)范的完整性、結(jié)構(gòu)的獨(dú)立性和用戶使用時(shí)的“傻瓜”化。 lI2C總線有嚴(yán)格的規(guī)范,如接口的電氣特性、信號(hào)時(shí)序、信號(hào)傳輸?shù)亩x、總線狀態(tài)設(shè)置、總線管理規(guī)則及總
18、線狀態(tài)處理等。l在I2C總線規(guī)范中,總線上的器件節(jié)點(diǎn)的電氣特性及地址給定都具有較強(qiáng)的獨(dú)立性,而且各節(jié)點(diǎn)上的器件、模塊都有相對(duì)獨(dú)立的地址編號(hào)。l嚴(yán)格、完善的規(guī)范,并將這些規(guī)范的應(yīng)用盡可能“傻瓜”化,除了有充分的硬件支持外,在軟件方面,Philips公司為用戶提供了一套完善的總線狀態(tài)處理軟件包,以致于用戶可以不去熟悉I2C總線的規(guī)范,不去理睬總線的管理方法,只要掌握I2C總線的應(yīng)用程序設(shè)計(jì)方法就可方便地使用I2C總線,并且能很快地掌握I2C總線系統(tǒng)的軟、硬件設(shè)計(jì)方法。 1.產(chǎn)生起始位和停止位 I2C總線的起始和停止條件如下圖所示。 分別用和模擬I2C總線的時(shí)鐘線和數(shù)據(jù)線,則可給時(shí)鐘線SCL和數(shù)據(jù)線
19、SDA賦值。程序如下: SDA SCL 起始條件 停止條件 SDL EQU P1.0SCA EQU P1.12.發(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:SETB SDASETB SCLNOP;NOP的數(shù)目根據(jù)時(shí)鐘頻率確定NOP;此處用NOP來延時(shí)CLR SDANOPNOPCLR SCLRET3.發(fā)送停止條件 當(dāng)時(shí)鐘SCL為高電平時(shí),數(shù)據(jù)線SDA由低電平向高電平切換表示停止條
20、件,即停止I2C總線數(shù)據(jù)傳送。模擬時(shí)序產(chǎn)生時(shí)鐘SCL和SDA發(fā)送的停止條件子程序如下: 使用不同頻率的晶體振蕩器,則要相應(yīng)增刪程序段中NOP指令的條數(shù),以滿足時(shí)序的要求。 STOP:CLR SDASETB SCLNOP;NOP的數(shù)目根據(jù)時(shí)鐘頻率確定NOP;此處用NOP來延時(shí)SETB SDANOPNOPCLR SDACLR SCLRET4.發(fā)送應(yīng)答位、非應(yīng)答位子程序I2C總線上的第9個(gè)時(shí)鐘脈沖對(duì)應(yīng)于應(yīng)答位,當(dāng)該位為低電平表示應(yīng)答ACK,當(dāng)該位為高電平表示非應(yīng)答ACK。 I2C總線的應(yīng)答位和非應(yīng)答位如下圖所示。發(fā)送ACK和ACK子程序如下。 發(fā)送 ACK 發(fā)送 ACK SDASCL(1) 發(fā)送應(yīng)答
21、位ACK 由上圖可知,當(dāng)發(fā)送應(yīng)答位ACK時(shí),只需將SDA設(shè)為低電平、SCL設(shè)為高電平,其區(qū)間的長(zhǎng)短根據(jù)晶振的頻率確定,即改變下列子程序中的NOP數(shù)即可達(dá)到要求,發(fā)送ACK子程序如下: YACK:CLR SDASETB SCLNOP;NOP的數(shù)目根據(jù)時(shí)鐘頻率確定NOP;此處用NOP來延時(shí)CLR SCLSETB SDARET(2) 發(fā)送非應(yīng)答位 由上圖可知,當(dāng)發(fā)送非應(yīng)答位ACK時(shí),只需將SDA設(shè)為高電平、SCL設(shè)為高電平,其區(qū)間的長(zhǎng)短根據(jù)晶振的頻率確定,即改變下列子程序中的NOP數(shù)即可達(dá)到要求,發(fā)送ACK子程序如下: YNACK:SETB SDASETB SCLNOP;NOP的數(shù)目根據(jù)時(shí)鐘頻率確定
22、NOP;此處用NOP來延時(shí)CLR SCLCLR SDARET5.應(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:SETB SDA;設(shè)置SDA為輸入方式SETB SCL;產(chǎn)生第9個(gè)時(shí)鐘脈沖NOP;NOP的數(shù)目根據(jù)時(shí)鐘頻率確定NOP;此處用NOP來延時(shí)CLR 30HMOV C,SDAJNC TEND;若正常應(yīng)答,則轉(zhuǎn)移SETB 30HTEND:CLR SCLRET6.字節(jié)數(shù)據(jù)發(fā)送子程序根據(jù)I2C總線協(xié)議,數(shù)據(jù)在時(shí)鐘線為低電平時(shí)變化,高電平時(shí)穩(wěn)
23、定,每一個(gè)時(shí)鐘脈沖傳送一位。模擬I2C總線的SDA接在并行口線,并口中無移位寄存器,要通過指令完成移位后再從SDA串行輸出。I2C總線的字節(jié)數(shù)據(jù)傳送如下圖所示。將待發(fā)送的字節(jié)存于累加器A中,字節(jié)數(shù)據(jù)發(fā)送子程序如下: SCL SDA 起始 停止 1 ACK 2 WOBYT:MOV R4,#08H;要發(fā)送的數(shù)據(jù)長(zhǎng)度為8位LOOP2:RLC A;將待發(fā)送的位送入位CY中JC LOOP1;CY位為1轉(zhuǎn)到LOOP1CLR SDA;置為低電平,發(fā)送0SETB SCL;時(shí)鐘高電平數(shù)據(jù)保持?jǐn)?shù)據(jù)穩(wěn)定NOP;調(diào)節(jié)NOP的個(gè)數(shù),使延時(shí)4.7u sNOPCLR SCL;時(shí)鐘脈沖變?yōu)榈碗娖剑瑴?zhǔn)備改變數(shù)據(jù)DJNZ R4,
24、LOOP2;若8位未發(fā)送完,轉(zhuǎn)LOOP2繼續(xù)RET;8位發(fā)送完成返回LOOP1:SETB SDA;置為高電平,發(fā)送1SETB SCL;時(shí)鐘為高電平保持?jǐn)?shù)據(jù)穩(wěn)定NOP;調(diào)節(jié)NOP的個(gè)數(shù),使延時(shí)4.7u sNOPCLR SCL;時(shí)鐘脈沖變?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ā)送子程序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é)
25、數(shù)據(jù)子程序如下: ACK 起始字節(jié) SCL SDA 起始 停止 1 ACK 2 7 8 9 接收字節(jié)數(shù)據(jù)子程序ROBYT:MOV R4,#08H;要接收的數(shù)據(jù)長(zhǎng)度為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;一個(gè)脈沖結(jié)束,SDA上數(shù)據(jù)無效DJNZ R4,LOOP3;未讀完8位,轉(zhuǎn)到LOOP3RET;讀完返回8.多個(gè)字節(jié)數(shù)據(jù)發(fā)送子程序 在完成上述模擬子程序后,根據(jù)I2C總線協(xié)議,可編寫多個(gè)字節(jié)數(shù)據(jù)發(fā)送子程序。要發(fā)送的
26、字節(jié)數(shù)存放在R5中,要發(fā)送的數(shù)據(jù)塊的第一個(gè)數(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為第一個(gè)數(shù)據(jù)的首地址WLP2:MOV A, R0;讀一個(gè)字節(jié)數(shù)據(jù)LCALL WOBYT;發(fā)送LCALL TACK;檢查應(yīng)答位JB 30H,WLP1;無應(yīng)答位,重發(fā)INC R0;指向下一個(gè)要發(fā)送的數(shù)據(jù)DJNZ R5,WLP2;要發(fā)送數(shù)據(jù)未發(fā)完,再發(fā)送LCALL S
27、TOP;全部數(shù)據(jù)發(fā)完,停止RET;返回9.多個(gè)字節(jié)數(shù)據(jù)接收子程序 根據(jù)I2C總線協(xié)議,同樣可編寫多個(gè)字節(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 R0,#50H;50H為第一個(gè)數(shù)據(jù)的首地址RLP2:LCALL ROBYT;讀入一個(gè)字節(jié)MOV R0,ADJNZ R5,RLP3;要接收數(shù)據(jù)未讀完,再讀入LCAL
28、L YNACK;發(fā)送非應(yīng)答位LCALL STOP;全部數(shù)據(jù)發(fā)完,停止RET;返回RLP3:LCALL YACK;發(fā)送應(yīng)答位INC R0;指向下一個(gè)要存放數(shù)據(jù)的地址SJMP RLP2;調(diào)節(jié)NOP的個(gè)數(shù),使延時(shí)4.7u s【例2】 將AT89C2051片內(nèi)RAM40H47H單元中的八個(gè)8位數(shù)據(jù)通過I2C總線接口傳送到存儲(chǔ)器AT24C01的50H57H單元中。解:AT24C01是Atmel公司生產(chǎn)的具有I2C總線接口的E2PROM,是目前應(yīng)用較多的AT24C系列存儲(chǔ)器中的一種,芯片存儲(chǔ)容量為1Kb(1288位)。AT24C01引腳如下圖所示。其引腳定義如下: lSCL:串行時(shí)鐘端。lSDA:串行數(shù)據(jù)
29、端,漏極開路, 需接上拉電阻到VCC。lWP:寫保護(hù), 當(dāng)WP為高電平時(shí)存儲(chǔ)器只讀; 當(dāng)WP為低電平時(shí)存儲(chǔ)器可讀可寫。lA2A0:芯片地址。 1 2 3 4 5 6 7 8 A0 A1 VSS VCC A2 SCA SCL WP AT89C2051與AT24C01通過串行總線接口傳送數(shù)據(jù)的接線如下圖所示。因AT89C2051沒有I2C總線接口,可用軟件的辦法來模擬I2C總線操作。模擬I2C總線的時(shí)鐘線SCL,模擬I2C總線的數(shù)據(jù)線SDA。 A T89C2051 P1.0 P1.1 A T24C01 SCL SCA VCC 10k 2 AT89C2051與AT24C01的接口接線 AT24C01
30、的讀寫操作有多種形式,寫操作有兩種類型:字節(jié)寫和頁面寫;讀操作有三種類型:讀當(dāng)前地址內(nèi)容、讀隨機(jī)地址內(nèi)容和讀順序地址內(nèi)容。 AT24C01寫N個(gè)字節(jié)數(shù)據(jù)的操作時(shí)序如下圖所示, AT24C01讀N個(gè)字節(jié)數(shù)據(jù)的操作時(shí)序如下圖所示。 上圖中器件地址說明如下: 器件地址碼的第74位從器件地址位,用于確認(rèn)器件的類型。 AT24C01的器件地址碼為1010,1010 表示從器件為串行E2PROM。 器件地址碼的第31位18片的片選或存儲(chǔ)器內(nèi)的頁面地址選擇位。此三個(gè)控制位用于選片或者內(nèi)部頁面選擇。 如在存儲(chǔ)容量8Kb(10248位)的AT24C08內(nèi)部,存儲(chǔ)矩陣分為4個(gè)頁面,每一頁面有256個(gè)字節(jié)。通過器件
31、地址碼的第2位和第1位,可以選擇數(shù)據(jù)讀寫的頁面。 器件地址碼的第0位讀、寫(R/W)操作控制碼。若此位為1,下一字節(jié)進(jìn)行讀操作(R);此位為0,下一字節(jié)進(jìn)行寫操作(W)。 編程說明:lAT24C01每接收一個(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í)鐘脈沖。lAT24C01在讀寫操作時(shí),具有地址自動(dòng)加1功能,即讀、寫完某一地址空間后,會(huì)自動(dòng)指向下一個(gè)地址單元。l將AT89C2051片內(nèi)RAM40H47H單元中的八個(gè)8位數(shù)據(jù)通過I2C總線接口傳送到存儲(chǔ)器AT24C01的50H57H單元中,參考子程序如下。 l程序中用到的子
32、程序均為節(jié)所編寫的模擬I2C總線的子程序。 ICW:LCALL START;發(fā)送起始信號(hào)ICWLP1:MOV A,0A0H;#10100000B器件地址碼,LCALL WOBYT;發(fā)送器件地址LCALL TACK;檢查應(yīng)答位JB 30H,ICWLP1;無應(yīng)答位,重發(fā)ICWLP2:MOV A,50H;50H為待寫存儲(chǔ)單元首地址LCALL WOBYT;發(fā)送待寫存儲(chǔ)單元地址LCALL TACK;檢查應(yīng)答位JB 30H,ICWLP1;無應(yīng)答位,重發(fā)MOV R5,#8;待發(fā)送數(shù)據(jù)塊的長(zhǎng)度MOV R0,#40H;40H為第一個(gè)數(shù)據(jù)的首地址ICWLP3:MOV A, R0;讀一個(gè)字節(jié)數(shù)據(jù)LCALL WOBY
33、T;發(fā)送LCALL TACK;檢查應(yīng)答位JB 30H,ICWLP1;無應(yīng)答位,重發(fā)INC R0;指向下一個(gè)要發(fā)送的數(shù)據(jù)DJNZ R5,WLP2;要發(fā)送數(shù)據(jù)未發(fā)完,再發(fā)送LCALL STOP;全部數(shù)據(jù)發(fā)完,停止LCALL DELAY;延時(shí),等待AT24C01內(nèi)部寫操作RET;返回9.4.1 SPI總線的結(jié)構(gòu)原理 9.4.2 SPI總線的軟件模擬 9.4.3 SPI串行擴(kuò)展應(yīng)用實(shí)例 SPI總線系統(tǒng)是一種同步串行外設(shè)接口,允許MCU與各種外圍設(shè)備以同步串行方式進(jìn)行通信來交換信息。SPI總線接口一般使用4根線:串行時(shí)鐘線SCK、主機(jī)輸入/從機(jī)輸出數(shù)據(jù)線MISO、主機(jī)輸出/從機(jī)輸入數(shù)據(jù)線MOSI和低電平
34、有效的從機(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)如下圖所示。 SCK MOSI MISO MCU MISO MOSI SCK 器件 1 SS SCK MOSI MISO MISO MOSI SCK 器件 2 SS MISO MOSI SCK 器件 3 SS SPI總線接口電路結(jié)構(gòu) SPI模塊為了和外設(shè)進(jìn)行數(shù)據(jù)交換,根據(jù)外設(shè)工作要求,其輸出的串行同步時(shí)鐘極性和相位可以進(jìn)行配置。時(shí)鐘極性(CPOL)對(duì)傳輸協(xié)議沒有重大的影
35、響。l如果CPOL=0,串行同步時(shí)鐘的空閑狀態(tài)為低電平;l如果CPOL=1,串行同步時(shí)鐘的空閑狀態(tài)為高電平。時(shí)鐘相位(CPHA)能夠用于選擇兩種不同的傳輸協(xié)議進(jìn)行數(shù)據(jù)傳輸。l如果CPHA=0,在串行同步時(shí)鐘的第一個(gè)跳變沿(上升或下降)數(shù)據(jù)被采樣;l如果CPHA=1,在串行同步時(shí)鐘的第二個(gè)跳變沿(上升或下降)數(shù)據(jù)被采樣。SPI主模塊和與之通信的外設(shè)間時(shí)鐘相位和極性應(yīng)該一致。 特點(diǎn):由于SPI系統(tǒng)總線一共只需34位數(shù)據(jù)線和控制線即可實(shí)現(xiàn)與具有SPI總線接口功能的各種I/O器件進(jìn)行連接,而擴(kuò)展并行總線則需要8根數(shù)據(jù)線、816位地址線、23位控制線,因此,采用SPI總線接口可以簡(jiǎn)化電路設(shè)計(jì),節(jié)省很多常
36、規(guī)電路中的接口器件和I/O口線,提高設(shè)計(jì)的可靠性。應(yīng)用:在MCS51系列等不具有SPI接口的單片機(jī)組成的智能儀器和工業(yè)測(cè)控系統(tǒng)中,當(dāng)傳輸速度要求不是太高時(shí),使用SPI總線可以增加應(yīng)用系統(tǒng)接口器件的種類,提高應(yīng)用系統(tǒng)的性能。 對(duì)于沒有提供SPI接口的單片機(jī)而言,通??墒褂密浖霓k法來模擬SPI的總線操作,包括串行時(shí)鐘、數(shù)據(jù)輸入和輸出。Atmel公司生產(chǎn)的EEPROM具有SPI接口,存儲(chǔ)容量為4Kb的AT25040就有SPI接口,MCS51系列單片機(jī)與AT25010的SPI總線接口接線如下圖所示。 圖中,模擬SPI的數(shù)據(jù)輸出端(MOSI),模擬SPI的SCK輸出端,模擬SPI的從機(jī)選擇端(SS),
37、模擬SPI的數(shù)據(jù)輸入端(MISO)。下面給出模擬SPI串行輸入、串行輸出和串行輸入/輸出的3個(gè)子程序。 8051 P1.0 P1.1 P1.2 P1.3 AT25010 SI SCK CS SO 1. MCU串行輸入子程序SPIIN 從AT25040的SO端接收8位數(shù)據(jù)并放入寄存器R0中。參考程序如下: SPIIN:SETB P1.1 ;使P1.1(時(shí)鐘)輸出為1 CLR P1.2 ;選擇從機(jī) MOV R1,#08H ;置循環(huán)次數(shù) SPIIN1:CLR P1.1 ;使P1.1(時(shí)鐘)輸出為0 NOP ;延時(shí) NOP MOV C,P1.3 ;從機(jī)輸出送進(jìn)位C RLC A ;左移至累加器A SET
38、B P1.1 ;使P1.0(時(shí)鐘)輸出為1 DJNZ R1,SPIIN1 ;判斷是否循環(huán)8次 (8位數(shù)據(jù)) MOV R0,A ;8位數(shù)據(jù)送R0 RET2. MCU串行輸出子程序SPIOUT 將MCS51單片機(jī)中R0寄存器的內(nèi)容傳送到AT25040的SI端。參考程序如下: SPIOUT:SETB P1.1 ;使P1.1(時(shí)鐘)輸出為1 CLR P1.2 ;選擇從機(jī) MOV R1,#08H ;置循環(huán)次數(shù) MOV A,R0 ;8位數(shù)據(jù)送累加器ASPIOUT1:CLR P1.1 ;使P1.1(時(shí)鐘)輸出為0 NOP ;延時(shí) NOP RLC A ;左移至累加器A最高位至C MOV P1.0,C ;進(jìn)位C
39、送從機(jī)輸入 SETB P1.1 ;使P1.1(時(shí)鐘)輸出為1 DJNZ R1,SPIOUT1 ;判是否循環(huán)8次(8位數(shù)據(jù)) RET3. MCU串行輸入/輸出子程序SPIIO 將MCS51單片機(jī)R0寄存器的內(nèi)容傳送到AT25040的SI端,同時(shí)從AT25040的SO端接收8位數(shù)據(jù)。參考程序如下: SPIIO:SETB P1.1 ;使P1.1(時(shí)鐘)輸出為1 CLR P1.2 ;選擇從機(jī) MOV R1,#08H ;置循環(huán)次數(shù) MOV A,R0 ;8位數(shù)據(jù)送累加器A SPIIO1:CLR P1.1 ;使P1.1(時(shí)鐘)輸出為0 NOP ;延時(shí) NOP MOV C,P1.3 ;從機(jī)輸出送進(jìn)位C RLC
40、 A ;左移至累加器A最高位至C MOV P1.0,C ;進(jìn)位C送從機(jī)輸入 SETB P1.1 ;使P1.1(時(shí)鐘)輸出為1 DJNZ R1,SPIIO1 ;判斷是否循環(huán)8次(8位數(shù)據(jù)) RET這些子程序適用于在串行時(shí)鐘的上升沿輸入和下降沿輸出的各種串行外圍接口芯片(如D/A和A/D轉(zhuǎn)換芯片、實(shí)時(shí)時(shí)鐘芯片、LED顯示驅(qū)動(dòng)芯片等)。對(duì)于下降沿輸入、上升沿輸出的各種串行外圍接口芯片,只要改變的輸出電平順序,這些子程序也同樣適用。如先置為低電平,之后再次置為高電平,再置為低電平等等。 【例3】 將AT89C2051片內(nèi)RAM30H、31H單元中的16位數(shù)據(jù)通過SPI總線接口傳送到數(shù)/模轉(zhuǎn)換器TLC5
41、615。解:TLC5615是3線串行總線接口10位電壓輸出數(shù)/模轉(zhuǎn)換器,它既可與單片機(jī)的SPI總線接口相連接,又可與單片機(jī)的Microwire總線接口相連接。TLC5615內(nèi)部結(jié)構(gòu)如下圖所示。 TLC5615內(nèi)部結(jié)構(gòu) lTLC5615通過固定增益為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=2REFCODE/1024 其中,CMOD是通過串行總線接口輸入的待轉(zhuǎn)換的數(shù)據(jù);REF是基準(zhǔn)電壓。lTLC5615最大的串行時(shí)鐘速率不超過14MHz,10位DAC的建立時(shí)間為,通常更新速率限制至80kHz以內(nèi)。lTLC5615的16位移位寄存
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 初中物理教學(xué)反思大全
- 湖北省“黃鄂鄂”2025年高三下學(xué)期4月聯(lián)考試題 物理 含解析
- 電力電纜工崗位技能測(cè)試題
- 江蘇省南京十校下學(xué)期2025年高考考前模擬英語試題含解析
- 電工中級(jí)模擬習(xí)題+參考答案
- 工業(yè)分析檢驗(yàn)試題庫(附答案)
- 職業(yè)技術(shù)學(xué)院2024級(jí)動(dòng)漫制作技術(shù)專業(yè)人才培養(yǎng)方案
- 2025屆青海省海東市高三下學(xué)期三模歷史試題(原卷版+解析版)
- 河南省信陽市羅山縣2024-2025學(xué)年高二下學(xué)期4月期中地理試題(原卷版+解析版)
- 航空物流中的航空貨運(yùn)定價(jià)策略考核試卷
- 2025屆河北省“五個(gè)一”名校聯(lián)盟高三下學(xué)期4月聯(lián)考地理試題(含答案)
- 江蘇省常州第一中學(xué)2025屆高三下學(xué)期聯(lián)合考試語文試題含解析
- 機(jī)動(dòng)車安全知識(shí)培訓(xùn)課件
- 山東開放大學(xué)招聘筆試真題2024
- 高三下學(xué)期《積極調(diào)整成為高考黑馬!》主題班會(huì)課件
- 委托代簽工程合同協(xié)議
- 2025年河北省唐山市中考一模歷史試題(原卷版+解析版)
- 兒童支氣管哮喘診斷與防治指南(2025)解讀
- 2024年中國食品級(jí)雙氧水行業(yè)調(diào)查報(bào)告
- 中國低空經(jīng)濟(jì)城市發(fā)展指數(shù)(LCDI) 2025(發(fā)布版)
- 2025中考數(shù)學(xué)二輪復(fù)習(xí)-二次函數(shù)與三角形面積【課件】
評(píng)論
0/150
提交評(píng)論