版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、DS18B20 測溫程序完全解讀#include"reg52.h"#include"intrins.h"#defineucharunsignedchar#defineuint unsignedintsbit ds=P22;sbit dula=P26;sbit wela=P27;ucharflag;uint temp;/參數(shù) temp 一定要聲明為int 型ucharcodetable=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/不帶小數(shù)點
2、數(shù)字編碼ucharcodetable1=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef;/帶小數(shù)點數(shù)字編碼/* 延時函數(shù) */voidTempDelay(ucharus)while(us-);voiddelay(uintcount)/延時子函數(shù)uint i;while(count)i=200;while(i>0)i-;count-;/* 串口初始化,波特率9600 ,方式 1 */voidinit_com()TMOD=0x20;/設(shè)置定時器1 為模式 2TH1=0xfd;/裝初值設(shè)定波特率TL1=0xfd;TR1=1;/啟動定時器SM0
3、=0;/串口通信模式設(shè)置SM1=1;/ REN=1;/串口允許接收數(shù)據(jù)PCON=0;/波特率不倍頻/ SMOD=0;/波特率不倍頻/ EA=1;/開總中斷/ES=1;/ 開串行中斷/* 數(shù)碼管的顯示*/voiddisplay(uinttemp)ucharbai,shi,ge;bai=temp/100;shi=temp%100/10;ge=temp%100%10;dula=0;P0=tablebai; /顯示百位dula=1;/從 0到 1,有個上升沿,解除鎖存,顯示相應(yīng)段dula=0;/從 1到 0 再次鎖存wela=0;P0=0xfe;wela=1;wela=0;delay(1);/ 延時約
4、 2msP0=table1shi; /顯示十位dula=1;dula=0;P0=0xfd;wela=1;wela=0;delay(1);P0=tablege; /顯示個位dula=1;dula=0;P0=0xfb;wela=1;wela=0;delay(1);/*時序:初始化時序、讀時序、寫時序。所有時序都是將主機(單片機 ) 作為主設(shè)備,單總線器件作為從設(shè)備。而每一次命令和數(shù)據(jù)的傳輸都是從主機主動啟動寫時序開始,如果要求單總線器件回送數(shù)據(jù),在進行寫命令后,主機需啟動讀時序完成數(shù)據(jù)接收。數(shù)據(jù)和命令的傳輸都是低位在先。初始化時序:復(fù)位脈沖存在脈沖讀;1 或 0時序?qū)懀? 或 0時序只有存在脈沖信
5、號是從18b20 (從機)發(fā)出的,其它信號都是由主機發(fā)出的。存在脈沖:讓主機(總線)知道從機(18b20 )已經(jīng)做好了準備。*/*-初始化:檢測總線控制器發(fā)出的復(fù)位脈沖和 ds18b20的任何通訊都要從初始化開始初始化序列包括一個由總線控制器發(fā)出的復(fù)位脈沖和跟在其后由從機發(fā)出的存在脈沖。初始化:復(fù)位脈沖+存在脈沖具體操作:總線控制器發(fā)出(TX )一個復(fù)位脈沖(一個最少保持480 s 的低電平信號),然后釋放總線,進入接收狀態(tài)(RX )。單線總線由5K 上拉電阻拉到高電平。探測到I/O 引腳上的上升沿后DS1820等待 1560s,然后發(fā)出存在脈沖(一個60240 s 的低電平信號) 。具體看
6、"倒塌18b20" 文檔里的" 單線復(fù)位脈沖時序和1-wirepresencedetect"的時序圖-*/voidds_reset(void)ds=1;_nop_();/1usds=0;TempDelay(80); /當(dāng)總線停留在低電平超過480us ,總線上所以器件都將被復(fù)位,這里/延時約530us 總線停留在低電平超過480s,總線上的所有器件都/將被復(fù)位。_nop_();ds=1;/產(chǎn)生復(fù)位脈沖后,微處理器釋放總線,讓總線處于空閑狀態(tài),原因查/18b20 中文資料TempDelay(5); /釋放總線后,以便從機18b20 通過拉低總線來指示其是否
7、在線,/ 存在檢測高電平時間:1560us , 所以延時44us ,進行1-wirepresence/detect(單線存在檢測)_nop_();_nop_();_nop_();if(ds=0)flag=1;/detect18b20successelseflag=0;/detect18b20failTempDelay(20);/存在檢測低電平時間:60240us ,所以延時約140us_nop_();_nop_();ds=1;/ 再次拉高總線,讓總線處于空閑狀態(tài)/*/*-讀/寫時間隙 :DS1820的數(shù)據(jù)讀寫是通過時間隙處理位和命令字來確認信息交換。-*/bit ds_read_bit(voi
8、d)/讀一位bitdat;ds=0;/單片機(微處理器)將總線拉低_nop_();/ 讀時隙起始于微處理器將總線拉低至少1usds=1;/ 拉低總線后接著釋放總線,讓從機18b20 能夠接管總線,輸出有效數(shù)據(jù)_nop_();_nop_();/小延時一下,讀取18b20 上的數(shù)據(jù),因為從 ds18b20 上輸出的數(shù)據(jù)/在讀 "時間隙 "下降沿出現(xiàn)15us 內(nèi)有效dat=ds;/主機讀從機18b20 輸出的數(shù)據(jù),這些數(shù)據(jù)在讀時隙的下降沿出現(xiàn)/15us 內(nèi)有效TempDelay(10);/所有讀 "時間隙 "必須 60120us ,這里 77usreturn(
9、dat);/返回有效數(shù)據(jù)uchards_read_byte(void) /讀一字節(jié)ucharvalue,i,j;value=0;/一定別忘了給初值for(i=0;i<8;i+)j=ds_read_bit();value=(j<<7)|(value>>1);/這一步的說明在一個word 文檔里面return(value);/返回一個字節(jié)的數(shù)據(jù)voidds_write_byte(uchardat) / 寫一個字節(jié)uchari;bit onebit;/ 一定不要忘了,onebit 是一位for(i=1;i<=8;i+)onebit=dat&0x01;dat
10、=dat>>1;if(onebit)/寫1ds=0;_nop_();_nop_();/看時序圖,至少延時1us ,才產(chǎn)生寫 "時間隙 "ds=1;/ 寫時間隙開始后的15s內(nèi)允許數(shù)據(jù)線拉到高電平TempDelay(5); /所有寫時間隙必須最少持續(xù)60uselse/寫0ds=0;TempDelay(8);/主機要生成一個寫0 時間隙,必須把數(shù)據(jù)線拉到低電平并保持至少60s,這里64usds=1;_nop_();_nop_();/*主機(單片機)控制DS18B20完成溫度轉(zhuǎn)換要經(jīng)過三個步驟:每一次讀寫之前都要18B20 進行復(fù)位操作,復(fù)位成功后發(fā)送一條 ROM 指
11、令,最后發(fā)送RAM 指令,這樣才能對DS18b20 進行預(yù)定的操作。復(fù)位要求主CPU 將數(shù)據(jù)線下拉500us ,然后釋放,當(dāng)ds18B20受到信號后等待1660us ,后發(fā)出 60240us的存在低脈沖,主 CPU 收到此信號表示復(fù)位成功*/*-進行溫度轉(zhuǎn)換:先初始化然后跳過 ROM :跳過 64 位 ROM 地址,直接向ds18B20 發(fā)溫度轉(zhuǎn)換命令,適合單片工作發(fā)送溫度轉(zhuǎn)換命令-*/voidtem_change()ds_reset();delay(1);/約 2msds_write_byte(0xcc);ds_write_byte(0x44);/*-獲得溫度:-*/uint get_temperature()floatwendu;uchara,b;ds_reset();delay(1);/ds_write_byte(0xcc);ds_write_byte(0xbe);a=ds_read_byte();b=ds_read_byte();temp=b;temp<<=8;temp=temp|a;約 2mswendu=temp*0.0625;/溫度讀取的解釋我記錄在" 倒塌18B20" 里面temp=wendu*10+0.5;returntemp;/*-讀 ROM-*/*voidds_read_rom()uchara,b;ds_re
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版苗圃苗木線上線下銷售渠道合作協(xié)議4篇
- 2025年度個人房產(chǎn)抵押貸款還款協(xié)議書模板4篇
- 2025年度航空航天模具研發(fā)制造合同4篇
- 二零二五版豪華車型購車指標使用權(quán)租賃協(xié)議3篇
- 2025年物業(yè)廣告位租賃與環(huán)保理念推廣合作協(xié)議3篇
- 2025版企業(yè)內(nèi)部員工技能培訓(xùn)學(xué)員協(xié)議3篇
- 2025年環(huán)保打印機購銷合同綠色環(huán)保版4篇
- 個人招標工作心得:2024年實踐與思考3篇
- 二零二五年度航空器租賃合同租賃期限與維護保養(yǎng)責(zé)任4篇
- 2025年農(nóng)業(yè)大棚租賃與智能灌溉系統(tǒng)安裝合同4篇
- 開展課外讀物負面清單管理的具體實施舉措方案
- 2025年云南中煙工業(yè)限責(zé)任公司招聘420人高頻重點提升(共500題)附帶答案詳解
- 2025-2030年中國洗衣液市場未來發(fā)展趨勢及前景調(diào)研分析報告
- 2024解析:第三章物態(tài)變化-基礎(chǔ)練(解析版)
- 2023年江蘇省南京市中考化學(xué)真題
- 供電副所長述職報告
- 校園欺凌問題成因及對策分析研究論文
- 技術(shù)支持資料投標書
- 老年人意外事件與與預(yù)防
- 預(yù)防艾滋病、梅毒和乙肝母嬰傳播轉(zhuǎn)介服務(wù)制度
- 《高速鐵路客運安全與應(yīng)急處理》課程標準
評論
0/150
提交評論