DS18B20使用心得 反碼 補碼 原碼

2021-10-19 13:13:28 字數 2586 閱讀 5198

ds18b20溫度感測器和dht11類似 也是單匯流排進行資料的傳輸和控制

最高位為1 表示負數

最高位為0 表示正數

正數的原碼的補碼就是原碼本身

負數的原碼的補碼是原碼的反碼加1

負數:負數的補碼反碼的首位都是 表示為1

例如得到的是-

5表示的是1000

0000

0101

0000

補碼進行表示的就是

1111

1111

1010

1111

1111

1111

1011

0000

得到的補碼如下

但是我們要得到原碼 需要進行轉換 即通過補碼的反碼加一

1000

0000

0100

1111

1000

0000

0101

0000

得到負數現在的函式值

負數的原碼 = 負數補碼的反碼 +

1負數的補碼 = 負數原碼的反碼 +

在每次呼叫,都需要進行初始化

建立初始化

因為需要讀取資料和作為主機拉高

因此需要設定兩種不同的gpio輸入輸出模式

分別設定為推挽輸出 和 上拉電阻輸入

主機向ds18b20傳送低電平的時間為480us到960us

ds18b20等待訊號的時間是15us到60us

ds18b20傳送響應脈衝的訊號是60us-240us

ds18b20進行讀取的最短時間大於480us

因此得到的區間是60us到75us所有的等待時間都會經過此處

寫時序ds18b20寫入和讀取都是lsb先行

每次寫入的時間大於60us

寫入0主機傳送乙個60us-120us的低電平,然後延時乙個大於1us的恢復時間

寫入1主機傳送大於1us小於15us的低電平,然後延時讓寫入時間大於60us

讀時序在第乙個15us進行bit的讀取

主機傳送低電平訊號的時間大於1us小於15us

讀取一次的時間大於60us

當讀取到的是0 則為低電平

當讀取到的是1 則為高電平

* 儲存的溫度是16 位的帶符號擴充套件的二進位制補碼形式

* 當工作在12位解析度時,其中5個符號位,7個整數字,4個小數字

* * |---------整數----------|-----小數 解析度 1/(2^4)=0.0625----|

* 低位元組 | 2^3 | 2^2 | 2^1 | 2^0 | 2^(-1) | 2^(-2) | 2^(-3) | 2^(-4) |

* ** |-----符號位:0->正 1->負-------|-----------整數-----------|

* 高位元組 | s | s | s | s | s | 2^6 | 2^5 | 2^4 |

* *

* 溫度 = 符號位 + 整數 + 小數*0.0625

*//**

* @brief 在跳過匹配 rom 情況下獲取 ds18b20 溫度值

* @param 無

* @retval 溫度值

*/float ds18b20_gettemp_skiprom (

void

)在這裡 負數是通過補碼顯示出來的

因此看到的是ff.

.進行計算溫度需要轉換成原碼進行計算

DS18B20溫度測量

1.ds18b20 復位。2.寫入跳過 rom 的位元組命令,0xcc。3.寫入開始轉換的功能命令,0x44。4.延遲大約 750 900 毫秒 1.ds18b20 復位。2.寫入跳過 rom 的位元組命令,0xcc。3.寫入讀暫存的功能命令,0xbe。4.讀入第 0 個位元組 ls byte,轉換...

DS18B20溫度換算

dsi8b20接收到溫度轉換命令後,開始啟動轉換。轉換完成後的溫度值就以16位帶符號擴充套件的二進位制補碼形式儲存在高速暫存儲存器的0,1位元組。微控制器可通過單線介面讀到該資料,讀取時低位在前,高位在後,資料格式以0 062 5 lsb形式表示。溫度值格式如表2.2.1所示,其中 s 為標誌位,對...

ds18b20驅動配置

初始化時序 void ds18b20 rst void 返回1 沒有檢測到ds18b20的存在返回0 存在 u8 ds18b20 check void if retry 200 return1 else retry 0 while ds18b20 dq in retry 240 if retry 2...