欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3914|回復: 5
收起左側

ds18b20 的程序分析

[復制鏈接]
ID:223841 發表于 2017-8-21 19:29 | 顯示全部樓層 |閱讀模式

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;                                        //補碼轉換,取反加一
                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);

沒看太明白什么意思。請各位指點一下,謝謝。




回復

使用道具 舉報

ID:149988 發表于 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個語句是同一個程序中連續的5個語句,那么:
因為:temp_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); 本語句的意思是:將temp_16_bit本身的值100  加上  讀取溫度高八位乘以16  再加上  讀取溫度低八位除以16  后存于  temp_16_bit中。
temp_16_bit=temp_16_bit*100; 本語句的意思是:將上式temp_16_bit取得的新值再乘上100,并存于temp_16_bit中。
temp_16_bit=temp_16_bit+((temp_L&0x0f)*10/16)*10; ///  該語句中 temp_L&0x0f意思是:讀取溫度低八位數同0x0f相與,其意義是保留  讀取溫度低八位數中低四位。屏蔽掉高四位。將相與后的新數先乘以10再除以16,最后加上temp_16_bit中的值,再存入temp_16_bit中去。
temp_16_bit=temp_16_bit+(temp_L&0x0f)*100/16%10; ///這以上。該語句同上一句意識相同,只是多了個%10,%10的意思是:取余數的意思,就是將(temp_L&0x0f)*100/16結果除10,取其余數。最后加上temp_16_bit中值再存入temp_16_bit中去。





回復

使用道具 舉報

ID:223841 發表于 2017-8-22 13:57 | 顯示全部樓層
不倒翁.WZT 發表于 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 ...

首先,謝謝您的詳細解釋。   您說的這些 我看懂了,可能是我表達不準確。 這幾條語句的 DS18B20的這個算法到底是什么意思?什么意義?
回復

使用道具 舉報

ID:111634 發表于 2017-8-22 15:58 | 顯示全部樓層
本帖最后由 zl2168 于 2017-8-22 16:14 編輯

給你推薦一實例程序,其中測溫數據轉換有詳細解釋。


實例97 一線式DS18B20測溫
實例97 DS18B20測溫.rar (51.78 KB, 下載次數: 6)
DS18B20 測溫.jpg
Proteus仿真一下,確認有效。
以上摘自張志良編著《80C51單片機仿真設計實例教程——基于Keil CProteus》清華大學出版社ISBN 978-7-302-41682-1,內有常用的單片機應用100案例,用于仿真實驗操作,電路與程序真實可靠可信可行。仿真電路和Hex文件能在清華出版社網站免費下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網上書店打折購買。


回復

使用道具 舉報

ID:223841 發表于 2019-3-1 17:16 | 顯示全部樓層
zl2168 發表于 2017-8-22 15:58
給你推薦一實例程序,其中測溫數據轉換有詳細解釋。

就一個hex文件,沒什么實質用處
回復

使用道具 舉報

ID:471066 發表于 2019-3-1 20:52 | 顯示全部樓層
ds18b20很基礎的東東,壇子里有教程,多看看就明白了!
回復

使用道具 舉報

ID:472242 發表于 2019-3-2 11:41
這個張志良怎么這么無自知之明呢,51黑的案例比他多了去,還來這里班門弄斧!

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表