版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、單片機(jī)中使用DS18B20溫度傳感器C語(yǔ)言程序(參考1)未*DS18B20測(cè)溫程序硬件:AT89S52(1)單線(xiàn) ds18b20接 P2.2(2)七段數(shù)碼管接P0 口使用外部電源給 ds18b20供電,沒(méi)有使用寄生電源軟件:Kei uVision 3*/#i nclude reg52.h#i nclude in tri ns.h#defi ne uchar un sig ned char#defi ne uint un sig ned intsbit ds=P2A2;sbit dula=P2A6;sbit wela=P2A7;uchar flag ;uint temp;/參數(shù)temp 一定要聲
2、明為 int型uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/ 不帶小數(shù)點(diǎn)數(shù)字編碼uchar code table1=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef;/帶小數(shù)點(diǎn)數(shù)字編碼/*延時(shí)函數(shù)*/void TempDelay (uchar us)while(us-);void delay(ui nt co un t) /延時(shí)子函數(shù)uint i;while(co unt)i=200;while(
3、i0)i-;coun t-;/*串口初始化,波特率9600,方式1 */void ini t_com()TMOD=0x20; /設(shè)置定時(shí)器1為模式2TH仁0xfd;/裝初值設(shè)定波特率TL 1=0xfd;TR 1=1;/啟動(dòng)定時(shí)器SMO=O;/串口通信模式設(shè)置SM 1=1;/ REN=1;/串口允許接收數(shù)據(jù)PCON=0;/波特率不倍頻/ SMOD=0;/波特率不倍頻/ EA=1;/開(kāi)總中斷/ES=1;/開(kāi)串行中斷/*數(shù)碼管的顯示 */void display( uint temp)uchar bai,shi,ge;bai=temp/100;shi=temp%100/10;ge=temp%100%
4、10;dula=0;PO=tablebai; / 顯示百位dula=1;/從0到1,有個(gè)上升沿,解除鎖存,顯示相應(yīng)段dula=0;/從1至U 0再次鎖存wela=O;PO=Oxfe;wela=1;wela=0;delay(1); / 延時(shí)約 2msP0=table1shi; / 顯示十位dula=1;dula=0;P0=0xfd;wela=1;wela=0;delay(1);PO=tablege; / 顯示個(gè)位dula=1;dula=0;P0=0xfb;wela=1;wela=0;delay(1);囁*時(shí)序:初始化時(shí)序、讀時(shí)序、寫(xiě)時(shí)序。所有時(shí)序都是將主機(jī)(單片機(jī))作為主設(shè)備,單總 線(xiàn)器件作為從
5、設(shè)備。而每一次命令和數(shù)據(jù)的傳輸 都是從主機(jī)主動(dòng)啟動(dòng)寫(xiě)時(shí)序開(kāi)始,如果要求單總 線(xiàn)器件回送數(shù)據(jù),在進(jìn)行寫(xiě)命令后,主機(jī)需啟動(dòng) 讀時(shí)序完成數(shù)據(jù)接收。數(shù)據(jù)和命令的傳輸都是低 位在先。初始化時(shí)序:復(fù)位脈沖 存在脈沖讀;1或0時(shí)序?qū)懀?或0時(shí)序只有存在脈沖信號(hào)是從 18b20 (從機(jī))發(fā)出的,其 它信號(hào)都是由主機(jī)發(fā)出的。*/存在脈沖:讓主機(jī)(總線(xiàn))知道從機(jī)(18b20)已 經(jīng)做好了準(zhǔn)備。*/*初始化:檢測(cè)總線(xiàn)控制器發(fā)出的復(fù)位脈沖和ds18b20的任何通訊都要從初始化開(kāi)始初始化序列包括一個(gè)由總線(xiàn)控制器發(fā)出的復(fù)位脈沖 和跟在其后由從機(jī)發(fā)出的存在脈沖。初始化:復(fù)位脈沖+存在脈沖具體操作:總線(xiàn)控制器發(fā)出(TX) 一
6、個(gè)復(fù)位脈沖(一個(gè)最少保持 480卩s的低電平信號(hào)),然后釋放總線(xiàn), 進(jìn)入接收狀態(tài)(RX)。單線(xiàn)總線(xiàn)由5K上拉電阻拉到高電平。探測(cè)到I/O弓I腳上的上升沿DS1820等待1560卩s然后發(fā)出存在脈沖 (一個(gè)60240卩的低電平信號(hào))。具體看18b20單線(xiàn)復(fù)位脈沖時(shí)序和1-wire presenee detect的時(shí)序圖1-WIRE PRESENCE DETECT*/void ds_reset(void)ds=1;_no p_();/1usds=0;TempDelay(80); /當(dāng)總線(xiàn)停留在低電平超過(guò)480us,總線(xiàn)上所以器件都將被復(fù)位,這里延II時(shí)約530us總線(xiàn)停留在低電平超過(guò) 480卩s,
7、總線(xiàn)上的所有器件都將被復(fù)位。_n op_();ds=1;/產(chǎn)生復(fù)位脈沖后,微處理器釋放總線(xiàn),讓總線(xiàn)處于空閑狀態(tài) ,原因查18b20中文資料TempDelay(5); /釋放總線(xiàn)后,以便從機(jī)18b20通過(guò)拉低總線(xiàn)來(lái)指示其是否在線(xiàn),/存在檢測(cè)高電平時(shí)間:1560us , 所以延時(shí)44us,進(jìn)行1-wire preseneedetect (單線(xiàn)存在檢測(cè))_n op_();_n op_();_n op_();if(ds=0)flag=1;/detect 18b20 successelseflag=0;/detect 18b20 failTempDelay(20);/存在檢測(cè)低電平時(shí)間:60240us,
8、所以延時(shí)約140us_n op_();_n op_();ds=1;/再次拉高總線(xiàn),讓總線(xiàn)處于空閑狀態(tài)/*/原理解釋?zhuān)嚎刂破鲗?duì)18B20操作流程:1 ,復(fù)位:首先我們必須對(duì) DS18B20芯片進(jìn)行復(fù)位,復(fù)位就是由控制器(單片給DS18B20單總線(xiàn)至少 480uS的低電平信號(hào)。當(dāng)18B20接到此復(fù)位信號(hào)后則會(huì)在1560uS后回發(fā)一個(gè)芯片的存在脈沖2 ,存在脈沖:在復(fù)位電平結(jié)束之后,控制器應(yīng)該將數(shù)據(jù)單總線(xiàn)拉高,以便于在1560uS后接收存在脈沖,存在脈沖為一個(gè) 60240uS的低電平信號(hào)。至此,通信雙方 已經(jīng)達(dá)成了基本的協(xié)議,接下來(lái)將會(huì)是控制器與 18B20間的數(shù)據(jù)通信 。/*讀/寫(xiě)時(shí)間隙:DS18
9、20的數(shù)據(jù)讀寫(xiě)是通過(guò)時(shí)間隙處理位和命令字來(lái)確認(rèn)信息交換。*/bit ds_read_bit(void) / 讀一位bit dat;ds=0;/單片機(jī)(微處理器)將總線(xiàn)拉低_nop_();II讀時(shí)隙起始于微處理器將總線(xiàn)拉低至少1usds=1;II拉低總線(xiàn)后接著釋放總線(xiàn),讓從機(jī)18b20能夠接管總線(xiàn),輸出有效數(shù)據(jù)_n op_();_nop_();小延時(shí)一下,讀取18b20上的數(shù)據(jù),因?yàn)閺膁s18b20上輸出的數(shù)據(jù)II在讀”時(shí)間隙”下降沿出現(xiàn)15us內(nèi)有效dat=ds;II主機(jī)讀從機(jī)18b20輸出的數(shù)據(jù),這些數(shù)據(jù)在讀時(shí)隙的下降沿出現(xiàn)II15us內(nèi)有效TempDelay(IO); II 所有讀時(shí)間隙必
10、須 60120us,這里 77usreturn(dat);II返回有效數(shù)據(jù)原理:圖8讀時(shí)間隙時(shí)控制時(shí)的采樣時(shí)間應(yīng)該更加的精確才行,讀時(shí)間隙時(shí)也是必須先由主機(jī)產(chǎn)生至少1uS的低電平,表示讀時(shí)間的起始。隨后在總線(xiàn)被釋放后的15uS中DS18B20會(huì)發(fā)送內(nèi)部數(shù)據(jù)位,這時(shí)控制如果發(fā)現(xiàn)總線(xiàn)為高電平表示讀出“1 ”,如果總線(xiàn)為低電平則表示讀出數(shù)據(jù)“0 ”。每一位的讀取之前都由控制器加一個(gè)起始信號(hào)。注意:如圖8所示,必須在讀間隙開(kāi)始的15uS內(nèi)讀取數(shù)據(jù)位才可以保證通信的正確。在通信時(shí)是以 8位“0 ”或“ 1 ”為一個(gè)字節(jié),字節(jié)的讀或?qū)懯菑母呶婚_(kāi)始的,即A7到A0.字節(jié)的讀寫(xiě)順序也是如圖2自上而下的。uch
11、ar ds_read_byte(void ) /讀一字節(jié)uchar value,i,j;value=0;II 一定別忘了給初值for(i=0;i8;i+)j=ds_read_bit();value=(j1); II 這一步的說(shuō)明在一個(gè) word 文檔里面?return(value);II返回一個(gè)字節(jié)的數(shù)據(jù)void ds_write_byte(uchar dat) /寫(xiě)一個(gè)字節(jié)uchar i;bit o nebit;/ 一定不要忘了 , on ebit 是一位for(i=1;i1; /由低到高傳送數(shù)據(jù)if(onebit)/ 寫(xiě) 1ds=0;_n op_();_nop_();/看時(shí)序圖,至少延時(shí)1
12、us ,才產(chǎn)生寫(xiě)時(shí)間隙”ds=1;/寫(xiě)時(shí)間隙開(kāi)始后的15卩內(nèi)允許數(shù)據(jù)線(xiàn)拉到高電平TempDelay(5); /所有寫(xiě)時(shí)間隙必須最少持續(xù)60uselse/ 寫(xiě) 0ds=0;TempDelay(8); /主機(jī)要生成一個(gè)寫(xiě)0時(shí)間隙,必須把數(shù)據(jù)線(xiàn)拉到低電平并保持至少60卩s,這里64usds=1;_n op_();_n op_();/*STiRTOf SLOT*START OF SLOTMASTER WRITE ,J0 SLOTVfj 1-WJRE BUSGNDMASTER WRITE T,SLOTKSamplesTV?MAKS1BB20 Samples1hlTYPMAX1 f 1530)aBMAST
13、ER READ SLOTMASTER READ T SLOTLINE TYPE LEGENDBus rrastar puJIing 畑* Resstcr pj1 up主機(jī)(單片機(jī))控制18B20完成溫度轉(zhuǎn)換要經(jīng)過(guò)三個(gè)步驟每一次讀寫(xiě)之前都要 18B20進(jìn)行復(fù)位操作,復(fù)位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對(duì)DS18b20進(jìn)行預(yù)定的操作。復(fù)位要求主CPU將數(shù)據(jù)線(xiàn)下拉500us,然后釋放,當(dāng)ds18B20受到信號(hào)后等待1660us ,后發(fā)出60240us的存在低脈沖,主CPU收到此信號(hào)表示復(fù)位成功*/*進(jìn)行溫度轉(zhuǎn)換:先初始化然后跳過(guò)ROM :跳過(guò)64位ROM地址,直接向ds18B20發(fā)溫度轉(zhuǎn)換命令,適合單片工作 發(fā)送溫度轉(zhuǎn)換命令*/void tem_cha nge()ds_reset();delay(1);/ 約 2msds_write_byte(Oxcc); 單線(xiàn)情況下,跳躍ROM指令ds_write_byte(0x44); 溫度轉(zhuǎn)換指令/*獲得溫度:*/uint ge
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 傳統(tǒng)工業(yè)區(qū)課件人教必修
- 2024琥珀教學(xué)課件:從琥珀中窺見(jiàn)古生態(tài)
- 中級(jí)會(huì)計(jì)師考試《會(huì)計(jì)實(shí)務(wù)》模擬試題三
- 中級(jí)育嬰員考試試題含答案
- 肺癌中醫(yī)護(hù)理方案圖文課件
- 高氯廢水化學(xué)需氧量的測(cè)定
- 2024年Scratch教案:助力編程教育普及
- 2022年4月自考00143經(jīng)濟(jì)思想史真題試卷
- 2024春七年級(jí)英語(yǔ)下冊(cè)Module11BodylanguageUnit3Languageinuse同步練習(xí)新版外研版
- 2024-2025學(xué)年新教材高中化學(xué)第3章物質(zhì)的性質(zhì)與轉(zhuǎn)化第2節(jié)第1課時(shí)自然界中的硫作業(yè)含解析魯科版必修1
- 人教部編版語(yǔ)文八年級(jí)上冊(cè)第六單元 第26課 詩(shī)詞五首(教材解讀)
- 小學(xué)生地球科普小知識(shí)
- 湖北省武漢市漢陽(yáng)區(qū)2023-2024學(xué)年九年級(jí)上學(xué)期期中考試英語(yǔ)試卷
- 智慧教育發(fā)展趨勢(shì)智慧課堂
- GB/T 43635-2024法庭科學(xué)DNA實(shí)驗(yàn)室檢驗(yàn)規(guī)范
- 勞動(dòng)仲裁:如何處理仲裁證據(jù)
- 大酒店勞務(wù)派遣服務(wù)專(zhuān)項(xiàng)方案
- 醫(yī)院培訓(xùn)課件:《病室環(huán)境管理》
- 中國(guó)感染性休克指南
- 2021年初中部漢語(yǔ)聽(tīng)寫(xiě)大賽題庫(kù)
- 大數(shù)據(jù)治理與服務(wù)管理解決數(shù)據(jù)孤島問(wèn)題的關(guān)鍵措施
評(píng)論
0/150
提交評(píng)論