《C51單片機(jī)編程與應(yīng)用》 課件 第9單元 單片機(jī)的溫度測量系統(tǒng)_第1頁
《C51單片機(jī)編程與應(yīng)用》 課件 第9單元 單片機(jī)的溫度測量系統(tǒng)_第2頁
《C51單片機(jī)編程與應(yīng)用》 課件 第9單元 單片機(jī)的溫度測量系統(tǒng)_第3頁
《C51單片機(jī)編程與應(yīng)用》 課件 第9單元 單片機(jī)的溫度測量系統(tǒng)_第4頁
《C51單片機(jī)編程與應(yīng)用》 課件 第9單元 單片機(jī)的溫度測量系統(tǒng)_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

單片機(jī)的溫度測量系統(tǒng)蘇州工業(yè)職業(yè)技術(shù)學(xué)院溫度是工農(nóng)業(yè)生產(chǎn)中最常用的參數(shù)之一。在30多種常用物理量的測量傳感器中,對溫度傳感器的需要量占首位,大約占50%左右。本單元主通過Proteus仿真軟件和Keil編程軟件,設(shè)計了以C51單片機(jī)為核心控制單元,結(jié)合DS18B20溫度傳感器的應(yīng)用,設(shè)計溫度測量電路,實現(xiàn)溫度的測量與顯示。

9.2onewire通信原理9.1DS18B20工作原理9.3任務(wù)9-1設(shè)計一個溫度測量系統(tǒng)DS18B20是美國DALLAS半導(dǎo)體公司生產(chǎn)的單線智能溫度傳感器,能夠直接讀出被測溫度并且可根據(jù)實際要求通過簡單的編程實現(xiàn)9~12位的數(shù)字值讀數(shù)方式??梢苑謩e在93.75ms和750ms內(nèi)完成9位和12位的數(shù)字量,并且從DS18B20讀出的信息或?qū)懭隓S18B20的信息僅需要一根口線(單線接口)讀寫,溫度變換功率來源于數(shù)據(jù)總線,總線本身也可以向所掛接的DS18B20供電,而無需額外電源。因而使用DS18B20可使系統(tǒng)結(jié)構(gòu)更趨簡單,可靠性更高??蓮V泛用于工業(yè)、民用、軍事等領(lǐng)域的溫度測量及控制儀器、測控系統(tǒng)和大型設(shè)備中。

9.1.1DS18B20簡介(1)采用單總線專用技術(shù),既可通過串行口線,也可通過其它I/O口線與微機(jī)接口,無須經(jīng)過其它變換電路,直接輸出被測溫度值(9位二進(jìn)制數(shù),含符號位)。(2)測溫范圍為-55℃-+125℃,測量分辨率為0.0625℃。(3)內(nèi)含64位經(jīng)過激光修正的只讀存儲器ROM。(4)適配各種單片機(jī)或系統(tǒng)機(jī)。(5)用戶可分別設(shè)定各路溫度的上、下限。(6)內(nèi)含寄生電源。

9.1.2DS18B20的性能特點DS18B20采用3腳TO-92封裝,外形如同普通的半導(dǎo)體三極管,除此之外,DS18B20也有8腳的SO封裝和6腳的μSOP封裝形式,如圖所示。(1)DQ:數(shù)字信號輸入/輸出端。(2)GND:電源地。??(3)VDD:外接供電電源輸入端(在寄生電源接線方式時接地)。

9.1.3DS18B20的外形和內(nèi)部結(jié)構(gòu)DS18B20引腳分布圖DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM,溫度傳感器,溫度報警觸發(fā)器TH和TL,高速緩存存儲器,內(nèi)部結(jié)構(gòu)如下圖所示。

9.1.3DS18B20的外形和內(nèi)部結(jié)構(gòu)64位ROM結(jié)構(gòu)圖為了滿足測溫的靈活性,需要在不同的場合選擇不同的精度,通過對配置寄存器(CONFIG)的編程即可實現(xiàn)上述目的,CONFIG的格式如下圖所示。其中R1、R0決定溫度轉(zhuǎn)換的精度位數(shù),R1、R0與轉(zhuǎn)換位數(shù)、轉(zhuǎn)換時間的關(guān)系如下表所示。

9.1.3DS18B20的外形和內(nèi)部結(jié)構(gòu)配置寄存器(CONFIG)0R1R011

111R1R0分辨率溫度最大轉(zhuǎn)換時間009位93.75ms0110位187.5ms1011位375ms1112位750ms分辨率與轉(zhuǎn)換時間的關(guān)系溫度傳感器可完成對溫度的測量,單片機(jī)可以通過單總線接口讀到該數(shù)據(jù),讀取時低位在前,高位在后。下表所示是分辨率為12-bit時的數(shù)據(jù)格式,用16位符號擴(kuò)展的二進(jìn)制補(bǔ)碼讀數(shù)形式提供,以0.0625℃/LSB形式表達(dá),其中S為符號位。

9.1.3DS18B20的外形和內(nèi)部結(jié)構(gòu)DS18B20溫度值格式表

BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0LSBYTE232221202-12-22-32-4

BIT15BIT14BIT13BIT12BIT11BIT10BIT9BIT8MSBYTESSSSS262524

12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲在18B20的兩個8比特的RAM中,二進(jìn)制中的前面5位是符號位,如果測得的溫度大于0,這5位為0,只要將測到的數(shù)值乘于0.0625即可得到實際溫度;如果溫度小于0,這5位為1,測到的數(shù)值需要取反加1再乘于0.0625即可得到實際溫度。溫度與數(shù)字輸出的對應(yīng)關(guān)系如右表,例如+125℃的數(shù)字輸出為07D0H,-55℃的數(shù)字輸出為FC90H。

9.1.3DS18B20的外形和內(nèi)部結(jié)構(gòu)溫度值十六進(jìn)制輸出+125OC07D0H+85OC0550H+25.0625OC0191H+10.125OC00A2H+0.5OC0008H0OC0000H-0.5OCFFF8H-10.125OCFF5EH-25.0625OCFE6FH-55OCFC90HDS18B20溫度數(shù)據(jù)表

DS18B20溫度傳感器的內(nèi)部存儲器包括一個高速暫存RAM和一個非易失性的可電擦除的EEPRAM,后者存放高溫度和低溫度觸發(fā)器TH、TL和結(jié)構(gòu)寄存器。高速緩存存儲器由9個字節(jié)組成,其分配如右表。當(dāng)溫度轉(zhuǎn)換命令發(fā)布后,經(jīng)轉(zhuǎn)換所得的溫度值以二字節(jié)補(bǔ)碼形式存放在高速緩存存儲器的第0和第1個字節(jié)。單片機(jī)可通過單線接口讀到該數(shù)據(jù),讀取時低位在前,高位在后。第九個字節(jié)是冗余檢驗字節(jié)。

9.1.3DS18B20的外形和內(nèi)部結(jié)構(gòu)DS18B20緩存寄存器分布寄存器內(nèi)容字節(jié)地址溫度值低位(LSByte)0溫度值高位(MSByte)1高溫限值(TH)2低溫限值(TL)3配置寄存器4保留5保留6保留7CRC校驗值8

DS18B20與單片機(jī)的連接有兩種方法:一種是外部電源供電方式,VDD接外部電源,GND接地,DQ與單片機(jī)的I/O線相連;另一種是寄生電源供電方式,VDD、GND接地,DQ接單片機(jī)I/O。無論是內(nèi)部寄生電源還是外部供電,I/O口線都要接5KΩ左右的上拉電阻。

9.1.4DS18B20控制方法外部電源供電方式寄生電源供電方式根據(jù)DS18B20的通信協(xié)議,主機(jī)(單片機(jī))控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過三個步驟:每一次讀寫之前都要對DS18B20進(jìn)行初始化操作,初始化成功后執(zhí)行一條對ROM的操作指令,最后發(fā)送RAM指令,這樣才能對DS18B20進(jìn)行預(yù)定的操作。DS18B20共有5條ROM操作命令和6條RAM操作命令。

9.1.4DS18B20控制方法9.1.4DS18B20控制方法指令指令代碼功能讀ROM33H讀取ROM中的64位序列號(用于多點測溫)匹配ROM55H發(fā)出此命令之后,接著發(fā)出64位ROM編碼,訪問單總線上與該編碼相對應(yīng)的DS18B20使之作出響應(yīng),為下一步對該DS18B20的讀寫作準(zhǔn)備。跳過ROMCCH忽略64位ROM地址,直接向DS18B20發(fā)溫度變換命令。適用于單片工作。搜索ROMF0H用于確定掛接在同一總線上DS18B20的個數(shù)和識別64位ROM地址。為操作各器件作好準(zhǔn)備。報警搜索ECH執(zhí)行后只有溫度超過設(shè)定值上限或下限的片子才做出響應(yīng)。ROM操作命令9.1.4DS18B20控制方法指令約定代碼操作說明溫度轉(zhuǎn)換44H啟動DS18B20進(jìn)行溫度轉(zhuǎn)換讀暫存器BEH讀暫存器9個字節(jié)內(nèi)容寫暫存器4EH將數(shù)據(jù)寫入暫存器的TH、TL字節(jié)復(fù)制暫存器48H把暫存器的TH、TL字節(jié)寫到E2RAM中重新調(diào)E2RAMB8H把E2RAM中的TH、TL字節(jié)寫到暫存器TH、TL字節(jié)讀電源供電方式B4H啟動DS18B20發(fā)送電源供電方式的信號給主CPURAM操作命令9.2onewire通信原理9.1DS18B20工作原理9.3任務(wù)9-1設(shè)計一個溫度測量系統(tǒng)

Onewire,即單線總線,又叫單總線。單總線技術(shù)(1-WireBus)是美國的達(dá)拉斯半導(dǎo)體公司(DALLASSEMICONDUCTOR)推出的一項特有的技術(shù),它采用單根信號線,既可傳輸時鐘,又能傳輸數(shù)據(jù),而且數(shù)據(jù)傳輸是雙向的,因而這種單總線技術(shù)具有線路簡單,硬件開銷少,成本低廉,便于總線擴(kuò)展和維護(hù)等優(yōu)點。

9.2.1onewire簡介DS18B20與單片機(jī)的通信是通過嚴(yán)格的時序來實現(xiàn)的,每次傳送數(shù)據(jù)或命令都是由一系列的時序信號組成的,共有三種基本時序:初始化時序;寫0、1時序;讀0、1時序。

9.2.2onewire通信協(xié)議1.初始化時序單片機(jī)先發(fā)一個復(fù)位脈沖,保持低電平時間最少480μs,最多不能超過960μs。然后,單片機(jī)釋放總線,等待DS18B20的應(yīng)答脈沖。DS18B20在接受到復(fù)位脈沖后等待15~60μs才能發(fā)出應(yīng)答脈沖。應(yīng)答脈沖能保持60~240μs。單片機(jī)從發(fā)送完復(fù)位脈沖到再次控制總線至少要等待480μs。

9.2.2onewire通信協(xié)議onewire初始化時序9.2.2onewire通信協(xié)議1.voiddelay_us(ucharus){while(us--);}voidreset(){bitflag;dq=1;delay_us(1);dq=0; delay_us(80);dq=1; delay_us(8);flag=dq; delay_us(20);}//

s延時2.

3.

4.

5.

6.

7.//dq復(fù)位8.//稍做延時9.//單片機(jī)將dq拉低10.//精確延時大于480

s11.//拉高總線12.

13.//flag=0初始化成功,flag=1則初始化失敗14.

15.

初始化參考程序2.寫時序?qū)憰r序分為寫0和寫1兩個過程,當(dāng)要寫0時,單總線要被拉低至少60μs,保證DS18B20能夠在15~45μs之間正確地采樣總線上的0電平。當(dāng)要寫1時,單總線被拉低之后,在15μs之內(nèi)就得釋放總線。寫0時序和寫1時序兩個過程可以合并為一個子程序,分別在DS18B20的采樣區(qū)送0和1。

9.2.2onewire通信協(xié)議Onewire寫時序9.2.2onewire通信協(xié)議寫參考程序1.voidwrite_byte(uchardat)

{uchari;bitonebit;for(i=1;i<=8;i++){onebit=dat&0x01;dat=dat>>1;if(onebit){dq=0;_nop_();_nop_();dq=1;delay_us(5);}else{dq=0; delay_us(8);dq=1;_nop_();_nop_(); }}}//寫一個字節(jié)2.

3.

4.

5.

6.

7.

8.

9.//寫110.

11.

12.

13.

14.

15.

16.

17.//寫018.

19.

20.

21.

22.

23.

24.

25.

26.

3.讀時序讀時序分為讀0和讀1兩個過程,DS18B20的讀時序是從主機(jī)把單總線拉低之后,在15μs之內(nèi)就得釋放總線,以使DS18B20把數(shù)據(jù)傳輸?shù)絾慰偩€上。DS18B20完成一個讀時序過程至少需要60μs。這兩個時序可以合并為一個子程序。

9.2.2onewire通信協(xié)議Onewire讀時序9.2.2onewire通信協(xié)議讀參考程序1.bitread_bit() {bitdat;dq=0;_nop_();dq=1;_nop_();_nop_();dat=dq;delay_us(10);return(dat);}ucharread_byte() {ucharvalue,i,j;value=0;for(i=0;i<8;i++){j=read_bit();value=(j<<7)|(value>>1);}return(value);}//讀一個位2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.//讀一個字節(jié)14.

15.

16.

17.//寫018.

19.

20.

21.

22.9.2onewire通信原理9.1DS18B20工作原理9.3任務(wù)9-1設(shè)計一個溫度測量系統(tǒng)通過單總線,采集數(shù)字溫度傳感器DS18B20的溫度,并通過數(shù)碼管顯示。(1)溫度信號的采集與轉(zhuǎn)換;(2)數(shù)碼管的顯示;(3)Proteus仿真搭建溫度測量系統(tǒng),并驗證程序功能;(4)完成實物的程序下載及功能調(diào)試與驗證。

9.3.1任務(wù)要求根據(jù)系統(tǒng)的功能要求,采用DS18B20溫度傳感器采集環(huán)境溫度,將溫度傳感器的輸出端直接與單片機(jī)的P2.4相連接。利用單片機(jī)控制溫度信號的采集與接收溫度信號,再通過單片機(jī)對接收的數(shù)字信號轉(zhuǎn)換成相應(yīng)的溫度值送數(shù)碼管顯示電路顯示。單片機(jī)檢測溫度的系統(tǒng)框圖如下圖所示。

9.3.2知識鏈接單片機(jī)檢測溫度的系統(tǒng)框圖實現(xiàn)項目功能仿真的電路圖如下圖所示。在仿真運行時可以通過鼠標(biāo)調(diào)節(jié)DS18B20上的溫度,數(shù)碼管可以實時顯示溫度。

9.3.2知識鏈接仿真電路圖以下程序為利用DS18B20傳感器測量溫度值的C程序,通過DS18B20測量環(huán)境溫度,單片機(jī)控制溫度信號的采集并接收后進(jìn)行處理,最后通過數(shù)碼管顯示,具體程序如下。

9.3.3任務(wù)實施1.#include<reg52.h>//包含單片機(jī)寄存器的頭文件2.#defineucharunsignedchar//宏定義3.#defineuintunsignedint

4.sbitdula=P2^7;//數(shù)碼管段選5.sbitwela=P2^6; //數(shù)碼管位選6.sbitDQ=P2^4;

7.ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x39};//0123456789-C段碼表8.uchardspbuf[8]=0;//段選變量9.uchardspcom=0; //位選循環(huán)變量10.uchartemperature=0,flag;//溫度變量,溫度值正負(fù)的標(biāo)志變量9.3.3任務(wù)實施11./*--------------------------m毫秒延時函數(shù)--------------------------*/12.voidDelay(uintm)

13.{

14.uintn;

15.for(;m>0;m--)

16.for(n=124;n>0;n--)

17.;

18.}

19./*--------------------------t*10μs延時函數(shù)-------------------------*/20.voidDelay_OneWire(uchart)

21.{

22.do

23.{

24._nop_();

25._nop_();

26._nop_();

27._nop_();

28._nop_();

29._nop_();

30._nop_()

31._nop_();

32.}while(--t);

33.}

9.3.3任務(wù)實施34./*-----------------------DS18B20初始化---------------------------*/35.bitinit_ds18b20()

36.{

37.bitinitflag=0;//儲存DS18B20是否存在的標(biāo)志,initflag=0,表示存在;initflag=1,表示不存在38.EA=0;

39.DQ=0;//先將數(shù)據(jù)線拉低40.Delay_OneWire(50);//延時500us,要求保持480~960us41.DQ=1; //再將數(shù)據(jù)線從低拉高42.Delay_OneWire(6);//延時43.initflag=DQ;//initflag等于1初始化失敗,等于0初始化成功44.while(!DQ); //等待DS18B20釋放總線45.EA=1;

46.returninitflag;//返回檢測成功標(biāo)志47.}

9.3.3任務(wù)實施48./*------------------通過單總線向DS18B20寫一個字節(jié)-----------------------*/49.VoidWrite_DS18B20(uchardat)

50.{

51.uchari;

52.EA=0;

53.for(i=0;i<8;i++)

54.{

55.DQ=0; //將數(shù)據(jù)線從高拉低時即啟動寫時序

56._nop_();

57._nop_();

58.DQ=dat&0x01; //利用與運算取出最低位,并將其送到數(shù)據(jù)線上等待DS18B20采樣

59.Delay_OneWire(6); //延時約60us,DS18B20在拉低后的約15~60us期間從數(shù)據(jù)線上采樣60.DQ=1; //釋放數(shù)據(jù)線61.dat>>=1; //將dat中的各二進(jìn)制位數(shù)據(jù)右移1位62.}

63.EA=1;

64.}

65.

9.3.3任務(wù)實施66./*----------------------從DS18B20讀取一個字節(jié)--------------------------*/67.ucharRead_DS18B20()

68.{

69.uchari;

70.uchardat; //儲存讀出的一個字節(jié)數(shù)據(jù)71.EA=0;

72.for(i=0;i<8;i++)

73.{

74.DQ=0; //先將數(shù)據(jù)線拉低75._nop_();

76._nop_();

77.DQ=1;

//將數(shù)據(jù)線"人為"拉高,為單片機(jī)檢測DS18B20的輸出電平作準(zhǔn)備78.dat>>=1;

79._nop_();

80.if(DQ)

81.{

82.dat|=0x80;//如果讀到的數(shù)據(jù)是1,則將1存入dat83.}

84.Delay_OneWire(6);//延時,兩個讀時序之間必須有大于1us的恢復(fù)期85.}

86.EA=1;

87.returndat; //返回讀出的十進(jìn)制數(shù)據(jù)88.}

9.3.3任務(wù)實施89./*----------------------DS18B20溫度轉(zhuǎn)換程序--------------------------*/90.ucharrd_temperature()

91.{

92.uchara,b;

93.uinttemp;

94.init_ds18b20(); //將DS18B20初始化95.Write_DS18B20(0xCC);//跳過讀序號列號的操作96.Write_DS18B20(0x44);//啟動溫度轉(zhuǎn)換97.init_ds18b20(); //將DS18B20初始化98.Write_DS18B20(0xCC);//ROM指令,對DS48B20進(jìn)行操作99.Write_DS18B20(0xbe);//讀取溫度轉(zhuǎn)換后的值100.101.a=Read_DS18B20();b=Read_DS18B20();//先讀取低位

102.temp=b;

103.temp<<=8;

104.temp=temp|a;//temp為16位,所以讀取2次,相或形成16位數(shù)據(jù)105.if(temp&0x8000) //判斷讀取的溫度值是正值還是負(fù)值,最高位為1對應(yīng)負(fù)值106.{

107.temp=~(temp-1);

108.flag=1;

109.}

110.temp=temp*0.0625;

111.returntemp;

112.}

9.3.3任務(wù)實施113./*----------------界面函數(shù),數(shù)組中存放各數(shù)碼管顯示的字符-------------------*/114.voidinterface(void)

115.{

116.dspbuf[0]=10;//提示符“-”117.dspbuf[1]=10;//提示符“-”118.dspbuf[2]=10;//提示符“-”119.dspbuf[3]=10;//提示符“-”120.dspbuf[4]=10;//提示符“-”121.dspbuf[5]=temperature%100/10;//十位122.dspbuf[6]=temperature%10;//個位123.dspbuf[7]=11;//溫度符號“C”124.}

9.3.3任務(wù)實施125./*---------------------------數(shù)碼管顯示函數(shù)------------------------------*/126.voiddisplay()

127.{

128.wela=0;//關(guān)閉位選寄存器129.P0=0xff; //數(shù)碼管消隱130.wela=1; //打開位選寄存器131.wela=0;//關(guān)閉位選寄存器132.wela=0;

溫馨提示

  • 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

提交評論