




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