單片機(jī)原理與應(yīng)用第5章-第二版_第1頁
單片機(jī)原理與應(yīng)用第5章-第二版_第2頁
單片機(jī)原理與應(yīng)用第5章-第二版_第3頁
單片機(jī)原理與應(yīng)用第5章-第二版_第4頁
單片機(jī)原理與應(yīng)用第5章-第二版_第5頁
已閱讀5頁,還剩78頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第5章 MCS51系列單片機(jī)的擴(kuò)展 內(nèi)容提要 1、本章講解單片機(jī)系統(tǒng)擴(kuò)展方法,是指單片機(jī)在應(yīng)用時常需外接I/O口和存儲器,以增強(qiáng)單片機(jī)功能,單片機(jī)一般有固定的擴(kuò)展模式。 2、簡介常用存儲器擴(kuò)展方法,常用存儲器芯片及串行數(shù)據(jù)存儲器擴(kuò)展、串行I2C芯片應(yīng)用。5.1 MCS-51系列單片機(jī)系統(tǒng)擴(kuò)展方法 5.1.1最小系統(tǒng)和系統(tǒng)擴(kuò)展方法 單片機(jī)是在一片芯片內(nèi)集成了計算機(jī)的基本組成電路,獨(dú)立使用能更好地發(fā)揮其體積小、重量輕、耗電少、價格低的優(yōu)點(diǎn)。使用最少芯片組成的系統(tǒng)稱為最小系統(tǒng)。MCS-51系列單片機(jī)經(jīng)多年發(fā)展,已經(jīng)有很多公司在生產(chǎn)兼容51內(nèi)核的各種不同配置的單片機(jī),其存儲器容量和內(nèi)部模塊的功能,可以

2、滿足各種不同應(yīng)用的需求。片內(nèi)程序存儲器的容量可以達(dá)到32KB以上,片內(nèi)數(shù)據(jù)存儲器也有超過2KB的,還有的在片內(nèi)集成了EEPROM、ADC、DAC等各種功能模塊。所以,在設(shè)計單片機(jī)應(yīng)用系統(tǒng)時,首先要盡量選擇滿足系統(tǒng)需要的最小系統(tǒng)。 在使用過程中若單片機(jī)本身的功能部件確實(shí)不夠,就需要擴(kuò)展。單片機(jī)系統(tǒng)的擴(kuò)展包括程序存儲器擴(kuò)展,數(shù)據(jù)存儲器擴(kuò)展和接口電路擴(kuò)展。當(dāng)前單片機(jī)型號很多,同一個系列中片內(nèi)程序存儲器容量有多種形式可供選擇,安全性能更高一些,串行存儲器應(yīng)用更多,下面談這兩個問題。 由于MCS51系列單片機(jī)的并行接口可以組成總線,所以有很強(qiáng)的擴(kuò)展功能。采用常用的電路芯片,按照典型的電路連接,就能方便地

3、構(gòu)成各種不同擴(kuò)展的應(yīng)用系統(tǒng)。 MCS-51單片機(jī)的擴(kuò)展也可以利用串行總線,市場上有多種帶有I2C,SPI串行總線接口的接口芯片。單片機(jī)若有相應(yīng)總線控制接口,則系統(tǒng)硬件和軟件設(shè)計將十分簡單。即使沒有相應(yīng)總線控制接口,也可以根據(jù)總線的時序要求,編寫控制程序,用幾位并行接口引腳實(shí)現(xiàn)串行總線擴(kuò)展。5.1.2 MCS-51單片機(jī)的總線組成 5.1.2 MCS-51單片機(jī)的總線組成 系統(tǒng)擴(kuò)展時,用單片機(jī)組成地址總線(AB)、數(shù)據(jù)總線(DB)和控制總線(CB)??偩€的組成見圖5.1所示,P0口作為8位數(shù)據(jù)總線,P0口和P2口組成16位地址總線,P0口經(jīng)地址鎖存器形成地址總線低8位,P2口做地址總線高8位;P

4、3口的第二功能用做控制總線。 即使進(jìn)行并行總線擴(kuò)展,也應(yīng)該盡量減少擴(kuò)展芯片數(shù)量。程序存儲器和數(shù)據(jù)存儲器擴(kuò)展,用一片大容量芯片與用幾片小容量芯片連接方法相比,電路連接簡單,成本也低。接口電路的擴(kuò)展,應(yīng)盡量選用大規(guī)模集成電路的可編程接口芯片。 當(dāng)必需用并行總線擴(kuò)充多個集成電路芯片時,要考慮總線的驅(qū)動能力。驅(qū)動能力不夠,要加總線驅(qū)動器。可以用兩片74LS244組成單向地址總線驅(qū)動器,用一片74LS245組成雙向數(shù)據(jù)總線驅(qū)動器。 使用并行總線擴(kuò)展,MCS-51單片機(jī)的并行I/O口就只剩下P1口為用戶口。 圖5.1 MCS-51單片機(jī)總線組成 52 存貯器擴(kuò)展5.2.1 程序存儲器擴(kuò)展 1EPROM存儲

5、器 一般用EPROM進(jìn)行程序存儲器擴(kuò)展。MCS-51的程序存儲器空間最大為64K,擴(kuò)展時可選用的EPROM芯片有 2764 (8K 8=64k位) 、 27128 (16K 8) 27256 (32K 8=256k位) 、27512 (64K 8) 圖5-2 27256引腳圖 圖5.2是27256的引腳圖。引腳功能如下: A0 A14地址輸入,32KB存儲空間需要 使用這15條地址線。 Q0 Q7 數(shù)據(jù)總線,8位寬度,Q7為高位。 /OE(/G)輸出允許,低電平有效。 /CE(/CS/E)片選信號,低電平有效。 不同廠商符號可能不同。 VPP 編程電源輸入端,根據(jù)說明編程時 多數(shù)接+12V。平

6、時使用時接5V。 VCC、GND +5V電源、地線。其他型號的EPROM,主要區(qū)別是地址線條數(shù)不同。 2擴(kuò)展程序存儲器 復(fù)位后,執(zhí)行外擴(kuò)EPROM程序存儲器的程序時,應(yīng)將MCS-51的EA引腳接GND;若復(fù)位后,從內(nèi)部EPROM中執(zhí)行程序,要將EA引腳接+5V。 擴(kuò)展程序存儲器后,還要執(zhí)行片內(nèi)ROM中的低4K程序,不必將外擴(kuò)EPROM接到4K地址以后,只需將外擴(kuò)EPROM前4K空起來不用。 圖5.5電路圖中擴(kuò)展了32KB的EPROM 27256。數(shù)據(jù)總線D0-D7,地址總線A0-A14接27256對應(yīng)引腳,地址總線A15懸空,單片機(jī)程序選通/PSEN接芯片27256 的讀控制/OE(/G)引腳

7、。芯片的芯片選擇控制/CE(/E)接地,VPP 接+5V。 使用其他容量的EPROM 只須改變地址位數(shù):當(dāng)用2764時,地址總線的A14、A13懸空,用27128時,A14懸空,用27512時,則還要連接A15。 在程序開發(fā)中還有EEPROM(E2PROM)電可擦存儲器28和29系列,如AT28C64等,其引腳與2764、6264兼容,但其第27腳為WE(_), 它不像27系列改寫芯片內(nèi)容前需要用紫外線擦除,而能方便的進(jìn)行多次改寫,掉電后其內(nèi)容也能長期保存。其引腳圖和6264差不多一樣。如圖5.3所示,是32引腳DIP封裝的電可擦存儲器28F256的符號圖。 EEPROM 是一種電可擦除可編程

8、的只讀存儲器,是目前廣泛被使用的一種只讀存儲器,其主要優(yōu)點(diǎn)是能在應(yīng)用系統(tǒng)中進(jìn)行在線改寫,并能在斷電情況下保存數(shù)據(jù)或程序而不需要保護(hù)電源,特別是近年來生產(chǎn)的+5V電可擦除可編程只讀存儲器,電可擦除只讀存儲器因兼有程序存儲器和數(shù)據(jù)存儲器的特點(diǎn),故在單片機(jī)應(yīng)用系統(tǒng)中,即可作為程序存儲,也可用作數(shù)據(jù)存儲器,作為程序存儲器時,其連接方式同一般27系列程序存儲器一樣采用三總線方式,作數(shù)據(jù)存儲器用時,要注意多數(shù)電可擦除存儲器寫入周期很長,往往有ms級,遠(yuǎn)遠(yuǎn)長于單片機(jī)的寫周期s級,故對其寫入控制線可用單片機(jī)的單個I/O口,如P1.0,還要專門編寫相關(guān)的寫入程序?;騿为?dú)用編程器寫入。 圖5.3 電可擦只讀存儲器

9、 1靜態(tài)RAM 單片機(jī)擴(kuò)展數(shù)據(jù)存儲器一般用靜態(tài)RAM。MCS-51的數(shù)據(jù)存儲器空間最大為64K,要考慮給外擴(kuò)接口電路留出地址空間。擴(kuò)展時可選用的靜態(tài)RAM芯片有 6264 (8K8=64k位)圖5.4 6264引腳圖 62256 (32K 8=256 k位) 圖5.4 是6264引腳圖。 引腳功能: A0 A12 地址輸入,8KB存儲空間 需要13條地址線。I/O0 I/O7 數(shù)據(jù)總線,I/O7為高位。OE(_) 讀輸出允許,低電平有效。WE(_)寫控制信號,低電平寫。 其它時高電平。CE1(_)(CS1(_)) 片選信號,低電平有效。 CE2 (CS2) 片選信號,高電平有效。 NC 空腳

10、VCC、GND +5V電源和電源地線。 62256 無CE2 (CS2),26腳為A13, 1腳為A14。 圖5.4 6264引腳圖 圖5.5 擴(kuò)展存儲器 2擴(kuò)展數(shù)據(jù)存儲器 圖5.5電路圖中擴(kuò)展了8KB的靜態(tài)RAM 6264。數(shù)據(jù)總線D0-D7,地址總線A0-A12接6264對應(yīng)引腳,不接地址線A13-A15, WE(_)接WR(_), OE(_)接RD(_)。只擴(kuò)展一片靜態(tài)RAM時,CS2(CE2)接高電平, CS1(_)(/CE1)接地。本圖中6264地址是xxx00000 00000000 xxx11111 11111111,其中x為任意值,即數(shù)據(jù)存儲器地址可為0000H1FFFH,共8

11、K字節(jié)。程序存儲器地址是x0000000 00000000 x1111111 11111111, 即程序存儲器的地址可為0000H7FFFH,共32K字節(jié)。因?yàn)楹虲PU相連的地址線每條都可能有0和1兩種變化,沒相連的地址線變化對存儲器沒影響,可以是任意值。當(dāng)使用62256時,增加連接A13、A14。 53串行存儲器E2PROM的應(yīng)用 常有單片機(jī)應(yīng)用系統(tǒng)在掉電時要保存一些重要的數(shù)據(jù),此時可以用E2PROM完成這一任務(wù)。串行E2PROM占用系統(tǒng)硬件資源少,是常用的方法。串行E2PROM是可在線電可擦除和電寫入的存儲器,具有體積小、接口簡單、數(shù)據(jù)保存可靠、可方便改寫、功耗低等特點(diǎn),而且可低電壓寫入,

12、在單片機(jī)系統(tǒng)中應(yīng)用十分普遍。如串行數(shù)據(jù)存儲器24C02和X84041、串行時鐘芯片DS1302、串行模數(shù)轉(zhuǎn)換器TLC2543C等等。 5.3.1 I2C總線 I2C是由Philips公司推出的一種新型總線標(biāo)準(zhǔn),具有接口線少,控制方式簡單,器件封裝外形結(jié)構(gòu)小,通信速率高等特點(diǎn)。它通過SDA(串行數(shù)據(jù)線)及SCL(串行時鐘線)兩根線在連到總線上的器件之間傳送信息,并根據(jù)地址識別每個器件。I2C總線上允許連接多種接口電路,如A/D及D/A轉(zhuǎn)換器、實(shí)時時鐘/日歷、LCD驅(qū)動器、鍵盤接口等。也可以連接串行E2PROM。 I2C總線是由數(shù)據(jù)線SDA和時鐘線SCL構(gòu)成的串行總線,可以發(fā)送和接收數(shù)據(jù)。在CPU

13、和被控器件間雙向傳送,最高傳送速率為400Kb/s。SDA是雙向串行數(shù)據(jù)線,用于地址、數(shù)據(jù)的輸入和數(shù)據(jù)的輸出,使用時需加上拉電阻。SCL是時鐘線,為器件數(shù)據(jù)傳輸?shù)耐綍r鐘信號。 I2C總線的數(shù)據(jù)傳送格式是:在I2C總線開始信號后,主控器件送出的第一個字節(jié)數(shù)據(jù)是用來選擇從器件的地址,其中前7位為地址碼,第8位為方式位(R/W)。方式位為“0”表示發(fā)送,即CPU把信息寫到所選擇的接口或存儲器;方式位為“1”表示CPU將從接口或存儲器讀信息。開始信號后,系統(tǒng)中的各個器件將自己的地址和CPU送到總線上的地址進(jìn)行比較,如果與CPU發(fā)送到總線上的地址一致,則該器件即為被CPU尋址的器件,其接收信息還是發(fā)送

14、信息則由第8位(R/W)確定。 數(shù)據(jù)在I2C總線上以字節(jié)為單位進(jìn)行傳送,每次傳送先傳最高位。每次傳送的數(shù)據(jù)字節(jié)數(shù)不限,在每個被傳送的字節(jié)后面跟一個應(yīng)答位(ACK), 總線上第9 個時鐘脈沖對應(yīng)于應(yīng)答位,數(shù)據(jù)線上低電平時為應(yīng)答信號,高電平時為非應(yīng)答信號。傳送數(shù)據(jù)開始前,CPU發(fā)送起始位,通知接收器件作好接收準(zhǔn)備。起始位的時序是當(dāng)SCL為高電平時,SDA由高變低。一組數(shù)據(jù)傳送結(jié)束時,CPU發(fā)送停止位,停止位的時序是當(dāng)SCL為高電平時,SDA由低變高。數(shù)據(jù)傳送格式如下:起始位從器件地址R/WACK數(shù)據(jù)ACK數(shù)據(jù)ACK停止位 SDA上的數(shù)據(jù)在SCL高電平時必須穩(wěn)定,在SCL低電平時才允許變化。也就是說

15、時鐘信號SCL為高電平時,SDA由高電平到低電平為開始;當(dāng)時鐘信號SCL為高電平時,SDA由低電平到高電平為結(jié)束。從開始到結(jié)束期間為忙,結(jié)束到下次開始為閑。I2C總線屬集電極開路器件,SCL總線上有一個器件為低電平,將影響所有器件,并使SCL變低,高電平不影響其它器件,當(dāng)所有器件的SCL低電平結(jié)束后SCL總線才變?yōu)楦唠娖?。第一個變低電平的器件把總線SCL拉成低電平。 5.3.2 串行E2PROM -X24C02 X24C02是內(nèi)含2568位低功耗CMOS的E2PROM,具有功耗小、工作電壓寬(2.55.5V)、擦寫次數(shù)多(大于10000次)、寫入速度快(小于10ms)等特點(diǎn)。圖5.6為X24C

16、02的引腳圖。圖中A0、A1、A2是三條地址線,使用時接電源或地,用于確定從芯片的器件地址。VDD和VSS分別為正、負(fù)電源。SDA為串行數(shù)據(jù)輸入/輸出,數(shù)據(jù)通過這條雙向I2C總線串行傳送。SCL為串行時鐘輸入線。WC(_)為寫操作控制端,接“0”允許寫入,接“1”禁止寫入。在這點(diǎn)少數(shù)廠家的產(chǎn)品可能有不同規(guī)定。 圖5.6 X24C02引腳 1.器件尋址與字節(jié)尋址 I2C總線的器件地址的高四位是器件類型識別符,X24C02 E2PROM的器件類型識別符是1010。接著的三位是由A2、A1、A0決定的器件地址,這三位接不同電平,可以在一個系統(tǒng)中接最多八片X24C02。最低位是讀寫控制位,“0”表示寫

17、操作,“1”表示讀操作。 X24C02 E2PROM中有256個字節(jié)(2K位),為指定讀寫單元,還需要在器件地址后跟一個字節(jié)數(shù)據(jù)地址,用于指明字節(jié)地址。 2.字節(jié)寫操作起始位從器件地址0ACK字節(jié)地址ACK數(shù)據(jù)ACK停止位 單片機(jī)送出起始位后,接著送從器件地址碼(7位)、R/W位(0),表示ACK位后面為待寫入數(shù)據(jù)字節(jié)的地址和待寫入數(shù)據(jù)字節(jié),最后用停止位結(jié)束一個字節(jié)的寫入。格式如下: 3.操作 X24C02還允許4個字節(jié)順序?qū)懭?,在以上格式中,連續(xù)送4個字節(jié)數(shù)據(jù),再發(fā)停止位。起始位從器件地址0ACK字節(jié)地址ACK數(shù)據(jù)ACK停止位 3. 字節(jié)讀操作 字節(jié)讀操作需要在讀之前,先用寫操作指定字節(jié)地址

18、,在應(yīng)答位之后,再送起始位和從器件地址碼、R/W位(1),隨后讀出數(shù)據(jù)。格式如下:數(shù)據(jù)ACK停止位起始位從器件地址0ACK字節(jié)地址ACK起始位從器件地址1ACK X24C02允許多個字節(jié)順序讀出,在以上格式中,連續(xù)讀多個字節(jié)數(shù)據(jù),再發(fā)停止位。數(shù)據(jù)ACK停止位起始位從器件地址0ACK字節(jié)地址ACK起始位從器件地址1ACK 5.3.3 51單片機(jī)擴(kuò)展 X24C02 電路連接如圖5.7。寫器件地址為0A0H(1010 000 0分別是識別符、地址和讀寫控制位),讀器件地址為0A1H(只有讀寫控制位不同)。 驅(qū)動程序如下:圖5-7 擴(kuò)展24C02 1.送起始位子程序:STARTBIT:CLR P1.1

19、SETB P1.0 NOPSETBP1.1NOPCLRP1.0NOPCLRP1.1RET 圖5-7 擴(kuò)展24C022.送停止位子程序:STOPBIT: CLR P1.0 NOPSETB P1.1 ;SCLNOPSETB P1.0 ;SDANOPCLR P1.1RET 3.數(shù)據(jù)發(fā)送子程序: 入口條件: A中為待發(fā)送數(shù)據(jù) WDATA: MOV R7,#8 CLR P1.1 WDATA1:CLR P1.1 RLC A MOV P1.0,C ;位傳送 SETB P1.1 DJNZ R7,WDATA1 ;字節(jié)傳送循環(huán) CLRP1.1;8位數(shù)傳完NOPSETB P1.1 ;停止位 NOPSETBP1.0J

20、BP1.0,$;應(yīng)答位檢查CLRP1.1NOPRET4.字節(jié)寫子程序:入口條件:待寫數(shù)據(jù)在R6中,寫入單元地址在R5中。WRBYTE:ACALLSTARTBIT;發(fā)起始位MOVA,#0A0H;送寫器件地址ACALLWDATAMOVA,R5 ;指定字節(jié)地址ACALLWDATAMOVA,R6;傳送字節(jié)數(shù)據(jù)ACALLWDATAACALLSTOPBIT;發(fā)停止位RET5.讀數(shù)據(jù)子程序: 程序出口:讀出字節(jié)在A中 RDATA:MOVR7,#8 RDATA1:CLRP1.1NOPSETBP1.1NOPMOVC,P1.0;位讀入RLCADJNZ R7,RDATA1;讀字節(jié)循環(huán)CLRP1.1;ACKNOPSE

21、TB P1.0NOPSETBP1.1NOPRET 6字節(jié)讀子程序: 入口條件:讀字節(jié)地址在R5中;程序出口:讀出字節(jié)在A中 RDBYTE:ACALLSTARTBIT;發(fā)起始位 MOVA,#0A0H;送寫器件地址ACALLWDATAMOV A,R5;指定字節(jié)地址ACALLWDATANOPACALLSTARTBIT;發(fā)起始位MOVA,#0A1H;送讀器件地址ACALLWDATAACALLRDATA;讀出數(shù)據(jù)ACALLSTOPBIT;發(fā)停止位RET 5.4 串行溫度傳感器DS18B20 5.4.1 DALLAS公司DS18B20基本參數(shù) DALLAS公司生產(chǎn)的單線數(shù)字溫度傳感器DS18B20、 DS

22、1822,外形如圖5.8所示,支持“一線總線”接口,測量溫度范圍為 -55C+125C,在-10+85C范圍內(nèi),精度為0.5C。DS1822的精度較差為 2C ?,F(xiàn)場溫度直接以“一線總線”的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場溫度測量,新的產(chǎn)品支持3V5.5V的電壓范圍, DS18B20可以程序設(shè)定912位的分辨率,精度為0.5C。用戶設(shè)定的報警溫度存儲在EEPROM中,掉電后依然保存。圖5.8 DS18B20的封裝 DS1822與 DS18B20軟件兼容,是DS18B20的簡化版本。省略了存儲用戶定義報警溫度、分辨率參數(shù)的EEPROM,精度降低為2C,是經(jīng)濟(jì)型產(chǎn)品。

23、DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器。DS18B20的管腳排列如下:DQ為數(shù)字信號輸入/輸出端;GND為電源地;VDD為外接供電電源輸入端(在寄生電源接線方式時接地)。 光刻ROM中的64位序列號是出廠前被光刻好的,它可以看作是該DS18B20的地址序列碼。64位光刻ROM的排列是:開始8位(28H)是產(chǎn)品類型標(biāo)號,接著的48位是該DS18B20自身的序列號,最后8位是前面56位的循環(huán)冗余校驗(yàn)碼(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一個DS18B20都各不相同,這樣就可以實(shí)現(xiàn)一根總線上掛接多個DS1

24、8B20的目的。DS18B20中的溫度傳感器可完成對溫度的測量,以12位轉(zhuǎn)化為例:用16位符號擴(kuò)展的二進(jìn)制補(bǔ)碼讀數(shù)形式提供,以0.0625/LSB形式表達(dá),其中S為符號位。 這是12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲在18B20的兩個8比特(位)的RAM中,Bit0是最低位,二進(jìn)制中的前面5位是符號位,如果測得的溫度大于0,這5位為0,只要將測到的數(shù)值乘于0.0625即可得到實(shí)際溫度;如果溫度小于0,這5位為1,測到的數(shù)值需要取反加1再乘于0.0625即可得到實(shí)際溫度。例如+125的數(shù)字輸出為07D0H,+25.0625的數(shù)字輸出為0191H,-25.0625的數(shù)字輸出為FF6FH,-55的數(shù)字輸

25、出為FC90H。 溫度值位指示 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 溫度值 的低字節(jié) 2 2 2 2 2-1 2-2 2-3 2-4 溫度值 位指示 Bit15 Bit14 Bit13 Bit12 Bit11 Bit10 Bit9 Bit8 溫度值 的高字節(jié) S S S S S 26 25 24 表5.1兩字節(jié)12位溫度格式 DS18B20溫度傳感器的內(nèi)部存儲器包括一個高速暫存RAM(數(shù)據(jù)緩沖寄存器)和一個非易失性的可電擦除的E2RAM,后者存放高溫度和低溫度觸發(fā)器TH、TL和結(jié)構(gòu)寄存器。前者暫存存儲器包含了8個連續(xù)字節(jié),前兩個字節(jié)是測得的溫度信息,

26、第一個字節(jié)的內(nèi)容是溫度的低八位,第二個字節(jié)是溫度的高八位。第三個和第四個字節(jié)是TH、TL的易失性拷貝,第五個字節(jié)是結(jié)構(gòu)寄存器的易失性拷貝,這三個字節(jié)的內(nèi)容在每一次上電復(fù)位時被刷新。第六、七、八個字節(jié)用于內(nèi)部計算。第九個字節(jié)是冗余檢驗(yàn)字節(jié)。該字節(jié)各位的意義如下:TM R1 R0 1 1 1 1 1 如表5。4所示。溫度值/ 雙字節(jié)溫度(二進(jìn)制) 雙字節(jié)溫度(十六進(jìn)制) +125 0000 0111 1101 0000 07D0H +85.5 0000 0101 0101 1000 0558H +25.0625 0000 0001 1001 0001 0191H +10.125 0000 0000

27、 1010 0010 00A2H 0 0000 0000 0000 0000 0000H -1.5 1111 1111 1110 1000 FFE8H -10.125 1111 1111 0101 1110 FF5EH -25.0625 1111 1111 0110 1111 FE6FH -55 1111 1100 1001 0000 FC90H表5.2兩字節(jié)溫度與十進(jìn)制溫度轉(zhuǎn)換關(guān)系 該寄存器的低五位一直都是1 ,TM是測試模式位,用于設(shè)置DS18B20處在工作模式還是在測試模式。在DS18B20出廠時該位被設(shè)置為0,用戶不要去改動。R1和R0用來設(shè)置分辨率,如下表所示:(DS18B20出廠時

28、被設(shè)置為12位). R1 R0 分辨率 溫度最大轉(zhuǎn)換時間 0 0 9位 93.75ms 0 1 10位 187.5ms 1 0 11位 375ms 1 1 12位 750ms 表5.3分辨率設(shè)置表: 寄存器 內(nèi)容字節(jié)地址 溫度低8位0 溫度高8位1 高溫限值 2 低溫限值3 配置寄存器4 保留5 計數(shù)剩余值6 每度計數(shù)值7 CRC校驗(yàn)8 表5.4 根據(jù)DS18B20的通訊協(xié)議,主機(jī)控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過三個步驟:每一次讀寫之前都要對DS18B20進(jìn)行復(fù)位,復(fù)位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對DS18B20進(jìn)行預(yù)定的操作。復(fù)位要求主CPU將數(shù)據(jù)線下拉500

29、微秒,然后釋放(輸出高),DS18B20收到信號后等待1660微秒左右,后發(fā)出60240微秒的存在低脈沖,拉低總線,主CPU收到此信號表示復(fù)位成功。 5.4.2溫度傳感器DS1820使用中注意事項(xiàng) DS1820雖然具有測溫系統(tǒng)簡單、測溫精度高、連接方便、占用口線少等優(yōu)點(diǎn),但在實(shí)際應(yīng)用中也應(yīng)注意以下幾方面的問題: (1)較小的硬件開銷需要相對復(fù)雜的軟件進(jìn)行補(bǔ)償,由于DS1820與微處理器間采用串行數(shù)據(jù)傳送,因此,在對DS1820進(jìn)行讀寫編程時,必須嚴(yán)格的保證讀寫時序,否則將無法讀取測溫結(jié)果。在使用PL/M、C等高級語言進(jìn)行系統(tǒng)程序設(shè)計時,對DS1820操作部分最好采用匯編語言實(shí)現(xiàn)。由于本節(jié)技術(shù)復(fù)

30、雜性,對一般讀者DS18B20內(nèi)容只作閱讀。 (2)在DS1820的有關(guān)資料中均未提及單總線上所掛DS1820數(shù)量問題,容易使人誤認(rèn)為可以掛任意多個DS1820,在實(shí)際應(yīng)用中并非如此。當(dāng)單總線上所掛DS1820超過8個時,就需要解決微處理器的總線驅(qū)動問題,這一點(diǎn)在進(jìn)行多點(diǎn)測溫系統(tǒng)設(shè)計時要加以注意。 (3)連接DS1820的總線電纜是有長度限制的。試驗(yàn)中,當(dāng)采用普通信號電纜傳輸長度超過50m時,讀取的測溫數(shù)據(jù)將發(fā)生錯誤。當(dāng)將總線電纜改為雙絞線帶屏蔽電纜時,正常通訊距離可達(dá)150m,當(dāng)采用每米絞合次數(shù)更多的雙絞線帶屏蔽電纜時,正常通訊距離進(jìn)一步加長。這種情況主要是由總線分布電容使信號波形產(chǎn)生畸變造

31、成的。因此,在用DS1820進(jìn)行長距離測溫系統(tǒng)設(shè)計時要充分考慮總線分布電容和阻抗匹配問題。命令功能 指令代碼 功能說明讀ROM33H讀DS18B20中的64位光刻ROM序列號啟動轉(zhuǎn)換 44H 啟動溫度轉(zhuǎn)換,結(jié)果存入內(nèi)部高速暫存器RAM中寫溫限值 4EH向內(nèi)部字節(jié)地址2和3 中寫入上下限溫度值匹配ROM 55H發(fā)出命令后,還發(fā)送64位ROM序列號尋找對應(yīng)號碼的18B20讀供電 B4H讀電源供給方式: 18B20發(fā)0為寄生供電,1為外接供電讀取溫度 BEH讀取溫度寄存器等9字節(jié)的內(nèi)容跳過ROM CCH單片18B20時,跳過讀序列號操作,直接發(fā)溫度轉(zhuǎn)換報警搜索 ECH執(zhí)行后,當(dāng)溫度超過上下限值時18

32、B20才作響應(yīng)搜索ROM F0H搜索同一條線上掛接有 幾個18B20,識別ROM表5.5溫度傳感器DS18B20指令(命令)說明 (4)在DS18B20測溫程序設(shè)計中,向DS18B20發(fā)出溫度轉(zhuǎn)換命令后,程序總要等待DS18B20的返回信號,一旦某個DS18B20接觸不好或斷線,當(dāng)程序讀該DS18B20時,將沒有返回信號,程序會進(jìn)入死循環(huán)。這一點(diǎn)在進(jìn)行DS18B20硬件連接和軟件設(shè)計時也要給予一定的重視。測溫電纜線建議采用屏蔽4芯雙絞線,其中一對線接地線與信號線,另一組接VCC和地線,屏蔽層在源端單點(diǎn)接地.當(dāng)用P1.0和DS18B20相連接時參考程序如下。DQ EQU P1.0 ORG 000

33、0H AJMP MAIN ORG 1000HMAIN: LCALL INIT_18B20 ;調(diào)復(fù)位子程序MOV A,#0CCH LCALL WRITE_18B20 ; 跳過讀序列號操作MOV A,#4EH ;寫限制溫度命令LCALL WRITE_18B20 MOV A, #TH ;寫入上限溫度值LCALL WRITE_18B20 MOV A,#TL LCALL WRITE_18B20;寫入下限溫度值 MOV A, CONFIG12 LCALL WRITE_18B20 ;設(shè)為12位轉(zhuǎn)換精度MAIN1: LCALL INIT_18B20 ;復(fù)位子程序 LCALL RD_TEMPER ;讀溫度 LC

34、ALL LDVV ;調(diào)數(shù)據(jù)處理子程序, 簡寫程序 LCALL DISPLAY ;調(diào)顯示子程序, 省略程序 LJMP MAIN1;*DS18B20復(fù)位程序*INIT_18B20: MOV R7 #06H ;復(fù)位時查詢次數(shù) LOP0:SETB DQ ;18B20輸入端 MOV R0,#0FBH CLR DQ TSR1: DJNZ R0,TSR1 ;維持DQ低電平 480s960s SETB DQ MOV R0,#25H TSR2: DJNZ R0,TSR2 JNB DQ ,TSR3 ;查看18B20把DQ拉低否 DJNZ R7,LOP0 ;未拉低則延時再查, 6次結(jié)束 SETB P2.0 ;延時期

35、未能查到18B20 SJMP TSR4 TSR3: SETB FLAG1 ;置標(biāo)志位FLAG1, 表明DS18B20存在 CLR P2.0 ;二極管指示TSR5: MOV R0,#06BH TSR6: DJNZ R0,TSR6 ;延時后結(jié)束 CLR C ORL C, DQLOP1;JC TSR4 ;確認(rèn)一次 AJMP TSR7TSR4: CLR FLAG1 ;未能查到 SETB P2.0 ;取消指示燈 SETB DQ ;表明不存在 TSR7: RET ;*讀轉(zhuǎn)換后的溫度值* RD_TEMPER: SETB DQ LCALL INIT_18B20 JB FLAG1,TSS2 RET ;若不存在則

36、返回 TSS2: MOV A,#0CCH ;跳過ROM LCALL WRITE_18B20 MOV A,#44H ;發(fā)出溫度轉(zhuǎn)換命令 LCALL WRITE_18B20 LCALL DELAY ;調(diào)延時子程序500msLCALL INIT_18B20 ;調(diào)復(fù)位子程序 MOV A,#0CCH ;跳過ROM LCALL WRITE_18B20 MOV A,#0BEH ;發(fā)出讀溫度換命 LCALL WRITE_18B2 LCALL READ2_18B20 ;讀兩個字節(jié)的溫度 RET ;*寫DS18B20程序* WRITE_18B20: MOV R2,#8 SETB DQ WR1: CLR DQ MO

37、V R3,#6 DJNZ R3,$ ;寫前保持15s低電平 RRC AMOV DQ,C;寫入一位 MOV R3,#30 DJNZ R3,$ ;等待18B20讀入 SETB DQ DJNZ R2,WR1 ;8位寫完否 SETB DQ ;寫完結(jié)束 RET ;*讀18B20程序,讀出兩個字節(jié)的溫度* READ2_18B20: MOV R4,#2 ;低位存在29H,高位存在28H MOV R1,#29H RE00: MOV R2,#8 RE01: CLR DQ ;低電平10s NOP NOP NOP SETB DQ ;高電平延時 MOV R3,#7 DJNZ R3,$ MOV C,DQ ;讀入一位溫度

38、到C中 MOV R3,#30 DJNZ R3,$ RRC A DJNZ R2,RE01 ;共讀8位 MOV R1,A ;保存 DEC R1 ;保存下一數(shù)據(jù)單元地址 DJNZ R4,RE00 ;讀第二字節(jié) RET ;*讀出的溫度進(jìn)行數(shù)據(jù)轉(zhuǎn)換*LDVV: MOV A,29H ; 看成溫度大于0 MOV C,28H.0 ;將28H中的最低位移入C RRC A MOV C,28H.1 RRC A MOV C,28H.2 RRC A MOV C,28H.3 RRC A MOV 30H,A ;整數(shù)溫度結(jié)果存30H單元 JNC LOP2 ;小數(shù)點(diǎn)后面的數(shù)四舍五入 INC 30H LOP2: RET 練習(xí)8音

39、樂程序 1、 計算機(jī)可以模擬發(fā)聲是大家都知道的事,電子琴就是利用電子電路發(fā)聲的典型,當(dāng)前MP3機(jī)的流行也是電子發(fā)聲的代表事件。這里講解用單片機(jī)發(fā)聲的方法,重點(diǎn)在了解計算機(jī)發(fā)聲的原理,學(xué)習(xí)單片機(jī)的編程方法,數(shù)據(jù)放在程序存儲器中,采用查表程序編寫,使用定時器產(chǎn)生聲音所需頻率的方波,經(jīng)放大整形后送楊聲器發(fā)出一個音,如圖5.9所示,再按節(jié)拍送下一頻率的聲音,聲音的節(jié)拍由延時程序給定,也就是說其發(fā)聲的原理是:音調(diào)由不同的頻率產(chǎn)生,由延時程序產(chǎn)生節(jié)拍,由定時器定時產(chǎn)生方波頻率,如1KHZ頻率的聲音,周期是1mS,正負(fù)半周各500s,當(dāng)用6MHZ晶體,定時方式1時,可計算定時器初值如下:(216-X)*12

40、/6=500S, X=65535-250=65285=FF05H,本次采用的音調(diào)、頻率、定時器初值對應(yīng)關(guān)系見表5.6所示,這個表中數(shù)據(jù)音調(diào)較低,實(shí)驗(yàn)時可適當(dāng)調(diào)高,節(jié)拍一秒鐘約幾拍,常見是1/4拍子。其確定方法見下面例子,懂簡譜時較好理解。圖5.9 音樂程序電路參考圖 音調(diào) 4 5 6 7 1 2 3頻率 175 196 220 248 262 294 330T1初值 FA49 FAE6 FB7E FC0C FC2F FC8F FCF8音調(diào) 4 5 6 7 1(_) 2(_) 3(_)頻率 349 392 440 494 523 587 659T1初值 FD23 FD73 FDBA FDFA F

41、E18 FE4C FE94表5.6 音樂 音調(diào)和T1初值對照表 查表方法: 我的祖國 第一句簡譜和T1初值對應(yīng)如下: 簡譜: 1 2 3 5 1(_) 6 5 T1初值:FC2F02 FC8F02 FCF802 FD7302 FE1801 FDBA01 FD7304 由上可知每一個音調(diào)對應(yīng)3個字節(jié)數(shù)據(jù),前兩個是音調(diào),第三個是節(jié)拍。程序中音調(diào)由定時器產(chǎn)生,節(jié)拍由延時得到,把一個曲子的所有數(shù)據(jù)放入數(shù)據(jù)表DATA1中,用00H,00H,00H結(jié)束,程序可循環(huán)播放這段曲子。 2、程序清單如下: ORG 0000H LJMP START ORG 001BH LJMP LT1 START: MOV TMO

42、D ,#11H ;T1定時方式1 SETB ET1 ;T1開中斷 ETB EA MOV DPTR, #DATA1 ;指向數(shù)據(jù)表 MOV A, #00H ;查表指令中用到 A的內(nèi)容LOP: MOVC A, A+DPTR ;查表A+DPTR得到的 十六位地址中的數(shù) JZ START ;查到00則運(yùn)行下一輪 MOV R5,A ;暫存準(zhǔn)備在中斷程序中 使用 R5的內(nèi)容 MOV TH1,A ;T1裝入高8位 INC DPTR ;查下一個值 MOV A,#00H MOVC A,A+DPTR MOV R6,A ;產(chǎn)生中斷時T1還要多次 裝入初值 MOV TL1,A ;第二個值裝入TL1 SETB TR1 INC DPTR ;指向第三個值 MOV A,#00H MOVC A,A+DPTR MOV R2,A ;裝入R2的內(nèi)容, 用于產(chǎn)生節(jié)拍,延時 LOP1: MOV R3,#80H ;延時程序 FEH*80H*(R2)=255*128*4=128MS LOP2: MOV R4,#0FEH ;(R2)=04H這樣一個音響約0.25秒 LOP3 DJNZ R4,LOP3 ;延時產(chǎn)生節(jié)拍, R2的內(nèi)容決定延時長度 DJNZ R3,LOP2 DJNZ R2,LOP1 INC DPTR MOV A,#00H SJ

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論