版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 《基于1-wrie串行總線應(yīng)用系統(tǒng)的設(shè)計(jì)》</p><p><b> 課程設(shè)計(jì)報(bào)告</b></p><p> 專 業(yè): 電子科學(xué)與技術(shù) </p><p> 班 級: 0902 </p><p> 姓 名: xxx <
2、;/p><p> 指導(dǎo)教師: xxxxx </p><p> 二0一二年 十 月 十八 日</p><p><b> 目錄</b></p><p> 一、設(shè)計(jì)任務(wù)…………………………………………………………………………3</p><p> 1.1設(shè)計(jì)題目及要求………………………………
3、……………………………………3</p><p> 1.2 設(shè)計(jì)思路……………………………………………………………………………3</p><p> 二、設(shè)計(jì)方案…………………………………………………………………………4</p><p> 2.1 單片的選擇…………………………………………………………………………4</p><p> 2.
4、2 溫度傳感器的選擇…………………………………………………………………4</p><p> 2.3 顯示器的選擇………………………………………………………………………5</p><p> 2.4 設(shè)計(jì)方案……………………………………………………………………………5</p><p> 三、電路設(shè)計(jì)…………………………………………………………………………5<
5、/p><p> 3.1 AT89S51單片機(jī)的特殊功能部件…………………………………………………5</p><p> 3.2 DS18B20的工作原理………………………………………………………………6</p><p> 3.3 硬件電路設(shè)計(jì)及其分析……………………………………………………………7</p><p> 3.4 DS18B20測
6、溫流程及軟件設(shè)計(jì)……………………………………………………10</p><p> 四、心得體會…………………………………………………………………………19</p><p> 五、參考書目…………………………………………………………………………19</p><p> 第一部分 設(shè)計(jì)任務(wù)</p><p> 1.1設(shè)計(jì)題目及要求</
7、p><p> 設(shè)計(jì)制作一個(gè)DS18B20溫度計(jì)。</p><p> 1.利用單總線完成對DS18B20的初始化操作。</p><p> 2.利用4位數(shù)碼顯示實(shí)時(shí)環(huán)境溫度</p><p> 3.增加2個(gè)按鍵,分別用于實(shí)現(xiàn)啟動(dòng)測溫和關(guān)閉(停止)測溫功能。</p><p> 4.硬件方面需要9V轉(zhuǎn)5V穩(wěn)壓電路。<
8、/p><p><b> 1.2 設(shè)計(jì)思路</b></p><p> 溫度計(jì)電路設(shè)計(jì)總體設(shè)計(jì)方框圖如圖1所示,控制器采用單片機(jī)AT89S51,溫度傳感器采用DS18B20,用2位LED數(shù)碼管傳送數(shù)據(jù)實(shí)現(xiàn)溫度顯示。</p><p> 圖1 總體設(shè)計(jì)方框圖</p><p> 第二部分 設(shè)計(jì)方案</p>&
9、lt;p><b> 2.1單片機(jī)的選擇</b></p><p> 采用AT89S51單片機(jī)。中央微處理器 AT89S51: AT89S51是一個(gè)低功耗,高性能CMOS 8位單片機(jī),片內(nèi)含4k Bytes ISP(In-system programmable)的可反復(fù)擦寫1000次的Flash只讀程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術(shù)制造,兼容標(biāo)準(zhǔn)MCS-51指
10、令系統(tǒng)及80S51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和ISP Flash存儲單元,功能強(qiáng)大的微型計(jì)算機(jī)的AT89S51可為許多嵌入式控制應(yīng)用系統(tǒng)提供高性價(jià)比的解決方案。AT89S51具有如下特點(diǎn):40個(gè)引腳,4k Bytes Flash片內(nèi)程序存儲器,128 bytes的隨機(jī)存取數(shù)據(jù)存儲器(RAM),32個(gè)外部雙向輸入/輸出(I/O)口,5個(gè)中斷優(yōu)先級2層中斷嵌套中斷,2個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,看門狗(WD
11、T)電路,片內(nèi)時(shí)鐘振蕩器。</p><p> 2.2溫度傳感器的選擇</p><p> 采用數(shù)字單片智能溫度傳感器DS18B20。 DS18B20是DALLAS公司生產(chǎn)的一線式數(shù)字溫度傳感器,具有3引腳TO-92小體積封裝形式;溫度測量范圍為-55℃~+125℃,可編程為9位~12位A/D轉(zhuǎn)換精度,測溫分辨率可達(dá)0.0625℃,被測溫度用符號擴(kuò)展的16位數(shù)字量方式串行輸出,其工作電源既
12、可在遠(yuǎn)端引入,也可采用寄生電源方式產(chǎn)生;多個(gè)DS18B20可以并聯(lián)到3根或2根線上,CPU只需一根端口線就能與諸多DS18B20通信,占用微處理器的端口較少,可節(jié)省大量的引線和邏輯電路。DS18B20支持“一線總線”接口,測量溫度范圍為 -55℃~+125℃,在-10℃~+85℃范圍內(nèi),精度為0.5℃。DS18B20的精度較差為±0.2℃ ?,F(xiàn)場溫度直接以“一線總線”的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)
13、場溫度測量。如:環(huán)境控制、設(shè)備或過程控制、測溫類消費(fèi)電子產(chǎn)品等。與前一代產(chǎn)品不同,新的產(chǎn)品支持3V~5.5V的電壓范圍,使系統(tǒng)設(shè)計(jì)更靈活、方便。由于DS18B20將溫度傳感器、信號放大調(diào)理、A/D轉(zhuǎn)換、接口全部集成于一芯片,與單片機(jī)連接簡單、方便,與AD590相比是更新</p><p><b> 2.3顯示器的選擇</b></p><p> 采用傳統(tǒng)的七段數(shù)碼LE
14、D顯示器。</p><p> LED數(shù)碼管動(dòng)態(tài)顯示接口是單片機(jī)中應(yīng)用最為廣泛的一種顯示方式之一,動(dòng)態(tài)驅(qū)動(dòng)是將所有數(shù)碼管的8個(gè)顯示筆劃"a,b,c,d,e,f,g,dp"的同名端連在一起,另外為每個(gè)數(shù)碼管的公共極COM增加位選通控制電路,位選通由各自獨(dú)立的I/O線控制,當(dāng)單片機(jī)輸出字形碼時(shí),所有數(shù)碼管都接收到相同的字形碼,但究竟是那個(gè)數(shù)碼管會顯示出字形,取決于單片機(jī)對位選通COM端電路的控制,
15、所以我們只要將需要顯示的數(shù)碼管的選通控制打開,該位就顯示出字形,沒有選通的數(shù)碼管就不會亮。通過分時(shí)輪流控制各個(gè)數(shù)碼管的的COM端,就使各個(gè)數(shù)碼管輪流受控顯示,這就是動(dòng)態(tài)驅(qū)動(dòng)。</p><p><b> 2.4設(shè)計(jì)方案</b></p><p> 采用數(shù)字溫度芯片DS18B20 測量溫度,輸出信號全數(shù)字化。便于單片機(jī)處理及控制,省去傳統(tǒng)的測溫方法的很多外圍電路。且該芯
16、片的物理化學(xué)性很穩(wěn)定,它能用做工業(yè)測溫元件,此元件線形較好。在0—100 攝氏度時(shí),最大線形偏差小于1 攝氏度。DS18B20 的最大特點(diǎn)之一采用了單總線的數(shù)據(jù)傳輸,由數(shù)字溫度計(jì)DS18B20和微控制器AT89S51構(gòu)成的溫度測量裝置,它直接輸出溫度的數(shù)字信號,可直接與計(jì)算機(jī)連接。這樣,測溫系統(tǒng)的結(jié)構(gòu)就比較簡單,體積也不大。采用51 單片機(jī)控制,軟件編程的自由度大,可通過編程實(shí)現(xiàn)各種各樣的算術(shù)算法和邏輯控制,而且體積小,硬件實(shí)現(xiàn)簡單,安
17、裝方便。既可以單獨(dú)對多DS18B20控制工作,還可以與PC 機(jī)通信上傳數(shù)據(jù),另外AT89S51 在工業(yè)控制上也有著廣泛的應(yīng)用,編程技術(shù)及外圍功能電路的配合使用都很成熟。</p><p> 第三部分 電路設(shè)計(jì)</p><p> 3.1 AT89S51單片機(jī)的特殊功能部件</p><p><b> ?。?)定時(shí)/計(jì)數(shù)器</b></p&
18、gt;<p> AT89S51有兩個(gè)16位可編程定時(shí)/計(jì)數(shù)器T0和T1,它們分別有兩個(gè)獨(dú)立的8位寄存器THx和TLx構(gòu)成,通過編程設(shè)置可以實(shí)現(xiàn)4種工作方式。</p><p><b> ?。?)中斷系統(tǒng)</b></p><p> 51單片機(jī)具備較完善的中斷功能,有2個(gè)外部中斷、2個(gè)內(nèi)部定時(shí)器中斷和1個(gè)串行口中斷,可以實(shí)現(xiàn)不同的控制要求,并具有兩級的優(yōu)先
19、級。 </p><p><b> ?。?)時(shí)鐘振蕩電路</b></p><p> 51內(nèi)置一個(gè)振蕩器和時(shí)鐘電路,用于產(chǎn)生整個(gè)單片機(jī)運(yùn)行的脈沖時(shí)序,常用頻率為6MHZ、11.0592MHZ、12MHZ。振蕩器實(shí)際上是一個(gè)高增益反相器,使用時(shí)需外接一個(gè)晶振和兩個(gè)相匹配的電容。 </p><p> 3.2 DS18B20的工作原理</p&
20、gt;<p> DS18B20的測溫原理如圖3-1所示,圖中低溫度系數(shù)晶振的振蕩頻率受溫度的影響很小用于產(chǎn)生固定頻率的脈沖信號送給減法計(jì)數(shù)器1,高溫度系數(shù)晶振隨溫度變化其震蕩頻率明顯改變,所產(chǎn)生的信號作為減法計(jì)數(shù)器2的脈沖輸入,圖中還隱含著計(jì)數(shù)門,當(dāng)計(jì)數(shù)門打開時(shí),DS18B20就對低溫度系數(shù)振蕩器產(chǎn)生的時(shí)鐘脈沖后進(jìn)行計(jì)數(shù),進(jìn)而完成溫度測量.計(jì)數(shù)門的開啟時(shí)間由高溫度系數(shù)振蕩器來決定,每次測量前,首先將-55 ℃所對應(yīng)的基數(shù)
21、分別置入減法計(jì)數(shù)器1和溫度寄存器中,減法計(jì)數(shù)器1和溫度寄存器被預(yù)置在-55 ℃所對應(yīng)的一個(gè)基數(shù)值。減法計(jì)數(shù)器1對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行減法計(jì)數(shù),當(dāng)減法計(jì)數(shù)器1的預(yù)置值減到0時(shí)溫度寄存器的值將加1,減法計(jì)數(shù)器 1的預(yù)置將重新被裝入,減法計(jì)數(shù)器1重新開始對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行計(jì)數(shù),如此循環(huán)直到減法計(jì)數(shù)器2計(jì)數(shù)到0時(shí),停止溫度寄存器值的累加,此時(shí)溫度寄存器中的數(shù)值即為所測溫圖2中的斜率累加器用于補(bǔ)償和修正測溫過程中的非線
22、性其輸出用,于修正減法計(jì)數(shù)器的預(yù)置值,只要計(jì)數(shù)門仍未關(guān)閉就重復(fù)上述過程,直至溫度寄存器值達(dá)到被測溫度值。</p><p> 另外,由于DS18B20單線通信功能是分時(shí)完成的,他有嚴(yán)格的時(shí)隙概念,因此讀寫時(shí)序很重要。系統(tǒng)對DS18B20的各種操作必須按協(xié)議進(jìn)行。操作協(xié)議為:初始化DS18B20 (發(fā)復(fù)位脈沖)→發(fā)ROM功能命令→發(fā)存儲器操作命令→處理數(shù)據(jù)。</p><p> 圖3-1DS
23、18B20的測溫原理</p><p> 3.3 硬件電路設(shè)計(jì)及其分析</p><p> 硬件電路由總控制器電路、DS18B20測溫電路、LED動(dòng)態(tài)顯示電路組成。</p><p><b> (1)總控制器</b></p><p> 總控制器有電源電路、時(shí)鐘電路、復(fù)位電路三部分構(gòu)成。</p><p
24、> 時(shí)鐘電路對單片機(jī)系統(tǒng)而言是必需的。由于單片機(jī)內(nèi)部是由各種各樣的數(shù)字邏輯器件(如觸發(fā)器寄存器存儲器等)構(gòu)成,這些數(shù)字器件的工作必須按時(shí)間順序完成,這種時(shí)間順序就稱為時(shí)序。時(shí)鐘電路就是提供單片機(jī)內(nèi)部各種操作的時(shí)間基準(zhǔn)的電路,沒有時(shí)鐘電路單片機(jī)就無法工作。此次設(shè)計(jì)中,我們采用由由內(nèi)部方式產(chǎn)生時(shí)鐘的方法形成時(shí)鐘電路。</p><p> 內(nèi)部方式:在XTAL1和XTAL2端外接石英晶體作定時(shí)元件,內(nèi)部反相放大
25、器自激振蕩,產(chǎn)生時(shí)鐘。時(shí)鐘發(fā)生器對振蕩脈沖二分頻,即若石英頻率fosc=6MHz,則時(shí)鐘頻率=3MHZ,因此,時(shí)鐘是一個(gè)雙相信號,由P1相和P2相構(gòu)成。fosc可在2MHZ—12MHZ選擇。小電容可以取30PF左右。XTAL1和XTAL2為片內(nèi)振蕩電路輸入線,這兩個(gè)端子用來外接石英晶體和微調(diào)電容。在石英晶體的兩個(gè)管腳加交變電場時(shí),它將會產(chǎn)生一定頻率的機(jī)械變形,而這種械振動(dòng)又會產(chǎn)生交變電場,上述物理現(xiàn)象稱為壓電效應(yīng)。一般情況下,無論是機(jī)械
26、振動(dòng)的振幅,還是交變電場的振幅都非常小。但是,當(dāng)交變電場的頻率為某一特定值時(shí),振幅驟然增大,產(chǎn)生共振,稱之為壓電振蕩。這一特定頻率就是石英晶體的固有頻率(諧振頻率)。即用來連接單片機(jī)內(nèi)OSC的定時(shí)反饋回路。石英晶振起振后要能在XTAL2線上輸出一個(gè)3V左右的正弦波,以便使單片機(jī)片內(nèi)的OSC電路按石英晶振相同頻率自激振蕩。通常OSC輸出時(shí)鐘頻率f為0.5MHz~16MHz,典型值為12MHz或者11.0592MHz。電容C3和C4可以幫助
27、起振,典型值為30pF,調(diào)節(jié)它們可以達(dá)到微調(diào)f的</p><p> 圖3-2時(shí)鐘電路與單片機(jī)的連接圖</p><p> 復(fù)位電路的設(shè)計(jì),單片機(jī)在開機(jī)時(shí)都需要復(fù)位,以便中央處理CPU以及其他功能部件都處于一個(gè)確定的初始狀態(tài),并從這個(gè)狀態(tài)開始工作。單片機(jī)的復(fù)位后是靠外部電路實(shí)現(xiàn)的, 在時(shí)鐘電路工作后,只要在單片機(jī)的RST引腳上出現(xiàn)24個(gè)時(shí)鐘振蕩脈沖(2個(gè)機(jī)器周期)以上的高電平,單片機(jī)便可實(shí)
28、現(xiàn)初始化狀態(tài)復(fù)位。單片機(jī)的RST引腳是復(fù)位信號的輸入端。單片機(jī)時(shí)鐘頻率為12MHz,則復(fù)位脈沖寬度至少應(yīng)該為2μs,復(fù)位電路如圖3-3所示</p><p> 圖3-3單片機(jī)復(fù)位電路</p><p> ?。?)DS18B20測溫電路</p><p> DS18B20 最大的特點(diǎn)是單總線數(shù)據(jù)傳輸方式,DS18B20 的數(shù)據(jù)I/O 均由同一條線來完成。DS18B20
29、的電源供電方式有2 種: 外部供電方式和寄生電源方式。工作于寄生電源方式時(shí), VDD 和GND 均接地, 他在需要遠(yuǎn)程溫度探測和空間受限的</p><p> 場合特別有用, 原理是當(dāng)1 W ire 總線的信號線DQ 為高電平時(shí), 竊取信號能量給DS18B20 供電, 同時(shí)一部分能量給內(nèi)部電容充電, 當(dāng)DQ為低電平時(shí)釋放能量為DS18B20 供電。但寄生電源方式需要強(qiáng)上拉電路, 軟件控制變得復(fù)雜(特別是在完成溫度
30、轉(zhuǎn)換和拷貝數(shù)據(jù)到E2PROM 時(shí)) , 同時(shí)芯片的性能也有所降低。因此, 在條件允許的場合, 盡量采用外供電方式。無論是內(nèi)部寄生電源還是外部供電,I/O口線要接5KΩ左右的上拉電。在這里采用前者方式供電。DS18B20與芯片連接電路如圖。</p><p> 外部電源供電方式是DS18B20最佳的工作方式,工作穩(wěn)定可靠,抗干擾能力強(qiáng),而且電路也比較簡單,可以開發(fā)出穩(wěn)定可靠的多點(diǎn)溫度監(jiān)控系統(tǒng)。站長推薦大家在開發(fā)中使
31、用外部電源供電方式,畢竟比寄生電源方式只多接一根VCC引線。在外接電源方式下,可以充分發(fā)揮DS18B20寬電源電壓范圍的優(yōu)點(diǎn),即使電源電壓VCC 降到3V 時(shí),依然能夠保證溫度量精度。</p><p> (3)LED動(dòng)態(tài)顯示電路</p><p> 數(shù)碼管由8個(gè)發(fā)光二極管(以下簡稱字段)構(gòu)成,通過不同的組合可用來顯示數(shù)字0 9、字符A F、H、L、P、R、U、Y、符號“”及小數(shù)點(diǎn)“”。
32、</p><p> 采用4位共陽極數(shù)碼管。共陽極數(shù)碼管的8個(gè)發(fā)光二極管的陽極(二極管正端)連接在一起。通常,公共陽極接高電平(一般接電源),其它管腳接段驅(qū)動(dòng)電路輸出端。當(dāng)某段驅(qū)動(dòng)電路的輸出端為低電平時(shí),則該端所連接的字段導(dǎo)通并點(diǎn)亮。根據(jù)發(fā)光字段的不同組合可顯示出各種數(shù)字或字符。此時(shí),要求段驅(qū)動(dòng)電路能吸收額定的段導(dǎo)通電流,還需根據(jù)外接電源及額定段導(dǎo)通電流來確定相應(yīng)的限流電阻。</p><p&g
33、t; 將數(shù)碼管公共極COM接到+5V,段選段接單片機(jī)P0口(當(dāng)單片機(jī)P0口高電平輸出時(shí),要接上拉電阻以增大驅(qū)動(dòng)能力),位選端加三極管驅(qū)動(dòng)接單片機(jī)P2口。數(shù)碼管與單片機(jī)的接口電路如圖4-4中所示。</p><p><b> 系統(tǒng)總電路圖:</b></p><p> 3.4 DS18B20測溫流程及軟件設(shè)計(jì)</p><p> 初始化DS18
34、B20 (發(fā)復(fù)位脈沖)→發(fā)ROM功能命令→發(fā)存儲器操作命令→處理數(shù)據(jù)</p><p> 復(fù)位時(shí)序:復(fù)位要求主CPU將數(shù)據(jù)線下拉500微秒,然后釋放,DS18B20收到信號后等待16~60 微秒左右,后發(fā)出60~240 微秒的存在低脈沖,主CPU 收到此信號表示成功.</p><p> 主機(jī)發(fā)送(Tx)--復(fù)位脈沖(最短為480μs 的低電平信號)。接著主機(jī)便釋放此線并進(jìn)入接收方式(Rx
35、)??偩€經(jīng)過4.7K的上拉電阻被拉至高電平狀態(tài)。在檢測到I/O 引腳上的上升沿之后,DS18B20 等待15~60μs,并且接著發(fā)送脈沖(60~240μs 的低電平信號)。然后以存在復(fù)位脈沖表示DS18B20 已經(jīng)準(zhǔn)備好發(fā)送或接收,然后給出正確的ROM 命令和存儲操作命令的數(shù)據(jù)。DS18B20 通過使用時(shí)間片來讀出和寫入數(shù)據(jù),時(shí)間片用于處理數(shù)據(jù)位和進(jìn)行何種指定操作的命令。它有寫時(shí)間片和讀時(shí)間片兩種:</p><p&g
36、t; 寫時(shí)間片:當(dāng)主機(jī)把數(shù)據(jù)線從邏輯高電平拉至邏輯低電平時(shí),產(chǎn)生寫時(shí)間片。有兩種類型的寫時(shí)間片:寫1 時(shí)間片和寫0 時(shí)間片。所有時(shí)間片必須有60 微秒的持續(xù)期,在各寫周期之間必須有最短為1微秒的恢復(fù)時(shí)間.</p><p> 讀時(shí)間片:從DS18B20 讀數(shù)據(jù)時(shí),使用讀時(shí)間片。當(dāng)主機(jī)把數(shù)據(jù)線從邏輯高電平拉至邏輯低電平時(shí)產(chǎn)生讀時(shí)間片。數(shù)據(jù)線在邏輯低電平必須保持至少1 微秒;來自DS18B20 的輸出數(shù)據(jù)在時(shí)間下降
37、沿之后的15 微秒內(nèi)有效。為了讀出從讀時(shí)間片開始算起15微秒的狀態(tài),主機(jī)必須停止把引腳驅(qū)動(dòng)拉至低電平。在時(shí)間片結(jié)束時(shí),I/O 引腳經(jīng)過外部的上拉電阻拉回高電平,所有讀時(shí)間片的最短持續(xù)期為60 微秒,包括兩個(gè)讀周期間至少1μs 的恢復(fù)時(shí)間。</p><p> 一旦主機(jī)檢測到DS18B20 的存在,它便可以發(fā)送一個(gè)器件ROM 操作命令。所有ROM 操作命令均為8位長。</p><p> 所
38、有的串行通訊,讀寫每一個(gè)bit 位數(shù)據(jù)都必須嚴(yán)格遵守器件的時(shí)序邏輯來編程,同時(shí)還必須遵守總線命令序列,對單總線的DS18B20 芯片來說,訪問每個(gè)器件都要遵守下列命令序列:首先是初始化;其次執(zhí)行ROM 命令;最后就是執(zhí)行功能命令(ROM 命令和功能命令后面以表格形式給出)。如果出現(xiàn)序列混亂,則單總線器件不會響應(yīng)主機(jī)。當(dāng)然,搜索ROM命令和報(bào)警搜索命令,在執(zhí)行兩者中任何一條命令之后,要返回初始化。</p><p>
39、 基于單總線上的所有傳輸過程都是以初始化開始的,初始化過程由主機(jī)發(fā)出的復(fù)位脈沖和從機(jī)響應(yīng)的應(yīng)答脈沖組成。應(yīng)答脈沖使主機(jī)知道,總線上有從機(jī),且準(zhǔn)備就緒。</p><p> 在主機(jī)檢測到應(yīng)答脈沖后,就可以發(fā)出ROM 命令。這些命令與各個(gè)從機(jī)設(shè)備的唯一64 位ROM 代碼相關(guān)。在主機(jī)發(fā)出ROM命令,以訪問某個(gè)指定的DS18B20,接著就可以發(fā)出DS18B20支持的某個(gè)功能命令。這些命令允許主機(jī)寫入或讀出DS18B2
40、0便箋式RAM、啟動(dòng)溫度轉(zhuǎn)換。主機(jī)首先發(fā)出一個(gè)復(fù)位脈沖,信號線上的DS18B20 器件被復(fù)位。接著主機(jī)發(fā)送ROM命令,程序開始讀取單個(gè)在線的芯片ROM編碼并保存在單片機(jī)數(shù)據(jù)存儲器中,把用到的DS18B20 的ROM 編碼離線讀出,最后用一個(gè)二維數(shù)組保存ROM 編碼。</p><p> 系統(tǒng)工作時(shí),把讀取了編碼的DS18B20 掛在總線上。發(fā)溫度轉(zhuǎn)換命令,再總線復(fù)位。</p><p>
41、然后就可以從剛才的二維數(shù)組匹配在線的溫度傳感器,隨后發(fā)溫度讀取命令就可以獲得對應(yīng)的度值了。</p><p> 在主機(jī)初始化過程,主機(jī)通過拉低單總線至少480us,來產(chǎn)生復(fù)位脈沖。接著,主機(jī)釋放總線,并進(jìn)入接收模式。當(dāng)總線被釋放后,上拉電阻將單總線拉高。在單總線器件檢測到上升沿后,延時(shí)15~60us,接著通過拉低總線60~240us,以產(chǎn)生應(yīng)答脈沖。</p><p> 寫時(shí)序均起始于主機(jī)
42、拉低總線,產(chǎn)生寫1 時(shí)序的方式:主機(jī)在拉低總線后,接著必須在15us之內(nèi)釋放總線。產(chǎn)生寫0 時(shí)序的方式:在主機(jī)拉低總線后,只需在整個(gè)時(shí)序期間保持低電平即可(至少60us)。在寫字節(jié)程序中的寫一個(gè)bit 位的時(shí)候,沒有按照通常的分別寫0時(shí)序和寫1 時(shí)序,而是把兩者結(jié)合起來,當(dāng)主機(jī)拉低總線后在15us 之內(nèi)將要寫的位c 給DO:如果c 是高電平滿足15us 內(nèi)釋放總線的要求,如果c是低電平,則DO=c這條語句仍然是把總線拉在低電平,最后都通
43、過延時(shí)58us 完成一個(gè)寫時(shí)序(寫時(shí)序0或?qū)憰r(shí)序1)過程。</p><p> 寫時(shí)間時(shí)序:當(dāng)主機(jī)把數(shù)據(jù)從邏輯高電平拉到邏輯低電平的時(shí)候,寫時(shí)間隙開始。有兩種寫時(shí)間隙,寫1 時(shí)間隙和寫0 時(shí)間隙。所有寫時(shí)間隙必須最少持續(xù)60μs,包括兩個(gè)寫周期至少1μs 的恢復(fù)時(shí)間。I/O線電平變低后,DS18B20 在一個(gè)15μs 到60μs 的窗口內(nèi)對I/O 線采樣。如果線上事高電平,就是寫1,如果是低電平,就是寫0。主機(jī)要
44、生成一個(gè)寫時(shí)間隙,必須把數(shù)據(jù)線拉到低電平然后釋放,在寫時(shí)間隙開始后的15μs 內(nèi)允許數(shù)據(jù)線拉到高電平。主機(jī)要生成一個(gè)寫0 時(shí)間隙,必須把數(shù)據(jù)線拉到低電平并保存60μs。每個(gè)讀時(shí)隙都由主機(jī)發(fā)起,至少拉低總線1us,在主機(jī)發(fā)起讀時(shí)序之后,單總線器件才開始在總線上發(fā)送0 或1。所有讀時(shí)序至少需要60us。</p><p> 讀時(shí)間時(shí)序:當(dāng)從DS18B20 讀數(shù)據(jù)時(shí),主機(jī)生成讀時(shí)間隙。當(dāng)主機(jī)把數(shù)據(jù)從高電平拉到低電平時(shí),
45、寫時(shí)間隙開始,數(shù)據(jù)線必須保持至少1μs;從DS18B20輸出的數(shù)據(jù)在讀時(shí)間隙的下降沿出現(xiàn)后15μs 內(nèi)有效。</p><p> 因此,主機(jī)在讀時(shí)間隙開始后必須把I/O 腳驅(qū)動(dòng)拉為的電平保持15μs,以讀取I/O 腳狀態(tài)。、在讀時(shí)間隙的結(jié)尾,I/O 引腳將被外部上拉電阻拉到高電平。所有讀時(shí)間隙必須最少60μs,包括兩個(gè)讀周期至少1μs的恢復(fù)時(shí)間。</p><p> 圖3-6讀DS18B2
46、0流程圖 圖3-7寫DS18B20流程圖</p><p><b> 系統(tǒng)總程序設(shè)計(jì):</b></p><p> ?。?)數(shù)字溫度計(jì)工作主要分為溫度采集、溫度轉(zhuǎn)化、數(shù)據(jù)處理、顯示這幾部分。單片機(jī)對與DS18B20主要完成對溫度的檢測和補(bǔ)償,通過AT89S51單片機(jī)對DS18B20芯片的控制和數(shù)據(jù)傳輸,查詢當(dāng)前的DS18B20溫度采集和轉(zhuǎn)換是否完成是
47、關(guān)鍵,并且完成對轉(zhuǎn)換后的數(shù)據(jù)的讀取。</p><p><b> (2)系統(tǒng)總程序</b></p><p> #include<reg51.h></p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p&g
48、t;<p> uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,//0~9</p><p> 0x40,0x89,0x24,0x30,0x19,0x12,0x02,0x88,0x00,0x10,//10~19</p><p> 0xbf,//20符號-</p><
49、;p> 0xff,//不顯示};</p><p> //ds18b20與單片機(jī)連接口</p><p> sbit DQ=P3^2;</p><p> uchar data disdata[5];//存放溫度值</p><p> uint tvalue;//溫度值</p><p> uchar tfla
50、g;//溫度正負(fù)標(biāo)志</p><p> /*************************顯示程序**************************/</p><p> void delay(uint k)//延時(shí)1毫秒(不夠精確的)</p><p> {unsigned int i,j;</p><p> for(i=0;i&l
51、t;k;i++)</p><p> for(j=0;j<100;j++);</p><p><b> }</b></p><p><b> //LCD顯示函數(shù)</b></p><p> void weixuan()</p><p><b> { &l
52、t;/b></p><p> if(tvalue<0)//負(fù)數(shù)處理</p><p> {disdata[0]=20;</p><p><b> tvalue--;</b></p><p><b> tvalue--;</b></p><p> tv
53、alue=~tvalue;</p><p> tvalue=tvalue%1000;</p><p> disdata[1]=tvalue/100;//獲取十位</p><p> if(disdata[1]==0)</p><p> disdata[1]=21;</p><p> tvalue=tvalue%
54、100;</p><p> disdata[2]=tvalue/10;//獲取個(gè)位再</p><p> disdata[2]+=10;//加入小數(shù)點(diǎn),查表可得出有小數(shù)點(diǎn)的排在后10位,所以加10</p><p> disdata[3]=tvalue%10;//獲取小數(shù)第一位</p><p><b> }</b>&
55、lt;/p><p> else //正數(shù)的處理</p><p><b> {</b></p><p> disdata[0]=tvalue/1000;//顯示百位</p><p> if(disdata[0]==0)</p><p> disdata[0]=21;//判斷溫度為正溫度且
56、沒有上百,前面不顯示,查表第12是空</p><p> tvalue=tvalue%1000;</p><p> disdata[1]=tvalue/100; //顯示十位</p><p> if(disdata[0]==21&&disdata[1]==0) //百位和十位同時(shí)為0 則不顯示</p><p>
57、disdata[1]=21;</p><p> tvalue=tvalue%100;</p><p> disdata[2]=tvalue/10;//獲取個(gè)位再</p><p> disdata[2]+=10;//加入小數(shù)點(diǎn),查表可得出有小數(shù)點(diǎn)的排在后10位,所以加10</p><p> disdata[3]=tvalue%10;//
58、獲取小數(shù)第一位</p><p><b> }</b></p><p><b> }</b></p><p> void display(uchar *lp,uchar lc)//顯示</p><p><b> {</b></p><p> uc
59、har i;//定義變量</p><p> P0=0x00;//端口2為輸出</p><p> P2=0xf7;//將P2口的輸出1111 0111,對應(yīng)第一個(gè)數(shù)碼管</p><p> for(i=0;i<lc;i++)</p><p> {//循環(huán)顯示</p><p&g
60、t; P0=table[lp[i]];//查表法得到要顯示數(shù)字的數(shù)碼段</p><p> delay(5);</p><p><b> delay(5);</b></p><p><b> delay(5);</b></p><p> P0=0x00;//清0端口,準(zhǔn)備顯示
61、下位</p><p> P2>>=1;//下一位數(shù)碼管</p><p> if(i==3)</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b>
62、</p><p> /******************************ds1820程序***************************************/</p><p> void delay_18B20(uint i)//延時(shí)1微秒</p><p><b> {</b></p><p>
63、 while(i--);</p><p><b> }</b></p><p> /*ds1820復(fù)位*/</p><p> void ds1820rst()</p><p><b> { </b></p><p> DQ = 1; //DQ復(fù)位
64、</p><p> delay_18B20(4); //延時(shí)</p><p> DQ = 0; //DQ拉低</p><p> delay_18B20(100); //精確延時(shí)大于480us</p><p> DQ = 1; //拉高</p><p> delay_18B2
65、0(40); </p><p><b> } </b></p><p> /*從ds18b20中讀數(shù)據(jù)*/</p><p> uchar ds1820rd()</p><p><b> { </b></p><p> uchar i=0;</p>&l
66、t;p> uchar dat=0;</p><p> for(i=8;i>0;i--)</p><p><b> {</b></p><p> DQ = 0; //給脈沖信號</p><p><b> dat>>=1;</b></p><p>
67、; DQ = 1; //給脈沖信號</p><p><b> if(DQ)</b></p><p> dat|=0x80;</p><p> delay_18B20(10);</p><p><b> }</b></p><p> return(dat);<
68、/p><p><b> }</b></p><p> /*向ds18b20中寫數(shù)據(jù)*/</p><p> void ds1820wr(uchar wdata)</p><p><b> {</b></p><p> uchar i=0;</p><p
69、> for (i=8;i>0;i--)</p><p><b> { </b></p><p><b> DQ=0;</b></p><p> DQ=wdata&0x01;</p><p> delay_18B20(10);</p><p>&l
70、t;b> DQ=1;</b></p><p> wdata>>=1;</p><p><b> }</b></p><p><b> }</b></p><p> /*讀取溫度值并轉(zhuǎn)換*/</p><p> void read_tem
71、p()</p><p><b> {</b></p><p> uchar a,b;</p><p> ds1820rst(); </p><p> ds1820wr(0xcc);//*跳過讀序列號*/</p><p> ds1820wr(0x44);//*啟動(dòng)溫度轉(zhuǎn)換*/<
72、/p><p> ds1820rst();</p><p> ds1820wr(0xcc);//*跳過讀序列號*/ </p><p> ds1820wr(0xbe);//*讀取溫度*/ </p><p> a=ds1820rd();</p><p> b=ds1820rd();</p><p&g
73、t;<b> tvalue=b;</b></p><p> tvalue<<=8;</p><p> tvalue=tvalue|a;</p><p> if(tvalue<0x0fff)</p><p><b> tflag=0;</b></p><
74、p><b> else</b></p><p><b> {</b></p><p> tvalue=~tvalue+1;</p><p><b> tflag=1;</b></p><p><b> }</b></p>&l
75、t;p> tvalue=tvalue*(0.625);//溫度值擴(kuò)大10倍,精確到1位小數(shù) </p><p><b> }</b></p><p> /********************主程序***********************************/</p><p> void main
76、()</p><p><b> { //初始化顯示</b></p><p><b> while(1)</b></p><p><b> {</b></p><p> read_temp();//讀取溫度</p><p> weixuan()
77、;</p><p> display (uchar *lp,uchar lc) ;</p><p><b> }</b></p><p><b> }</b></p><p> 第四部分 心得體會</p><p> 在本次課程設(shè)計(jì)中,不僅自己付出了很多心血,也得到
78、了很多老師和同學(xué)的支持,為我創(chuàng)造了很多有利條件,在這里,我要特別感謝我的指導(dǎo)老師,在課程設(shè)計(jì)的開始,老師給了我很多幫助,指導(dǎo)我了解了很多單片機(jī)的相關(guān)知識,并在當(dāng)我設(shè)計(jì)遇到困難時(shí),及時(shí)的給予幫助和鼓勵(lì)。同時(shí),我還要感謝實(shí)習(xí)組及實(shí)驗(yàn)室的所有老師,為我的課程設(shè)計(jì)提供了非常便利的條件。最后還要感謝幫助我的同學(xué),在我遇到困難時(shí)給予我耐心的幫助。再次對在本次課程設(shè)計(jì)中給予過我?guī)椭睦蠋熀屯瑢W(xué)至上我最真摯的謝意。</p><p&g
79、t;<b> 參考文獻(xiàn)</b></p><p> (1)賈立新,《電子系統(tǒng)設(shè)計(jì)與實(shí)踐》清華大學(xué)出版社,2011</p><p> ?。?)唐穎,《單片機(jī)原理與應(yīng)用及C51程序設(shè)計(jì)》北京大學(xué)出版社,2011</p><p> ?。?)王福瑞,《單片機(jī)測控系統(tǒng)設(shè)計(jì)大全》航空航天大學(xué)出版社,1998</p><p> ?。?/p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)---數(shù)字溫度計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)
- 課程設(shè)計(jì)-數(shù)字溫度計(jì)
- 課程設(shè)計(jì)---數(shù)字溫度計(jì)設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì) (2)
- 數(shù)字溫度計(jì)課程設(shè)計(jì) (2)
- 數(shù)字溫度計(jì)課程設(shè)計(jì) (2)
- 數(shù)字溫度計(jì)的課程設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì) (3)
- 智能儀器課程設(shè)計(jì)報(bào)告---數(shù)字溫度計(jì)
- 課程設(shè)計(jì)之?dāng)?shù)字溫度計(jì)
- 數(shù)字溫度計(jì)的課程設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì) (2)
- 數(shù)字溫度計(jì)課程設(shè)計(jì) (2)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)---基于51單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì)
評論
0/150
提交評論