女人荫蒂被添全过程13种图片,亚洲+欧美+在线,欧洲精品无码一区二区三区 ,在厨房拨开内裤进入毛片

您好,歡迎來電子發燒友網! ,新用戶?[免費注冊]

您的位置:電子發燒友網>電子元器件>傳感器>

讀數據時序 - DS18B20的調試總結和程序

2018年01月05日 08:57 網絡整理 作者: 用戶評論(0
關鍵字:DS18B20(80969)

讀數據時序

DS18B20的調試總結和程序

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

2. 將端口方向設為輸入,必須在下降沿之后的15US內將端口數據讀??;此處推薦端口方向設為輸入后,延時5US,讀取端口數據;

3. 讀取數據完畢后,延時60US即可;

4. 每兩個數據位之間間隔大于1US;

注:

在這個時序內,要不斷改變端口方向;

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

讀數據和寫數據都是8位,從LSB開始發送;

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

byte READ_18B20(){

byte ch=0;

byte i;

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

DQ_OUT=1; //端口輸出

DQ=1;

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

DQ=0;

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

DQ_OUT=0; //在15US之內讀取數據

ch=ch》》1;

//延時大概5US

DELAY5();

if(DQ)

ch=ch|0x80;

else

ch=ch&0x7f;

DELAY9(8);

//每兩個讀數據之間間隔要大于60US }

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

}

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

然后就是調用函數了:

當數據線上還有一個18B20時,通常步驟如下:

初始化;

跳過ROM

溫度開始轉換命令;

等待溫度轉換完成;//當使用18B20默認的12位轉換精度,用時750MS,經檢驗,一般耗時比理論稍長;

初始化;

跳過ROM;

讀暫存器命令;

將溫度數據低八位,高八位依次取出;

初始化;//注:最后仍然要進行初始化

結束;

對應的函數如下

/********************溫度開始轉換命令程序*******************************/

byte TEMP_DETECT_18B20(){

byte dummy=2;

dummy=INIT_18B20(); //初始化

if(dummy==0){

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

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

}

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

}

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

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

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

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(); //最后初始化,表示讀取溫度結束

}

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

TEM_RESULT=TEM_RESULT*5;

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

//最高位為1,則為負溫度 ;;

// TEM_RESULT=~TEMP_RESULT+1; //溫度為負,取補碼

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

}

主函數中調用:

SIGNAL=TEMP_DETECT_18B20();

if(SIGNAL==0){

if(DQ) //此時端口為1,則表示轉換完成

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

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

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

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

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

讀取為1時溫度為負;讀取為0時,溫度為正;

DS18B20的調試總結和程序

非常好我支持^.^

(87) 93.5%

不好我反對

(6) 6.5%

( 發表人:李倩 )

      發表評論

      用戶評論
      評價:好評中評差評

      發表評論,獲取積分! 請遵守相關規定!

      ?
      主站蜘蛛池模板: 黔西县| 栾川县| 瑞金市| 湖南省| 焦作市| 二连浩特市| 措勤县| 池州市| 河北省| 浦城县| 内江市| 卓资县| 莱阳市| 邻水| 太保市| 云阳县| 耿马| 和林格尔县| 雅江县| 托克逊县| 尚志市| 栖霞市| 昆山市| 栾川县| 铜鼓县| 新和县| 吐鲁番市| 大姚县| 龙陵县| 陕西省| 漯河市| 安国市| 沙田区| 新闻| 江永县| 靖宇县| 湖南省| 华亭县| 南投市| 泸溪县| 湘乡市|