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

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

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檢測溫度,溫度20時,是正常的,溫度20時,返回值是0xff,0xff,請教高手為什麼

應該是你的程式上出來還存在小問題。 近期通過ds18b20再加lcd1602加序列輸出除錯成功,的lcddata埠p0 包括 包括 stc12c5a.h 定義xtal 11059200 杯晶振頻率 定義波特率9600 通訊波特率 定義uchar無符號字元型 定義的uint無符號整數 br p sbi...

我編寫ds18b20程式想顯示溫度在led燈上但

include reg52.h include include 要用到取絕對值函式abs define uchar unsigned char define uint unsigned int sbit ds p2 1 sbit ds p3 2 ds18b20 sbit duan p2 6 sbit...

ds18b20與其他溫度感測器有什麼優缺點

優點 1 與微控制器的介面簡單 2 單隻使用比較簡單 3 有體積小,硬體開銷低,抗干擾能力強 缺點 1 多隻單匯流排使用涉及到rom搜尋的程式,比較難懂點2 精度0.5度。ds18b20數字溫度感測器接線方便,封裝成後可應用於多種場合,如管道式,螺紋式,磁鐵吸附式,不鏽鋼封裝式,型號多種多樣,有lt...