DS18B20時序解析,以及讀出85原因詮釋


如何根據時序編寫呢(以下時序的延時條件很重要,下面講解不再強調

第一點:寫時序

寫0,寫1可以分開操作,但是也是可以統一編程的,如何統一;

我們先看寫時序,

 

1.主設備先拉低數據線,左(寫0)右(寫1)是一致的;

2.15us內出現分歧,分歧出現在寫1,波形出現了變化,此時要看寫1;

3.寫1在15us內被電阻上拉導致波形變化了,說明了什么呢,數據的變化導致了數據線上的波形未能維持原狀,數據這時候可以傳輸了(可能數據線此時被釋放,這里可以大家自行測試,本人測試是此時釋放的數據線,注意延時不能過長,本人加延時出錯,不加延時現象正確

所以這部分應該這樣編程:

定義數據線是DQ;

DQ = 0;

delayus(2);//看寫1時序,主設備拉低要有1us,這段時間寫0和寫1一致

DQ = (bit)data;

取發送數據低1位發送到數據線(DQ)

寫0和寫1都要至少60us延時,

此時主設備釋放數據線

DQ = 1;//看寫0時序

在來3us才進行下一位數據傳輸

重復8次一循環發送一字節數據

 第二點:讀時序

 

首先主設備拉低數據線大於1us

DQ = 0;

delayus(2);

15us內緊接着數據線被釋放(后面波形會變化的原因),讀0(左)會拉低數據線,讀1(右)會拉高數據線,並且主設備會完成讀取操作。

DQ = 1;

數據線上的數據存儲到tempdata ;//8次一循環按位組合成字節

等待60us再加3us進入循環

 最后返回出去就行了。

 

很多人讀取到的數據可能是“85”,這種現象說明時序操作正確。(+85攝氏度是DS18B20在上電復位后在溫度寄存器內的對應數字量),多讀幾次即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM