0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

DS18B20數(shù)字溫度計的單片機(jī)接口應(yīng)用詳細(xì)說明

Wildesbeast ? 來源:單片機(jī)教程網(wǎng) ? 作者:h1654155169.2086 ? 2020-05-05 14:53 ? 次閱讀

1.DS18B20基本知識

DS18B20數(shù)字溫度計是DALLAS公司生產(chǎn)的1-Wire,即單總線器件,具有線路簡單,體積小的特點。因此用它來組成一個測溫系統(tǒng),具有線路簡單,在一根通信線,可以掛很多這樣的數(shù)字溫度計,十分方便。

1、DS18B20產(chǎn)品的特點

(1)、只要求一個端口即可實現(xiàn)通信。

(2)、在DS18B20中的每個器件上都有獨一無二的序列號。

(3)、實際應(yīng)用中不需要外部任何元器件即可實現(xiàn)測溫。

(4)、測量溫度范圍在-55。C到+125。C之間。

(5)、數(shù)字溫度計的分辨率用戶可以從9位到12位選擇。

(6)、內(nèi)部有溫度上、下限告警設(shè)置。

2、DS18B20的引腳介紹

TO-92封裝的DS18B20的引腳排列見圖1,其引腳功能描述見表1。

(底視圖)

圖1

表1DS18B20詳細(xì)引腳功能描述

序號名稱引腳功能描述

1GND地信號

2DQ數(shù)據(jù)輸入/輸出引腳。開漏單總線接口引腳。當(dāng)被用著在寄生電源下,也可以向器件提供電源。

3VDD可選擇的VDD引腳。當(dāng)工作于寄生電源時,此引腳必須接地。

3. DS18B20的使用方法

由于DS18B20采用的是1-Wire總線協(xié)議方式,即在一根數(shù)據(jù)線實現(xiàn)數(shù)據(jù)的雙向傳輸,而對AT89S51單片機(jī)來說,硬件上并不支持單總線協(xié)議,因此,我們必須采用軟件的方法來模擬單總線的協(xié)議時序來完成對DS18B20芯片的訪問。

由于DS18B20是在一根I/O線上讀寫數(shù)據(jù),因此,對讀寫的數(shù)據(jù)位有著嚴(yán)格的時序要求。DS18B20有嚴(yán)格的通信協(xié)議來保證各位數(shù)據(jù)傳輸?shù)恼_性和完整性。該協(xié)議定義了幾種信號的時序:初始化時序、讀時序、寫時序。所有時序都是將主機(jī)作為主設(shè)備,單總線器件作為從設(shè)備。而每一次命令和數(shù)據(jù)的傳輸都是從主機(jī)主動啟動寫時序開始,如果要求單總線器件回送數(shù)據(jù),在進(jìn)行寫命令后,主機(jī)需啟動讀時序完成數(shù)據(jù)接收。數(shù)據(jù)和命令的傳輸都是低位在先。

DS18B20的復(fù)位時序

DS18B20的讀時序

對于DS18B20的讀時序分為讀0時序和讀1時序兩個過程。

對于DS18B20的讀時隙是從主機(jī)把單總線拉低之后,在15秒之內(nèi)就得釋放單總線,以讓DS18B20把數(shù)據(jù)傳輸?shù)絾慰偩€上。DS18B20在完成一個讀時序過程,至少需要60us才能完成。

DS18B20的寫時序

對于DS18B20的寫時序仍然分為寫0時序和寫1時序兩個過程。

對于DS18B20寫0時序和寫1時序的要求不同,當(dāng)要寫0時序時,單總線要被拉低至少60us,保證DS18B20能夠在15us到45us之間能夠正確地采樣IO總線上的“0”電平,當(dāng)要寫1時序時,單總線被拉低之后,在15us之內(nèi)就得釋放單總線。

4. 實驗任務(wù)

用一片DS18B20構(gòu)成測溫系統(tǒng),測量的溫度精度達(dá)到0.1度,測量的溫度的范圍在-20度到+100度之間,用8位數(shù)碼管顯示出來。

5. 電路原理

6. 系統(tǒng)板上硬件連線

(1). 把“單片機(jī)系統(tǒng)”區(qū)域中的P0.0-P0.7用8芯排線連接到“動態(tài)數(shù)碼顯示”區(qū)域中的ABCDEFGH端子上。

(2). 把“單片機(jī)系統(tǒng)”區(qū)域中的P2.0-P2.7用8芯排線連接到“動態(tài)數(shù)碼顯示”區(qū)域中的S1S2S3S4S5S6S7S8端子上。

(3). 把DS18B20芯片插入“四路單總線”區(qū)域中的任一個插座中,注意電源與地信號不要接反。

(4). 把“四路單總線”區(qū)域中的對應(yīng)的DQ端子連接到“單片機(jī)系統(tǒng)”區(qū)域中的P3.7/RD端子上。

7. C語言源程序

#include 《AT89X52.H》

#include 《INTRINS.h》

unsigned char code displaybit[]={0xfe,0xfd,0xfb,0xf7,

0xef,0xdf,0xbf,0x7f};

unsigned char code displaycode[]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,0x00,0x40};

unsigned char code dotcode[32]={0,3,6,9,12,16,19,22,

25,28,31,34,38,41,44,48,

50,53,56,59,63,66,69,72,

75,78,81,84,88,91,94,97};

unsigned char displaycount;

unsigned char displaybuf[8]={16,16,16,16,16,16,16,16};

unsigned char timecount;

unsigned char readdata[8];

sbit DQ=P3^7;

bit sflag;

bit resetpulse(void)

{

unsigned char i;

DQ=0;

for(i=255;i》0;i--);

DQ=1;

for(i=60;i》0;i--);

return(DQ);

for(i=200;i》0;i--);

}

void writecommandtods18b20(unsigned char command)

{

unsigned char i;

unsigned char j;

for(i=0;i《8;i++)

{

if((command & 0x01)==0)

{

DQ=0;

for(j=35;j》0;j--);

DQ=1;

}

else

{

DQ=0;

for(j=2;j》0;j--);

DQ=1;

for(j=33;j》0;j--);

}

command=_cror_(command,1);

}

}

unsigned char readdatafromds18b20(void)

{

unsigned char i;

unsigned char j;

unsigned char temp;

temp=0;

for(i=0;i《8;i++)

{

temp=_cror_(temp,1);

DQ=0;

_nop_();

_nop_();

DQ=1;

for(j=10;j》0;j--);

if(DQ==1)

{

temp=temp | 0x80;

}

else

{

temp=temp | 0x00;

}

for(j=200;j》0;j--);

}

return(temp);

}

void main(void)

{

TMOD=0x01;

TH0=(65536-4000)/256;

TL0=(65536-4000)%6;

ET0=1;

EA=1;

while(resetpulse());

writecommandtods18b20(0xcc);

writecommandtods18b20(0x44);

TR0=1;

while(1)

{

;

}

}

void t0(void) interrupt 1 using 0

{

unsigned char x;

unsigned int result;

TH0=(65536-4000)/256;

TL0=(65536-4000)%6;

if(displaycount==2)

{

P0=displaycode[displaybuf[displaycount]] | 0x80;

}

else

{

P0=displaycode[displaybuf[displaycount]];

}

P2=displaybit[displaycount];

displaycount++;

if(displaycount==8)

{

displaycount=0;

}

timecount++;

if(timecount==150)

{

timecount=0;

while(resetpulse());

writecommandtods18b20(0xcc);

writecommandtods18b20(0xbe);

readdata[0]=readdatafromds18b20();

readdata[1]=readdatafromds18b20();

for(x=0;x《8;x++)

{

displaybuf[x]=16;

}

sflag=0;

if((readdata[1] & 0xf8)!=0x00)

{

sflag=1;

readdata[1]=~readdata[1];

readdata[0]=~readdata[0];

result=readdata[0]+1;

readdata[0]=result;

if(result》255)

{

readdata[1]++;

}

}

readdata[1]=readdata[1]《《4;

readdata[1]=readdata[1] & 0x70;

x=readdata[0];

x=x》》4;

x=x & 0x0f;

readdata[1]=readdata[1] | x;

x=2;

result=readdata[1];

while(result/10)

{

displaybuf[x]=result;

result=result/10;

x++;

}

displaybuf[x]=result;

if(sflag==1)

{

displaybuf[x+1]=17;

}

x=readdata[0] & 0x0f;

x=x《《1;

displaybuf[0]=(dotcode[x]);

displaybuf[1]=(dotcode[x])/10;

while(resetpulse());

writecommandtods18b20(0xcc);

writecommandtods18b20(0x44);

}

}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6023

    文章

    44376

    瀏覽量

    628297
  • DS18B20
    +關(guān)注

    關(guān)注

    10

    文章

    774

    瀏覽量

    80481
  • 溫度計
    +關(guān)注

    關(guān)注

    6

    文章

    404

    瀏覽量

    78304
收藏 人收藏

    評論

    相關(guān)推薦

    DS18B20 數(shù)字溫度計特點

    一.DS18B20特點 DS18B20 數(shù)字溫度計提供12位(二進(jìn)制)溫度讀數(shù)的數(shù)字型傳感器。傳
    的頭像 發(fā)表于 09-11 11:19 ?2338次閱讀
    <b class='flag-5'>DS18B20</b> <b class='flag-5'>數(shù)字</b><b class='flag-5'>溫度計</b>特點

    基于DS18B20的51單片機(jī)數(shù)字溫度計設(shè)計

    本帖最后由 kuofonfon 于 2020-1-3 17:39 編輯 實驗原理DS18B20數(shù)字溫度計是DALLAS公司生產(chǎn)的1-Wire,即單總線器件,具有線路簡單,體積小的特點。因此用它
    發(fā)表于 11-04 12:27

    數(shù)字溫度計DS18B20的特性及應(yīng)用

    DS18B20是美國DALLAS公司生產(chǎn)的可完全替代DS1820的全新型單線數(shù)字溫度計.文中介紹了DS18B20的性能結(jié)構(gòu)和與
    發(fā)表于 04-25 15:19 ?69次下載

    基于MSP430單片機(jī)DS18B20數(shù)字溫度計

    為了在工業(yè)生產(chǎn)及過程控制中準(zhǔn)確測量溫度,設(shè)計了一種基于低功耗MSP430單片機(jī)數(shù)字溫度計。整個系統(tǒng)通過單片機(jī)MSP430F1121A控制
    發(fā)表于 11-22 16:14 ?269次下載

    DS18B20數(shù)字溫度計使用

    DS18B20數(shù)字溫度計使用 1.DS18B20基本知識 DS18B20數(shù)字
    發(fā)表于 01-25 11:29 ?1519次閱讀
    <b class='flag-5'>DS18B20</b><b class='flag-5'>數(shù)字</b><b class='flag-5'>溫度計</b>使用

    基于DS18B20數(shù)字溫度計設(shè)計

    基于DS18B20數(shù)字溫度計設(shè)計,供大家下載。
    發(fā)表于 12-21 18:26 ?24次下載

    DS18B20溫度測試實驗

    基于單片機(jī)STC89C52的DS18B20數(shù)字溫度計,測量實時溫度。
    發(fā)表于 12-31 14:36 ?10次下載

    DS18B20數(shù)字溫度計使用

    DS18B20數(shù)字溫度計使用。
    發(fā)表于 05-05 14:56 ?0次下載

    51單片機(jī)DS18B20數(shù)字溫度計

    51單片機(jī)DS18B20數(shù)字溫度計。
    發(fā)表于 05-19 15:32 ?117次下載

    DS18B20數(shù)字溫度計使用

    學(xué)習(xí)單片機(jī)電路圖的很好的資料——DS18B20數(shù)字溫度計使用
    發(fā)表于 11-03 15:15 ?0次下載

    DS18B20溫度計原理圖和PCB和單片機(jī)程序

    DS18B20溫度計原理圖和PCB和單片機(jī)程序
    發(fā)表于 11-06 16:43 ?46次下載

    使用89C51單片機(jī)DS18B20溫度傳感器設(shè)計數(shù)字溫度計的源代碼

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用89C51單片機(jī)DS18B20溫度傳感器設(shè)計數(shù)字溫度計的源代碼
    發(fā)表于 03-07 17:06 ?97次下載
    使用89C51<b class='flag-5'>單片機(jī)</b>和<b class='flag-5'>DS18B20</b><b class='flag-5'>溫度</b>傳感器設(shè)計<b class='flag-5'>數(shù)字</b><b class='flag-5'>溫度計</b>的源代碼

    DS18B20溫度計原理圖和PCB及單片機(jī)程序免費下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是DS18B20溫度計原理圖和PCB及單片機(jī)程序免費下載。
    發(fā)表于 06-16 16:22 ?78次下載
    <b class='flag-5'>DS18B20</b><b class='flag-5'>溫度計</b>原理圖和PCB及<b class='flag-5'>單片機(jī)</b>程序免費下載

    使用STC單片機(jī)實現(xiàn)DS18B20溫度計的C51配套例程免費下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用STC單片機(jī)實現(xiàn)DS18B20溫度計的C51配套例程免費下載。
    發(fā)表于 03-16 10:12 ?38次下載

    DS18B20溫度傳感器的數(shù)字溫度計設(shè)計案例

    本設(shè)計采用的主控芯片是ATMEL公司的AT89S52單片機(jī),數(shù)字溫度傳感器是DALLAS公司的DS18B20。本設(shè)計用數(shù)字傳感器
    發(fā)表于 05-09 16:02 ?53次下載