ds18b20裡的溫度值正負判斷為什麼要判斷大於

時間 2021-06-19 01:09:47

1樓:科強小米

tem_data_l=read_byte(); //讀低8位資料,低8位資料格式(2^3,2^2,2^1,2^0,2

tem_data_h=read_byte(); //讀高8位資料,高8位資料格式(s,s,s,s,s,2^6,2^5

temp_data=tem_data_h*256+tem_data_l;

sign_flag = 0;

sign_flag = temp_data;

sign_flag = (sign_flag & 0xf000) ; // 只保留符號位

if ( sign_flag > 0 ) // fuhao>0 是負數

else

temp_data ^= sign_flag;

if ( sign_flag>0 )// 負數求反加1

temp_data=(temp_data*625)/1000;

哪 來的數,看看我上面的處理就ok啦。

2樓:

其實不一定要大於6348

根據手冊,要是溫度為負值,則暫存器的高八位的高五位全為1,加入你把採集到的資料合成一個unsigned int 型,位tem,則temp為 1 1 1 1 1 x x x     x x x x x x x x,必定大於 0 0 0 0 0 1 1 1

1 1 1 1 1 1 1 1 (11個1),為2047,所以你只要判斷temp>(2047~~63489(二進位制數為 11111 000 00000001))

不明白的可以看下圖

用數碼管顯示ds18b20 為什麼顯示溫度一直不變

先用乙個資料變數顯示不同值,確定顯示部分是否正常。再確定溫度正不正常。數碼管顯示ds18b20溫度 完整才好改點,不完整的話,想除錯一下有些程式還得添啊剛剛編譯你的完整程式,有問題沒有通過 你怎麼都可以弄進去執行了呢?溫度十位。p2 1 p0 table1 a 1000000 100000 tabl...

我想用微控制器寫個ds18b20溫度感測器的程式但是讀

先解決一個18b20,不用系列號的。再解決一個18b20,使用系列號的。最後,再解決二個18b20,使用系列號的。現在,你弄的規模這麼大,難說在那一個步驟,有問題。 舉例說明 八位二進位制為一位元組,那最大為 1111 1111 255.先將這個數除100得到百位2,然後100取餘為55,將取餘後的...

為什麼我的DS18B20總是顯示

先不要顯示採集資料,就直接顯示乙個變數值,看看顯示是否正確?或者根本就和採集沒關係。ds18b20數碼管上顯示 000.06,是怎麼回事 溫度讀取失敗了,估計是reset延遲時間不夠所致,因為這個產品太老了,讀取速度很慢。申矽凌微電子的ct1820與之相容,且速度比之快了近20倍。uchar ct1...