我寫DS18B20總結

2021-11-02 09:36:02 字數 2297 閱讀 8558

unsigned int n;

for(n=0;n

void chushihua()

dq=0;

delay(600); //送480us脈衝;根據時序;

dq=1;

delay(35);//大約60us左右;

這樣就完成了ds18b20的初始化工作。

初始化之後要向資料埠dq寫資料,寫0或者是1;當主機匯流排從高電平拉到低電平的時候,就產生寫時間隙,大約在下降沿時刻的15微妙之前就應該將所需寫的位送到匯流排上,ds18b20在大約15微妙後到60微妙的這中間時間取樣,若是低電平則寫入的位是0,若是高電平則寫入的位是1;連續兩位間的間隙應大於1微妙左右,在寫0或1的時候只能寫1個,要麼是0要麼是1;

如圖所示第乙個圖就是寫0時序圖,第二個就是寫1時序圖;

寫0或者寫1的程式如下:

寫乙個位元組子函式(寫0 寫1

功能:寫0寫1

輸入/輸出:無

void writebyte(unsigned char dat)

unsigned char a,b;

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

dat2=dat&0x01;

dat=dat>>1;

if(dat2)

dq=0;b++;b++;

dq=1;delay(8);

} else

dq=0;delay(8);

dq=1;b++;b++;

}讀時間隙:

在主機將高電平拉低的一瞬間將會持續一段時間,這段時間之後的t1時刻會將電平拉高到t2之前完成讀的操作,讀的操作t2時刻距離電平拉低的時刻是15微妙左右,在這個時間段內也就是說在t1時刻之前必須完成對資料的讀操作,否則就會出現錯誤。

上圖所示就是讀時間隙的操作,我在寫c程式的時候就是按照這裡的要求寫的:程式**如下:

功能:讀操作;

輸入:無

輸出:無

uchar readbyte()

unsigned int f,wendu;

wendu=0x00;

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

readbit();

g=x;

wendu=(g<<7)|(wendu>>1);

return(wendu);

接下來就是進行資料的轉換和讀取了,因為在rom中ds18b20 都存在著乙個序列號,所以要跳出rom命令後,發出統一的溫度轉換啟動碼44h,就可以實現18b20的統一轉換,在經過1s左右後,就可以用很少的時間進行資料的讀取了,這種方式使其週期往往小於傳統的方式了。

溫度的轉換**就是按照這種要求來寫的:

功能:溫度轉換

輸入/輸出:無

void zhuanhuan ()

chushihua();

delay1(1);

writebyte(0xcc);//跳過序列號

writebyte(0x44);//傳送轉換溫度

delay(10);

轉換溫度後的工作就是將採集到的訊號用數碼管顯示出來了,對於數碼管顯示前面已經詳細地說過其方法,所以這是很簡單的,關鍵的一步就是溫度的採集和顯示。

訊號的採集和顯示要經過關鍵的幾步的作用的,程式的流程圖如下:

程式的源**如下:

功能:資料訊號的轉換和顯示

輸入:無

輸出:無

void xianshi()

int r,v,s,t;

chushihua();

delay1(1);

writebyte(0xcc);//跳過序列號

writebyte(0xbe);//傳送轉換溫度

r=readbyte();

v=readbyte();

s=r&0x0f ; //小數部

t=(v<<4|r>>4);//整數部分

p2=0xf7;

p0=shu[t/10];

delay1(2);

p2=0xff;

p2=0xfb;

p0=xiaoshu[t%10];

delay1(2);

p2=0xff;

p2=0xfd;

p0=shu[s/10];

delay1(2);

p2=0xff

p2=0xfe;

p0=shu[s%10];

delay1(2);

p2=0xff;

over

掌握好時序是關鍵!在寫好程式後可以考慮如何提高精度的問題這裡可已按照時序上所講的方法來做,我就是按照時序上來寫的結果就是精度又原先的0.04提高的現在的0.

01,精度有了明顯的改善。

菜鳥的ds18b20總結

之前玩了一下ds18b20,但一直沒有總結,忽然有種總結的衝動,所以就寫了這些。以下的這些只是我個人對部分文件的理解,水平不夠,難免會有誤,請各位指正,一 初始化,如圖一 資料線拉低至少480us後再將其拉高,大約等待15 60us,就會收到60 240us的低電平的存在脈衝,其後資料線會恢復被拉高...

unsp C編寫的DS18B20驅動

分享 u nsp c編寫的ds18b20驅動 本人寫的乙個ds18b20的驅動程式,這是我寫的第乙個時序程式,厚臉皮地拿出來與大家 分享 希望大家支援。不足之處還望大家不吝賜教。謝謝!工程名稱 ds18b20 功能描述 溫度感測器 涉及的庫 組成檔案 硬體連線 ioa15 s18b20的dq腳 ed...

DS18B20數字溫度感測器

dallas半導體公司的數位化溫度感測器ds1820是世界上第一片支援 一線匯流排 介面的溫度感測器,體積更小 適用電壓更寬 更經濟。一線匯流排獨特而且經濟的特點,使使用者可輕鬆地組建溫度感測器網路,為測量系統的構建引入全新概念。ds18b20 ds1822 一線匯流排 數位化溫度感測器同ds182...