DS18B20溫度傳感器及C5111_第1頁(yè)
DS18B20溫度傳感器及C5111_第2頁(yè)
DS18B20溫度傳感器及C5111_第3頁(yè)
DS18B20溫度傳感器及C5111_第4頁(yè)
DS18B20溫度傳感器及C5111_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

DS18B20溫度傳感器及C51+freescale9S12單片機(jī)程序DALLAS最新單線數(shù)字溫度傳感器DS18B20簡(jiǎn)介新的“一線器件”體積更小、適用電壓更寬、更經(jīng)濟(jì)Dallas半導(dǎo)體公司的數(shù)字化溫度傳感器DS1820是世界上第一片支持“一線總線”接口的溫度傳感器。一線總線獨(dú)特而且經(jīng)濟(jì)的特點(diǎn),使用戶可輕松地組建傳感器網(wǎng)絡(luò),為測(cè)量系統(tǒng)的構(gòu)建引入全新概念。DS18B20、DS1822“一線總線”數(shù)字化溫度傳感器同DS1820一樣,DS18B20也支持“一線總線”接口,測(cè)量溫度范圍為-55°C~+125°C,在-10~+85°C范圍內(nèi),精度為±0.5°C。DS1822的精度較差為±2°C?,F(xiàn)場(chǎng)溫度直接以“一線總線”的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場(chǎng)溫度測(cè)量,如:環(huán)境控制、設(shè)備或過(guò)程控制、測(cè)溫類消費(fèi)電子產(chǎn)品等。與前一代產(chǎn)品不同,新的產(chǎn)品支持3V~5.5V的電壓范圍,使系統(tǒng)設(shè)計(jì)更靈活、方便。而且新一代產(chǎn)品更便宜,體積更小。DS18B20、DS1822的特性DS18B20可以程序設(shè)定9~12位的分辨率,精度為±0.5°C。可選更小的封裝方式,更寬的電壓適用范圍。分辨率設(shè)定,及用戶設(shè)定的報(bào)警溫度存儲(chǔ)在EEPROM中,掉電后依然保存。DS18B20的性能是新一代產(chǎn)品中最好的!性能價(jià)格比也非常出色!DS1822與DS18B20軟件兼容,是DS18B20的簡(jiǎn)化版本。省略了存儲(chǔ)用戶定義報(bào)警溫度、分辨率參數(shù)的EEPROM,精度降低為±2°C,適用于對(duì)性能要求不高,成本控制嚴(yán)格的應(yīng)用,是經(jīng)濟(jì)型產(chǎn)品。繼“一線總線”的早期產(chǎn)品后,DS1820開辟了溫度傳感器技術(shù)的新概念。DS18B20和DS1822使電壓、特性及封裝有更多的選擇,讓我們可以構(gòu)建適合自己的經(jīng)濟(jì)的測(cè)溫系統(tǒng)。DS18B20的內(nèi)部結(jié)構(gòu)

DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報(bào)警觸發(fā)器TH和TL、配置寄存器。DS18B20的管腳排列如下:

DQ為數(shù)字信號(hào)輸入/輸出端;GND為電源地;VDD為外接供電電源輸入端(在寄生電源接線方式時(shí)接地)。

光刻ROM中的64位序列號(hào)是出廠前被光刻好的,它可以看作是該DS18B20的地址序列碼。64位光刻ROM的排列是:開始8位(28H)是產(chǎn)品類型標(biāo)號(hào),接著的48位是該DS18B20自身的序列號(hào),最后8位是前面56位的循環(huán)冗余校驗(yàn)碼(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一個(gè)DS18B20都各不相同,這樣就可以實(shí)現(xiàn)一根總線上掛接多個(gè)DS18B20的目的。

DS18B20中的溫度傳感器可完成對(duì)溫度的測(cè)量,以12位轉(zhuǎn)化為例:用16位符號(hào)擴(kuò)展的二進(jìn)制補(bǔ)碼讀數(shù)形式提供,以0.0625℃/LSB形式表達(dá),其中S為符號(hào)位。

這是12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲(chǔ)在18B20的兩個(gè)8比特的RAM中,二進(jìn)制中的前面5位是符號(hào)位,如果測(cè)得的溫度大于0,這5位為0,只要將測(cè)到的數(shù)值乘于0.0625即可得到實(shí)際溫度;如果溫度小于0,這5位為1,測(cè)到的數(shù)值需要取反加1再乘于0.0625即可得到實(shí)際溫度。

例如+125℃的數(shù)字輸出為07D0H,+25.0625℃的數(shù)字輸出為0191H,-25.0625℃的數(shù)字輸出為FF6FH,-55℃的數(shù)字輸出為FC90H。DS18B20溫度傳感器的存儲(chǔ)器

DS18B20溫度傳感器的內(nèi)部存儲(chǔ)器包括一個(gè)高速暫存RAM和一個(gè)非易失性的可電擦除的E2RAM,后者存放高溫度和低溫度觸發(fā)器TH、TL和結(jié)構(gòu)寄存器。

暫存存儲(chǔ)器包含了8個(gè)連續(xù)字節(jié),前兩個(gè)字節(jié)是測(cè)得的溫度信息,第一個(gè)字節(jié)的內(nèi)容是溫度的低八位,第二個(gè)字節(jié)是溫度的高八位。第三個(gè)和第四個(gè)字節(jié)是TH、TL的易失性拷貝,第五個(gè)字節(jié)是結(jié)構(gòu)寄存器的易失性拷貝,這三個(gè)字節(jié)的內(nèi)容在每一次上電復(fù)位時(shí)被刷新。第六、七、八個(gè)字節(jié)用于內(nèi)部計(jì)算。第九個(gè)字節(jié)是冗余檢驗(yàn)字節(jié)。該字節(jié)各位的意義如下:

TMR1R011111

低五位一直都是1,TM是測(cè)試模式位,用于設(shè)置DS18B20在工作模式還是在測(cè)試模式。在DS18B20出廠時(shí)該位被設(shè)置為0,用戶不要去改動(dòng)。R1和R0用來(lái)設(shè)置分辨率,如下表所示:(DS18B20出廠時(shí)被設(shè)置為12位)

分辨率設(shè)置表:R1R0分辨率溫度最大轉(zhuǎn)換時(shí)間009位93.75ms0110位187.5ms1011位375ms1112位750ms

根據(jù)DS18B20的通訊協(xié)議,主機(jī)控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過(guò)三個(gè)步驟:每一次讀寫之前都要對(duì)DS18B20進(jìn)行復(fù)位,復(fù)位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對(duì)DS18B20進(jìn)行預(yù)定的操作。復(fù)位要求主CPU將數(shù)據(jù)線下拉500微秒,然后釋放,DS18B20收到信號(hào)后等待16~60微秒左右,后發(fā)出60~240微秒的存在低脈沖,主CPU收到此信號(hào)表示復(fù)位成功。DS1820使用中注意事項(xiàng)DS1820雖然具有測(cè)溫系統(tǒng)簡(jiǎn)單、測(cè)溫精度高、連接方便、占用口線少等優(yōu)點(diǎn),但在實(shí)際應(yīng)用中也應(yīng)注意以下幾方面的問(wèn)題:(1)較小的硬件開銷需要相對(duì)復(fù)雜的軟件進(jìn)行補(bǔ)償,由于DS1820與微處理器間采用串行數(shù)據(jù)傳送,因此,在對(duì)DS1820進(jìn)行讀寫編程時(shí),必須嚴(yán)格的保證讀寫時(shí)序,否則將無(wú)法讀取測(cè)溫結(jié)果。在使用PL/M、C等高級(jí)語(yǔ)言進(jìn)行系統(tǒng)程序設(shè)計(jì)時(shí),對(duì)DS1820操作部分最好采用匯編語(yǔ)言實(shí)現(xiàn)。(2)在DS1820的有關(guān)資料中均未提及單總線上所掛DS1820數(shù)量問(wèn)題,容易使人誤認(rèn)為可以掛任意多個(gè)DS1820,在實(shí)際應(yīng)用中并非如此。當(dāng)單總線上所掛DS1820超過(guò)8個(gè)時(shí),就需要解決微處理器的總線驅(qū)動(dòng)問(wèn)題,這一點(diǎn)在進(jìn)行多點(diǎn)測(cè)溫系統(tǒng)設(shè)計(jì)時(shí)要加以注意。(3)連接DS1820的總線電纜是有長(zhǎng)度限制的。試驗(yàn)中,當(dāng)采用普通信號(hào)電纜傳輸長(zhǎng)度超過(guò)50m時(shí),讀取的測(cè)溫?cái)?shù)據(jù)將發(fā)生錯(cuò)誤。當(dāng)將總線電纜改為雙絞線帶屏蔽電纜時(shí),正常通訊距離可達(dá)150m,當(dāng)采用每米絞合次數(shù)更多的雙絞線帶屏蔽電纜時(shí),正常通訊距離進(jìn)一步加長(zhǎng)。這種情況主要是由總線分布電容使信號(hào)波形產(chǎn)生畸變?cè)斐傻?。因此,在用DS1820進(jìn)行長(zhǎng)距離測(cè)溫系統(tǒng)設(shè)計(jì)時(shí)要充分考慮總線分布電容和阻抗匹配問(wèn)題。(4)在DS1820測(cè)溫程序設(shè)計(jì)中,向DS1820發(fā)出溫度轉(zhuǎn)換命令后,程序總要等待DS1820的返回信號(hào),一旦某個(gè)DS1820接觸不好或斷線,當(dāng)程序讀該DS1820時(shí),將沒(méi)有返回信號(hào),程序進(jìn)入死循環(huán)。這一點(diǎn)在進(jìn)行DS1820硬件連接和軟件設(shè)計(jì)時(shí)也要給予一定的重視。

測(cè)溫電纜線建議采用屏蔽4芯雙絞線,其中一對(duì)線接地線與信號(hào)線,另一組接VCC和地線,屏蔽層在源端單點(diǎn)接地。DS18B20溫度傳感器C51程序,無(wú)CRC2008-06-3011:18/********************************************************

*DS18B20溫度傳感器

*

*

C51

*

*yajou2008-06-28

無(wú)CRC

*

********************************************************/#include"reg51.h"

#include"intrins.h"

#include"DS18B20.h"

/********************************************************

*us延時(shí)程序

*

********************************************************/

voidDelayus(ucharus)

{

while(us--);//12M,一次6us,加進(jìn)入退出14us(8M晶振,一次9us)

}

/********************************************************

*DS18B20初始化

*

********************************************************/

bitDs18b20_Init(void)//存在返0,否則返1

{

bittemp=1;

ucharouttime=ReDetectTime;//超時(shí)時(shí)間

while(outtime--&&temp)

{

Delayus(10);//(250)1514us時(shí)間可以減小嗎

ReleaseDQ();

Delay2us();

PullDownDQ();

Delayus(100);//614us(480-960)

ReleaseDQ();

Delayus(10);//73us(>60)

temp=dq;

Delayus(70);//us

}

returntemp;

}/********************************************************

*寫bit2DS18B20

*

********************************************************/

voidDs18b20_WriteBit(bitbitdata)

{

if(bitdata)

{

PullDownDQ();

Delay2us();

//2us(>1us)

ReleaseDQ();//(上述1-15)

Delayus(12);//86us(45-x,總時(shí)間>60)

}else

{

PullDownDQ();

Delayus(12);//86us(60-120)

}

ReleaseDQ();

Delay2us();

//2us(>1us)

}/********************************************************

*寫B(tài)yteDS18B20

*

********************************************************/

voidDs18b20_WriteByte(ucharchrdata)

{

ucharii;

for(ii=0;ii<8;ii++)

{

Ds18b20_WriteBit(chrdata&0x01);

chrdata>>=1;

}

}/********************************************************

*寫DS18B20

*

********************************************************/

//voidDs18b20_Write(uchar*p_readdata,ucharbytes)

//{

//while(bytes--)

//{

//

Ds18b20_WriteByte(*p_readdata);

//

p_readdata++;

//}

//}

/********************************************************

*讀bitFromDS18B20

*

********************************************************/

bitDs18b20_ReadBit(void)

{

bitbitdata;

PullDownDQ();

Delay2us();

//2us(>1us)

ReleaseDQ();

Delay8us();

//8us(<15us)

bitdata=dq;

Delayus(7);//86us(上述總時(shí)間要>60us)

returnbitdata;

}

/********************************************************

*讀ByteDS18B20

*

********************************************************/

ucharDs18b20_ReadByte(void)

{

ucharii,chardata;

for(ii=0;ii<8;ii++)

{

chardata>>=1;

if(Ds18b20_ReadBit())chardata|=0x80;

}

returnchardata;

}

/********************************************************

*讀DS18B20ROM

*

********************************************************/

bitDs18b20_ReadRom(uchar*p_readdata)//成功返0,失敗返1

{

ucharii=8;

if(Ds18b20_Init())return1;

Ds18b20_WriteByte(ReadROM);

while(ii--)

{

*p_readdata=Ds18b20_ReadByte();

p_readdata++;

}

return0;

}

/********************************************************

*讀DS18B20EE

*

********************************************************/

bitDs18b20_ReadEE(uchar*p_readdata)//成功返0,失敗返1

{

ucharii=2;if(Ds18b20_Init())return1;

Ds18b20_WriteByte(SkipROM);

Ds18b20_WriteByte(ReadScr);

while(ii--)

{

*p_readdata=Ds18b20_ReadByte();

p_readdata++;

}

return0;

}

/********************************************************

*溫度采集計(jì)算

*

********************************************************/

bitTempCal(float*p_wendu)//成功返0,失敗返1(溫度范圍-55---+128)

{

uchartemp[9],ii;

uinttmp;

floattmpwendu;TR1=0;

TR0=0;//讀暫存器和CRC值-----------------------

if(Ds18b20_ReadEE(temp))

{

TR1=1;

TR0=1;

return1;

}

//-------------------------------------

//CRC校驗(yàn)------------------------------

//

//此處應(yīng)加入CRC校驗(yàn)等

//

//

//-------------------------------------

//使溫度值寫入相應(yīng)的wendu[i]數(shù)組中-----

for(ii=i;ii>0;ii--)

{

p_wendu++;

}

i++;

if(i>4)i=0;

//-------------------------------------

//溫度正負(fù)數(shù)處理-----------------------

////-------------------------------------

//溫度計(jì)算-----------------------------

tmp=temp[1];

//

tmp<<=8;

//

tmp|=temp[0];

//組成溫度的兩字節(jié)合并

tmpwendu=tmp;

*p_wendu=tmpwendu/16;

//-------------------------------------

//開始溫度轉(zhuǎn)換-------------------------

if(Ds18b20_Init())

{

TR1=1;

TR0=1;

return1;

}

Ds18b20_WriteByte(SkipROM);

Ds18b20_WriteByte(Convert);

ReleaseDQ();//寄生電源時(shí)要拉高DQ

//------------------------------------TR1=1;

TR0=1;

return0;

}//////////DS18B20.h//////////////////////////********************************************************

*I/O口定義

*

********************************************************/

sbitdq=P1^3;

sbitdv=P1^4;//DS18B20強(qiáng)上拉電源

/********************************************************

*命令字定義

*

********************************************************/

#defineucharunsignedchar

#defineuintunsignedint

#defineReleaseDQ()

dq=1;

//上拉/釋放總線

#definePullDownDQ()dq=0;

//下拉總線#defineDelay2us()

_nop_();_nop_();//延時(shí)2us,每nop1us

#defineDelay8us()

_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();//設(shè)置重復(fù)檢測(cè)次次數(shù),超出次數(shù)則超時(shí)

#define

ReDetectTime

20

//ds18b20命令

#define

SkipROM

0xCC

#define

MatchROM

0x55

#define

ReadROM

0x33

#define

SearchROM

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論