久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

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

QQ登錄

只需一步,快速開始

搜索
查看: 4746|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)DS18B20測(cè)溫系統(tǒng)仿真設(shè)計(jì)-創(chuàng)新性實(shí)驗(yàn)結(jié)題報(bào)告

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:231567 發(fā)表于 2017-9-7 09:10 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
山東科技大學(xué)電工電子實(shí)驗(yàn)教學(xué)中心

創(chuàng)新性實(shí)驗(yàn)結(jié)題報(bào)告

實(shí)驗(yàn)項(xiàng)目名稱  _基于Proteus的溫度檢測(cè)_

組長(zhǎng)姓名 婁猛__   學(xué)號(hào) _2*01417

手機(jī)    159*917

成員姓名    ____         學(xué)號(hào)   _      _  

成員姓名    ____         學(xué)號(hào)   _      _  

專    業(yè)  電子信息工程_    班級(jí) _  09級(jí)

指導(dǎo)教師及職稱 ____呂常智______

開課學(xué)期      至_學(xué)年_1_學(xué)期

提交時(shí)間      年1月日




一、實(shí)驗(yàn)摘要

根據(jù) DS18B20 的 1-wire 的通信原理,利用單片機(jī)匯編(或 C)語言實(shí)現(xiàn)一個(gè)溫度測(cè)試并顯示的電路,在 Proteus 平臺(tái)上進(jìn)行電路設(shè)計(jì),并且載入單片機(jī)程序進(jìn)行仿真驗(yàn)證。


、實(shí)驗(yàn)目的

掌握虛擬仿真軟件 Proteus 的應(yīng)用,了解溫度傳感器 DS18B20 的 1-wire 的通信原理,學(xué)會(huì)采用 Proteus 虛擬仿真軟件工具,利用單片機(jī)匯編(或 C)語言實(shí)現(xiàn)一個(gè)溫度測(cè)試并顯示的電路,并且在 Proteus 軟件上仿真測(cè)試,進(jìn)行驗(yàn)證,綜合實(shí)驗(yàn)系統(tǒng)的使用方法,熟悉創(chuàng)新性實(shí)驗(yàn)報(bào)告的撰寫方法。


實(shí)驗(yàn)場(chǎng)地及儀器、設(shè)備和材料:

實(shí)驗(yàn)場(chǎng)地: 院實(shí)驗(yàn)室318、424
儀器設(shè)備: 計(jì)算機(jī)一臺(tái)
軟件:   Proteus軟件

(1)DS18B20特點(diǎn):
DS18B20采用一線通信接口。因?yàn)橐痪通信接口,必須在先完成ROM設(shè)定,否則記憶和控制 功能將無法使用。主要首先提供以下功能命令之一: <1> 讀ROM,<2>ROM匹配,<3>搜索ROM,<4>跳過ROM,<5>報(bào)警檢查。這些指令操作作用在沒有一個(gè)器件的64位光刻ROM序列號(hào),可以在掛在一線上多個(gè)器件選定某一個(gè)器件,同時(shí),總線也可以知道總線上掛有有多少,什么樣的設(shè)備。
若指令成功地使DS18B20完成溫度測(cè)量,數(shù)據(jù)存儲(chǔ)在DS18B20的存儲(chǔ)器。一個(gè)控制功能 指揮指示DS18B20的演出測(cè)溫。測(cè)量結(jié)果將被放置在DS18B20內(nèi)存中,并可以讓閱讀發(fā)出記憶功能的指揮,閱讀內(nèi)容的片上存儲(chǔ)器。溫度報(bào)警觸發(fā)器 TH和TL都有一字節(jié)EEPROM 的數(shù)據(jù)。如果DS18B20不使用報(bào)警檢查指令,這些寄存器可作為一般的用戶記憶用途。在片上還載有配置字節(jié)以理想的解決溫度數(shù)字轉(zhuǎn)換。寫TH,TL指令 以及配置字節(jié)利用一個(gè)記憶功能的指令完成。通過緩存器讀寄存器。所有數(shù)據(jù)的讀,寫都是從最低位開始。

DS18B20部分命令設(shè)置:
命令
名稱
作用及解釋
0CCH
SKIP ROM命令
這條命令允許總線控制器不用提供 64 位ROM 編碼就使用存儲(chǔ)器操作命令,在單點(diǎn)總線情況下右以節(jié)省時(shí)間。如果總線上不止一個(gè)從機(jī),在 Skip ROM命令之后跟著發(fā)一條讀命令,由于多個(gè)從機(jī)同時(shí)傳送信號(hào),總線上就會(huì)發(fā)生數(shù)據(jù)沖突(漏極開路下拉效果相當(dāng)于相與)。
4EH
寫暫存存儲(chǔ)器命令
這個(gè)命令向 DS1820 的暫存器中寫入數(shù)據(jù),開始位置在地址 2。接下來寫入的兩個(gè)字節(jié)將被存到暫存器中的地址位置 2 和3。可以在任何時(shí)刻發(fā)出復(fù)位命令來中止寫入。
44H
溫度轉(zhuǎn)換命令
這條命令啟動(dòng)一次溫度轉(zhuǎn)換而無需其他數(shù)據(jù)。溫度轉(zhuǎn)換命令被執(zhí)行,而后 DS1820保持等待狀態(tài)。如果總線控制器在這條命令之后跟著發(fā)出讀時(shí)間隙,而 DS1820 又忙于做時(shí)間轉(zhuǎn)換的話,DS1820 將在總線上輸出“0”,若溫度轉(zhuǎn)換完成,則輸出“1”。如果使用寄生電源,總線控制器必須在發(fā)出這條命令后立即起動(dòng)強(qiáng)上拉,并保持500ms。
0BEH
讀溫度命令
這個(gè)命令讀取暫存器的內(nèi)容。讀取將從字節(jié) 0 開始,一直進(jìn)行下去,直到第 9(字節(jié) 8,CRC)字節(jié)讀完。如果不想讀完所有字節(jié),控制器可以在任何時(shí)間發(fā)出復(fù)位命令來中止讀取。
0ECH
告警搜索
這條命令的流程圖和 Search ROM 相同。然而,只有在最近一次測(cè)溫后遇到符合報(bào)警條件的情況,DS1820才會(huì)響應(yīng)這條命令。報(bào)警條件定義為溫度高于TH或低于TL。只要 DS1820 不掉電,報(bào)警狀態(tài)將一直保持,直到再一次測(cè)得的溫度值達(dá)不到報(bào)警條件。
DS18B20讀寫時(shí)序圖:
說明:
主機(jī)要生成一個(gè)寫時(shí)間隙,必須把數(shù)據(jù)線拉到低電平然后釋放,在寫時(shí)間隙開始后的15μs內(nèi)允許數(shù)據(jù)線拉到高電平。 主機(jī)要生成一個(gè)寫 0 時(shí)間隙,必須把數(shù)據(jù)線拉到低電平并保持 60μs。
初始化過程“復(fù)位和存在脈沖”:
說明:
DS1820 需要嚴(yán)格的協(xié)議以確保數(shù)據(jù)的完整性。協(xié)議包括幾種單線信號(hào)類型:復(fù)位脈沖、存在脈沖、寫0、寫 1、讀0 和讀1。所有這些信號(hào),除存在脈沖外,都是由總線控制器發(fā)出的。 和 DS1820 間的任何通訊都需要以初始化序列開始,一個(gè)復(fù)位脈沖跟著一個(gè)存在脈沖表明 DS1820 已經(jīng)準(zhǔn)備好發(fā)送和接收數(shù)據(jù)(適當(dāng)?shù)?ROM 命令和存儲(chǔ)器操作命令)。



DS18B20溫度值格式表:
說明:
  這是12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲(chǔ)在18B20的兩個(gè)8比特的RAM中,二進(jìn)制中的前面 5位是符號(hào)位,如果測(cè)得的溫度大于0, 這5位為0,只要將測(cè)到的數(shù)值乘于0.0625即可得到實(shí)際溫度;如果溫度小于0,這5位為1,測(cè)到的數(shù)值需要取反加1再乘于0.0625即可得到實(shí)際 溫度。 例如+125℃的數(shù)字輸出為07D0H,+25.0625℃的數(shù)字輸出為0191H,-25.0625℃的數(shù)字輸出為FE6FH,-55℃的數(shù)字輸出為FC90H 。
(2)數(shù)碼顯示:
采用數(shù)碼管動(dòng)態(tài)顯示,通過位控線選擇數(shù)碼管,同時(shí)單片機(jī)通過查表送出段選送顯示的段碼,利用人的視覺暫留特點(diǎn)達(dá)到顯示的目的。
(3)復(fù)位電路:
復(fù)位電路采用手動(dòng)復(fù)位,實(shí)現(xiàn)單片機(jī)系統(tǒng)復(fù)位。
(4)震蕩電路;
為單片機(jī)提供恒定可靠的震蕩周期。
(5)驅(qū)動(dòng)電路:
由于單片機(jī)的驅(qū)動(dòng)能力有限,考慮到數(shù)碼管的特點(diǎn),實(shí)際應(yīng)加上驅(qū)動(dòng)電路,以提供合適的電流。
(6)測(cè)溫開關(guān)
給單片機(jī)信號(hào),給予其開始測(cè)溫,關(guān)閉測(cè)溫指示。
(7)Proteus 虛擬仿真
在keil中編寫單片機(jī)程序,生成相應(yīng)的.Hex文件,將文件復(fù)制到一個(gè)文件夾下,在Proteus里添加單片機(jī)并設(shè)置程序的路徑,找到該文件,仿真時(shí)就會(huì)調(diào)用該程序文件。

2、實(shí)驗(yàn)內(nèi)容
根據(jù)設(shè)計(jì)要求設(shè)計(jì)硬件電路,根據(jù)各項(xiàng)指標(biāo)選擇合適的原件,在Proteus原理圖中畫出原理圖。本設(shè)計(jì)采用六個(gè)八段數(shù)碼段動(dòng)態(tài)顯示,硬件電路主要有單片機(jī),復(fù)位電路,數(shù)碼顯示,震蕩電路,驅(qū)動(dòng)電路,測(cè)溫開關(guān)電路,傳感器電路等組成。開機(jī)顯示“HELLO”友好界面,測(cè)溫控制開關(guān)開始關(guān)閉測(cè)溫,當(dāng)開關(guān)閉合時(shí),處于測(cè)溫狀態(tài),顯示的溫度值即為真實(shí)溫度,開關(guān)打開時(shí)為關(guān)閉狀態(tài),數(shù)碼管組顯示“OFF”與最后一次測(cè)量值的交替顯示,警示測(cè)溫中斷,開關(guān)再次合上時(shí)又進(jìn)行正常測(cè)溫。考慮到成本問題單片機(jī)選用AT89C52,該單片機(jī)為一8位單片機(jī),詳細(xì)介紹再次就不過多陳述,具體參數(shù)參考技術(shù)資料。單片機(jī)程序采用匯編語言,在Keil環(huán)境下編譯。

3、實(shí)驗(yàn)步驟
(1)根據(jù)功能設(shè)計(jì)硬件電路
<1>數(shù)碼管顯示及其驅(qū)動(dòng)電路:
本設(shè)計(jì)采用的是6位8段共陽數(shù)碼管,如下圖所示,ABCDEFG個(gè)DP分別是數(shù)碼管的八個(gè)段,123456是對(duì)應(yīng)的六個(gè)線選線,由于單片機(jī)的灌電流能力也不是很強(qiáng),直接驅(qū)動(dòng)幾個(gè)數(shù)碼管有點(diǎn)困難,因此加上了373鎖存器,跟7407同向驅(qū)動(dòng)芯片。373鎖存p0(開漏輸出)口輸出的段選信號(hào),P2口是線選信號(hào)輸出口。P2口雖然內(nèi)部有上拉電阻,但是由于7407是集電極開路六組驅(qū)動(dòng)器,沒有上拉不能輸出高電平所以還要加上拉電阻。7407的驅(qū)動(dòng)能力比較強(qiáng),高電平時(shí)輸出最大電流可達(dá)41mA,而輸入高電平電流只需40uA即可,能夠滿足該六位數(shù)碼管正常顯示。

<2>振蕩電路
該振蕩電路外部由兩個(gè)電容C1,C2跟晶振X1組成,如下圖連接接地,并接到單片機(jī)的XTAL1跟XTAL2引腳上。由于51單片機(jī)內(nèi)部有一個(gè)用于構(gòu)成振蕩器的可控高增益反向放大器,兩個(gè)引腳XTAL1,XTAL2分別是該放大器的輸入端跟輸出端。按下圖所示,就可構(gòu)成一個(gè)自激振蕩器,匹配電容根據(jù)晶振的要求選取,一般選用20~30pF瓷片電容即可。

<3>復(fù)位電路
下圖是一個(gè)簡(jiǎn)單手動(dòng)復(fù)位與上電復(fù)位的綜合復(fù)位電路。R2,R3構(gòu)成手動(dòng)復(fù)位電路,R2一般取1~5KΩ。在實(shí)際電路中,當(dāng)R3=200Ω,R2=800Ω時(shí),按下按鍵實(shí)現(xiàn)可靠復(fù)位電壓為4V.即Urst=U*R2/(R2+R3)。由于仿真軟件的問題,當(dāng)R2大于1K時(shí),上電后RST引腳不能實(shí)現(xiàn)低電平,因此不能滿足復(fù)位的條件,采用800Ω電阻時(shí)能夠?qū)崿F(xiàn)。但實(shí)際電路中R2取到1K才能實(shí)現(xiàn)可靠的上電復(fù)位。(相關(guān)公式:Urst=5*e^(-t/τ), τ=R2*C,當(dāng)復(fù)位電壓大于等于3V時(shí)是可靠復(fù)位電壓。帶入上式,t=τ*ln(5/3) ≈0.15τ,當(dāng)R2=1KΩ,C=22uF時(shí),t≈11.2ms.即復(fù)位時(shí)間約為11.2ms。為保證可靠復(fù)位,復(fù)位時(shí)間大于10ms即可。)
<4>測(cè)溫開關(guān):
測(cè)溫開關(guān)的實(shí)現(xiàn)時(shí)利用檢驗(yàn)其是否存在的原理進(jìn)而轉(zhuǎn)換顯示狀態(tài),故可以設(shè)置在DS18B20跟單片機(jī)相連的路徑之間(接在P3.3引腳),開關(guān)斷開,單片機(jī)就會(huì)檢測(cè)不到傳感器,轉(zhuǎn)換到關(guān)閉測(cè)溫狀態(tài),開關(guān)閉合,單片機(jī)又能檢測(cè)到傳感器,自動(dòng)轉(zhuǎn)到測(cè)溫顯示狀態(tài)。由于DS1820 的單總線端口(I/O 引腳)是漏極開路式的,一個(gè)多點(diǎn)總線由一個(gè)單線總線和多個(gè)掛于其上的從機(jī)構(gòu)成。在發(fā)出任何涉及拷貝到 E2存儲(chǔ)器或啟動(dòng)溫度轉(zhuǎn)換的協(xié)議之后,必須在最多 10μs之內(nèi)把 I/O 線轉(zhuǎn)換到強(qiáng)上拉,因此單線總線需要一個(gè)約 5KΩ的上拉電阻。
實(shí)際電路如下圖所示:

(2)設(shè)計(jì)單片機(jī)程序,畫出流程圖
通過單線總線端口訪問 DS1820 的協(xié)議如下:
• 初始化   
• ROM 操作命令   
• 存儲(chǔ)器操作命令
• 執(zhí)行/數(shù)據(jù)
程序組成:
主程序
子程序:
HELLO與OFF開關(guān)顯示、DS18B20初始化、重寫DB18B20、讀溫度、溫度數(shù)值轉(zhuǎn)換等。

主程序流程圖:
HELLO與OFF開關(guān)顯示流程圖:

DS18B20初始化流程圖:
重寫DB18B20流程圖:





讀溫度流程圖:
溫度數(shù)值轉(zhuǎn)換流程圖:

(3)編寫程序
根據(jù)硬件電路編寫程序,程序見實(shí)驗(yàn)結(jié)果部分的程序清單。
(4)仿真調(diào)試
在Keil編譯環(huán)境下編譯匯編程序,設(shè)置晶振12MHz,生成.Hex文件。打開用Proteus畫好的原理圖,雙擊單片機(jī),設(shè)置震蕩頻率12MHz,與硬件電路相對(duì)應(yīng),瀏覽找到生成的該程序的.Hex文件作為其程序。設(shè)置完成,打開仿真按鈕,進(jìn)行仿真調(diào)試,打開閉合測(cè)溫開關(guān)觀察現(xiàn)象,調(diào)節(jié)DS18B20的溫度調(diào)節(jié)部分調(diào)節(jié)溫度,觀察數(shù)碼顯示溫度值。


、實(shí)驗(yàn)結(jié)果與分析
1、實(shí)驗(yàn)現(xiàn)象、數(shù)據(jù)記錄
當(dāng)仿真開始時(shí),顯示開機(jī)界面“HELLO”:
測(cè)溫時(shí),當(dāng)測(cè)試零下溫度時(shí)顯示零下溫度值:
當(dāng)測(cè)試零上溫度時(shí)顯示正的溫度值:
當(dāng)測(cè)溫開關(guān)打開時(shí),顯示“OFF”與最后一次測(cè)溫值交替顯示界面:


2、對(duì)實(shí)驗(yàn)現(xiàn)象、數(shù)據(jù)及觀察結(jié)果的分析與討論:
    開機(jī)時(shí)顯示“HELLO”問候,采用200次動(dòng)態(tài)掃描顯示,顯示完之后自動(dòng)轉(zhuǎn)到下面的初始化及測(cè)溫程序,傳感器存在時(shí),進(jìn)行正常測(cè)溫,零上溫度入上面圖示,顯示零上溫度,無效位消隱,實(shí)現(xiàn)方法是每次遍歷存儲(chǔ)空間,將無效位的段選置空,有效的位用數(shù)據(jù)填充,小數(shù)點(diǎn)另加到倒數(shù)第二個(gè)數(shù)碼管的小數(shù)點(diǎn)處。當(dāng)測(cè)試零下溫度時(shí),數(shù)值轉(zhuǎn)換要取反加1,還要在前面加負(fù)號(hào),考慮到負(fù)數(shù)最多顯示兩位,故將負(fù)號(hào)固定在倒數(shù)第四位,省去了判斷的麻煩。當(dāng)測(cè)溫開關(guān)斷開時(shí),由于檢測(cè)不到DS18B20的存在,故程序轉(zhuǎn)到顯示“OFF”界面,由于要不斷地檢測(cè)存在位,所以要循環(huán)檢測(cè),循環(huán)顯示,由于時(shí)序的原因,會(huì)使OFF與最后一次測(cè)溫結(jié)果交替顯示。開關(guān)閉合,又能檢測(cè)到標(biāo)志位,程序自動(dòng)進(jìn)入正常測(cè)溫序列。
3、主要關(guān)鍵和創(chuàng)新點(diǎn):
  在Proteus仿真環(huán)境下,使用DS18B20進(jìn)行一路測(cè)溫,測(cè)溫精度達(dá)到到0.5攝氏度開機(jī)顯示友好界面“HELLO”問候,當(dāng)測(cè)溫關(guān)閉時(shí),會(huì)顯示“OFF”提醒,閉合開關(guān),又可以進(jìn)行正常測(cè)溫。本設(shè)計(jì)通過檢查存在標(biāo)志位的方法進(jìn)行了測(cè)溫開關(guān)的控制,避免了使用中斷進(jìn)行控制,從而避免了中斷導(dǎo)致的測(cè)溫時(shí)序混亂,測(cè)溫不準(zhǔn)的結(jié)果。

程序清單:
  1. ;===================================
  2. ;FLAG1: 標(biāo)志位,為"1"時(shí)表示檢測(cè)到DS18B20
  3. ;FLAG2: 標(biāo)志位,為“1”時(shí)測(cè)溫,為0時(shí)關(guān)閉
  4. ;DQ:    DS18B20的數(shù)據(jù)總線接腳
  5. ;===================================
  6. ;RAM
  7.         ByteCnt  data 31H ;數(shù)據(jù)字節(jié)計(jì)數(shù)器
  8.                             TEMPER_H EQU 35H ;溫度高八位
  9.         TEMPER_L  EQU 36H  ;溫度低八位
  10.         TEMPER_NUM EQU  37H                 ;保存讀出的溫度數(shù)據(jù)
  11.         ZhengShu  EQU 38H  ;存放整數(shù)部分?jǐn)?shù)據(jù)
  12.         Show_Dat  EQU 40H ;存儲(chǔ)要顯示的數(shù)據(jù)                           
  13. ;BIT
  14.         FLAG1  EQU  20H              ;標(biāo)志位,為"1"時(shí)表示檢測(cè)到DS18B20
  15.         DQ   BIT   P3.3                 ;;DS18B20的數(shù)據(jù)總線接腳
  16. ;===================================
  17.         ORG  00H              ;;給定主函數(shù)起始位置
  18.         LJMP   MAIN              ;;跳至主函數(shù)
  19.         ORG  000BH              ;;定時(shí)器T0中斷服務(wù)程序入口
  20.         LJMP   INT_T0  ;;跳至T0中斷            
  21. ;===================================
  22. ;MAIN
  23. ;主程序
  24. ;===================================
  25. MAIN:   NOP
  26.                    MOV              R3,#0C8H              ;顯示200次
  27.                    MOV  50H,#0     ;顯示緩沖單元
  28.         MOV    51H,#1
  29.         MOV    52H,#2
  30.         MOV    53H,#3
  31.         MOV    54H,#4
  32.         MOV    55H,#5
  33.                             CALL  HELLO ;;調(diào)用開機(jī)顯示界面
  34.                             NOP
  35.         MOV    SP,#0E0H              ;;設(shè)堆棧指針
  36.         MOV   TMOD,#01H  ;T0工作在16位定時(shí)器
  37.         MOV  TH0,#0F8H   ;定時(shí)2ms初值
  38.         MOV    TL0,#50H
  39.         SETB    ET0   ;允許定時(shí)器0中斷
  40.         CLR    EA         ;關(guān)閉全局中斷
  41.         SETB    TR0        ;打開定時(shí)器0
  42.         MOV    R0,#40H                 ;該地址是存儲(chǔ)要顯示的數(shù)據(jù)區(qū)首址
  43. AGAIN: MOV    @R0,#0FFH              ;;存儲(chǔ)區(qū)初始化,置1
  44.         INC    R0
  45.         CJNE   R0,#48H,AGAIN                ;;遍歷
  46. MAIN_1: CALL   INIT_1820              ;;初始化18B20
  47.         CALL   RE_CONFIG                ;;重新寫DS18B20
  48.         CALL   GET_TEMPER              ;;讀溫度
  49.         MOV    Show_Dat+1,#0FFH   ;;存儲(chǔ)區(qū)初始化,置1
  50.         MOV    Show_Dat+2,#0FFH
  51.         MOV    Show_Dat+3,#0FFH
  52.         LCALL  Temper_chng              ;;數(shù)值轉(zhuǎn)換
  53.         MOV    R5,#01H                            ;;第一個(gè)位選
  54.         MOV    R0,#40H                            ;;顯示首址
  55.         SETB    EA                              ;;開全局中斷
  56.         LCALL  DELAY                ;;延時(shí)
  57.         CLR     EA                                          ;;關(guān)全局中            
  58.         JMP     MAIN_1                            ;;返回主函數(shù)
  59. ;===================================
  60. ;INIT_1820
  61. ;DS18B20初始化程序
  62. ;===================================
  63. INIT_1820:
  64.         SETB   DQ              ;;先拉高總線,準(zhǔn)備拉低
  65.         NOP              ;;等待1us電平轉(zhuǎn)換狀態(tài)完畢
  66.         CLR     DQ                                          ;;釋放總線
  67.         MOV    R0,#6BH              ;為延時(shí)送初值
  68.         MOV    R1,#03H                            ;;為延時(shí)送初值
  69. TSR1:   DJNZ   R0,TSR1    ;延時(shí)約700us (480~960)
  70.         MOV    R0,#6BH  ;;為延時(shí)送初值
  71.         DJNZ   R1,TSR1
  72.         SETB   DQ         ;釋放總線
  73.         NOP                                                                      ;;延時(shí)
  74.         NOP
  75.         NOP
  76.         MOV    R0,#20H                            ;;為延時(shí)送初值
  77. TSR2:   JNB    DQ,TSR3  ;有存在信號(hào)跳轉(zhuǎn)
  78.         DJNZ   R0,TSR2   ;延時(shí)約70us,70us后如果數(shù)據(jù)線沒有存在脈沖(低電平)說明DS18B20不存在
  79.         LJMP   TSR4              ;;轉(zhuǎn)到清除標(biāo)志操作
  80. TSR3:   SETB   FLAG1   ;置標(biāo)志位,表示DS1820存在
  81.         LJMP   TSR5              ;;準(zhǔn)備延時(shí)
  82. TSR4:   CLR    FLAG1     ;清標(biāo)志位,表示DS18B20不存在
  83.         LJMP   TSR7 ;;準(zhǔn)備釋放總線繼續(xù)等
  84. TSR5:   MOV    R0,#05CH              ;;送延時(shí)初值
  85. TSR6:   DJNZ   R0,TSR6      ;延時(shí)200us
  86. TSR7:   SETB   DQ           ;釋放總線
  87.         RET
  88. ;===================================
  89. ; RE_CONFIG
  90. ; 重新寫DS18B20暫存存儲(chǔ)器設(shè)定值
  91. ;===================================
  92. RE_CONFIG:
  93.         JB  FLAG1,RE_CONFIG1 ;若DS18B20存在,轉(zhuǎn)RE_CONFIG1
  94.                             MOV                R3,#0C8H              ;顯示200次
  95.                    MOV    60H,#0     ;顯示緩沖單元
  96.         MOV    61H,#1
  97.         MOV    62H,#2
  98.         MOV    63H,#3
  99.         MOV    64H,#4
  100.         MOV    65H,#5
  101.                             CALL   OFF
  102.         RET
  103. RE_CONFIG1:
  104.         MOV  A,#0CCH ;發(fā)SKIP ROM命令
  105.         LCALL  WRITE_1820
  106.         MOV  A,#4EH ;發(fā)寫暫存存儲(chǔ)器命令
  107.         LCALL  WRITE_1820
  108.        MOV A,#30H;TH(上限)中寫入00H
  109.         LCALL  WRITE_1820
  110.         MOV  A,#00H  ;TL(下限)中寫入00H
  111.         LCALL  WRITE_1820
  112.         MOV  A,#1FH ;選擇9位溫度分辨率
  113.         LCALL  WRITE_1820
  114.         RET
  115. ;===================================
  116. ; 讀出轉(zhuǎn)換后的溫度值
  117. ; 數(shù)據(jù)存儲(chǔ)到TEMPER_H和TEMPER_L中
  118. ; 包含告警搜索
  119. ;===================================
  120. GET_TEMPER:
  121.         SETB   DQ          ;定時(shí)入口
  122.         LCALL  INIT_1820   ;初始化1820
  123.         JB     FLAG1,TSS2
  124.         RET     ;若DS18B20不存在則返回
  125. TSS2:   MOV    A,#0CCH ;跳過ROM匹配
  126.         LCALL  WRITE_1820                   ;;調(diào)寫DS18B20的程序
  127.         MOV    A,#44H ;發(fā)出溫度轉(zhuǎn)換命令
  128.         LCALL  WRITE_1820
  129.         LCALL  INIT_1820
  130.         MOV    A,#0CCH  ;跳過ROM匹配
  131.         LCALL  WRITE_1820
  132.         MOV    A,#0BEH  ;發(fā)出讀溫度命令
  133.         LCALL  WRITE_1820
  134.         LCALL  READ_18200
  135.         MOV  TEMPER_NUM,A   ;將讀出的溫度數(shù)據(jù)保存
  136.         MOV    A,#0ECH       ;告警搜索
  137.         CALL   WRITE_1820
  138.         RET
  139. ;===================================
  140. ; READ_1820
  141. ; 讀DS18B20的程序,從DS18B20中讀出一個(gè)字節(jié)的數(shù)據(jù)
  142. ; 讀出的數(shù)據(jù)在A中
  143. ;===================================
  144. READ_1820:
  145.         MOV    R2,#8                            ;一個(gè)字節(jié)8位
  146. RE1:
  147.         CLR    C                                          ;清零進(jìn)借位
  148.         SETB   DQ         ;數(shù)據(jù)線拉高
  149.         NOP                                            ;延時(shí)
  150.         NOP
  151.         CLR    DQ        ;數(shù)據(jù)線拉低
  152.         NOP                                            ;延時(shí)
  153.         NOP
  154.         NOP
  155.         SETB DQ;數(shù)據(jù)線拉高產(chǎn)生讀時(shí)間隙
  156.         MOV    R3,#3  ;;為延時(shí)6us送初值
  157.         DJNZ    R3,[        DISCUZ_CODE_7        ]nbsp;       ;延時(shí)約6us
  158.         MOV    C,DQ          ;讀入數(shù)據(jù)
  159.         MOV    R3,#23              ;為延時(shí)50us送初值
  160.         DJNZ    R3,[        DISCUZ_CODE_7        ]nbsp;       ;延時(shí)約50us
  161.         SETB    DQ         ;數(shù)據(jù)線拉高
  162.         NOP
  163.         RRC    A
  164.         DJNZ   R2,RE1
  165.         RET
  166. ;===================================
  167. ;WRITE_1820:
  168. ; 寫DS18B20的程序
  169. ;===================================
  170. WRITE_1820:
  171.         MOV    R2,#8                            ;;8位
  172.         CLR     C                                          ;;清空C
  173. WR1:  CLR   DQ ;數(shù)據(jù)線拉低產(chǎn)生寫時(shí)間隙
  174.       MOV    R3,#6                            ;;為延時(shí)送數(shù)
  175.    DJNZ  R3,[        DISCUZ_CODE_7        ]nbsp; ;延時(shí)約6us(要求小于15us)
  176.     RRC     A                                          ;;循環(huán)右移
  177.     MOV    DQ,C     ;數(shù)據(jù)送到數(shù)據(jù)線
  178.     MOV    R3,#23                 ;為延時(shí)送初值
  179.    DJNZ  R3,[        DISCUZ_CODE_7        ]nbsp; ;延時(shí)約25us(要求15us-60us)
  180.         SETB    DQ        ;數(shù)據(jù)線拉高
  181.         NOP                ;延時(shí)1.085us(要求連續(xù)寫2 位間的間隙大于1us)
  182.         DJNZ    R2,WR1    ;判斷是否寫完沒寫完接著寫下一位
  183.         SETB    DQ                                          ;;寫完拉高
  184.         RET
  185. ;===================================
  186. ; READ_18200
  187. ; 讀DS18B20的程序,從DS18B20中讀出兩個(gè)字節(jié)的溫度數(shù)據(jù)
  188. ; 數(shù)據(jù)存儲(chǔ)到TEMPER_H和TEMPER_L中
  189. ;===================================
  190. READ_18200:
  191.         MOV    R4,#2  ;將溫度高位和低位從DS18B20中讀出
  192.         MOV    R1,#36H    ;低位存入36H(TEMPER_L),高位存入35H(TEMPER_H)
  193. RE00:
  194.         MOV    R2,#8       ;;8位
  195. RE01:
  196.         CLR    C                                            ;;清進(jìn)借位
  197.         SETB    DQ                                           ;;拉高
  198.         NOP
  199.         NOP
  200.         CLR     DQ                                          ;;拉低
  201.         NOP
  202.         NOP
  203.         NOP
  204.         SETB    DQ                                          ;;釋放總線
  205.         MOV    R3,#3                            ;;為延時(shí)送數(shù)
  206.         DJNZ   R3,[        DISCUZ_CODE_7        ]nbsp;        ;延時(shí)約6us
  207.         MOV    C,DQ                                          ;;讀數(shù)據(jù)
  208.         MOV    R3,#23                            ;;為延時(shí)送數(shù)
  209.         DJNZ    R3,[        DISCUZ_CODE_7        ]nbsp;        ;延時(shí)約50us
  210.         SETB   DQ         ;數(shù)據(jù)線拉高
  211.         NOP
  212.         RRC    A                               ;;移位保存
  213.         DJNZ   R2,RE01;;判斷8位是否讀完
  214.         MOV    @R1,A ;;將低位數(shù)據(jù)保存
  215.         DEC    R1              ;;轉(zhuǎn)到存儲(chǔ)高位數(shù)據(jù)地址
  216.       DJNZ R4,RE00;判斷兩個(gè)字節(jié)是否讀完
  217.         RET
  218. Temper_chng:
  219.         MOV  DPTR,#TAB ;字形碼表頭地址
  220.         MOV  R0,#Show_Dat ;顯示首地址賦給R0
  221.         MOV  A,TEMPER_L  ;;溫度低八位
  222.         ANL    A,#0FH                            ;取溫度低四位            
  223.       CJNE  A,#0H,NEXT ;判斷小數(shù)部分?jǐn)?shù)據(jù)
  224.         MOV    @R0,#0C0H     ;小數(shù)為0
  225.         LJMP   NEXT1
  226. NEXT:   MOV    @R0,#92H     ;小數(shù)為5
  227. NEXT1:  INC    R0                            ;;下一個(gè)地址
  228.        MOV A,TEMPER_L ;整數(shù)移位到低四位
  229.         RR     A
  230.         RR     A
  231.         RR     A
  232.         RR     A
  233.         ANL     A,#0FH      ;保留低四位
  234.         MOV    ZhengShu,A      
  235.         MOV    A,TEMPER_H  ;整數(shù)部分移位到高四位
  236.         RL     A
  237.         RL     A
  238.         RL     A
  239.         RL     A
  240.         ANL    A,#0F0H      ;保留高四位
  241.         ADD    A,ZhengShu   ;相加得到整數(shù)部分?jǐn)?shù)據(jù)
  242.         MOV    ZhengShu,A ;存儲(chǔ)整數(shù)部分                           
  243. ;===================================
  244. ;判斷正負(fù)數(shù)              ,正數(shù)可以直接進(jìn)行轉(zhuǎn)換,負(fù)數(shù)取反加1并且加負(fù)號(hào)
  245. ;===================================
  246.                               PUSH   ACC                            ;;保存A
  247.                               ANL    A,#80H              ;;取符號(hào)位
  248.                               JZ                            NEXT12              ;;符號(hào)位為零,跳轉(zhuǎn)至正數(shù)處理部分
  249.                               POP    ACC
  250.                               CPL    A              ;;取反
  251.                               ADD    A,#01H                            ;;加1
  252.                               PUSH   ACC
  253.                               MOV    R0,#Show_Dat    ;顯示首地址賦給R0
  254.          MOV    A,TEMPER_L;;溫度低八位
  255.          ANL     A,#0FH ;;取溫度低四位            
  256.                               CPL     A              ;;取反
  257.                               ADD    A,#01H                                               ;;加1
  258.          CJNE    A,#0H,NEXT13  ;判斷小數(shù)部分?jǐn)?shù)據(jù)
  259.          MOV    @R0,#0C0H    ;小數(shù)為0
  260.                               INC    R0              ;;移到下一位
  261.                               MOV    A,#0BFH        ;加負(fù)號(hào)
  262.          MOV    Show_Dat+3,A                ;;送回
  263.                               POP   ACC
  264.         LJMP   NEXT2
  265. NEXT13: MOV     @R0,#92H      ;小數(shù)為5
  266.         INC    R0
  267.                               MOV    A,#0BFH        ;加負(fù)號(hào)
  268.         MOV    Show_Dat+3,A                 ;送回
  269.                               POP    ACC
  270.                               DEC    A
  271.                               LJMP   NEXT2
  272. NEXT12: POP    ACC
  273. NEXT2:  MOV    B,#10 ;16進(jìn)制轉(zhuǎn)成十進(jìn)制
  274.         DIV      AB
  275.         MOV     R6,A                            ;;得高位
  276.         MOV    A,B
  277.         MOVC   A,@A+DPTR
  278.   MOV   @R0,A;將段碼送到相應(yīng)的地址空間
  279.         INC      R0                            ;;轉(zhuǎn)移到下一個(gè)地址
  280.         MOV    A,R6
  281.     CJNE   A,#0,NEXT2              ;;判斷是否轉(zhuǎn)換完
  282.         MOV    A,Show_Dat+1   ;加小數(shù)點(diǎn)
  283.         CLR    C                                          ;清除進(jìn)借位
  284.         SUBB    A,#80H                                            ;;加點(diǎn)
  285.         MOV    Show_Dat+1,A                ;;送回
  286.         RET
  287. TAB:    DB     0c0H,0f9H,0a4H,0b0H,99H,92H,82H,0f8H,80H,90H
  288. ;;共陽數(shù)碼管對(duì)應(yīng)的字符表:0,1,2,3,4,5,6,7,8,9,              負(fù)號(hào):0BFH
  289. TAB1:   DB    0C0H,0C7H,0C7H,86H,89H,0FFH
  290. ;;"HELLO"
  291. TAB2:   DB                0FFH,8EH,8EH,0C0H,0FFH,0FFH
  292. ;;"OFF"
  293. ;===================================
  294. DELAY:
  295.         MOV    R3,#10   ;;為延時(shí)送初值
  296. DELAY2: MOV    R7,#200  ;;為延時(shí)送初值
  297. DELAY1: MOV    R4,#250   ;;為延時(shí)送初值
  298.         DJNZ   R4,$
  299.         DJNZ   R7,DELAY1
  300.         DJNZ   R3,DELAY2
  301.         RET
  302. ;===================================
  303. INT_T0: MOV    TH0,#0F8H    ;重賦2ms的定時(shí)器時(shí)間常數(shù)
  304.         MOV    TL0,#50H
  305.         MOV    P0,#0FFH              ;高電位滅碼
  306.         MOV    P2,R5      ;送當(dāng)前顯示數(shù)碼管的位選信號(hào)
  307.         MOV    A,@R0                                            ;;取數(shù)
  308.         MOV    P0,A          ;送字形代碼
  309.         INC    R0     ;顯示數(shù)據(jù)緩沖器指針加1,為下一個(gè)顯示數(shù)據(jù)作準(zhǔn)備
  310.         CJNE    R0,#48H,NEXT3    ;判斷是否8個(gè)數(shù)據(jù)全部送完,未送完則不用調(diào)整顯示緩沖指針
  311.         MOV    R0,#40H          ;送完則調(diào)整顯示緩沖指針
  312. NEXT3: MOV     A,R5           ;將目前的位選暫存信號(hào)左移,為下一個(gè)數(shù)碼管顯示作準(zhǔn)備
  313.         RL      A                                                           ;左移
  314.         MOV    R5,A                            ;;下一個(gè)位選
  315.         RETI                              
  316. ;===========顯示開關(guān)界面
  317. ;===================================
  318. HELLO: MOV    R0,#50H     ;顯示緩沖首址
  319.                   MOV    R2,#2H    ;位控初始碼(先亮最低位)
  320. LOOPs: MOV                A,#0H          ;共陰滅碼
  321.                   MOV    P2,A     
  322.                   MOV                A,R2        ;送位控信號(hào)
  323.                   MOV    P2,A
  324.                   MOV    A,@R0 ;從顯示緩沖中取數(shù)
  325.                   MOV    DPTR,#TAB1
  326.                  MOVC  A,@A+DPTR ;查出字形代碼
  327.                   MOV    P0,A    ;送顯示字符段代碼
  328.                   MOV    R7,#0FFH
  329.    DJNZ   R7,[        DISCUZ_CODE_7        ]nbsp;   ;1ms延時(shí),穩(wěn)定顯示信息
  330.                   INC                 R0        ;取下一個(gè)數(shù)
  331.                   MOV                A,R2         
  332.                   JB                    ACC.6,EXIT1  ;判斷是否送到最高位?                 
  333.        RL                A
  334.                   MOV              R2,A  ;得到下一個(gè)位控信號(hào)
  335.                             AJMP   LOOPs
  336. EXIT1: DJNZ    R3,HELLO;是否顯示完200次
  337.        RET            
  338. OFF:   MOV    R0,#60H    ;顯示緩沖首址
  339.                   MOV    R2,#2H    ;位控初始碼(先亮最低位)
  340. LOOPs2: MOV                A,#0H        ;共陰滅碼
  341.                   MOV    P2,A     
  342.                   MOV                A,R2        ;送位控信號(hào)
  343.                   MOV    P2,A
  344.                   MOV    A,@R0 ;從顯示緩沖中取數(shù)
  345.                   MOV    DPTR,#TAB2
  346.                   MOVC              A,@A+DPTR;查出字形代碼
  347.                   MOV    P0,A   ;送顯示字符段代碼
  348.                   MOV    R7,#0FFH
  349.     DJNZ R7,[        DISCUZ_CODE_7        ]nbsp; ;1ms延時(shí),穩(wěn)定顯示信息
  350.                   INC                 R0        ;取下一個(gè)數(shù)

  351. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

完整論文下載(word格式 可編輯):
基于單片機(jī)的DS18B20測(cè)溫系統(tǒng)的設(shè)計(jì).doc (1.17 MB, 下載次數(shù): 21)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:747812 發(fā)表于 2020-5-9 17:20 | 只看該作者
有C語言的程序嗎?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品99 | 亚洲欧美视频一区二区 | 视频在线亚洲 | 麻豆亚洲 | 在线视频一区二区三区 | 一区二区久久 | 日韩第1页| 欧美一区二区三区精品 | 草久网 | 中文在线播放 | 自拍 亚洲 欧美 老师 丝袜 | 亚洲高清在线观看 | 日本在线精品视频 | 欧美一区不卡 | 日韩精品一区在线 | 男女网站免费 | 精品久久视频 | 日韩中文字幕高清 | 日韩久久久久 | 成人精品国产一区二区4080 | 久久久国产亚洲精品 | 欧美精品一区在线发布 | 日韩福利在线观看 | 国产日韩欧美一区 | 国产免费拔擦拔擦8x高清 | 黄色在线免费观看视频 | 亚洲精品v | 成人影视网址 | 亚洲精品视频在线播放 | 亚洲国产欧美91 | 在线免费观看a级片 | 国产97在线 | 日韩 | 北条麻妃一区二区三区在线视频 | 久久1区 | 亚洲在线一区 | 国产精品久久久久久久久久久久 | 久久久久中文字幕 | 久久亚洲一区 | 精品欧美久久 | 日本免费一区二区三区 | 久久www免费视频 |