第四部分:針對DS18B20的單片機編程
針對DS18B20的編程,可以理解為總線控制器通過相關(guān)指令操作器件或者器件中的相應(yīng)寄存器,從而完成器件也總線控制器的數(shù)據(jù)通信,所以要真正搞定 DS18B20的通訊編程,還需要詳細的了解該芯片的各種寄存器結(jié)構(gòu)、寄存器數(shù)據(jù)格式和相關(guān)的指令系統(tǒng),下面我們就結(jié)合上面圖示,說說DS18B20的內(nèi) 部存儲器結(jié)構(gòu)。
DS18B20的每個暫存器都有8bit存儲空間,用來存儲相應(yīng)數(shù)據(jù),其中byte0和byte1分別為溫度數(shù)據(jù)的低位 和高位,用來儲存測量到的溫度值,且這兩個字節(jié)都是只讀的;byte2和byte3為TH、TL告警觸發(fā)值的拷貝,可以在從片內(nèi)的電可擦可編程只讀存儲器 EEPROM中讀出,也可以通過總線控制器發(fā)出的[48H]指令將暫存器中TH、TL的值寫入到EEPROM,掉電后EEPROM中的數(shù)據(jù)不會丟 失;byte4的配置寄存器用來配置溫度轉(zhuǎn)換的精確度(最大為12位精度);byte5、6、7為保留位,禁止寫入;byte8亦為只讀存儲器,用來存儲 以上8字節(jié)的CRC校驗碼。
參考上面的DS18B20通訊指令圖,即為DS18B20芯片中主要寄存器的數(shù)據(jù)格式和必要的個別標識位說 明,只要做到對寄存器數(shù)據(jù)精準的控制,就可以很容易的完成DS18B20的程序編寫,而對于總線控制器發(fā)出的控制指令,我們需要知道,DS18B20的指 令包括ROM指令和功能指令,其中ROM指令用來進行ROM的操作,而功能指令則可以控制DS18B20完成溫度轉(zhuǎn)換,寄存器操作等功能性工作。一旦總線 控制器檢測到一個存在脈沖,它就會發(fā)出一條 ROM指令,如果總線上掛載多只DS18B20,這些指令將利用器件獨有的64位ROM片序列碼選出特定的要進行操作的器件,同樣,這些指令也可以識別哪 些器件符合報警條件等。在總線控制器發(fā)給要連接的DS18B20一條ROM指令后,就可以發(fā)送一條功能指令完成相關(guān)的工作了,也就是說,總線控制器在發(fā)起 一條DS18B20功能指令前,需要首先發(fā)出一條ROM指令。了解了這些功能指令的功能和用法,再對DS18B20編程就容易多了!~
第五部分:DS18B20芯片的兩點使用心得
(1)對TH(高溫觸發(fā)寄存器)和TL(低溫觸發(fā)寄存器)的操作心得
針對于DS18B20中TH(高溫觸發(fā)寄存器)和TL(低溫觸發(fā)寄存器),可以找到的代碼資料很少,而如果在某一測溫系統(tǒng)中需要用到TH和TL寄存器 時,其實不必覺得無從下手,參見本帖中的“DS18B20寄存器結(jié)構(gòu)”,總線控制器的讀操作將從位0開始逐步向下讀取數(shù)據(jù),直到讀完位8,而且TH和TL 寄存器的內(nèi)部結(jié)構(gòu)和數(shù)據(jù)格式和片內(nèi)其他寄存器是相同的,當然,針對TH和TL寄存器的讀寫和其他片內(nèi)寄存器的讀寫也是相同的,所以在實際應(yīng)用中,當 DS18B20初始化完成后,首先通過總線控制器發(fā)出的[B8H]指令將EEPROM中保存的數(shù)據(jù)召回到暫存器的TH和TL中,然后通過總線控制器發(fā)出的 “讀時隙”對器件暫存器進行讀操作,只要將讀到的每8bit數(shù)據(jù)及時獲取,就可以很容易地通過總線控制器讀出TH和TL寄存器數(shù)據(jù);總線控制器對器件的寫 操作原理亦然,換句話說,只要掌握了其他寄存器的操作編程,就完全可以很容易地對TH和TL這兩個報警值寄存器進行讀寫操作。同時,可以通過[48H]指 令將TH和TL寄存器數(shù)據(jù)拷貝到EEPROM中進行保存。
?。?)對DS18B20通訊時隙的掌握心得
在由 DS18B20芯片構(gòu)建的溫度檢測系統(tǒng)中,采用達拉斯公司獨特的單總線數(shù)據(jù)通訊方式,允許在一條總線上掛載多個DS18B20,那么,在對DS18B20 的操作和控制中,由總線控制器發(fā)出的時隙信號就顯得尤為重要。如下圖所示,分別為DS18B20芯片的上電初始化時隙、總線控制器從DS18B20讀取數(shù) 據(jù)時隙、總線控制器向DS18B20寫入數(shù)據(jù)時隙的示意圖,在系統(tǒng)編程時,一定要嚴格參照時隙圖中的時間數(shù)據(jù),做到精確的把握總線電平隨時間(微秒級)的 變化,才能夠順利地控制和操作DS18B20。另外,需要注意到不同單片機的機器周期是不盡相同的,所以,程序中的延時函數(shù)并不是完全一樣,要根據(jù)單片機 不同的機器周期有所改動。在平常的DS18B20程序調(diào)試中,若發(fā)現(xiàn)諸如溫度顯示錯誤等故障,基本上都是由于時隙的誤差較大甚至時隙錯誤導(dǎo)致的,在對 DS18B20編程時需要格外注意。
上電初始化時隙圖
數(shù)據(jù)讀取時通訊總線的時隙圖
數(shù)據(jù)寫入時通訊總線的時隙圖
好了,帖子寫到這里,基本上算是告一段落了,我們描述了DS18B20測溫芯片的封裝、管腳定義、電路連接方式、內(nèi)部寄存器的結(jié)構(gòu)和數(shù)據(jù)格式、通信時隙和功能/控制指令,最后希望這篇帖子可以幫助到正在或者將要使用到DS18B20測溫芯片的壇友,謝謝大家!