熱門(mén): 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2020-2-29 14:35
正文摘要:圖片當(dāng)中的寫(xiě)法看不明白,有沒(méi)有能幫忙稍微詳細(xì)解答下,新手一枚!我看很多師傅的寫(xiě)法不區(qū)分寫(xiě)1還是寫(xiě)0?又是為哈? * 函 數(shù) 名 : Ds18b20WriteByte * 函數(shù)功能 &nbs ... |
有個(gè)朋友給的資料,覺(jué)得講的不錯(cuò)分享給大家。 |
寫(xiě)時(shí)序圖.jpg (72.01 KB, 下載次數(shù): 62)
DSPORT = dat & 0x01; // 這里決定寫(xiě)0 還是寫(xiě)1 i=6; while(i--); //延時(shí)68us,持續(xù)時(shí)間最少60us DSPORT = 1; //這里是釋放總線 |
pull1121 發(fā)表于 2020-3-3 12:11 是這樣的,理解正確。 |
“我的理解是這樣,是不是此時(shí)的高電平是被單片機(jī)被動(dòng)拉高的,所以不用去處理?” 看來(lái)你對(duì)這時(shí)序還不是太明白,DSPORT = dat & 0x01; 這句的意義是數(shù)據(jù)dat最低位如果是1,與上0x01就是1,即DSPORT=1,單片機(jī)主動(dòng)拉高電平;如果最低位是0,則DSPORT=0,單片機(jī)主動(dòng)拉低電平。不管是拉低還是拉高,一直保持該電平到45us,這是給18b20讀數(shù)據(jù)的時(shí)間,這期間DSPORT=1則18b20讀到1,為0則讀到0,不一定非要延時(shí)45us,我試過(guò)延時(shí)80us也正常工作 ![]() |
f556 發(fā)表于 2020-3-3 10:20 首先非常感謝您的詳細(xì)解釋,還手畫(huà)了圖。我能理解這幾個(gè)關(guān)鍵點(diǎn)。就是在采樣的45微秒的時(shí)候,不是數(shù)據(jù)線拉高了么?我的理解是這樣,是不是此時(shí)的高電平是被單片機(jī)被動(dòng)拉高的,所以不用去處理? |
odfggf 發(fā)表于 2020-3-2 20:55 嗯嗯 很感謝您的詳細(xì)解釋 之前是不太明白 為啥不區(qū)分寫(xiě)0和1 。有跟帖的師傅解釋的很清楚了 謝謝! |
重新畫(huà)個(gè)圖,來(lái)解釋。圖中有3處相同,所以正如你所說(shuō),大部分人不區(qū)分是寫(xiě)1還是寫(xiě)0。我所見(jiàn)過(guò)的程序各寫(xiě)的程序是不區(qū)分的。 你圖中寫(xiě)1采樣是15+20us,不對(duì),原版上還是15+30us。 由于采樣都是在15us后才開(kāi)始的,不論寫(xiě)1、寫(xiě)0,所以關(guān)鍵點(diǎn)1:15us以內(nèi)操作好DQ線。 由于采樣時(shí)間都是45us,關(guān)鍵點(diǎn)2:不能在15+45us期間變換DQ,一定要保持足夠時(shí)間讓采樣完成。 由于數(shù)據(jù)位的分隔是最小1us的高電平,關(guān)鍵點(diǎn)3:必須要有1us以上的分隔拉低再拉高電平。 區(qū)分寫(xiě)1寫(xiě)0的程序明顯要復(fù)雜一點(diǎn),沒(méi)用延時(shí)函數(shù)較差勁(編譯后要多),建議采納大家都用的不區(qū)分方式。 |
IMG_20200303_100130.jpg (329.9 KB, 下載次數(shù): 103)
pull1121 發(fā)表于 2020-3-1 11:46 程序?qū)懛ㄇf(wàn)種,每個(gè)人的寫(xiě)法不同,意義一樣。 寫(xiě)周期一開(kāi)始做為主機(jī)先把總線拉低1微秒表示寫(xiě)周期開(kāi)始。隨后dat & 0x01,若為0,則繼續(xù)拉低電平最少60微秒直至寫(xiě)周期結(jié)束,然后釋放總線為高電平。若為1,在一開(kāi)始拉低總線電平1微秒后就釋放總線為高電平,一直到寫(xiě)周期結(jié)束。而做為從機(jī)的DS18B20則在檢測(cè)到總線被拉底后等待15微秒然后從15us到45us開(kāi)始對(duì)總線采樣,在采樣期內(nèi)總線為高電平則為1,若采樣期內(nèi)總線為低電平則為0。 這就是第一種寫(xiě)法的意思。 |
Y_G_G 發(fā)表于 2020-3-1 14:50 感謝哈 還是不太明白 ![]() |
這是美信的官方PDF,你參考一下 18B20時(shí)序?qū)嶋H上是比較簡(jiǎn)單的,基本是以延時(shí)為主的,你多看一下別人的程序,或者是中文版的PDF數(shù)據(jù)手冊(cè)就可以了 ![]() |
cccc888 發(fā)表于 2020-2-29 19:05 我看到了 即使你的時(shí)序圖是對(duì)的 那個(gè)寫(xiě)1的時(shí)候DS被拉高了 為啥我上面別人寫(xiě)的程序怎么不區(qū)分哈 還是按拉低了處理的 根本不區(qū)分寫(xiě)0和1? |
cccc888 發(fā)表于 2020-2-29 19:05 從郭天祥老師寫(xiě)的書(shū)里面看來(lái)得 ,錯(cuò)了哈,你有英文原版的資料么 發(fā)我一份 pull1121@163.com 謝謝 |
技術(shù)貼值得mark mark mark |
你這張圖從哪里找的。
![]() |
Powered by 單片機(jī)教程網(wǎng)