![第8章單片機(jī)小系統(tǒng)及片外擴(kuò)展_第1頁(yè)](http://file4.renrendoc.com/view/6bf8fd81aeb29db6634515ca1ef08db2/6bf8fd81aeb29db6634515ca1ef08db21.gif)
![第8章單片機(jī)小系統(tǒng)及片外擴(kuò)展_第2頁(yè)](http://file4.renrendoc.com/view/6bf8fd81aeb29db6634515ca1ef08db2/6bf8fd81aeb29db6634515ca1ef08db22.gif)
![第8章單片機(jī)小系統(tǒng)及片外擴(kuò)展_第3頁(yè)](http://file4.renrendoc.com/view/6bf8fd81aeb29db6634515ca1ef08db2/6bf8fd81aeb29db6634515ca1ef08db23.gif)
![第8章單片機(jī)小系統(tǒng)及片外擴(kuò)展_第4頁(yè)](http://file4.renrendoc.com/view/6bf8fd81aeb29db6634515ca1ef08db2/6bf8fd81aeb29db6634515ca1ef08db24.gif)
![第8章單片機(jī)小系統(tǒng)及片外擴(kuò)展_第5頁(yè)](http://file4.renrendoc.com/view/6bf8fd81aeb29db6634515ca1ef08db2/6bf8fd81aeb29db6634515ca1ef08db25.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
航空自動(dòng)化學(xué)院陳維興單片機(jī)原理及應(yīng)用1/14/20231第8章單片機(jī)小系統(tǒng)及片外擴(kuò)展89C51單片機(jī)芯片內(nèi)集成了計(jì)算機(jī)的基本功能部件,已具備了很強(qiáng)的功能。一塊芯片就是一個(gè)完整的最小微機(jī)系統(tǒng),但片內(nèi)存儲(chǔ)器的容量、并行I/O端口、定時(shí)器等內(nèi)部資源都還是有限的。根據(jù)實(shí)際需要,89C51單片機(jī)可以很方便地進(jìn)行功能擴(kuò)展。擴(kuò)展應(yīng)盡量采用串行擴(kuò)展方案。通過(guò)SPI或I2C總線擴(kuò)展E2PROM、A/D、D/A、顯示器、看門(mén)狗、時(shí)鐘等芯片,占用MCU的I/O口線少,編程也方便。1/14/202328.1串行擴(kuò)展總線接口技術(shù)89C51除芯片自身具有UART可用于串行擴(kuò)展I/O口線以外,還可利用89C51的3~4根I/O口線進(jìn)行SPI或I2C的外設(shè)芯片擴(kuò)展,以及單總線的擴(kuò)展。1/14/202338.1.1SPI串行外設(shè)接口總線SPI(SerialPeripheralInterface——串行外設(shè)接口)總線是Motorola公司推出的一種同步串行外設(shè)接口,它用于MCU與各種外圍設(shè)備以串行方式進(jìn)行通信(8位數(shù)據(jù)同時(shí)同步地被發(fā)送和接收),系統(tǒng)可配置為主或從操作模式。外圍設(shè)備包括簡(jiǎn)單的TTL移位寄存器(用作并行輸入或輸出口)至復(fù)雜的LCD顯示驅(qū)動(dòng)器或A/D轉(zhuǎn)換器等。1/14/20234SPI系統(tǒng)可直接與各個(gè)廠家生產(chǎn)的多種標(biāo)準(zhǔn)外圍器件直接接口,它只需4條線:串行時(shí)鐘線(SCK)、主機(jī)輸入/從機(jī)輸出數(shù)據(jù)線MISO、主機(jī)輸出/從機(jī)輸入數(shù)據(jù)線MOSI和低電平有效的從機(jī)選擇線CS(SS)。在SPI接口中,數(shù)據(jù)的傳輸只需要1個(gè)時(shí)鐘信號(hào)和2條數(shù)據(jù)線。1/14/20235由于SPI系統(tǒng)總線只需3~4位數(shù)據(jù)線和控制線即可擴(kuò)展具有SPI的各種I/O器件,而并行總線擴(kuò)展方法需8根數(shù)據(jù)線、8~16位地址線、2~3位控制線,因而SPI總線的使用可以簡(jiǎn)化電路設(shè)計(jì),省掉了很多常規(guī)電路中的接口器件,提高了設(shè)計(jì)的可靠性。1/14/202361.SPI總線系統(tǒng)的組成圖8-1是SPI總線系統(tǒng)典型結(jié)構(gòu)示意圖。圖8-1SPI外圍擴(kuò)展示意圖1/14/20237單片機(jī)與外圍擴(kuò)展器件在時(shí)鐘線SCK、數(shù)據(jù)線MOSI和MISO上都是同名端相連。帶SPI接口的外圍器件都有片選端CS。在擴(kuò)展多個(gè)SPI外圍器件(如圖8-1所示)時(shí),單片機(jī)應(yīng)分別通過(guò)I/O口線來(lái)分時(shí)選通外圍器件。當(dāng)SPI接口上有多個(gè)SPI接口的單片機(jī)時(shí),應(yīng)區(qū)別其主從地位,在某一時(shí)刻只能由一個(gè)單片機(jī)為主器件。圖8-1中MCU(主)為主器件,MCU(從)為從器件。1/14/20238SPI有較高的數(shù)據(jù)傳送速度,主機(jī)方式最高速率可達(dá)1.05Mb/s,目前不少外圍器件都帶有SPI接口。在大多數(shù)應(yīng)用場(chǎng)合中,使用1個(gè)MCU作為主機(jī),控制數(shù)據(jù)向1個(gè)或多個(gè)從外圍器件的傳送。從器件只能在主機(jī)發(fā)命令時(shí),才能接收或向主機(jī)傳送數(shù)據(jù)。其數(shù)據(jù)的傳輸格式是高位(MSB)在前,低位(LSB)在后。1/14/20239當(dāng)SPI工作時(shí),在移位寄存器中的數(shù)據(jù)逐位從輸出引腳(MOSI)輸出(高位在前),同時(shí)從輸入引腳(MISO)接收的數(shù)據(jù)逐位移到移位寄存器(高位在前)。發(fā)送一字節(jié)后,從另一個(gè)外圍器件接收的字節(jié)數(shù)據(jù)進(jìn)入移位寄存器中。主SPI的時(shí)鐘信號(hào)(SCK)使傳輸同步。1/14/202310SPI總線有以下主要特性:全雙工、3線同步傳輸;主機(jī)或從機(jī)工作;提供頻率可編程時(shí)鐘;發(fā)送結(jié)束中斷標(biāo)志;寫(xiě)沖突保護(hù);總線競(jìng)爭(zhēng)保護(hù)等。其典型時(shí)序圖如圖8-2所示。圖8-2SPI串行總線典型時(shí)序圖1/14/2023112.89C51單片機(jī)串行擴(kuò)展SPI外設(shè)接口的方法1)用一般I/O口線模擬SPI操作對(duì)于沒(méi)有SPI接口的89C51來(lái)說(shuō),可使用軟件來(lái)模擬SPI的操作,包括串行時(shí)鐘、數(shù)據(jù)輸入和輸出。對(duì)于不同的串行接口外圍芯片,它們的時(shí)鐘時(shí)序是不同的。對(duì)于在SCK的上升沿輸入(接收)數(shù)據(jù)和在下降沿輸出(發(fā)送)數(shù)據(jù)的器件,一般應(yīng)取圖8-3中的串行時(shí)鐘輸出P1.1的初始狀態(tài)為1;在允許接口芯片后,置P1.1為0。1/14/202312因此,MCU輸出1位SCK時(shí)鐘,同時(shí),使接口芯片串行左移,從而輸出1位數(shù)據(jù)至89C51的P1.3(模擬MCU的MISO線);再置P1.1為1,使89C51從P1.0輸出1位數(shù)據(jù)(先為高位)至串行接口芯片。至此,模擬1位數(shù)據(jù)輸入/輸出完成。以后再置P1.1為0,模擬下一位的輸入/輸出……依次循環(huán)8次,可完成1次通過(guò)SPI傳輸1字節(jié)的操作。對(duì)于在SCK的下降沿輸入數(shù)據(jù)和上升沿輸出數(shù)據(jù)的器件,則應(yīng)取串行時(shí)鐘輸出的初始狀態(tài)為0,在接口芯片允許時(shí),先置P1.1為1,此時(shí),外圍接口芯片輸出1位數(shù)據(jù)(MCU接收1位數(shù)據(jù));再置時(shí)鐘為0,外圍接口芯片接收1位數(shù)據(jù)(MCU發(fā)送1位數(shù)據(jù)),可完成1位數(shù)據(jù)的傳送。1/14/202313圖8-3為89C51(MCU)與MCM2814(E2PROM)的硬件連接圖。圖8-3SPI總線接口原理圖1/14/202314圖8-3中,P1.0模擬MCU的數(shù)據(jù)輸出端(MOSI),P1.1模擬SPI的SCK輸出端,P1.2模擬SPI的從機(jī)選擇端,P1.3模擬SPI的數(shù)據(jù)輸入端(MISO)。下面介紹用89C51匯編語(yǔ)言模擬SPI串行輸入、串行輸出和串行輸入/輸出3個(gè)子程序。這些子程序也適用于在串行時(shí)鐘的上升沿輸入和下降沿輸出的各種串行外圍接口芯片,如8位或10位A/D芯片,74LS系列輸出芯片等。對(duì)于下降沿輸入、上升沿輸出的各種串行外圍接口芯片,只須改變P1.1的輸出順序,即輸出0,再輸入1;再輸出0……則這些子程序也同樣適用。1/14/202315(1)MCU串行輸入子程序SPIIN從MCM2814的SPISO線上接收1字節(jié)數(shù)據(jù)并放入寄存器R0中。SPIIN: SETB P1.1;使P1.1(時(shí)鐘)輸出為1 CLR P1.2;選擇從機(jī) MOV R1,#08H;置循環(huán)次數(shù)SPIN1: CLR P1.1;使P1.1(時(shí)鐘)輸出為0 NOP;延時(shí) NOP MOV C,P1.3;從機(jī)輸出SPISO送進(jìn)位C RLC A;左移至累加器ACC SETB P1.0;使P1.0(時(shí)鐘)輸出為1 DJNZ R1,SPIN1;判斷是否循環(huán)8次(1字節(jié)數(shù)據(jù)) MOV R0,A;1字節(jié)數(shù)據(jù)送R0 RET;返回1/14/202316(2)MCU串行輸出子程序SPIOUT將89C51中R0寄存器的內(nèi)容傳送到MCM2814的SPISI線上。SPIOUN: SETB P1.1;使P1.1(時(shí)鐘)輸出為1 CLR P1.2;選擇從機(jī) MOV R1,#08H;置循環(huán)次數(shù) MOV A,R0;1字節(jié)數(shù)據(jù)送累加器ACCSPIOT1: CLR P1.1;使P1.1(時(shí)鐘)輸出為0 NOP;延時(shí) NOP RLC A;左移至累加器ACC最高位至C MOV P1.0,C;進(jìn)位C送從機(jī)輸入SPISI線上 SETB P1.1;使P1.1(時(shí)鐘)輸出為1 DJNZ R1,SPIOT1;判斷是否循環(huán)8次(1字節(jié)數(shù)據(jù)) RET;返回1/14/202317(3)MCU串行輸入/輸出子程序SPIIO將89C51中R0寄存器的內(nèi)容傳送到MCM2814的SPISI中,同時(shí)從MCM2814的SPISO接收1字節(jié)數(shù)據(jù)存入R0中。SPIIO: SETB P1.1;使P1.1(時(shí)鐘)輸出為1 CLR P1,2;選擇從機(jī) MOV R1,#08H;置循環(huán)次數(shù) MOV A,R0;1字節(jié)數(shù)據(jù)送累加器ACCSPIO1: CLR P1.1;使P1.1(時(shí)鐘)輸出為0 NOP;延時(shí) NOP MOV C,P1.3;從機(jī)輸出SPISO送進(jìn)位C RLC A;左移至累加器ACC最高位至C MOV P1.0,C;進(jìn)位C送從機(jī)輸入 SETB P1.1;使P1.1(時(shí)鐘)輸出為1 DJNZ R1,SPIO1;判斷是否循環(huán)8次(1字節(jié)數(shù)據(jù)) MOV R0,A RET;返回1/14/2023182)利用89C51串行口實(shí)現(xiàn)SPI操作單片機(jī)應(yīng)用系統(tǒng)中,最常用的功能無(wú)非是開(kāi)關(guān)量I/O、A/D、D/A、時(shí)鐘、顯示及打印功能等等。下面分析利用單片機(jī)串口與多個(gè)串行I/O接口芯片進(jìn)行接口的可行性。1/14/202319(1)串行時(shí)鐘芯片在有些需要絕對(duì)時(shí)間的場(chǎng)合,例如打印記錄、電話計(jì)費(fèi)、監(jiān)控系統(tǒng)中的運(yùn)行及故障時(shí)間統(tǒng)計(jì)等,都需要以年、月、日、時(shí)、分、秒等表示的絕對(duì)時(shí)間。雖然單片機(jī)內(nèi)部的定時(shí)器可以通過(guò)軟件進(jìn)位計(jì)數(shù)產(chǎn)生絕對(duì)時(shí)鐘,但由于掉電之后數(shù)據(jù)丟失,修改麻煩等原因,這樣產(chǎn)生的絕對(duì)時(shí)鐘總使設(shè)計(jì)者感到不滿意。因此我們提倡對(duì)絕對(duì)時(shí)鐘要求較高的場(chǎng)合使用外部時(shí)鐘芯片,串行時(shí)鐘芯片HT1380就是一個(gè)典型的器件。1/14/202320HT1380是一個(gè)8腳的日歷時(shí)鐘芯片,它可以通過(guò)串行口與單片機(jī)交換信息,如圖8-4所示。在該芯片中,X1、X2接晶振,SCLK作為時(shí)鐘輸入端,I/O端為串行數(shù)據(jù)輸入、輸出端口,RST是復(fù)位引腳。由于該芯片只有當(dāng)RST為高時(shí)才能對(duì)時(shí)鐘芯片進(jìn)行讀/寫(xiě)操作,因此可以利用單片機(jī)的I/O口線對(duì)它進(jìn)行控制(類(lèi)似于芯片選擇信號(hào))。當(dāng)RST為低時(shí),I/O引腳對(duì)外是高阻狀態(tài),因此它允許多個(gè)串行芯片同時(shí)掛靠在串行端口上。CPU對(duì)它的輸入/輸出操作可以按串行的方式0(即擴(kuò)展I/O方式)進(jìn)行。1/14/202321圖8-4HT1380與單片機(jī)接口電路1/14/202322(2)串行LED顯示接口MAX7219該芯片可驅(qū)動(dòng)8個(gè)LED顯示器,這在智能儀表中已經(jīng)足夠了。89C51單片機(jī)與它的接口如圖8-5所示。同樣,單片機(jī)可以通過(guò)串行口以方式0與MAX7219交換信息,TXD作為移位時(shí)鐘、RXD作為串行數(shù)據(jù)I/O端、Load為芯片選擇端。當(dāng)Load位于低電平時(shí),對(duì)它進(jìn)行讀/寫(xiě)操作;當(dāng)Load為高電平時(shí),DIN處于高阻狀態(tài)。它同樣允許多個(gè)串行接口芯片共同使用89C51的串行口。1/14/202323圖8-5MAX7219與單片機(jī)接口電路1/14/202324(3)串行模擬量輸入芯片MAX1458MAX1458是一個(gè)可對(duì)差分輸入信號(hào)(如電橋)進(jìn)行程控放大(放大倍數(shù)可以由軟件設(shè)定),并進(jìn)行12位A/D轉(zhuǎn)換的芯片。它將放大與轉(zhuǎn)換電路集成在一個(gè)芯片上,圖8-6給出了它與單片機(jī)的串行接口電路。圖8-6串行A/D芯片與單片機(jī)接口電路1/14/202325它既可把轉(zhuǎn)換好的數(shù)據(jù)通過(guò)串口送到CPU,同時(shí)也可將轉(zhuǎn)換前的模擬信號(hào)輸出到顯示儀表。當(dāng)CS為高電平時(shí),可對(duì)MAX1458進(jìn)行讀/寫(xiě),單片機(jī)對(duì)它的讀/寫(xiě)也是以串口方式0進(jìn)行的;當(dāng)CS為低電平時(shí),DIO對(duì)外處于高阻狀態(tài)。1/14/202326(4)串行接口芯片的一般接口規(guī)律除上面3種芯片之外,單片機(jī)還可以通過(guò)串行接口芯片與E2PROM、D/A轉(zhuǎn)換芯片等連接。它們與CPU的串行接口方式與以上幾種芯片類(lèi)似,即:都需要通過(guò)單片機(jī)的開(kāi)關(guān)量I/O口線進(jìn)行芯片選擇;當(dāng)芯片未選中時(shí),數(shù)據(jù)端口均處于高阻狀態(tài);與單片機(jī)交換信息時(shí)均要求單片機(jī)串行口以方式0進(jìn)行;傳輸數(shù)據(jù)時(shí)的幀格式均要求先傳送命令/地址,再傳送數(shù)據(jù);大都具有圖8-7所示的時(shí)序波形。1/14/202327圖8-7串行接口信號(hào)的一般時(shí)序圖1/14/202328(5)擴(kuò)展多個(gè)串行接口芯片的典型控制器的結(jié)構(gòu)在圖8-8所示的控制器電路中,數(shù)據(jù)采集均由串行接口芯片完成。由于無(wú)總線擴(kuò)展,單片機(jī)節(jié)余出來(lái)的其他資源可以作為打印機(jī)輸出控制、功能鍵、中斷邏輯等電路。在擴(kuò)展了系統(tǒng)功能的同時(shí),極大地利用了系統(tǒng)資源,且使接口簡(jiǎn)單,控制器體積減小,可靠性提高。系統(tǒng)的軟件設(shè)計(jì)與常規(guī)的單片機(jī)擴(kuò)展系統(tǒng)類(lèi)似,只是在芯片選擇方面不是通過(guò)地址線完成,而是通過(guò)I/O口線來(lái)實(shí)現(xiàn)。1/14/202329圖8-8基于串行接口控制器的電路結(jié)構(gòu)圖1/14/2023308.1.2I2C總線I2C總線是PHILIPS公司推出的串行總線。I2C總線的應(yīng)用非常廣泛,在很多器件上都配備有I2C總線接口,使用這些器件時(shí)一般都需要通過(guò)I2C總線進(jìn)行控制。這里簡(jiǎn)要介紹I2C總線的工作原理,介紹如何用51單片機(jī)進(jìn)行控制以及相應(yīng)的匯編語(yǔ)言控制程序的編寫(xiě)。I2C1/14/2023311I2C總線的概念I(lǐng)2C總線是一種具有自動(dòng)尋址、高低速設(shè)備同步和仲裁等功能的高性能串行總線,能夠?qū)崿F(xiàn)完善的全雙工數(shù)據(jù)傳輸,是各種總線中使用信號(hào)線數(shù)量最少的。I2C總線只有兩根信號(hào)線:數(shù)據(jù)線SDA和時(shí)鐘線SCL。1/14/202332所有進(jìn)入I2C總線系統(tǒng)中的設(shè)備都帶有I2C總線接口,符合I2C總線電氣規(guī)范的特性,只需將I2C總線上所有節(jié)點(diǎn)的串行數(shù)據(jù)線SDA和時(shí)鐘線SCL分別與總線的SDA和SCL相連即可。各節(jié)點(diǎn)供電可以不同,但需共地,另外SDA和SCL需分別接上拉電阻。1/14/202333當(dāng)執(zhí)行數(shù)據(jù)傳送時(shí),啟動(dòng)數(shù)據(jù)發(fā)送并產(chǎn)生時(shí)鐘信號(hào)的器件稱為主器件;被尋址的任何器件都可看作從器件;發(fā)送數(shù)據(jù)到總線上的器件稱為發(fā)送器;從總線上接收數(shù)據(jù)的器件稱為接收器。I2C總線是多主機(jī)總線,可以有兩個(gè)或更多的能夠控制總線的器件與總線連接;同時(shí)I2C總線還具有仲裁功能,當(dāng)一個(gè)以上的主器件同時(shí)試圖控制總線時(shí),只允許一個(gè)有效,從而保證數(shù)據(jù)不被破壞。1/14/202334I2C總線的尋址采用純軟件的尋址方法,無(wú)需片選線的連接,這樣就簡(jiǎn)少了總線數(shù)量。主機(jī)在發(fā)送完啟動(dòng)信號(hào)后,立即發(fā)送尋址字節(jié)來(lái)尋址被控器件,并規(guī)定數(shù)據(jù)傳送方向。尋址字節(jié)由7位從機(jī)地址(D7~D1)和1位方向位(D0,0/1,讀/寫(xiě))組成。當(dāng)主機(jī)發(fā)送尋址字節(jié)時(shí),總線上所有器件都將該尋址字節(jié)中的高7位地址與自己器件的地址比較,若兩者相同,則該器件認(rèn)為被主機(jī)尋址,并根據(jù)讀/寫(xiě)位確定是從發(fā)送器還是從接收器。1/14/202335I2C總線具有多重主控能力,這就意味著可以允許多個(gè)作為主控器的電路模塊(具有I2C總線接口的單片機(jī))去搶占總線。因此掛接在I2C總線上的集成電路模塊的發(fā)送器/接收器可以根據(jù)不同的工作狀態(tài)分為主控發(fā)送器、主控接收器、被控發(fā)送器和被控接收器。顯然,具有I2C總線接口的單片機(jī)可以工作在上述4種工作狀態(tài)中的任一狀態(tài),而一些帶有I2C總線接口的存儲(chǔ)器(RAM或E2PROM)模塊只能充當(dāng)被控發(fā)送器或被控接收器。1/14/202336圖8-9示出了帶有兩個(gè)單片機(jī)和其他一些外圍電路模塊接入I2C總線的一個(gè)實(shí)例。圖8-9I2C總線典型系統(tǒng)示意圖1/14/202337在圖8-9中,假設(shè)單片機(jī)A要向單片機(jī)B發(fā)送信息,單片機(jī)A首先作為主控器在I2C總線上發(fā)送起始信號(hào)和時(shí)鐘,尋址作為被控器的單片機(jī)B,并確立信息傳送方向。接著,單片機(jī)A作為主控發(fā)送器便可通過(guò)SDA線向被控接收器(單片機(jī)B)發(fā)送信息,并在信息發(fā)送完畢后發(fā)送終止信號(hào),以結(jié)束信息的傳送過(guò)程。1/14/202338假設(shè)單片機(jī)A要從單片機(jī)B讀取信息,單片機(jī)A同樣作為主控器在I2C總線上發(fā)送起始信號(hào)和時(shí)鐘,尋址作為被控器的單片機(jī)B,并確立信息傳送方向。此時(shí),單片機(jī)A作為主控接收器接收單片機(jī)B發(fā)送的信息,一旦作為主控接收器的單片機(jī)A接收完單片機(jī)B發(fā)來(lái)的信息后就發(fā)出終止信號(hào),以結(jié)束整個(gè)信息的讀取過(guò)程。1/14/202339上述分析表明:不論作為主控器的單片機(jī)A向作為被控器的單片機(jī)B是發(fā)送信息還是讀取信息,被傳信息的起始和終止信號(hào)以及時(shí)鐘信號(hào)都是由作為主控器的單片機(jī)A發(fā)送的。1/14/2023402I2C總線的應(yīng)用I2C總線為同步串行數(shù)據(jù)傳輸總線,用于單片機(jī)的外圍擴(kuò)展。其總線傳輸速率為100kb/s(改進(jìn)后的規(guī)范為400kb/s),總線驅(qū)動(dòng)能力為400pF。圖8-10為I2C總線外圍擴(kuò)展示意圖。1/14/202341圖8-10I2C總線外圍擴(kuò)展示意圖1/14/202342圖中只表示出單片機(jī)應(yīng)用系統(tǒng)中常用的I2C總線外圍通用器件、外圍設(shè)備模塊、接口以及其他單片機(jī)節(jié)點(diǎn)。最常使用的通用外圍器件有SRAM、E2PROM、ADC/DAC、RTC、I/O口和DTMF等。1/14/202343外圍設(shè)備模塊有LED驅(qū)動(dòng)控制器構(gòu)成的LED顯示器,各種LCD驅(qū)動(dòng)控制器構(gòu)成的段式、圖形點(diǎn)陣、字符點(diǎn)陣液晶顯示器等。通過(guò)I2C總線通用I/O口器件可構(gòu)成許多通用接口如鍵盤(pán)、碼盤(pán)、打印機(jī)接口和LCD接口等。1/14/202344I2C總線有利于系統(tǒng)設(shè)計(jì)的模塊化和標(biāo)準(zhǔn)化,省去了電路板上的大量連線,提高了可靠性,降低了成本。在多種串行總線中,I2C總線只用兩條線,不需要片選線,支持帶電插拔,并有眾多的外圍接口芯片,可以作為優(yōu)先選擇。1/14/202345I2C總線上支持多主和主從兩種工作方式。在多主方式中,通過(guò)硬件和軟件的仲裁主控制器取得總線控制權(quán)。而在多數(shù)情況下,系統(tǒng)中只有一個(gè)主器件,即單主節(jié)點(diǎn),總線上的其他器件都是具有I2C總線的外圍從器件,這時(shí)的I2C總線就工作在主從工作方式。1/14/202346在主從方式中,從器件的地址包括器件編號(hào)地址和引腳地址,器件編寫(xiě)地址由I2C總線委員會(huì)分配,引腳地址決定于引腳外接電平的高低。當(dāng)器件內(nèi)部有連續(xù)的子地址空間時(shí),對(duì)這些空間進(jìn)行N個(gè)字節(jié)的連續(xù)讀/寫(xiě),子地址會(huì)自動(dòng)加1。在主從方式的I2C總線系統(tǒng)中,只須考慮主方式的I2C總線操作。1/14/2023473.I2C總線基本知識(shí)1)I2C總線的接口電路結(jié)構(gòu)I2C總線由一根數(shù)據(jù)線SDA和一根時(shí)鐘線SCL構(gòu)成。I2C總線中一個(gè)節(jié)點(diǎn)的每個(gè)電路器件都可視為有如圖8-11虛框所示的一個(gè)I2C總線接口電路,用于與I2C總線的SDA和SCL線掛接。數(shù)據(jù)線SDA和時(shí)鐘線SCL都是雙向傳輸線,平時(shí)均處于高電平備用狀態(tài),只有當(dāng)需要關(guān)閉I2C總線時(shí),SCL線才會(huì)箝位在低電平。1/14/202348圖8-11I2C總線的器件連接1/14/2023492)I2C總線信號(hào)定義在I2C總線上,SDA用于傳送有效數(shù)據(jù),其上傳輸?shù)拿课挥行?shù)據(jù)均對(duì)應(yīng)于SCL線上的一個(gè)時(shí)鐘脈沖。也就是說(shuō),只有當(dāng)SCL線上為高電平(SCL=1)時(shí),SDA線上的數(shù)據(jù)信號(hào)才會(huì)有效(高電平表示1,低電平表示0);SCL線為低電平(SCL=0)時(shí),SDA線上的數(shù)據(jù)信號(hào)無(wú)效。因此,只有當(dāng)SCL線為低電平(SCL=0)時(shí),SDA線上的電平狀態(tài)才允許發(fā)生變化(見(jiàn)圖8-12)。1/14/202350圖8-12I2C總線信號(hào)的時(shí)序1/14/202351SDA線上傳送的數(shù)據(jù)均以起始信號(hào)(START)開(kāi)始,停止信號(hào)(STOP)結(jié)束,SCL線在不傳送數(shù)據(jù)時(shí)保持Mark(SCL=1)。當(dāng)串行時(shí)鐘線SCL為Mark(SCL=1)時(shí),串行數(shù)據(jù)線SDA上發(fā)生一個(gè)由高到低的變化過(guò)程(下降沿),即為起始信號(hào);發(fā)生一個(gè)由低到高的變化過(guò)程,即稱為停止信號(hào)。1/14/202352起始信號(hào)和停止信號(hào)均由作為主控器的單片機(jī)發(fā)出,并由掛接在I2C總線上的被控器檢測(cè)。對(duì)于不具備I2C總線接口的單片機(jī),為了能準(zhǔn)確檢測(cè)到這些信號(hào),必須保證在總線的一個(gè)時(shí)鐘周期內(nèi)對(duì)SAD線進(jìn)行至少兩次采樣。1/14/2023534.I2C總線的數(shù)據(jù)傳送在I2C總線上每傳輸一位數(shù)據(jù)都有一個(gè)時(shí)鐘脈沖相對(duì)應(yīng)。注意這里的時(shí)鐘脈沖不像一般的時(shí)鐘那樣必須是周期性的,它的時(shí)鐘間隔可以不同。總線備用時(shí)(即處于“非忙”狀態(tài)),SDA和SCL都必須保持高電平狀態(tài),關(guān)閉I2C總線時(shí)才使SCL箝位在低電平。只有當(dāng)總線處于“非忙”狀態(tài)時(shí),數(shù)據(jù)傳輸才能被初始化。在數(shù)據(jù)傳輸期間,只要時(shí)鐘線為高電平,數(shù)據(jù)線就必須保持穩(wěn)定。只有在時(shí)鐘線為低電平時(shí),才允許數(shù)據(jù)線上的電平狀態(tài)變化。在時(shí)鐘線保持高電平期間,數(shù)據(jù)線出現(xiàn)下降沿為啟動(dòng)信號(hào)、上升沿為停止信號(hào),啟動(dòng)和停止信號(hào)都由主機(jī)產(chǎn)生,總線上帶有I2C總線接口的器件很容易檢測(cè)到這些信號(hào)。1/14/202354I2C總線上傳輸?shù)臄?shù)據(jù)和地址字節(jié)均為8位,且高位在前,低位在后。I2C總線以起始信號(hào)為啟動(dòng)信號(hào),接著傳輸?shù)氖堑刂泛蛿?shù)據(jù)字節(jié),數(shù)據(jù)字節(jié)是沒(méi)有限制的,但每個(gè)字節(jié)后都必須跟隨一個(gè)應(yīng)答位,全部數(shù)據(jù)傳輸完畢后,以終止信號(hào)結(jié)尾。I2C總線上數(shù)據(jù)的傳送時(shí)序如圖8-13所示。1/14/202355圖8-13I2C總線的數(shù)據(jù)傳送字節(jié)格式1/14/202356如前所述,SCL線為低電平時(shí),SDA線上數(shù)據(jù)就被停止傳送。SCL線的這一線“與”特性十分有用:當(dāng)接收器接收到一個(gè)數(shù)據(jù)/地址字節(jié)后需要進(jìn)行其他工作而無(wú)法立即接收下一個(gè)字節(jié)時(shí),接收器便可向SCL線輸出低電平而箝住SCL(SCL=0),迫使SDA線處于等待狀態(tài),直到接收器準(zhǔn)備好接收新的數(shù)據(jù)/地址字節(jié)時(shí),再釋放時(shí)鐘線SCL(SCL)=1),使SDA線上數(shù)據(jù)傳輸?shù)靡岳^續(xù)進(jìn)行。例如,當(dāng)被控接收器在A點(diǎn)(見(jiàn)圖8-13)接收完主控器發(fā)來(lái)的一個(gè)數(shù)據(jù)字節(jié)時(shí),若被控器需要處理接收中斷而無(wú)法令其接收器繼續(xù)接收,則被控器便可箝住SCL線為低電平,使主控發(fā)送器處于等待狀態(tài),直到被控器處理完接收中斷后,再釋放SCL線。1/14/202357利用SDA線進(jìn)行數(shù)據(jù)傳輸時(shí),發(fā)送器每發(fā)完一個(gè)數(shù)據(jù)字節(jié)后,都要求接收方發(fā)回一個(gè)應(yīng)答信號(hào)。但與應(yīng)答信號(hào)相對(duì)應(yīng)的時(shí)鐘仍由主控器在SCL線上產(chǎn)生,因此主控發(fā)送器必須在被控接收器發(fā)送應(yīng)答信號(hào)前,預(yù)先釋放對(duì)SDA線的控制,以便主控器對(duì)SDA線上應(yīng)答信號(hào)的檢測(cè)。1/14/202358應(yīng)答信號(hào)在第9個(gè)時(shí)鐘位上出現(xiàn),接收器在SDA線上輸出低電平為應(yīng)答信號(hào)(A),輸出高電平為非應(yīng)答信號(hào)(A)。時(shí)鐘信號(hào)以及應(yīng)答和非應(yīng)答信號(hào)間的關(guān)系如圖8-14所示。圖8-14I2C總線的應(yīng)答位1/14/202359在主控器發(fā)送數(shù)據(jù)時(shí),被控器接收完一個(gè)數(shù)據(jù)字節(jié)后都要向主控器發(fā)回一個(gè)應(yīng)答信號(hào)(A),主控器據(jù)此便可進(jìn)行下一字節(jié)的發(fā)送。但如果被控器由于某種原因需要進(jìn)行其他處理而無(wú)法繼續(xù)接收SDA線上數(shù)據(jù)時(shí),便可向SDA線輸出一個(gè)非應(yīng)答信號(hào)(A),使SDA線保持高電平,主控器據(jù)此便可產(chǎn)生一個(gè)停止信號(hào)來(lái)終止SDA線上的數(shù)據(jù)傳輸。1/14/202360當(dāng)主控器作為接收器接收被控器送來(lái)的最后一個(gè)數(shù)據(jù)時(shí),必須給被控器發(fā)送一個(gè)非應(yīng)答信號(hào)(A),令被控器釋放SDA線,以便主控器可以發(fā)送停止信號(hào)來(lái)結(jié)束數(shù)據(jù)的傳輸。I2C總線上的應(yīng)答信號(hào)是比較重要的,在編制程序時(shí)應(yīng)該著重考慮。1/14/2023615I2C總線數(shù)據(jù)傳輸協(xié)議1)總線節(jié)點(diǎn)的尋址字節(jié)主機(jī)產(chǎn)生起始條件后,發(fā)送的第一個(gè)字節(jié)為尋址字節(jié)。該字節(jié)的頭7位(高7位)為從機(jī)地址,最后位(LSB)決定了報(bào)文的方向:0表示主機(jī)寫(xiě)信息到從機(jī),1表示主機(jī)讀從機(jī)中的信息。當(dāng)發(fā)送了一個(gè)地址后,系統(tǒng)中的每個(gè)器件都將頭7位與它自己的地址比較。如果一樣,器件會(huì)應(yīng)答主機(jī)的尋址,至于是從機(jī)接收器還是從機(jī)發(fā)送器由R/W位決定。1/14/202362從機(jī)地址由一個(gè)固定的和一個(gè)可編程的部分構(gòu)成。例如,某些器件有4個(gè)固定的位(高4位)和3個(gè)可編程的地址位(低3位),那么同一總線上共可以連接8個(gè)相同的器件。I2C總線委員會(huì)協(xié)調(diào)I2C地址的分配,保留了2組8位地址(0000×××和1111×××),這2組地址的用途可查閱有關(guān)資料。1/14/202363掛接到總線上的所有外圍器件、外設(shè)接口都是總線上的節(jié)點(diǎn)。在任何時(shí)刻總線上只有一個(gè)主控器件(主節(jié)點(diǎn))實(shí)現(xiàn)總線的控制操作,對(duì)總線上的其他節(jié)點(diǎn)尋址,分時(shí)實(shí)現(xiàn)點(diǎn)點(diǎn)的數(shù)據(jù)傳送。因此,總線上每個(gè)節(jié)點(diǎn)都有一個(gè)固定的節(jié)點(diǎn)地址。1/14/202364I2C總線上的單片機(jī)都可以成為主節(jié)點(diǎn),其器件地址由軟件給定,存放在I2C總線的地址寄存器中,稱為主器件的從地址。在I2C總線的多主系統(tǒng)中,單片機(jī)作為從節(jié)點(diǎn)時(shí),其從地址才有意義。I2C總線上所有的外圍器件都有規(guī)范的器件地址。器件地址由7位組成,它和1位方向位構(gòu)成了I2C總線器件的尋址字節(jié)SLA。1/14/202365主機(jī)產(chǎn)生起始信號(hào)后的第一個(gè)尋址字節(jié)格式如下:D7D0SLADA3DA2DA1DA0A2A1A0R/W
從機(jī)地址1/14/202366其各位含義如下:器件地址(DA3、DA2、DA1和DA0):是I2C總線外圍接口器件固有的地址編碼,器件出廠時(shí),就已給定。例如,I2C總線E2PROMAT24C××的器件地址為1010,4位LED驅(qū)動(dòng)器SAA1064的器件地址為0111。引腳地址(A2、A1和A0):是由I2C總線外圍器件地址端口A2、A1和A0在電路中接電源或接地的不同而形成的地址數(shù)據(jù)。數(shù)據(jù)方向(R/W):規(guī)定了總線上主節(jié)點(diǎn)對(duì)從節(jié)點(diǎn)的數(shù)據(jù)傳送方向,R——接收,——發(fā)送。表8-1列出了一些常用外圍器件的節(jié)點(diǎn)地址和尋址字節(jié)。1/14/202367表8-1常用I2C接口通用器件的種類(lèi)、型號(hào)和尋址字節(jié)1/14/2023682)I2C總線數(shù)據(jù)傳輸?shù)母袷絀2C總線傳輸數(shù)據(jù)時(shí)必須遵循規(guī)定的數(shù)據(jù)傳輸格式,圖815示出了I2C總線一次完整的數(shù)據(jù)傳輸格式。圖8-15I2C總線一次完整的數(shù)據(jù)傳輸格式1/14/202369在圖8-15中,起始信號(hào)表明一次數(shù)據(jù)傳送的開(kāi)始,其后為被控器的地址字節(jié),高位在前,低位在后,第8位為R/W方向位。方向位R/W表明主控器和被控器間數(shù)據(jù)傳輸?shù)姆较?。若R/W=0,表明數(shù)據(jù)由主控器按地址字節(jié)寫(xiě)入被控器;若R/W=1,表明數(shù)據(jù)從由地址字節(jié)決定的被控器讀入主控器。方向位后面是被控器發(fā)出的應(yīng)答位ACK。地址字節(jié)傳輸完后是數(shù)據(jù)字節(jié),數(shù)據(jù)字節(jié)仍是高位在前,低位在后,然后是應(yīng)答位。1/14/202370若有多個(gè)數(shù)據(jù)字節(jié)需要傳送,則每個(gè)數(shù)據(jù)字節(jié)的格式相同。數(shù)據(jù)字節(jié)傳送完后,被控接收器發(fā)回一個(gè)非應(yīng)答信號(hào)(高電平有效),主控器據(jù)此發(fā)送停止信號(hào),以結(jié)束這次數(shù)據(jù)的傳輸。但是,如果主機(jī)仍希望在總線上通信,它可以產(chǎn)生重復(fù)的起始信號(hào)(Sr)和尋址另一個(gè)從機(jī),而不是首先產(chǎn)生一個(gè)停止信號(hào)??偩€上數(shù)據(jù)傳輸有多種組合方式,現(xiàn)以圖解方式分別介紹如下3類(lèi)數(shù)據(jù)傳輸格式。1/14/202371(1)主控器的寫(xiě)數(shù)據(jù)操作格式主控器產(chǎn)生起始信號(hào)后,發(fā)送一個(gè)尋址字節(jié),收到應(yīng)答后跟著就是數(shù)據(jù)傳輸,當(dāng)主機(jī)產(chǎn)生停止信號(hào)后,數(shù)據(jù)傳輸停止。主機(jī)向被尋址的從機(jī)寫(xiě)入n個(gè)數(shù)據(jù)字節(jié)。整個(gè)過(guò)程均為主機(jī)發(fā)送,從機(jī)接收,先發(fā)數(shù)據(jù)高位,再發(fā)低位,應(yīng)答位ACK由從機(jī)發(fā)送。主控器向被控器發(fā)送數(shù)據(jù)時(shí),數(shù)據(jù)的方向位(R/W=0)是不會(huì)改變的。傳輸n字節(jié)的數(shù)據(jù)格式如下:1/14/202372具體內(nèi)容為:其中:為主控器發(fā)送,被控器接收;為被控器發(fā)送,主控器接收;A為應(yīng)答信號(hào),為非應(yīng)答信號(hào);S為起始信號(hào),P為停止信號(hào);SLA為尋址字節(jié)(寫(xiě));data1~datan為被傳輸?shù)膎個(gè)數(shù)據(jù)字節(jié)。1/14/202373(2)主控器的讀數(shù)據(jù)操作格式主機(jī)從被尋址的從機(jī)讀出n個(gè)數(shù)據(jù)字節(jié)。在傳輸過(guò)程中,除了尋址字節(jié)為主機(jī)發(fā)送、從機(jī)接收外,其余的n字節(jié)均為從機(jī)發(fā)送,主機(jī)接收。主機(jī)接收完數(shù)據(jù)后,應(yīng)發(fā)非應(yīng)答位,向從機(jī)表明讀操作結(jié)束。1/14/202374主控器從被控器讀取數(shù)據(jù)時(shí),數(shù)據(jù)傳輸?shù)姆较蛭籖/W=1。主控器從被控器讀取n字節(jié)的數(shù)據(jù)格式為:1/14/202375具體內(nèi)容為:其中:SLAR為尋址字節(jié)(讀),其余與前述相同。注意:主控器在發(fā)送停止信號(hào)前,應(yīng)先給被控器發(fā)送一個(gè)非應(yīng)答信號(hào),向被控器表明讀操作結(jié)束。1/14/2023763)主控器的讀/寫(xiě)數(shù)據(jù)操作格式讀/寫(xiě)操作時(shí),在一次數(shù)據(jù)傳輸過(guò)程中需要改變數(shù)據(jù)的傳送方向,即主機(jī)在一段時(shí)間內(nèi)為讀操作,在另一段時(shí)間內(nèi)為寫(xiě)操作。由于讀/寫(xiě)方向有變化,起始信號(hào)和尋址字節(jié)都會(huì)重復(fù)一次,但讀/寫(xiě)方向(R/W)相反。例如,由單片機(jī)主機(jī)讀取存儲(chǔ)器從機(jī)中某存儲(chǔ)單元的內(nèi)容,就需要主機(jī)先向從機(jī)寫(xiě)入該存儲(chǔ)單元的地址,再發(fā)一個(gè)啟動(dòng)位,進(jìn)行讀操作。1/14/202377主控器向被控器先讀后寫(xiě)的數(shù)據(jù)格式如下:1/14/202378具體內(nèi)容為:其中:Sr為重復(fù)起始信號(hào);data1~datan為主控器的讀數(shù)據(jù);DATA1~DATAn為主控器的寫(xiě)數(shù)據(jù);其余與前述相同。1/14/202379通過(guò)上述分析,可以得出如下結(jié)論:無(wú)論總線處于何種方式,起始信號(hào)、終止信號(hào)和尋址字節(jié)均由主控器發(fā)送和被控器接收。尋址字節(jié)中,7位地址是指器件地址,即被尋址的被控器的固有地址,R/W方向位用于指定SDA線上數(shù)據(jù)傳送的方向。R/W=0為主控器寫(xiě)和被控器收,R/W=1為主控器讀(收)和被控器發(fā)。每個(gè)器件(主控器或被控器)內(nèi)部都有一個(gè)數(shù)據(jù)存儲(chǔ)器RAM,RAM的地址是連續(xù)的,并能自動(dòng)加/減1。n個(gè)被傳送數(shù)據(jù)的RAM地址可由系統(tǒng)設(shè)計(jì)者規(guī)定,通常作為數(shù)據(jù)放在上述數(shù)據(jù)傳輸格式中,即第一個(gè)數(shù)據(jù)字節(jié)data1或DATA1??偩€上傳輸?shù)拿總€(gè)字節(jié)后必須跟一個(gè)應(yīng)答或非應(yīng)答信號(hào)A/A。1/14/202380651單片機(jī)與I2C總線的接口1)單片機(jī)與I2C總線的硬件連接用不帶I2C接口的51單片機(jī)控制I2C總線時(shí),硬件也非常簡(jiǎn)單,只需兩個(gè)I/O口線,在軟件中分別定義成SCL和SDA,與I2C總線的SCL和SDA直接相連,再加上上拉電阻即可。以51系列單片機(jī)為例,可以用P1.6和P1.7直接與SCL和SDA相連,硬件接口如圖8-16所示。圖8-16模擬I2C總線1/14/2023812)51單片機(jī)對(duì)I2C總線的控制程序這里以51系列單片機(jī)為例,介紹如何根據(jù)I2C總線的工作原理用匯編語(yǔ)言編寫(xiě)控制程序。1/14/202382首先,應(yīng)根據(jù)I2C總線對(duì)SDA和SCL在各個(gè)時(shí)段的時(shí)序要求寫(xiě)出起始、停止、送應(yīng)答位、送非應(yīng)答位、檢查應(yīng)答位以及發(fā)送一字節(jié)、接收一字節(jié)的子程序,具體代碼可參見(jiàn)《電子世界》網(wǎng)站()上的匯編源程序,該程序中設(shè)置“I2C_ERROR”為出錯(cuò)標(biāo)志。若在程序中適當(dāng)增加NOP指令的條數(shù),可以提高I2C總線數(shù)據(jù)傳輸?shù)目煽啃浴?/14/202383注意在使用這些程序前,先要確定從機(jī)的地址和從機(jī)中要操作的內(nèi)部單元的地址。程序中用“DeviceaddressW”表示從機(jī)的7位地址加上寫(xiě)標(biāo)志0,“DeviceaddressR”表示從機(jī)的7位地址加上讀標(biāo)志1,“Subaddress”表示內(nèi)部單元的8位地址,“DATA_I2C”表示操作數(shù)據(jù)在單片機(jī)內(nèi)的存放地址。這些程序可以實(shí)現(xiàn)簡(jiǎn)單的I2C總線操作,用戶也可以根據(jù)具體要求再附加相應(yīng)的程序。1/14/2023847I2C總線數(shù)據(jù)傳送軟件包我們知道89C51單片機(jī)中具有I2C總線接口的畢竟是少數(shù)。如果是不帶I2C總線的單片機(jī),則不必?cái)U(kuò)展I2C總線接口,只須通過(guò)軟件模擬,這無(wú)疑會(huì)給I2C總線的應(yīng)用提供更廣泛的空間。通常大多數(shù)單片機(jī)應(yīng)用系統(tǒng)中只有一個(gè)CPU,這種單主系統(tǒng)如果采用I2C總線技術(shù),則總線上只有單片機(jī)對(duì)I2C總線從器件的訪問(wèn),沒(méi)有總線的競(jìng)爭(zhēng)等問(wèn)題,這種情況下只需要模擬主發(fā)送和主接收時(shí)序?;谏鲜隹紤],這里提供了這種使用情況下的時(shí)序模擬軟件,使I2C總線的使用不受單片機(jī)必須帶有I2C總線接口的限制。1/14/202385本教程在模擬主方式下的I2C總線時(shí)序時(shí),選用如圖8-16所示P1.6和P1.7作為時(shí)鐘線SCL和數(shù)據(jù)線SDA,晶振采用6MHz。這里提供一個(gè)軟件包,包括啟動(dòng)(STA),停止(STOP),發(fā)送應(yīng)答位(MACK),發(fā)送非應(yīng)答位(MNACK),應(yīng)答位檢查(CACK),發(fā)送一字節(jié)數(shù)據(jù)(WRBYT),接收一字節(jié)數(shù)據(jù)(RDBYT),發(fā)送N字節(jié)數(shù)據(jù)和接收N字節(jié)數(shù)據(jù)(RDNBYT)9個(gè)子程序。1/14/2023861)I2C總線典型信號(hào)時(shí)序及信號(hào)模擬子程序I2C總線數(shù)據(jù)傳送時(shí),有起始位(S)、終止位(P)、發(fā)送0代表應(yīng)答位(A)、發(fā)送1代表非應(yīng)答位(A)等信號(hào)。按照典型I2C總線傳送速率的要求,這些信號(hào)、時(shí)序如圖8-17(a)、(b)、(c)和(d)所示。1/14/202387圖8-17I2C總線數(shù)據(jù)傳送典型信號(hào)時(shí)序1/14/202388圖817I2C總線數(shù)據(jù)傳送典型信號(hào)時(shí)序?qū)τ贗2C總線的典型信號(hào),可以用指令操作來(lái)模擬其時(shí)序過(guò)程。若89C51單片機(jī)的系統(tǒng)時(shí)鐘為6MHz,相應(yīng)的單周期指令的周期為2μs,則起始(STA)、終止(STOP)、發(fā)送應(yīng)答位(MACK)、發(fā)送非應(yīng)答位(MNACK)的4個(gè)模擬子程序如下:1/14/2023891)啟動(dòng)I2C總線子程序STASTA:SETB SDASETB SCL;起始條件建立時(shí)間大于4.7μsNOPNOPCLR SDANOP ;起始條件鎖定時(shí)間大于4μsNOPCLR SCL;箝住總線,準(zhǔn)備發(fā)送數(shù)據(jù)RET1/14/202390(2)停止I2C總線子程序STOPSTOP:CLR SDASETB SCL;發(fā)送停止條件的時(shí)鐘信號(hào)NOP ;停止總線時(shí)間大于4μsNOPSETB SDA;停止總線NOPNOPCLR SDACLR SCLRET1/14/202391(3)發(fā)送應(yīng)答位信號(hào)子程序MACKMACK:CLR SDASETB SCLNOP ;保持?jǐn)?shù)據(jù)時(shí)間,即SCL為高,時(shí)間大于40μsNOPCLR SCLSETB SDARET1/14/202392(4)發(fā)送非應(yīng)答位信號(hào)子程序MNACKMNACK:SETB SDASETB SCLNOP ;保持?jǐn)?shù)據(jù)時(shí)間,即SCL為高,時(shí)間大于4.0μsNOPCLR SCLCLR SDARET在使用上述子程序時(shí),如果單片機(jī)的主時(shí)鐘不是6MHz,則應(yīng)調(diào)整NOP指令個(gè)數(shù),以滿足時(shí)序要求。1/14/2023932)I2C總線數(shù)據(jù)傳送的模擬子程序
從I2C總線的數(shù)據(jù)操作中可以看出,除了基本的啟動(dòng)(STA)、終止(STOP)、發(fā)送應(yīng)答位(MACK)、發(fā)送非應(yīng)答位(MNACK)外,還應(yīng)有應(yīng)答位檢查(CACK)、發(fā)送一字節(jié)(WRBYT)、接收一字節(jié)(RBYT)、發(fā)送N字節(jié)(WRNBYT)和接收N字節(jié)(RDNBYT)這5個(gè)子程序。1/14/202394(1)應(yīng)答位檢查子程序CACK在應(yīng)答位檢查子程序(CACK)中,設(shè)置了標(biāo)志位。CACK中用F0作標(biāo)志位,當(dāng)檢查到正常應(yīng)答位后,F(xiàn)0=0;否則F0=1。CACK: SETBSDA;置SDA為輸入方式 SETBSCL;使SDA上數(shù)據(jù)有效 CLRF0;預(yù)設(shè)F0=0 MOV C,SDA;輸入SDA引腳狀態(tài) JNCCEND;檢查SDA狀態(tài),正常應(yīng)答轉(zhuǎn)CEND,且F0=0 SETBF0;無(wú)正常應(yīng)答,F(xiàn)0=1CEND: CLRSCL;子程序結(jié)束,使SCL=0 RET1/14/202395(2)發(fā)送一字節(jié)數(shù)據(jù)子程序WRBYT該子程序是向虛擬I2C總線的數(shù)據(jù)線SDA上發(fā)送一字節(jié)數(shù)據(jù)的操作。調(diào)用該子程序前,將要發(fā)送的數(shù)據(jù)送入A中。占用資源:R0,C。WRBYT:MOV R0,#08H;8位數(shù)據(jù)長(zhǎng)度送R0中WLP: RLCA;發(fā)送數(shù)據(jù)左移,使發(fā)送位入C JC WR1;判斷發(fā)送1還是0,發(fā)送1轉(zhuǎn)WR1 AJMP WR0;發(fā)送0轉(zhuǎn)WR0WLP1: DJNZ R0,WLP;8位是否發(fā)送完,未完轉(zhuǎn)WLP RET;8位發(fā)送完結(jié)束WR1: SETB SDA;發(fā)送1程序段 SETB SCL NOP NOP CLR SCL CLRS DA AJMP WLP1WR0: CLR SDA;發(fā)送0程序段 SETB SCL NOP NOP CLR SCL AJMP WLP11/14/202396(3)從SDA上接收一字節(jié)數(shù)據(jù)子程序RDBYT該子程序用來(lái)從SDA上讀取一字節(jié)數(shù)據(jù),執(zhí)行本程序后,從SDA上讀取的一字節(jié)存放在R2或A中。占用資源:R0、R2和C。RDBYT: MOV R0,#08H;8位數(shù)據(jù)長(zhǎng)度送R0中RLP: SETB SDA;置SDA為輸入方式 SETB SCL;使SDA上數(shù)據(jù)有效 MOV C,SDA;讀入SDA引腳狀態(tài) MOV A,R2;讀入0程序段,由C拼裝入R2中 RLCA MOV R2,A CLR SCL;使SCL=0可繼續(xù)接收數(shù)據(jù)位 DJNZ R0,RLP;8位讀完了嗎?未讀完轉(zhuǎn)RLP RET1/14/202397(4)向被控器發(fā)送N字節(jié)數(shù)據(jù)子程序WRNBYT在I2C總線數(shù)據(jù)傳送中,主節(jié)點(diǎn)常常需要連續(xù)地向外圍器件發(fā)送多個(gè)字節(jié)數(shù)據(jù),本子程序是用來(lái)向SDA線上發(fā)送N字節(jié)數(shù)據(jù)的操作。該子程序的編寫(xiě)必須按照I2C總線規(guī)定的讀/寫(xiě)操作格式進(jìn)行。如主控器向I2C總線上某個(gè)外圍器件連續(xù)發(fā)送N個(gè)數(shù)據(jù)字節(jié)時(shí),其數(shù)據(jù)操作格式如下:其中,SLAW為外圍器件尋址字節(jié)(寫(xiě))。1/14/202398按照上述操作格式所編寫(xiě)的發(fā)送N字節(jié)的通用子程序(WRNBYT)清單如下:
WRNBYT: MOV R3,NUMBYT LCALL STA;啟動(dòng)I2C總線 MOV A,SLA;發(fā)送SLAW字節(jié) LCALL WRBYT LCALL CACK;檢查應(yīng)答位 JB F0,WRNBYT;非應(yīng)答位則重發(fā) MOV R1,#MTDWRDA: MOV A,@R1 LCALL WRBYT LCALL CACK JB F0,WRNBYT INC R1 DJNZ R3,WRDA LCALL STOP RET1/14/202399在使用本子程序時(shí),占用資源為R1和R3,但須調(diào)用STA、STOP、WRBYT和CACK子程序,而且使用了一些符號(hào)單元。在使用這些符號(hào)單元時(shí),應(yīng)在片內(nèi)RAM中分配好這些地址。這些符號(hào)單元有:MTD主節(jié)點(diǎn)發(fā)送數(shù)據(jù)緩沖區(qū)首址;SLA外圍器件尋址字節(jié)存放單元;NUMBYT發(fā)送數(shù)據(jù)字節(jié)數(shù)存放單元。1/14/2023100在調(diào)用本子程序之前,必須將要發(fā)送的N字節(jié)數(shù)據(jù)依次存放在以MTD為首地址的發(fā)送數(shù)據(jù)緩沖區(qū)中。調(diào)用本子程序后,N字節(jié)數(shù)據(jù)依次傳送到外圍器件內(nèi)部相應(yīng)的地址單元中。1/14/2023101(5)從外圍器件讀取N字節(jié)數(shù)據(jù)子程序RDNBYT在I2C總線系統(tǒng)中,主控器按主接收方式從外圍器件中讀出N字節(jié)數(shù)據(jù)的操作格式如下:其中,A:非應(yīng)答位,主節(jié)點(diǎn)在接收完N字節(jié)后,必須發(fā)送一個(gè)非應(yīng)答位;SLAR:外圍器件尋址字節(jié)(讀)。1/14/2023102按照上述操作格式所編寫(xiě)的通用N字節(jié)接收子程序(RDNBYT)清單如下:RDNBYT: MOV R3,NUMBYT LCALL STA;發(fā)送啟動(dòng)位 MOV A,SLA;發(fā)送尋址字節(jié)(讀) LCALL WRBYT LCALL CACK;檢查應(yīng)答位 JB F0,RDNBYT;非正常應(yīng)答時(shí)重新開(kāi)始RDN: MOV R1,#MRD;接收數(shù)據(jù)緩沖區(qū)首址MRD入R1RDN1: LCALL RDBYT;讀入一字節(jié)到接收數(shù)據(jù)緩沖區(qū)中 MOV @R1,A DJNZ R3,ACK;N字節(jié)讀完了嗎?未完轉(zhuǎn)ACK LCALL MNACK;N字節(jié)讀完發(fā)送非應(yīng)答位 LCALL STOP;發(fā)送停止信號(hào) RET;子程序結(jié)束ACK: LCALL MACK;發(fā)送應(yīng)答位 INC R1;指向下一個(gè)接收數(shù)據(jù)緩沖單元 SJMP RDN1;轉(zhuǎn)讀入下一個(gè)字節(jié)數(shù)據(jù)1/14/2023103在使用RDNBYT子程序時(shí),占用資源R1和R3,但須調(diào)用STA、STOP、WRBYT、RDBYT、CACK、MACK和MNACK等子程序并滿足這些子程序的調(diào)用要求。RDNBYT子程序中使用了一些符號(hào)單元,除了在WRNDYT子程序中使用過(guò)的SLA、MTD和NUMBYT外,還有以下幾個(gè):SLA器件尋址(讀)存放單元;MRD主節(jié)點(diǎn)中數(shù)據(jù)接收緩沖區(qū)首址;在調(diào)用RDNBYT子程序后,從節(jié)點(diǎn)中所指定首地址中的N字節(jié)數(shù)據(jù)將被讀入主節(jié)點(diǎn)片內(nèi)以MRD為首址的數(shù)據(jù)緩沖器中。1/14/20231043)主程序在主程序初始化中,應(yīng)有如下的語(yǔ)句: SDA BIT P17 SCL BIT P16 MTD EQU 30H;MTD:發(fā)送數(shù)據(jù)緩沖區(qū)首址 MRD EQU 40H;MRD:接收數(shù)據(jù)緩沖區(qū)首址 SLA EQU 60H;SLA:尋址字節(jié)SLAR/W的存放單元NUMBYT EQU 61H;NUMBYT:傳送字節(jié)數(shù)存放單元1/14/20231058.1.3單總線單總線(1-Wire)是Dallas公司推出的外圍串行擴(kuò)展總線。單總線只有一根數(shù)據(jù)輸入/輸出線,可由單片機(jī)或PC機(jī)的1根I/O口線作為數(shù)據(jù)輸入/輸出線,所有的器件都掛在這根線上。例如,圖8-18表示一個(gè)由單總線構(gòu)成的分布式溫度監(jiān)測(cè)系統(tǒng)。許多帶有單總線接口的數(shù)字溫度計(jì)集成電路DS18S20都掛接在1根I/O口線上,單片機(jī)對(duì)每個(gè)DS18S20通過(guò)總線DQ尋址。DQ為漏極開(kāi)路,須加上拉電阻RP。此外還有1線熱電偶測(cè)溫系統(tǒng)及其他單總線系統(tǒng)。Dallas公司為單總線的尋址及數(shù)據(jù)傳送提供了嚴(yán)格的時(shí)序規(guī)范。1/14/2023106圖8-18單總線構(gòu)成的分布式溫度監(jiān)測(cè)系統(tǒng)1/14/20231071DS18S20單總線測(cè)溫系統(tǒng)DS18S20是美國(guó)Dallas公司生產(chǎn)的單總線數(shù)字溫度傳感器。它可以把溫度信號(hào)直接轉(zhuǎn)換成串行數(shù)字信號(hào)供單片機(jī)處理,特別適合構(gòu)成多點(diǎn)溫度巡回檢測(cè)系統(tǒng)。由于每片DS18S20都含有惟一的產(chǎn)品號(hào),所以從理論上來(lái)說(shuō),在一條總線上可以掛接任意多個(gè)DS18S20芯片。從DS18S20讀出或?qū)懭胄畔H需一根口線(單線接口)。讀/寫(xiě)及溫度變換功率來(lái)源于數(shù)據(jù)總線,總線本身也可以向所掛接的DS18S20供電,而無(wú)需額外電源。DS18S20提供9位溫度讀數(shù),構(gòu)成多點(diǎn)溫度檢測(cè)系統(tǒng)而無(wú)需任何外圍硬件。1/14/20231081)DS18S20的特性及引腳單線接口,僅需一根口線與MCU相連,無(wú)需外圍元件;由數(shù)據(jù)線提供電源;測(cè)溫范圍為-55~125℃,精度為05℃(-10~85℃范圍內(nèi));9位溫度讀數(shù);溫度轉(zhuǎn)換時(shí)間最長(zhǎng)為750ms;用戶可自設(shè)定溫度報(bào)警上下限,其值是非易失性的;報(bào)警搜索命令可識(shí)別哪片DS18S20超溫度界限。DS18S20采用3腳PR35封裝(或8腳SOIC封裝),引腳排列如圖819所示。圖中GND為地,DQ為數(shù)據(jù)輸入/輸出腳(單線接口,可作寄生供電),VDD為電源電壓。圖8-19DS18S20的引腳排列1/14/20231092)DS18S20的內(nèi)部結(jié)構(gòu)DS18S20的內(nèi)部結(jié)構(gòu)如圖8-20所示。DS18S20主要包括寄生電源、溫度傳感器、64位激光ROM單線接口、存放中間數(shù)據(jù)的高速暫存器(內(nèi)含便箋式RAM)、用于存儲(chǔ)用戶設(shè)定的溫度上下限值TH和TL的觸發(fā)器、存儲(chǔ)與控制邏輯、8位循環(huán)冗余校驗(yàn)碼(CRC)發(fā)生器8部分。DS18S20既可以采用寄生供電,也可以采用外部5V電源供電。寄生供電時(shí),當(dāng)總線上是高電平時(shí),DS18S20從總線上獲得能量并儲(chǔ)存在內(nèi)部電容上。當(dāng)總線上是低電平時(shí),由電容向DS18S20供電。1/14/2023110圖8-20DS18S20內(nèi)部結(jié)構(gòu)圖1/14/2023111DS18S20的測(cè)溫原理是:內(nèi)部計(jì)數(shù)器對(duì)一個(gè)受溫度影響的振蕩器計(jì)數(shù)。溫度表示值應(yīng)為9位,高位為符號(hào)位,但因符號(hào)位擴(kuò)展成高8位,故以16位補(bǔ)碼形式讀出,溫度與數(shù)字量的關(guān)系如表8-2所列。1/14/20231123)溫度巡回檢測(cè)系統(tǒng)電路系統(tǒng)如圖8-21所示,采用寄生電源供電方式。圖8-21DS18S20溫度巡回檢測(cè)系統(tǒng)1/14/2023113為保證在有效的DS18S20周期內(nèi)提供足夠的電流,用一個(gè)MOSFET管和89C51的一個(gè)I/O口線(P1.0)來(lái)完成對(duì)DS18S20總線的上拉。采用寄生電源供電時(shí),VDD必須接地。在此系統(tǒng)中采用89C51的P1.1口作發(fā)送口Tx,P1.2口作接收口Rx。實(shí)驗(yàn)發(fā)現(xiàn)這種方法可接數(shù)十片DS18S20,距離可達(dá)50m;而用1根口線(如圖821所示)時(shí),僅能掛接10片DS18S20,距離僅為20m以內(nèi),同時(shí)由于讀/寫(xiě)在操作上是分開(kāi)的,故不存在信號(hào)競(jìng)爭(zhēng)問(wèn)題。1/14/20231144)工作過(guò)程89C51首先發(fā)復(fù)位DS18S20的負(fù)脈沖,接著收DS18S20的回應(yīng)脈沖,這時(shí)89C51再發(fā)ROM命令(33H),最后發(fā)存儲(chǔ)和控制命令。1/14/2023115(1)DS18S20ROM命令主機(jī)操作ROM的命令有5種,如表8-3所列。64位激光ROM的結(jié)構(gòu)如下:開(kāi)始8位是產(chǎn)品類(lèi)型編號(hào)(DS18S20為10H);接著是每個(gè)器件的惟一序號(hào),共有48位;最后8位是前56位的CRC校驗(yàn)碼,這也是多個(gè)DS18S20可以采用一線的原因。1/14/20231161/14/2023117(2)DS18S20存儲(chǔ)控制命令DS18S20存儲(chǔ)控制命令共有6種,如表8-4所列。DS18S20的存儲(chǔ)器由便箋式RAM和非易失性電擦寫(xiě)EERAM組成,后者用于存儲(chǔ)TH和TL值。數(shù)據(jù)先寫(xiě)入RAM,經(jīng)校驗(yàn)后再傳給EERAM。便箋式RAM占9字節(jié),包括溫度信息(第1、2字節(jié))、TH、TL值(第3、4字節(jié))、計(jì)數(shù)寄存器(第7、8字節(jié))、CRC(第9字節(jié))等,第5、6字節(jié)不用。1/14/2023118(3)DS18S20的執(zhí)行序列①初始化(發(fā)一個(gè)不少于480μs的低脈沖);②執(zhí)行ROM命令,主要用于定位;③執(zhí)行DS18S20的存儲(chǔ)控制命令,用于轉(zhuǎn)換和讀數(shù)據(jù);④DS18S20的I/O信號(hào)有復(fù)位脈沖、回應(yīng)脈沖、寫(xiě)0、讀0、寫(xiě)1和讀1等幾種。除回應(yīng)脈沖由DS18S20發(fā)出外,其余都由主機(jī)發(fā)出。1/14/2023119程序框圖如圖822所示。圖8-22程序框圖1/14/202312021線(1-Wire)熱電偶測(cè)高溫1線熱電偶測(cè)量溫度是將傳統(tǒng)的熱電偶與一款新推出的多功能芯片DS2760結(jié)合起來(lái),組成一種可直接將冷結(jié)溫度信號(hào)數(shù)字化的變送器。該變送器可以通過(guò)單條雙絞線與PC機(jī)(或微控制器)主機(jī)通信。其顯著的優(yōu)勢(shì)之一是,每一個(gè)變送器都可賦予單獨(dú)的64位地址,這大大方便了總線主機(jī)的識(shí)別和選通。采用這種獨(dú)特的地址識(shí)別之后,多個(gè)傳感器可以形成一個(gè)網(wǎng)絡(luò),由軟件自動(dòng)識(shí)別和處理來(lái)自特定傳感器的數(shù)據(jù)。與熱電偶有關(guān)的信息可以由多功能芯片本身存儲(chǔ),不過(guò)這種獨(dú)特的識(shí)別方法還可以讓參考數(shù)據(jù)儲(chǔ)存在總線主機(jī)中。1/14/20231211)熱電偶技術(shù)目前列為工業(yè)標(biāo)準(zhǔn)的熱電偶金屬組合不多,較普遍的是K型和E型兩種。E型熱電偶組合是Ni/Cr合金與康銅(Cu/Ni合金),可以獲得最高的電壓系數(shù)(62μV/℃@20℃),在900℃時(shí)輸出幾乎可以達(dá)到80mV。K型熱電偶Seebeck電壓系數(shù)較低(51μV/℃@20℃),但在0~1000℃范圍內(nèi)的線性度明顯要好得多。1/14/2023122熱電偶的引出端構(gòu)成了第二個(gè)熱電偶。例如,使用銅制引線時(shí),會(huì)形成與測(cè)量所用的結(jié)(或者叫“熱”結(jié))串連的鎳鉻/銅結(jié)。以往為了修正這些“冷”結(jié)帶來(lái)的影響,人們總是把它們放入處于三相點(diǎn)(0.01℃)的冰水中。大多數(shù)現(xiàn)代儀器則通過(guò)電路方法修正——先測(cè)量出冷結(jié)處的溫度,再將處于這一溫度下的電偶產(chǎn)生的電壓偏差從實(shí)際讀數(shù)中減去。1/14/2023123典型的現(xiàn)代電子式熱電偶由若干基本單元構(gòu)成,包括:一個(gè)熱電偶、一個(gè)用于測(cè)量熱電偶和引線接頭處溫度的傳感器、信號(hào)調(diào)理單元和A/D轉(zhuǎn)換器(圖8-23)。圖8-23典型的電路補(bǔ)償式熱電偶的組成框圖1/14/2023124熱電偶一般要接到一個(gè)精密低噪聲或儀表放大器上,該放大器提供所需的放大增益、偏置和阻抗匹配。熱電偶輸出信號(hào)放大后送到ADC中,變換為數(shù)字信號(hào),再送到微處理器或PC中。微處理器或PC利用來(lái)自ADC和冷結(jié)處的溫度傳感器的數(shù)據(jù)計(jì)算出熱電偶“熱結(jié)”處的實(shí)際溫度。1/14/20231252)DS2760芯片DS2760最初是為了監(jiān)測(cè)鋰電池組而推出的,但它卻可以用來(lái)把一個(gè)簡(jiǎn)單的熱電偶變成智能傳感器。該芯片可以直接把冷結(jié)和熱結(jié)間mV級(jí)的輸出差異直接數(shù)字化,片上的溫度傳感器則連續(xù)地監(jiān)測(cè)冷結(jié)處的溫度。獨(dú)特的ID地址可以標(biāo)明用單條雙絞線電纜連接的多個(gè)不同敏感單元。該芯片還有用戶可訪問(wèn)的存儲(chǔ)器,用于存儲(chǔ)與傳感器有關(guān)的技術(shù)數(shù)據(jù),如熱電偶的類(lèi)型、位置、啟用的日期等等。這樣,由于管理總線的主機(jī)可以利用所存儲(chǔ)的熱電偶類(lèi)型數(shù)據(jù)以及來(lái)自片上溫度傳感器的冷結(jié)溫度信號(hào)來(lái)決定所需的修正計(jì)算,因此它能與任何類(lèi)型的熱電偶一起使用。1/14/2023126DS2760包括一個(gè)10位電壓ADC輸入、13位溫度ADC和一個(gè)12位正號(hào)電流型ADC,為熱電偶應(yīng)用提供了完整的信號(hào)調(diào)理和數(shù)字化手段。片上的13位溫度傳感器用于冷結(jié)補(bǔ)償。CR1給傳感器供電。R1用于VDD的讀出,但如果不需要這項(xiàng)功能,也可以忽略。即使采用低輸出的K型熱電偶,轉(zhuǎn)換器可提供的分辨率仍優(yōu)于1℃。1/14/20231273)通過(guò)單條線測(cè)量熱電偶從圖8-24中可以看出,用DS2760可以簡(jiǎn)單和方便地把一個(gè)典型的熱電偶轉(zhuǎn)化成具備多點(diǎn)測(cè)量功能的智能傳感器。電路中,C1和一只肖特基二極管CR1構(gòu)成一個(gè)半波整流器,在總線(電壓為5V)空閑時(shí)為DS2760供電。圖8-24單線熱電偶的輸出1/14/2023128這實(shí)際上是1線式器件內(nèi)部所采用的寄生式供電方法,只是用分立方式來(lái)實(shí)現(xiàn)而已。余下的肖特基二極管接在DATA和GND兩腳之間,將負(fù)向信號(hào)偏移限制在-4.0V以內(nèi),以實(shí)現(xiàn)電路保護(hù)。1/14/2023129如果沒(méi)有這個(gè)二極管,總線上大于0.6V的負(fù)向信號(hào)漂移可以使DS2760芯片襯底上的寄生二極管正向偏置,從而干擾其正常功能。在總線主機(jī)控制下,DS2760既監(jiān)測(cè)熱電偶熱結(jié)和冷結(jié)間的電壓,又用其內(nèi)部的溫度傳感器測(cè)量冷結(jié)溫度。主機(jī)利用這一信息計(jì)算出熱結(jié)處實(shí)際的溫度。如果添加電阻R1,就可以測(cè)量VDD。1/14/2023130圖8-24單線熱電偶的輸出1/14/2023131對(duì)故障查找來(lái)說(shuō),這可以用于驗(yàn)證1線網(wǎng)絡(luò)(1-Wirenet)的電壓是否在可接受的范圍之內(nèi)。把熱電偶安裝到電路板上時(shí),必須注意使之盡可能接近DS2760,以減小這些連接和DS2760封裝中的芯片的溫度差。1/14/20231328.2并行擴(kuò)展三總線的產(chǎn)生通常情況下,微機(jī)的CPU外部都有單獨(dú)的并行地址總線、數(shù)據(jù)總線和控制總線,而89C51單片機(jī)由于受引腳的限制,數(shù)據(jù)線和地址線是復(fù)用的,而且由I/O口線兼用。為了將它們分離出來(lái),以便同單片機(jī)片外的芯片正確地連接,需要在單片機(jī)外部增加地址鎖存器,從而構(gòu)成與一般CPU相類(lèi)似的片外三總線,如圖8-25所示。采用74HC373作鎖存器的地址總線擴(kuò)展電路如圖8-26所示。1/14/2023133圖8-2589C51擴(kuò)展的并行三總線圖8-2689C51地址總線擴(kuò)展電路1/14/2023134由89C51P0口送出的低8位有效地址信號(hào)是在ALE(地址鎖存允許)信號(hào)變高的同時(shí)出現(xiàn)的,并在ALE由高變低時(shí),將出現(xiàn)在P0口的地址信號(hào)鎖存到外部地址鎖存器74HC373中,直到下一次ALE變高時(shí),地址才發(fā)生變化。1/14/20231358.2.1片外三總線結(jié)構(gòu)所謂總線,就是連接系統(tǒng)中各擴(kuò)展部件的一組公共信號(hào)線。按照功能,通常把系統(tǒng)總線分為3組,即地址總線、數(shù)據(jù)總線和控制總線。89C51單片機(jī)的片外引腳可構(gòu)成如圖825所示的并行三總線結(jié)構(gòu),所有的外圍芯片都將通過(guò)這三種總線進(jìn)行擴(kuò)展。1/14/20231361.地址總線地址總線(AddressBus,AB)用于傳送單片機(jī)送出的地址信號(hào),以便進(jìn)行存儲(chǔ)單元和I/O端口的選擇。地址總線是單向的,只能由單片機(jī)向外發(fā)送信息。地址總線的數(shù)目決定了可直接訪問(wèn)的存儲(chǔ)單元的數(shù)目。例如,n位地址可以產(chǎn)生2n個(gè)連續(xù)地址編碼,因此,可訪問(wèn)2n個(gè)存儲(chǔ)單元,即通常所說(shuō)的尋址范圍為2n個(gè)地址單元。89C51單片機(jī)存儲(chǔ)器擴(kuò)展最多可達(dá)64KB,即216個(gè)地址單元,因此,最多需16位地址。1/14/20231372.數(shù)據(jù)總線數(shù)據(jù)總線(DataBus,DB)用于單片機(jī)與存儲(chǔ)器之間或單片機(jī)與I/O端口之間傳送數(shù)據(jù)。數(shù)據(jù)總線的位數(shù)與單片機(jī)處理數(shù)據(jù)的字長(zhǎng)一致。例如,89C51單片機(jī)是8位字長(zhǎng),所以,數(shù)據(jù)總線的位數(shù)也是8位。數(shù)據(jù)總線是雙向的,可以進(jìn)行兩個(gè)方向的數(shù)據(jù)傳送。1/14/20231383.控制總線控制總線(ControlBus,CB)是單片機(jī)發(fā)出的以控制片外ROM、RAM和I/O口讀/寫(xiě)操作的一組控制線。1/14/20231398.2.2系統(tǒng)擴(kuò)展的實(shí)現(xiàn)1.以P0口作地址/數(shù)據(jù)總線此處的地址總線是指系統(tǒng)的低8位地址線。因?yàn)镻0口線既用作地址線,又用作數(shù)據(jù)線(分時(shí)使用),因此,需要加一個(gè)8位鎖存器。在實(shí)際應(yīng)用時(shí),先把低8位地址送鎖存器暫存,然后再由地址鎖存器給系統(tǒng)提供低8位地址,而把P0口線作為數(shù)據(jù)線使用。實(shí)際上,單片機(jī)P0口的電路設(shè)計(jì)已考慮了這種應(yīng)用需要,P0口線電路中的多路轉(zhuǎn)接電路MUX以及地址/數(shù)據(jù)控制即是為此目的而設(shè)計(jì)的。1/14/20231402.以P2口的口線作高位地址線如果使用P2口的全部8位口線,再加上P0口提供的低8位地址,便可形成完整的16位地址總線,使單片機(jī)系統(tǒng)的尋址范圍達(dá)到64KB。但實(shí)際應(yīng)用系統(tǒng)中,高位地址線并不固定為8位,需要用幾位就從P2口中引出幾條口線。1/14/2023141
除了地址線和數(shù)據(jù)線之外,在擴(kuò)展系統(tǒng)中還需要一些控制信號(hào)線,以構(gòu)成擴(kuò)展系統(tǒng)的控制總線。這些信號(hào)有的是單片機(jī)引腳的第一功能信號(hào),有的則是第二功能信號(hào)。其中包括:使用ALE作為地址鎖存的選通信號(hào),以實(shí)現(xiàn)低8位地址的鎖存;以PSEN信號(hào)作為擴(kuò)展程序存儲(chǔ)器的讀選通信號(hào);以EA信號(hào)作為內(nèi)、外程序存儲(chǔ)器的選擇信號(hào);以RD和WR作為擴(kuò)展數(shù)據(jù)存儲(chǔ)器和I/O端口的讀/寫(xiě)選通信號(hào)。執(zhí)行MOVX指令時(shí),這兩個(gè)信號(hào)分別自動(dòng)有效。1/14/2023142可以看出,盡管89C51單片機(jī)號(hào)稱有4個(gè)I/O口,共32條口線,但由于系統(tǒng)擴(kuò)展的需要,真正能作為數(shù)據(jù)I/O使用的,就只剩下P1口和P3口的部分口線了。特別需要強(qiáng)調(diào)的是,程序存儲(chǔ)器不應(yīng)再采用外擴(kuò)的方案。因?yàn)?9系列單片機(jī)內(nèi)有4~32KB的不同型號(hào)產(chǎn)品可供選擇。如果課題需要功能更強(qiáng)的MCU,則可選擇ADμC8××、C8051F×××和MAX7651等SOC芯片。關(guān)于程序存儲(chǔ)器的擴(kuò)展,本教程不作介紹。1/14/20231438.3擴(kuò)展數(shù)據(jù)存儲(chǔ)器由于89C51單片機(jī)片內(nèi)RAM僅有128字節(jié),當(dāng)系統(tǒng)需要較大容量RAM時(shí),就需要片外擴(kuò)展數(shù)據(jù)存儲(chǔ)器RAM,最大可擴(kuò)展64KB。由于單片機(jī)是面向控制的,實(shí)際需要擴(kuò)展容量不大,因此,一般采用靜態(tài)RAM較方便,如6116(2K×8位),6264(8K×8位)。如有特殊需要,可采用62256(32K×8位),628128(128K×8位)等。與動(dòng)態(tài)RAM相比,靜態(tài)RAM無(wú)須考慮保持?jǐn)?shù)據(jù)而設(shè)置的刷新電路,故擴(kuò)展電路較簡(jiǎn)單;但由于靜態(tài)RAM是通過(guò)有源電路來(lái)保持存儲(chǔ)器中的數(shù)據(jù),因此要消耗較多的功率,價(jià)格也較高。1/14/2023144擴(kuò)展數(shù)據(jù)存儲(chǔ)器空間地址,由P2口提供高8位地址,P0口分時(shí)提供低8位地址和用作8位雙向數(shù)據(jù)總線。片外數(shù)據(jù)存儲(chǔ)器RAM的讀/寫(xiě)由89C51的RD(P3.7)和WR(P3.6)信號(hào)控制。1/14/20231458.3.1常用的數(shù)據(jù)存儲(chǔ)器芯片數(shù)據(jù)存儲(chǔ)器用于存儲(chǔ)現(xiàn)場(chǎng)采集的原始數(shù)據(jù)、運(yùn)算結(jié)果等,所以,外部數(shù)據(jù)存儲(chǔ)器應(yīng)能隨機(jī)讀/寫(xiě),通常由半導(dǎo)體靜態(tài)隨機(jī)存取存儲(chǔ)器RAM組成。E2PROM芯片也可用作外部數(shù)據(jù)存儲(chǔ)器,且掉電后信息不丟失。1/14/20231461.靜態(tài)RAM(SRAM)芯片目前常用的靜態(tài)RAM電路有6116、6264、62256、628128等。它們的引腳排列如圖8-27所示。注:6264的26腳為高電平有效的片選端。圖8-27常用靜態(tài)RAM芯片引腳圖1/14/2023147其引腳功能如下:A0~Ai地址輸入線,i=10(6116),12(6264),14(62256)。D0~D7雙向三態(tài)數(shù)據(jù)線;CE片選信號(hào)輸入線,低電平有效,當(dāng)6264的26腳(CS)為高電平,且CE為低電平時(shí)。才選中該片;OE讀選通信號(hào)輸入線,低電平有效;WE寫(xiě)允許信號(hào)輸入線,低電平有效;VCC工作電源,電壓為+5V;GND線路地。這3種RAM電路的主要技術(shù)特性見(jiàn)表8-5。1/14/20231
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年資本追加協(xié)議合同
- 2025年專賣(mài)店運(yùn)營(yíng)合同模板集
- 2025年雙方子女離婚協(xié)議書(shū)規(guī)范文本
- 2025年二手住宅精裝修銷(xiāo)售合同范本
- 2025年人工智能技術(shù)成果轉(zhuǎn)化開(kāi)發(fā)協(xié)議樣本
- 2025年律師代理合同樣本
- 2025年倉(cāng)儲(chǔ)服務(wù)互借協(xié)議
- 2025年度教育機(jī)構(gòu)課程材料出版申請(qǐng)協(xié)議
- 股權(quán)合作與經(jīng)營(yíng)管理協(xié)議
- 2025年兼職會(huì)計(jì)顧問(wèn)聘用合同樣本
- 2024-2030年中國(guó)紫蘇市場(chǎng)深度局勢(shì)分析及未來(lái)5發(fā)展趨勢(shì)報(bào)告
- 銷(xiāo)售人員課件教學(xué)課件
- LED大屏技術(shù)方案(適用于簡(jiǎn)單的項(xiàng)目)
- 城市自來(lái)水廠課程設(shè)計(jì)
- 2024智慧城市數(shù)據(jù)采集標(biāo)準(zhǔn)規(guī)范
- Lesson 6 What colour is it(教學(xué)設(shè)計(jì))-2023-2024學(xué)年接力版英語(yǔ)三年級(jí)下冊(cè)
- 歷年國(guó)家二級(jí)(Python)機(jī)試真題匯編(含答案)
- 第五單元任務(wù)二《準(zhǔn)備與排練》教學(xué)設(shè)計(jì) 統(tǒng)編版語(yǔ)文九年級(jí)下冊(cè)
- 虧損企業(yè)減虧專項(xiàng)治理方案
- 《垃圾發(fā)電廠爐渣處理技術(shù)規(guī)范》
- 設(shè)計(jì)質(zhì)量、進(jìn)度、服務(wù)保證措施
評(píng)論
0/150
提交評(píng)論