找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3508|回復(fù): 5
上一主題 下一主題
收起左側(cè)

ds18b20 的程序分析

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主

u16 ds18b20_read_temp_val()
{
        u16 temp_16_bit=0;
        u8  temp_L=0;
        u8  temp_H=0;
        ds18b20_ready_read_temp();
        temp_L=ds18b20_read_one_char();//讀取溫度低八位
        temp_H=ds18b20_read_one_char();//讀取溫度高八位
        if(temp_H>0x7f)
        {
                temp_L=~temp_L;                                        //補(bǔ)碼轉(zhuǎn)換,取反加一
                temp_H=~temp_H+1;  
                temp_16_bit=100;
        }
        temp_16_bit=temp_16_bit+temp_H*16+temp_L/16;          ///   這以下
        temp_16_bit=temp_16_bit*100;
        temp_16_bit=temp_16_bit+((temp_L&0x0f)*10/16)*10;     ///
        temp_16_bit=temp_16_bit+(temp_L&0x0f)*100/16%10;      ///這以上
        return (u16)(temp_16_bit);
}

從這以下到 這以上 ,
        temp_16_bit=temp_16_bit+temp_H*16+temp_L/16;          ///   這以下
        temp_16_bit=temp_16_bit*100;
        temp_16_bit=temp_16_bit+((temp_L&0x0f)*10/16)*10;     ///
        temp_16_bit=temp_16_bit+(temp_L&0x0f)*100/16%10;      ///這以上
        return (u16)(temp_16_bit);

沒看太明白什么意思。請(qǐng)各位指點(diǎn)一下,謝謝。




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:149988 發(fā)表于 2017-8-22 08:38 | 只看該作者

RE: ds18b20 的程序分析

temp_16_bit=temp_16_bit+temp_H*16+temp_L/16;          ///   這以下
temp_16_bit=temp_16_bit*100;
temp_16_bit=temp_16_bit+((temp_L&0x0f)*10/16)*10;     ///
temp_16_bit=temp_16_bit+(temp_L&0x0f)*100/16%10;      ///這以上
return (u16)(temp_16_bit);

如果上5個(gè)語(yǔ)句是同一個(gè)程序中連續(xù)的5個(gè)語(yǔ)句,那么:
因?yàn)椋簍emp_16_bit=100、
temp_H=ds18b20_read_one_char();//讀取溫度高八位、
temp_L=ds18b20_read_one_char();//讀取溫度低八位。
所以:temp_16_bit=temp_16_bit+temp_H*16+temp_L/16; ///這以下。
可以寫為:
temp_16_bit=100+(讀取溫度高八位*16)+(讀取溫度低八位/16); 本語(yǔ)句的意思是:將temp_16_bit本身的值100  加上  讀取溫度高八位乘以16  再加上  讀取溫度低八位除以16  后存于  temp_16_bit中。
temp_16_bit=temp_16_bit*100; 本語(yǔ)句的意思是:將上式temp_16_bit取得的新值再乘上100,并存于temp_16_bit中。
temp_16_bit=temp_16_bit+((temp_L&0x0f)*10/16)*10; ///  該語(yǔ)句中 temp_L&0x0f意思是:讀取溫度低八位數(shù)同0x0f相與,其意義是保留  讀取溫度低八位數(shù)中低四位。屏蔽掉高四位。將相與后的新數(shù)先乘以10再除以16,最后加上temp_16_bit中的值,再存入temp_16_bit中去。
temp_16_bit=temp_16_bit+(temp_L&0x0f)*100/16%10; ///這以上。該語(yǔ)句同上一句意識(shí)相同,只是多了個(gè)%10,%10的意思是:取余數(shù)的意思,就是將(temp_L&0x0f)*100/16結(jié)果除10,取其余數(shù)。最后加上temp_16_bit中值再存入temp_16_bit中去。





回復(fù)

使用道具 舉報(bào)

板凳
ID:223841 發(fā)表于 2017-8-22 13:57 | 只看該作者
不倒翁.WZT 發(fā)表于 2017-8-22 08:38
temp_16_bit=temp_16_bit+temp_H*16+temp_L/16;          ///   這以下
temp_16_bit=temp_16_bit*100;
te ...

首先,謝謝您的詳細(xì)解釋。   您說的這些 我看懂了,可能是我表達(dá)不準(zhǔn)確。 這幾條語(yǔ)句的 DS18B20的這個(gè)算法到底是什么意思?什么意義?
回復(fù)

使用道具 舉報(bào)

地板
ID:111634 發(fā)表于 2017-8-22 15:58 | 只看該作者
本帖最后由 zl2168 于 2017-8-22 16:14 編輯

給你推薦一實(shí)例程序,其中測(cè)溫?cái)?shù)據(jù)轉(zhuǎn)換有詳細(xì)解釋。


實(shí)例97 一線式DS18B20測(cè)溫
實(shí)例97 DS18B20測(cè)溫.rar (51.78 KB, 下載次數(shù): 6)

Proteus仿真一下,確認(rèn)有效。
以上摘自張志良編著《80C51單片機(jī)仿真設(shè)計(jì)實(shí)例教程——基于Keil CProteus》清華大學(xué)出版社ISBN 978-7-302-41682-1,內(nèi)有常用的單片機(jī)應(yīng)用100案例,用于仿真實(shí)驗(yàn)操作,電路與程序真實(shí)可靠可信可行。仿真電路和Hex文件能在清華出版社網(wǎng)站免費(fèi)下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網(wǎng)上書店打折購(gòu)買。


回復(fù)

使用道具 舉報(bào)

5#
ID:223841 發(fā)表于 2019-3-1 17:16 | 只看該作者
zl2168 發(fā)表于 2017-8-22 15:58
給你推薦一實(shí)例程序,其中測(cè)溫?cái)?shù)據(jù)轉(zhuǎn)換有詳細(xì)解釋。

就一個(gè)hex文件,沒什么實(shí)質(zhì)用處
回復(fù)

使用道具 舉報(bào)

6#
ID:471066 發(fā)表于 2019-3-1 20:52 | 只看該作者
ds18b20很基礎(chǔ)的東東,壇子里有教程,多看看就明白了!
回復(fù)

使用道具 舉報(bào)

7#
ID:472242 發(fā)表于 2019-3-2 11:41
這個(gè)張志良怎么這么無(wú)自知之明呢,51黑的案例比他多了去,還來(lái)這里班門弄斧!

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表