版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 本 科 生 畢 業(yè) 論 文</p><p> 學 院 電氣信息工程學院 </p><p> 專 業(yè) 通信工程 </p><p> 屆 別 </p><p>
2、題 目基于80C51單片機與DS18B20的溫度檢測軟件設計 </p><p> 學生姓名 </p><p> 學 號 </p><p> 指導教師 </p><p>
3、; 基于80C51單片機與DS18B20的溫度檢測軟件設計</p><p> 摘要:本次畢業(yè)設計是基于80C51單片機與DS18B20的溫度檢測軟件設計。以80C51單片機為核心,使用單總線溫度轉換芯片DS18B20實現溫度采集。我們的設計實驗目的是對DS18B20進行編程,了解其性能特點,通過所學的C語言知識和相關資料提供的指令代碼完成單片機與DS18B20的溫度檢測。DS18B20 是一種智能溫度傳感器。
4、它能夠直接讀出被測溫度并且可根據實際要求通過簡單的編程實現9~12位的數字值讀數方式。 使用DS18B20可使系統(tǒng)結構更趨簡單,可靠性更高。</p><p> 關鍵詞:溫度測量;微處理器控制;C語言</p><p> Based on 80C51 microprocessor with DS18B20 </p><p> temperature measure
5、ment </p><p> Abstract:The graduation project is based on 80C51 microprocessor with DS18B20 temperature measurement .80C51 microprocessor as the core of it, the use of single-chip bus temperature
6、conversion temperature DS18B20 real-time acquisition. Our experimental purpose is programming to DS18B20 and understand its performance characteristics .The instruction code through the C language knowledge and relevant
7、information to complete the DS18B20 temperature measurements .DS18B20 is a smart temperature sens</p><p> Key words: temperature measurement; microprocessor ;C language</p><p><b> 前 言
8、</b></p><p> 這次的畢業(yè)設計以虛擬環(huán)境下通過80C51單片機實現DS18B20芯片溫度測量為目標。DS18B20數字溫度計是DALLAS公司生產的1-Wire,即單總線器件,具有線路簡單,體積小的特點。因此用它來組成一個測溫系統(tǒng),具有線路簡單,在一根通信線,可以連接很多這樣設備實現多路溫度測量和溫度報警。由于DS18B20采用的是1-Wire總線通信協(xié)議方式,即在一根數據線實現數據的雙
9、向傳輸,而對80C51單片機來說,硬件上并不支持單總線協(xié)議,因此,我們必須采用軟件的方法來模擬單總線的協(xié)議時序來完成對DS18B20芯片的訪問。由于DS18B20是在一根I/O線上讀寫數據,因此,對讀寫的數據位有著嚴格的時序要求。DS18B20有嚴格的通信協(xié)議來保證各位數據傳輸的正確性和完整性。該協(xié)議定義了幾種信號的時序:初始化時序、讀時序、寫時序。所有時序都是將80C51單片機作為主設備,單總線器件DS18B20作為從設備。而每一次命
10、令和數據的傳輸都是從主設備主動啟動寫時序開始,如果要求單總線器件回送數據,則在進行寫命令后,主機需啟動讀時序完成數據接收。可以說對DS18B20的編譯即是一個寫讀時隙的過程。</p><p> 我們的畢業(yè)設計目的是通過80C51單片機對DS18B20進行編程,同時了解DS18B20的性能特點,通過所學的C語言知識和相關資料提供的指令代碼完成基于80C51單片機與DS18B20的溫度檢測軟件設計。</p&g
11、t;<p><b> 目錄</b></p><p><b> 前 言1</b></p><p> 第一章 單片機介紹1</p><p> 1. 1 80C51 單片機的邏輯原理結構1</p><p> 1.2 80C51單片機內部結構2</p>&l
12、t;p> 1.3 80C51引腳介紹3</p><p> 1.4 設計中所編譯的相關程序及系統(tǒng)框圖5</p><p> 第二章 DS18B20芯片介紹7</p><p> 2.1 DS18B20芯片特征7</p><p> 2.2 DS18B20內部結構7</p><p><b>
13、 2.3硬件構造8</b></p><p> 2.4 DS18B20引腳排列9</p><p> 2.5 DS18B20芯片各部分介紹9</p><p> 第三章 DS18B20代碼指令介紹及程序設計12</p><p> 3.1 DS18B20初始化13</p><p> 3.2 DS
14、18B20讀寫操作14</p><p> 3.3 ROM指令代碼17</p><p> 3.4 DS18B20功能指令18</p><p><b> 總 結21</b></p><p><b> 附錄23</b></p><p><b> 致
15、謝29</b></p><p><b> 第一章 單片機介紹</b></p><p> 本次畢業(yè)設計要使用到80C51單片機以及DS18B20溫度測量芯片。通過對80C51單片機進行編程,從而控制DS18B20進行溫度測量和溫度轉換。</p><p> 單片機,亦稱單片微電腦或單片微型計算機。它是把中央處理器(CPU)、隨機
16、存取存儲器(RAM)、只讀存儲器(ROM)、輸入/輸出端口(I/0)等主要計算機功能部件都集成在一塊集成電路芯片上的微型計算機“【1】”。</p><p> 1. 1 80C51 單片機的邏輯原理結構</p><p> 80C51單片機采用的是馮.諾伊曼提出的經典計算機體系結構框架,即一臺計算機是由運算器、控制器、存儲器、輸入設備和輸出設備共五個基本部分組成。MCS-51單片機在一塊芯
17、片上集成了CPU、RAM、ROM、定時器/計數器和多功能I/O口等。</p><p> 圖1.1 單片機的系統(tǒng)結構框圖“[1]”</p><p> 由圖看出,單片機內部主要包含下列幾個部件:</p><p> ? 一個8位CPU; </p><p> ?
18、; 一個時鐘電路; </p><p> ? 4KB程序存儲器; </p><p> ? 128KB數據存儲器; </p><p> ?
19、 兩個16位定時/計數器; </p><p> ? 64KB擴展總線控制電路; </p><p> ? 四個8-bit并行I/O端口; </p><p> ?
20、 一個可編程串行接口; </p><p> ? 五個中斷源,其中包括兩個優(yōu)先級嵌套中斷。</p><p> 1.2 80C51單片機內部結構 </p><p> 圖1.2 80C51內部結構圖“[2]”</p>&l
21、t;p><b> 1. CPU </b></p><p> CPU即中央處理器的簡稱,是單片機的核心部件,它完成各種運算和控制操作,CPU由運算器和控制器兩部分電路組成。 </p><p><b> ?。?)運算器電路 </b></p><p> 運算器電路包括ALU(算術邏輯單元)、ACC(累加器)、B寄存器
22、、狀態(tài)寄存器、暫存器1和暫存器2等部件,運算器的功能是進行算術運算和邏輯運算。運算電路以ALU為核心單元,可以完成半字節(jié)、單字節(jié)以及多字節(jié)數據的運算操作,其中包括加、減、乘、除等算術運算以及與、或、異或、求補和循環(huán)等邏輯操作,運算結果的狀態(tài)由狀態(tài)寄存器保存。 </p><p><b> ?。?)控制器電路 </b></p><p> 控制器電路包括程序計數器PC、P
23、C加1寄存器、指令寄存器、指令譯碼器、數據指針DPTR、堆棧指針SP、緩沖器以及定時與控制電路等??刂齐娐吠瓿芍笓]控制工作,協(xié)調單片機各部分正常工作。程序計數器PC用來存放即將要執(zhí)行的指令地址,它可以完成64K的外部存儲器尋址,執(zhí)行指令時,PC內容的高8位經P2口輸出,低8位經P0口輸出。數據指針DPTR為16位數據指針,它可以對64K的外部數據存儲器和I/O口進行尋址,它的低8位為DPL(地址82H),高8位為DPH(地址為83H)。
24、堆棧指針SP在片內RAM(128字節(jié))中開辟棧區(qū),并隨時跟蹤棧頂地址,它按先進后出的原則存取數據,上電復位后,SP指向07H。 </p><p> 1. 定時器/計數器 </p><p> 80C51單片機片內有兩個16位的定時/計數器,即定時器0和定時器1。它們可以用于定時控制、延時以及對外部事件的計數和檢測等。 </p><p><b> 2.
25、存儲器 </b></p><p> 80C51系列單片機的存儲器包括數據存儲器和程序存儲器,其主要特點是程序存儲器和數據存儲器的尋址空間是相互獨立的,物理結構也不相同。80C51有4個物理上相互獨立的存儲器空間:即內、外程序存儲器和內、外數據存儲器。對于8051其芯片中共有256個RAM單元,其中后128個單元被專用寄存器占用,只有前128個單元供用戶使用。 </p><p>
26、; 3. 并行I/O口 </p><p> 80C51單片機共有4個8位的I/O口(P0、P1、P2和P3),每一條I/O線都能獨立地用作輸入或輸出。P0口為三態(tài)雙向口,能帶8個TTL門電路,P1、P2和P3口為準雙向口,負載能力為4個TTL門電路。 </p><p> 4. 串行I/O口 </p><p> 80C51單片機具有一個采用通用異步工作方式的全
27、雙工串行通信接口,可以同時發(fā)送和接收數據。它具有兩個相互獨立的接收、發(fā)送數據緩沖器,兩個緩沖器共用一個地址(99H),發(fā)送緩沖器只能寫入,不能讀出,接收緩沖器只能讀出,不能寫入。 </p><p> 5. 中斷控制系統(tǒng) </p><p> 80C51單片機的中斷功能較強,以滿足控制應用的需要。80C51共有5個中斷源,即外中斷2個,定時/計數中斷2個,串行中斷1個。所有中斷分為高級和低
28、級兩個中斷優(yōu)先級。 </p><p><b> 6. 時鐘電路 </b></p><p> 80C51芯片內部有時鐘電路,但晶體振蕩器和微調電容必須外接。時鐘電路為單片機產生時鐘脈沖序列,振蕩器的頻率范圍為1.2MHz~12MHz,典型取值為6MHz。</p><p><b> 7. 總線 </b></p>
29、;<p> 以上所有組成部分都是通過總線連接起來,從而構成一個完整的單片機。系統(tǒng)的地址信號、數據信號和控制信號都是通過總線傳送的,總線結構減少了單片機的連線和引腳,提高了集成度和可靠性。 </p><p> 1.3 80C51引腳介紹</p><p> 圖1.3 80C51引腳圖“[3]”</p><p><b> VCC:供電電壓&
30、lt;/b></p><p><b> GND:接地</b></p><p> P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數據存儲器,它可以被定義為數據/地址的第八位。在編程時,P0 口作為原碼輸入口,當進行校驗時,P0輸出原碼,此時P0外部必須被拉高。</
31、p><p> P1口:P1口是一個內部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。在編程和校驗時,P1口作為第八位地址接收。</p><p> P2口:P2口為一個內部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1
32、”時,其管腳被內部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數據存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內部上拉優(yōu)勢,當對外部八位地址數據存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內容。</p><p> P3口:P3口管腳是8個帶內部上拉電阻的雙向I/O口,可接收輸出4個TT
33、L門電流。當P3口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。</p><p> RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時當8051通電,時鐘電路開始工作,在RESET引腳上出現24個時鐘周期以上的高電平,系統(tǒng)即初始復位。初始化后,程序計數器PC指向0000H,P0-P3輸出口全部為高電平,堆棧
34、指鐘寫入07H,其它專用寄存器被清“0”。RESET由高電平下降為低電平后,系統(tǒng)即從0000H地址開始執(zhí)行程序。然而,初始復位不改變RAM(包括工作寄存器R0-R7)的狀態(tài)。</p><p> ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的
35、脈沖或用于定時目的。然而要注意的是:每當用作外部數據存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。</p><p> PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數據存儲器時,這兩
36、次有效的/PSEN信號將不出現。 EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內部程序存儲器。注意加密方式1時,/EA將內部鎖定為RESET;當/EA端保持高電平時,此間內部程序存儲器。在編程期間,此引腳也用于施加12V編程電源(VPP)。 </p><p>
37、XTAL1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。 </p><p> XTAL2:來自反向振蕩器的輸出。</p><p> 振蕩器特性:XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時鐘源驅動器件,XTAL2應不接。有余輸入至內部時鐘信號要通過一個二分頻
38、觸發(fā)器,因此對外部時鐘信號的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。</p><p> 芯片擦除:整個PEROM陣列和三個鎖定位的電擦除可通過正確的控制信號組合,并保持ALE管腳處于低電平10ms 來完成。在芯片擦操作中,代碼陣列全被寫“1”且在任何非空存儲字節(jié)被重復編程以前,該操作必須被執(zhí)行。</p><p> 此外,80C51設有穩(wěn)態(tài)邏輯,可以在低到零頻率的條件下靜態(tài)邏
39、輯,支持兩種軟件可選的掉電模式。在閑置模式下,CPU停止工作。但RAM,定時器,計數器,串口和中斷系統(tǒng)仍在工作。在掉電模式下,保存RAM的內容并且凍結振蕩器,禁止所用其他芯片功能,直到下一個硬件復位為止“[4]”。</p><p> 1.4 設計中所編譯的相關程序及系統(tǒng)框圖</p><p><b> 延時子程序:</b></p><p>
40、 //---------------------------------------------------------</p><p> //延時子程序 (Delay(2)約為延時1us)</p><p> //---------------------------------------------------------</p><p> void D
41、elay(long int milliseconds)</p><p><b> {</b></p><p> long int i;</p><p> long int j;</p><p> j =milliseconds;</p><p> for(i = 0; i< j;
42、i ++)</p><p><b> {</b></p><p><b> }</b></p><p><b> return;</b></p><p><b> }</b></p><p> 系統(tǒng)時鐘初始化設置:<
43、/p><p> //---------------------------------------------------------</p><p> //系統(tǒng)時鐘初始化設置</p><p> //---------------------------------------------------------</p><p> voi
44、d SYSCLK_Init (void) </p><p><b> {</b></p><p> int i; // Delay counter</p><p> OSCXCN = 0x27; // start external oscillator with
45、 22.1184MHz crystal</p><p> for (i=0; i < 256; i++) ; // XTLVLD blanking interval (>1ms)</p><p> OSCICN = 0x88;</p><p> // select external oscillator as SYSCLK s
46、ource and enable missing clock detector</p><p><b> return;</b></p><p><b> }</b></p><p> //---------------------------------------------------------</p&
47、gt;<p> //看門狗初始化設置</p><p> //---------------------------------------------------------</p><p> void WATCH_Dog ()</p><p><b> {</b></p><p> WDTCN
48、= 0xde;</p><p> WDTCN = 0xad;</p><p><b> return;</b></p><p><b> }</b></p><p> 單片機I/O口初始化設置:</p><p> //------------------------
49、---------------------------------</p><p> //單片機I/O口初始化設置</p><p> //---------------------------------------------------------</p><p> void PORT_Init ()</p><p><b&g
50、t; { </b></p><p> XBR0 = 0x04; //TX0和RX0連到P0.0和P0.1</p><p> XBR1 = 0x00;</p><p> XBR2 = 0x40;</p><p> P0MDOUT|=0xff; </p><p> P1MDOU
51、T|=0xfd;//設置P1.1為輸入</p><p> P2MDOUT|=0xff; </p><p> P3MDOUT|=0xff;</p><p> P74OUT|=0xff;</p><p><b> return; </b></p><p><b> }</
52、b></p><p><b> ACC位定義:</b></p><p> //--------------------------------------------------</p><p><b> //ACC位定義</b></p><p> //----------------
53、----------------------------------</p><p> sbit ACC_0=ACC^0;//數據位</p><p> sbit ACC_1=ACC^1;//數據位</p><p> sbit ACC_2=ACC^2;//數據位</p><p> sbit ACC_3=ACC^3;
54、//數據位</p><p> sbit ACC_4=ACC^4;//數據位</p><p> sbit ACC_5=ACC^5;//數據位</p><p> sbit ACC_6=ACC^6;//數據位</p><p> sbit ACC_7=ACC^7;//數據位</p><p>
55、 第二章 DS18B20芯片介紹</p><p> DS18B20數字溫度傳感器接線方便,封裝成后可應用于多種場合,如管道式,螺紋式,磁鐵吸附式,不銹鋼封裝式,型號多種多樣,有LTM8877,LTM8874等等。主要根據應用場合的不同而改變其外觀。封裝后的DS18B20可用于電纜溝測溫,高爐水循環(huán)測溫,鍋爐測溫,機房測溫,農業(yè)大棚測溫,潔凈室測溫,彈藥庫測溫等各種非極限溫度場合。耐磨耐碰,體積小,使用方便,封裝
56、形式多樣,適用于各種狹小空間設備數字測溫和控制領域“[5]”。 </p><p> 2.1 DS18B20芯片特征</p><p> DS18B20 單線數字溫度傳感器,即“一線器件”,其具有獨特的優(yōu)點:</p><p> ( 1 )采用單總線的接口方式 與微處理器連接時 僅需要一條口線即可實現微處理器與 DS18B20 的雙向通訊。 單總線具有經濟性好,抗干
57、擾能力強,適合于惡劣環(huán)境的現場溫度測量,使用方便等優(yōu)點,使用戶可輕松地組建傳感器網絡,為測量系統(tǒng)的構建引入全新概念。</p><p> ( 2 )測量溫度范圍寬,測量精度高 DS18B20 的測量范圍為 -55 ℃ ~+ 125 ℃ ; 在 -10~+ 85°C 范圍內,精度為 ± 0.5°C 。</p><p> ( 3 )在使用中不需要任何外圍元件。&
58、lt;/p><p> ?。?4 )持多點組網功能 多個 DS18B20 可以并聯在惟一的單線上,實現多點測溫。</p><p> ?。?5 )供電方式靈活 DS18B20 可以通過內部寄生電路從數據線上獲取電源。因此,當數據線上的時序滿足一定的要求時,可以不接外部電源,從而 使系統(tǒng)結構更趨簡單,可靠性更高。</p><p> ( 6 )測量參數可配置 DS18B20
59、的測量分辨率可通過程序設定 9~12 位。</p><p> ?。?7 )負壓特性電源極性接反時,溫度計不會因發(fā)熱而燒毀,但不能正常工作。</p><p> ?。?8 )掉電保護功能 DS18B20 內部含有 EEPROM ,在系統(tǒng)掉電以后,它仍可保存分辨率及報警溫度的設定值。</p><p> DS18B20 具有體積更小、適用電壓更寬、更經濟、可選更小的封裝方
60、式,更寬的電壓適用范圍,適合于構建自己的經濟的測溫系統(tǒng),因此也就被設計者們所青睞。</p><p> 注:單總線特點——單總線即只有一根數據線,系統(tǒng)中的數據交換,控制都由這根線完成。</p><p> 單總線通常要求外接一個約為 4.7K—10K 的上拉電阻,這樣,當總線閑置時其狀態(tài)為高電平“[6]”。</p><p> 2.2 DS18B20內部結構<
61、/p><p> 主要由4部分組成:64 位ROM、溫度寄存器、溫度報警觸發(fā)器TH和TL、配置寄存器。ROM中的64位序列號是出廠前被光刻好的,它可以看作 是該DS18B20的地址序列碼,每個DS18B20的64位序列號均不相同。64位ROM的排的循環(huán)冗余校驗碼(CRC=X^8+X^5+X^4+1)。 ROM的作用是使每一個DS18B20都各不相同,這樣就可以實現一根總線上掛接多個DS18B20的目的。</p&
62、gt;<p> 圖2.1 DS18B20內部結構圖</p><p><b> 2.3硬件構造</b></p><p> 單總線系統(tǒng)只有一條定義的信號線。每一個總線上的器件必須是漏極開路或三態(tài)輸出。這樣的系統(tǒng)允許每一個掛在總線上的區(qū)間都能在適當的時間驅動它。DS18B20的單總線端口(DQ引腳)是漏極開路式的,單總線需要一個約5KΩ的外部上拉電阻;單
63、總線的空閑狀態(tài)是高電平。無論任何理由需要暫停某一執(zhí)行過程時,如果還想恢復執(zhí)行的畫,總線必須停留在空閑狀態(tài)。在恢復期間,如果單總線處于非活動(高電平)狀態(tài),位與位間的恢復時間可以無限長。如果總線停留在低電平超過480us,總線上的所有器件都將被復位。</p><p> 圖2.2 DS18B20硬件構造圖“[7]”</p><p> 2.4 DS18B20引腳排列</p>&
64、lt;p> 圖2.3 DS18B20引腳排列圖“[8]”</p><p> 1. GND為電源 地;</p><p> 2. DQ為數字信號輸入/輸出端;</p><p> 3. VDD為外接供電電源輸入口;</p><p> 2.5 DS18B20芯片各部分介紹</p><p> (1) 64
65、-BIT ROM AND 1-wire PORT</p><p> 每個DS18B20都有一個唯一儲存在ROM中的64位編碼。最前面8位是單線系列編碼:28h。接著的48位是一個唯一的序列號。最后8位是以上56位的CRC編碼。64位ROM和ROM操作控制區(qū)允許DS18B20作為單總線器件并按照單總線協(xié)議工作。</p><p> 64-BIT ROM AND 1-wire PORT<
66、;/p><p> (2) SCRATCHPAD </p><p> SCRATCHPAD有一個溫度寄存器,高低溫報警觸發(fā)器以及配置寄存器組成。當報警功能不使用時,TH和TL 寄存器可以被當作普通寄存器使用。字節(jié)0和字節(jié)1為測得溫度信息的LSB和MSB。這兩個字節(jié)是只讀的。第2和第3字節(jié)是TH和TL的拷貝。位4 包含配置寄存器數據,其被詳述于配置寄存器節(jié)。字節(jié)第5,6 和7位被器件保留,禁止
67、寫入;這些數據在讀回時全部表現為邏輯1。高速暫存器的位8是只讀的,包含以上八個字節(jié)的CRC碼,CRC的執(zhí)行方式如CRC發(fā)生器節(jié)所述。數據通過寫暫存器指令[4Eh]寫入高速暫存器的2,3和4位;數據必須以位2為最低有效位開始傳送。為了完整的驗證數據,高速暫存器能夠在數據寫入后被讀?。ㄊ褂米x暫存器指令[BEh])。在讀暫存器時,數據以字節(jié)0為最低有效位從單總線移出??偩€控制器傳遞從暫存器到EEPROMTH,TL和配置數據必須發(fā)出拷貝暫存器指
68、令[48h]。EEPROM 寄存器中的數據在器件掉電時仍然保存;上電時,數據被載入暫存器。數據也可以通過召回EEPROM命令從暫存器載入EEPROM??偩€控制器在發(fā)出這條命令后發(fā)出讀時序,DS18B20返回0表示正在召回中,返回1表示操</p><p> 圖2.4 存儲器圖“[9]”</p><p><b> (3) 配置寄存器</b></p>&l
69、t;p> 存儲器的第4位為配置寄存器。用戶可以通過按下圖所示設置R0和R1位來設定DS18B20的精度。上電默認設置:R0=1,R1=1(12位精度)。</p><p> 注意:精度和轉換時間之間有直接的關系。暫存器的位7和位0-4被器件保留,禁止寫</p><p> 入;在讀回數據時,它們全部表現為邏輯1。</p><p> 圖2.5 配置寄存器組成
70、圖</p><p> 圖2.6 溫度計精確度配置圖</p><p><b> (4)CRC發(fā)生器</b></p><p> CRC字節(jié)作為DS18B2064 位ROM的一部分存儲在存儲器中。CRC碼由ROM的前56</p><p> 位計算得到,被包含在ROM的重要字節(jié)當中。CRC由存儲在存儲器中的數據計算得到,
71、因此當存儲器中的數據發(fā)生改變時,CRC的值也隨之改變。CRC能夠在總線控制器讀DS18B20時進行數據校驗。為校驗數據是否被正確讀取,總線控制器必須用接受到的數據計算出一個CRC 值,和存儲在DS18B20 的64 位ROM 中的值(讀ROM 時)或DS18B20 內部計算出的8 位CRC 值(讀存儲器時)進行比較。如果計算得到的CRC值和讀取出來的CRC值相吻合,數據被無錯傳輸。CRC 值的比較以及是否進行下一步操作完全由總線控制器決
72、定。</p><p> DS18B20代碼指令介紹及程序設計</p><p> 通過單線總線端口訪問DS18B20的協(xié)議如下:</p><p><b> 步驟1. 初始化</b></p><p> 步驟2. ROM操作指令</p><p> 步驟3. DS18B20功能指令</p&
73、gt;<p> 每一次DS18B20的操作都必須滿足以上步驟,若是缺少步驟或是順序混亂,器件將不會返回值。</p><p><b> 程序設計流程圖:</b></p><p> 3.1 DS18B20初始化</p><p> 通過單總線的所有執(zhí)行操作處理都從一個初始化序列開始。初始化序列包括一個由總線控制器發(fā)出的復位脈沖和
74、其后由從機發(fā)出的存在脈沖。存在脈沖讓總線控制器知道DS18B20在總線上且已準備好操作。</p><p> 圖3.1 初始化時序圖“[10]”</p><p> 本次實驗設計的初始化程序:</p><p> //------------------------------------------------------------------------<
75、;/p><p><b> //空操作</b></p><p> //-------------------------------------------------------------------------</p><p> void NOP(void)</p><p><b> {</b&g
76、t;</p><p><b> }</b></p><p> //---------------------------------------------------------</p><p> //向DS18B20發(fā)送RESET脈沖(低脈沖)</p><p> //主機通過把TX拉低至少480us來發(fā)送RE
77、SET脈沖。</p><p> //---------------------------------------------------------</p><p> void DS18B20_RESET(void)</p><p><b> {</b></p><p><b> DQ=0;</
78、b></p><p> Delay(1000); //拉低保持500us</p><p><b> DQ=1;</b></p><p> //發(fā)送完RESET脈沖后,主機等待15us至60us的時間以等待DS18B20回復PRESENCE信號。</p><p> Delay(40);//等待約20us<
79、;/p><p><b> return;</b></p><p><b> }</b></p><p> //---------------------------------------------------------</p><p> //檢測DS18B20回應的PRESENCE脈沖&l
80、t;/p><p> //該低脈沖持續(xù)60us至240us的時間。</p><p> //---------------------------------------------------------</p><p> void DS18B20_PRESENCE(void)</p><p><b> {</b>&l
81、t;/p><p> while(DQ==1)//DS18B20仍然沒回應PRESENCE信號</p><p><b> {</b></p><p><b> NOP();</b></p><p><b> }</b></p><p> while(
82、DQ==0)//DS18B20發(fā)送了PRESENCE信號,該信號持續(xù)60us~240us</p><p><b> {</b></p><p><b> NOP();</b></p><p><b> }</b></p><p><b> return;<
83、;/b></p><p><b> }</b></p><p> 3.2 DS18B20讀寫操作</p><p> 主機發(fā)出各種操作命令,但各種操作命令都是向DS18B20寫0和寫1組成的命令字節(jié),接收數據時也是從DS18B20讀取0或1的過程。因此首先要搞清主機是如何進行寫0、寫1、讀0和讀1的。</p><p
84、> 寫操作:寫周期最少為60微秒,最長不超過120微秒。寫周期一開始做為主機先把總線拉低1微秒表示寫周期開始。隨后若主機想寫0,則繼續(xù)拉低電平最少60微秒直至寫周期結束,然后釋放總線為高電平。若主機想寫1,在一開始拉低總線電平1微秒后就釋放總線為高電平,一直到寫周期結束。而做為從機的DS18B20則在檢測到總線被拉底后等待15微秒然后從15us到45us開始對總線采樣,在采樣期內總線為高電平則為1,若采樣期內總線為低電平則為0“
85、[11]”。</p><p> 圖3.2 寫操作圖“[12]”</p><p><b> 寫操作程序:</b></p><p> //---------------------------------------------------------</p><p> //write "0" s
86、lot:每次調用后向DS18B20寫一次‘0’</p><p> //---------------------------------------------------------</p><p> void write_0(void)</p><p><b> {</b></p><p> DQ=0; /
87、/寫0時隙,必須拉低持續(xù)至少60us</p><p> Delay(120); //維持60us</p><p> DQ=1;//發(fā)送結束,單總線復位'1'</p><p><b> NOP();</b></p><p><b> NOP();</b></p>
88、<p><b> NOP();</b></p><p><b> NOP();</b></p><p><b> NOP();</b></p><p><b> NOP();</b></p><p><b> return;&
89、lt;/b></p><p><b> }</b></p><p> //---------------------------------------------------------</p><p> //write "1" slot:每次調用后向DS18B20寫一次‘1’</p><p
90、> //---------------------------------------------------------</p><p> void write_1(void)</p><p><b> {</b></p><p> DQ=0; //寫1時隙,拉低至少一個1us,然后必須于15us內釋放</p>
91、<p> Delay(2); //維持至少1us</p><p><b> NOP();</b></p><p><b> NOP();</b></p><p><b> NOP();</b></p><p><b> NOP();</b&g
92、t;</p><p><b> NOP();</b></p><p><b> NOP();</b></p><p> DQ=1;//釋放總線為'1'</p><p> Delay(120); //每個wirte/read時隙至少維持60us,寫1時隙中釋放總線后時間應延遲(
93、60 - 1)uS以上</p><p><b> return;</b></p><p><b> }</b></p><p> //---------------------------------------------------------</p><p> //向DS18B20寫一
94、個字節(jié)的指令</p><p> //---------------------------------------------------------</p><p> void write_DS18B20(unsigned char Command) //該程序判斷發(fā)送每位時,寫0還是寫1,然后調用相應子程序</p><p><b> {<
95、/b></p><p> bit Write_Lsb=0;</p><p> unsigned int i=0;</p><p> //寫字節(jié)時,從LSB位開始寫</p><p> for(i=0;i<8;i++)</p><p><b> {</b></p>
96、<p> Write_Lsb=Command^i;</p><p> if(Write_Lsb==0)</p><p><b> {</b></p><p> write_0();</p><p><b> }</b></p><p><b>
97、 else</b></p><p><b> {</b></p><p> write_1();</p><p><b> }</b></p><p><b> }</b></p><p><b> return;<
98、/b></p><p><b> }</b></p><p> 讀操作:讀數據操作時序也分為讀0時序和讀1時序兩個過程。讀時隙是從主機把單總線拉低之后,在1微秒之后就得釋放單總線為高電平,以讓DS18B20把數據傳輸到單總線上。DS18B20在檢測到總線被拉低1微秒后,便開始送出數據,若是要送出0就把總線拉為低電平直到讀周期結束。若要送出1則釋放總線為高電平
99、。主機在一開始拉低總線1微秒后釋放總線,然后在包括前面的拉低總線電平1微秒在內的15微秒時間內完成對總線進行采樣檢測,采樣期內總線為低電平則確認為0。采樣期內總線為高電平則確認為1。完成一個讀時序過程,至少需要60us才能完成“[13]”。</p><p> 圖3.3 讀時隙圖“[14]”</p><p><b> 讀操作程序:</b></p>&l
100、t;p> //---------------------------------------------------------</p><p> //讀DS18B20:READ TIME SLOTS:每次調用后讀出一位</p><p> //讀scratchpad時,讀出的順序從字節(jié)0的LSB位開始</p><p> //--------------
101、-------------------------------------------</p><p> read_DS18B20_bit(void) </p><p><b> {</b></p><p> bit value;</p><p> DQ=0; //讀時隙由主機拉低總線開始,持續(xù)至少1us并釋放
102、,然后在在之后的(15-1)us內讀DS18B20的值</p><p> Delay(2);//維持1us</p><p><b> DQ=1;</b></p><p> Delay(18);//延時9us,最佳讀數時間為"10~13uS"左右</p><p><b> value=
103、DQ;</b></p><p> Delay(120);//延時60us。每讀一位數,需要延時一段時間,使整個read slot保證維持至少60us才能開始讀下一位信息</p><p> return(value);</p><p><b> }</b></p><p> //------------
104、---------------------------------------------</p><p> //讀DS18B20,每調用一次,讀出一個字節(jié)內容</p><p> //讀scratchpad時,讀出的順序從字節(jié)0的LSB位開始</p><p> //------------------------------------------------
105、---------</p><p> read_DS18B20(void) </p><p><b> {</b></p><p> bit Read_Bit=0;</p><p> unsigned int i=0;</p><p> unsigned char Read_Byte=0
106、;</p><p> unsigned char Temp_Byte=0;</p><p> for(i=0;i<8;i++)</p><p><b> {</b></p><p> Read_Bit=read_DS18B20_bit();</p><p> Temp_Byte=T
107、emp_Byte|Read_Bit;</p><p> Temp_Byte=Temp_Byte<<i; //右移</p><p> Read_Byte=Read_Byte|Temp_Byte;//實現lsb到msb位順序讀出到一個字節(jié)</p><p><b> }</b></p><p> retu
108、rn(Read_Byte);</p><p><b> }</b></p><p> 3.3 ROM指令代碼</p><p> 一旦總線控制器探測到一個存在脈沖,它就發(fā)出一條ROM指令。如果總線上掛有多只DS18B20,這些指令將基于器件獨有的64 位ROM 片序列碼使得總線控制器選出特定要進行操作的器件。這些指令同樣也可以使總線控制器識
109、別有多少個什么型號的器件掛在總線上,同樣,它們也可以識別哪些器件已經符合報警條件。ROM指令有5條,都是8 位長度??偩€控制器在發(fā)起一條DS18B20功能指令之前必須先發(fā)出一條ROM指令。</p><p> 圖3.4 ROM功能指令圖</p><p> 3.4 DS18B20功能指令</p><p> 在總線控制器發(fā)給欲連接的DS18B20一條ROM命令后,跟
110、著可以發(fā)送一條DS18B20</p><p> 功能指令。這些命令允許總線控制器讀寫DS18B20的暫存器,發(fā)起溫度轉換和識別電源模式。</p><p> 其中溫度轉換:DS18B20中的溫度傳感器完成對溫度的測量,用16位二進制形式提供,形式表達,其中S為符號位。</p><p> 圖3.5 DS18B20溫度轉換圖</p><p>
111、 例如:+125℃的數字輸出為07D0H (正溫度 直接吧16進制數轉成10進制即得到溫度值 )</p><p> - 55℃的數字輸出為 FC90H。 (負溫度 把得到的16進制數 取反后 加1 再轉成10進制數)</p><p> 設計中關于溫度轉換的程序:</p><p> //------------------------------------
112、---------------------</p><p> //第二次訪問DS18B20————讀取溫度值</p><p> //---------------------------------------------------------</p><p> DS18B20_RESET();</p><p> DS18B20_P
113、RESENCE();</p><p> //發(fā)送ROM指令:CCh:Skip ROM Command.</p><p> Command=0xcc;</p><p> write_DS18B20(Command);</p><p> //發(fā)送功能指令:BEh:Read Scratchpad Command.</p>&
114、lt;p> Command=0xbe;</p><p> write_DS18B20(Command);</p><p> //讀DS18B20返回的EEPROM中的內容,順序從字節(jié)0的LSB位開始。(字節(jié)0和字節(jié)1中分別存儲了數字溫度值的低8位和高8位)</p><p> //發(fā)送功能指令BEh后,DS18B20將連續(xù)送出9個字節(jié)的內容,從字節(jié)0的L
115、SB位開始,</p><p> //依次為Temperature LSB,Temperature MSB(P10),TH,TL,Config,FFh,OCh,10h,CRC。</p><p> //在此,我們只需要讀兩次,即讀出數字溫度值的高低兩字節(jié)即可</p><p> //主機可以在獲取了所需字節(jié)后,隨時以發(fā)送RESET脈沖來中止并開始下一次訪問。<
116、/p><p> Temperature_Low=read_DS18B20();//讀出的為數字溫度的低字節(jié)內容</p><p> //存儲低字節(jié)的內容</p><p> Temperature_High=read_DS18B20();//讀出的為高字節(jié)的內容</p><p> //存儲高字節(jié)的內容</p><p>
117、 //---------------------------------------------------------</p><p> //將二進制溫度轉換為十進制溫度</p><p> //忽略低字節(jié)的最后四位(小數部分),取整數部分的7位(不含符號位)至ACC各位中,以實現轉換</p><p> //-------------------------
118、--------------------------------</p><p> sign=Temperature_High^3;//取溫度符號位</p><p><b> //溫度為正</b></p><p> if(sign==0)</p><p><b> {</b></p&g
119、t;<p> ACC_0=Temperature_Low^4;</p><p> ACC_1=Temperature_Low^5;</p><p> ACC_2=Temperature_Low^6;</p><p> ACC_3=Temperature_Low^7;</p><p> ACC_4=Temperature
120、_High^0;</p><p> ACC_5=Temperature_High^1;</p><p> ACC_6=Temperature_High^2;</p><p> ACC_7=0; //符號位為0</p><p> Absolute_Temperature=ACC;</p><p><b>
121、; }</b></p><p><b> 總 結</b></p><p> 經過了兩個多月的學習和工作,我終于完成了《基于80C51單片機與DS18B20的溫度檢測軟件設計》的論文。從開始接到論文題目到系統(tǒng)的實現,再到論文文章的完成,每走一步對我來說都是新的嘗試與挑戰(zhàn),這也是我在大學期間獨立完成的最大的項目。在這段時間里,我學到了很多知識也有很多感
122、受,從對DS18B20芯片的一無所知,溫度檢測等相關技術的不了解,我開始了獨立的學習和試驗,查看相關的資料和書籍,讓自己頭腦中模糊的概念逐漸清晰,使自己非常稚嫩作品一步步完善起來,每一次改進都是我學習的收獲,每一次試驗的成功都會讓我興奮好一段時間。通過這次的畢業(yè)設計我了解了DS18B20溫度控制芯片的工作原理和性能特點,同時在運用所學的C語言知識進行實際編程的過程中也遇到許多問題,不過在老師及時幫助下最終克服了所有的困難。這次畢業(yè)設計于
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)設計----ds18b20數字溫度計論文
- ds18b20溫度檢測程序(c語言)
- 畢業(yè)設計---ds18b20數字溫度計的設計
- 基于ds18b20的溫度控制系統(tǒng)畢業(yè)設計
- 基于ds18b20多點溫度檢測系統(tǒng)畢業(yè)論文
- 基于c51,ds18b20溫度計畢業(yè)設計
- 畢業(yè)設計---ds18b20數字溫度計(含外文翻譯)
- 自動檢測課程設計—ds18b20溫度檢測
- 基于ds18b20的單總線數字溫度計畢業(yè)設計
- ds18b20溫度計課程設計
- 基于ds18b20的溫度計設計
- 基于ds18b20的溫度測量系統(tǒng)設計
- 畢業(yè)設計---ds18b20做溫度傳感器的數字溫度計
- ds18b20數字溫度計的設計
- 基于ds18b20溫度傳感器的數字溫度計設計畢業(yè)設計
- 畢業(yè)設計---基于c51,ds18b20溫度計的設計
- 基于ds18b20溫度傳感器的數字溫度計設計畢業(yè)設計
- 溫度傳感器ds18b20資料
- 基于ds18b20的溫度測量實驗
- 單片機畢業(yè)設計外文翻譯--ds18b20
評論
0/150
提交評論