在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊]

您的位置:電子發(fā)燒友網(wǎng)>電子元器件>傳感器>

讀數(shù)據(jù)時(shí)序 - DS18B20的調(diào)試總結(jié)和程序

2018年01月05日 08:57 網(wǎng)絡(luò)整理 作者: 用戶評論(0
關(guān)鍵字:DS18B20(80969)

讀數(shù)據(jù)時(shí)序

DS18B20的調(diào)試總結(jié)和程序

1. 主機(jī)將電平拉高,稍微延時(shí)(推薦2US),然后將電平拉低,產(chǎn)生一個(gè)下降沿,表示讀數(shù)據(jù);這個(gè)低電平至少維持1US,此處推薦2US;

2. 將端口方向設(shè)為輸入,必須在下降沿之后的15US內(nèi)將端口數(shù)據(jù)讀取;此處推薦端口方向設(shè)為輸入后,延時(shí)5US,讀取端口數(shù)據(jù);

3. 讀取數(shù)據(jù)完畢后,延時(shí)60US即可;

4. 每兩個(gè)數(shù)據(jù)位之間間隔大于1US;

注:

在這個(gè)時(shí)序內(nèi),要不斷改變端口方向;

如果上拉電阻阻值合理設(shè)置,可以小于4.7K歐姆,利于提高時(shí)序速度; l

讀數(shù)據(jù)和寫數(shù)據(jù)都是8位,從LSB開始發(fā)送;

/***************從18B20取出字符*******************************/

byte READ_18B20(){

byte ch=0;

byte i;

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

DQ_OUT=1; //端口輸出

DQ=1;

DELAY1(); //產(chǎn)生下降沿,至少維持一微秒

DQ=0;

DELAY1(); //將端口設(shè)為輸入,等待讀取

DQ_OUT=0; //在15US之內(nèi)讀取數(shù)據(jù)

ch=ch》》1;

//延時(shí)大概5US

DELAY5();

if(DQ)

ch=ch|0x80;

else

ch=ch&0x7f;

DELAY9(8);

//每兩個(gè)讀數(shù)據(jù)之間間隔要大于60US }

return(ch); //返回讀到的數(shù)據(jù)

}

以上三段為底層基本函數(shù);DELAY后面的數(shù)字DELAY1,DELAY5,DELAY9為延時(shí)的微秒時(shí)長; DQ設(shè)置為硬件連接的端口,DQ_OUT為端口方向的設(shè)置

然后就是調(diào)用函數(shù)了:

當(dāng)數(shù)據(jù)線上還有一個(gè)18B20時(shí),通常步驟如下:

初始化;

跳過ROM;

溫度開始轉(zhuǎn)換命令;

等待溫度轉(zhuǎn)換完成;//當(dāng)使用18B20默認(rèn)的12位轉(zhuǎn)換精度,用時(shí)750MS,經(jīng)檢驗(yàn),一般耗時(shí)比理論稍長;

初始化;

跳過ROM;

讀暫存器命令;

將溫度數(shù)據(jù)低八位,高八位依次取出;

初始化;//注:最后仍然要進(jìn)行初始化

結(jié)束;

對應(yīng)的函數(shù)如下

/********************溫度開始轉(zhuǎn)換命令程序*******************************/

byte TEMP_DETECT_18B20(){

byte dummy=2;

dummy=INIT_18B20(); //初始化

if(dummy==0){

WRITE_18B20(0XCC); //跳過ROM,不讀地址,直接通訊

WRITE_18B20(0x44); //溫度開始轉(zhuǎn)換命令

}

return(dummy); //返回0表示成功初始化,開始轉(zhuǎn)換溫度

}

注:在開始轉(zhuǎn)換命令和讀取溫度之間,若18B20忙于轉(zhuǎn)換溫度,電平為低電位;

轉(zhuǎn)換完畢將電平拉高;若不想用DELAY等待溫度轉(zhuǎn)換,可讀取DQ值,為1則表示轉(zhuǎn)換完畢,可以開始讀取數(shù)據(jù)了;

/****************讀取溫度命令程序***************************************/

uint TEMP_READ_18B20(){

byte dummy=0;

byte TEMH=0,TEML=0;

uint TEM_RESULT;

dummy=INIT_18B20(); //初始化

if(dummy==0){

WRITE_18B20(0XCC); //跳過ROM

WRITE_18B20(0xBE); //讀暫存存儲器的值命令

TEML=READ_18B20();

TEMH=READ_18B20(); //讀溫度的高8位和低八位

dummy=INIT_18B20(); //最后初始化,表示讀取溫度結(jié)束

}

TEM_RESULT=(TEML》》3)+(TEMH《《5); //分辨率為0.5°

TEM_RESULT=TEM_RESULT*5;

if((TEMH&0X80)!=0)

//最高位為1,則為負(fù)溫度 ;;

// TEM_RESULT=~TEMP_RESULT+1; //溫度為負(fù),取補(bǔ)碼

return(TEM_RESULT); //返回值為溫度的十倍,小數(shù)點(diǎn)后一位

}

主函數(shù)中調(diào)用:

SIGNAL=TEMP_DETECT_18B20();

if(SIGNAL==0){

if(DQ) //此時(shí)端口為1,則表示轉(zhuǎn)換完成

TEMP_RESULT=TEMP_READ_18B20(); //返回溫度的十倍值

若時(shí)序錯(cuò)誤,很有可能讀出的數(shù)據(jù)位0XFF;若溫度傳感器燒壞,容易讀到85°; l

使用默認(rèn)12位轉(zhuǎn)換精度,分辨率為0.0625°,此處不需要這么高的精度因此:

TEM_RESULT=(TEML》》3)+(TEMH《《5); //分辨率為0.5°

舍棄后面三位數(shù)據(jù),并且只有11位是溫度值,高八位中的前五位是符號位;

讀取為1時(shí)溫度為負(fù);讀取為0時(shí),溫度為正;

DS18B20的調(diào)試總結(jié)和程序

非常好我支持^.^

(87) 93.5%

不好我反對

(6) 6.5%

( 發(fā)表人:李倩 )

      發(fā)表評論

      用戶評論
      評價(jià):好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關(guān)規(guī)定!

      ?
      主站蜘蛛池模板: 欧美午夜精品久久久久久黑人 | 天天干在线免费视频 | 男男gay污小黄文 | 亚洲综合狠狠 | 丁香五婷婷 | 久久综合狠狠综合狠狠 | 天堂在线观看视频观看www | 黄色录像欧美 | 人与禽交免费网站视频 | 精品久久天干天天天按摩 | 韩彩英三级无删版甜性涩爱 | 亚洲免费福利视频 | 国产精品久久久久久久久免费 | bt天堂新版中文在线地址 | 性感美女毛片 | 一二三区视频 | 天堂资源在线播放 | 精品欧美| 性欧美网站 | 大黄网站色多多 | www.丁香.com | 亚洲第一福利网站 | 最新日本免费一区二区三区中文 | 免费看黄色录像 | 三级免费黄色片 | 一区二区免费看 | 1024毛片| 日本黄网站高清色大全 | 狠狠狠狼鲁欧美综合网免费 | 午夜小视频男女在线观看 | 成人免费看黄页网址大全 | 久久免费看视频 | 国产综合在线播放 | 日本免费黄视频 | 亚洲成a人片77777潘金莲 | 嫩草黄色影院 | 永久免费在线视频 | 亚洲黄网免费 | 天堂网在线最新版www中文网 | 亚洲男人的天堂久久香蕉网 | 亚洲成在线观看 |