歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > DOC文檔下載  

單片機中使用DSB溫度傳感器C語言程序.doc

  • 資源ID:5377243       資源大小:101.50KB        全文頁數(shù):8頁
  • 資源格式: DOC        下載積分:15積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要15積分
郵箱/手機:
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機號,方便查詢和重復下載(系統(tǒng)自動生成)
支付方式: 支付寶    微信支付   
驗證碼:   換一換

 
賬號:
密碼:
驗證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認打開,此種情況可以點擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標題沒有明確說明有答案則都視為沒有答案,請知曉。

單片機中使用DSB溫度傳感器C語言程序.doc

單片機中使用DS18B20溫度傳感器C語言程序(參考1) /* DS18B20 測溫程序 硬件:AT89S52 (1)單線ds18b20接 P2.2 (2)七段數(shù)碼管接P0口 (3)使用外部電源給ds18b20供電,沒有使用寄生電源 軟件:Kei uVision 3 */#include "reg52.h"#include "intrins.h"#define uchar unsigned char#define uint unsigned intsbit ds=P22;sbit dula=P26;sbit wela=P27;uchar flag ;uint temp; /參數(shù)temp一定要聲明為 int 型 uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71; /不帶小數(shù)點數(shù)字編碼uchar code table1=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef; /帶小數(shù)點數(shù)字編碼/*延時函數(shù)*/void TempDelay (uchar us) while(us-);void delay(uint count) /延時子函數(shù)uint i;while(count)i=200;while(i>0)i-;count-;/*串口初始化,波特率9600,方式1 */void init_com() TMOD=0x20; /設置定時器1為模式2 TH1=0xfd; /裝初值設定波特率 TL1=0xfd; TR1=1; /啟動定時器 SM0=0; /串口通信模式設置 SM1=1;/ REN=1; /串口允許接收數(shù)據(jù) PCON=0; /波特率不倍頻/ SMOD=0; /波特率不倍頻/ EA=1; /開總中斷/ES=1; /開串行中斷/*數(shù)碼管的顯示 */void display(uint temp) uchar bai,shi,ge; bai=temp/100; shi=temp%100/10; ge=temp%100%10;dula=0; P0=tablebai; /顯示百位dula=1; /從0到1,有個上升沿,解除鎖存,顯示相應段 dula=0; /從1到0再次鎖存 wela=0; P0=0xfe;wela=1;wela=0;delay(1); /延時約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ù)據(jù)的傳輸都是從主機主動啟動寫時序開始,如果要求單總線器件回送數(shù)據(jù),在進行寫命令后,主機需啟動讀時序完成數(shù)據(jù)接收。數(shù)據(jù)和命令的傳輸都是低位在先。 初始化時序:復位脈沖 存在脈沖 讀;1 或 0時序 寫;1 或 0時序只有存在脈沖信號是從18b20(從機)發(fā)出的,其它信號都是由主機發(fā)出的。存在脈沖:讓主機(總線)知道從機(18b20)已經(jīng)做好了準備。*/*-初始化:檢測總線控制器發(fā)出的復位脈沖和ds18b20的任何通訊都要從初始化開始初始化序列包括一個由總線控制器發(fā)出的復位脈沖和跟在其后由從機發(fā)出的存在脈沖。初始化:復位脈沖+存在脈沖具體操作:總線控制器發(fā)出(TX)一個復位脈沖 (一個最少保持480s 的低電平信號),然后釋放總線,進入接收狀態(tài)(RX)。單線總線由5K 上拉電阻拉到高電平。探測到I/O 引腳上的上升沿后DS1820 等待1560s,然后發(fā)出存在脈沖(一個60240s 的低電平信號)。具體看18b20 單線復位脈沖時序和1-wire presence detect "的時序圖-*/void ds_reset(void) ds=1; _nop_(); /1us ds=0; TempDelay(80); /當總線停留在低電平超過480us,總線上所以器件都將被復位,這里延/時約530us總線停留在低電平超過480s,總線上的所有器件都將被復位。 _nop_(); ds=1; /產生復位脈沖后,微處理器釋放總線,讓總線處于空閑狀態(tài),原因查18b20中文資料TempDelay(5); /釋放總線后,以便從機18b20通過拉低總線來指示其是否在線, /存在檢測高電平時間:1560us, 所以延時44us,進行1-wire presence detect(單線存在檢測) _nop_(); _nop_(); _nop_(); if(ds=0) flag=1; /detect 18b20 success else flag=0; /detect 18b20 failTempDelay(20); /存在檢測低電平時間:60240us,所以延時約140us _nop_(); _nop_(); ds=1; /再次拉高總線,讓總線處于空閑狀態(tài)/*/原理解釋:控制器對 18B20 操作流程:1 , 復位 : 首先我們必須對 DS18B20 芯片進行復位 , 復位就是由控制器 ( 單片機 )給 DS18B20 單總線至少 480uS 的低電平信號 。 當 18B20 接到此復位信號后則會 在1560uS 后回發(fā)一個芯片的存在脈沖。2 , 存在脈沖 : 在復位電平結束之后 , 控制器應該將數(shù)據(jù)單總線拉高 , 以便于 在1560uS 后接收存在脈沖,存在脈沖為一個 60240uS 的低電平信號。至此,通信雙方已經(jīng)達成了基本的協(xié)議,接下來將會是控制器與 18B20 間的數(shù)據(jù)通信 。 /*-讀/寫時間隙:DS1820 的數(shù)據(jù)讀寫是通過時間隙處理位和命令字來確認信息交換。-*/bit ds_read_bit(void) /讀一位 bit dat; ds=0; /單片機(微處理器)將總線拉低_nop_(); /讀時隙起始于微處理器將總線拉低至少1us ds=1; /拉低總線后接著釋放總線,讓從機18b20能夠接管總線,輸出有效數(shù)據(jù) _nop_(); _nop_(); /小延時一下,讀取18b20上的數(shù)據(jù) ,因為從ds18b20上輸出的數(shù)據(jù)/在讀"時間隙"下降沿出現(xiàn)15us內有效 dat=ds; /主機讀從機18b20輸出的數(shù)據(jù),這些數(shù)據(jù)在讀時隙的下降沿出現(xiàn)/15us內有效 TempDelay(10); /所有讀"時間隙"必須60120us,這里77us return(dat); /返回有效數(shù)據(jù)原理:圖 8讀時間隙時控制時的采樣時間應該更加的精確才行 , 讀時間隙時也是必須先由主機產生至少 1uS 的低電平,表示讀時間的起始。隨后在總線被釋放后的 15uS 中DS18B20 會發(fā)送內部數(shù)據(jù)位,這時控制如果發(fā)現(xiàn)總線為高電平表示讀出 “ 1 ” ,如果總線為低電平則表示讀出數(shù)據(jù) “ 0 ” 。每一位的讀取之前都由控制器加一個起始信號。注意:如圖 8 所示,必須在讀間隙開始的 15uS 內讀取數(shù)據(jù)位才可以保證通信的正確。在通信時是以 8 位 “ 0 ” 或 “ 1 ” 為一個字節(jié) , 字節(jié)的讀或寫是從高位開始的 , 即A7 到 A0. 字節(jié)的讀寫順序也是如圖 2 自上而下的。uchar ds_read_byte(void ) /讀一字節(jié)uchar value,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ù)void ds_write_byte(uchar dat) /寫一個字節(jié)uchar i;bit onebit; /一定不要忘了,onebit是一位for(i=1;i<=8;i+) onebit=dat&0x01; dat=dat>>1; /由低到高傳送數(shù)據(jù)if(onebit) /寫 1ds=0;_nop_(); _nop_(); /看時序圖,至少延時1us,才產生寫"時間隙" ds=1; /寫時間隙開始后的15s內允許數(shù)據(jù)線拉到高電平 TempDelay(5); /所有寫時間隙必須最少持續(xù)60uselse /寫 0ds=0; TempDelay(8); /主機要生成一個寫0 時間隙,必須把數(shù)據(jù)線拉到低電平并保持至少60s,這里64usds=1;_nop_(); _nop_();/* 主機(單片機)控制18B20完成溫度轉換要經(jīng)過三個步驟:每一次讀寫之前都要18B20進行復位操作,復位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對DS18b20進行預定的操作。復位要求主CPU將數(shù)據(jù)線下拉500us,然后釋放,當ds18B20受到信號后等待1660us,后發(fā)出60240us的存在低脈沖,主CPU收到此信號表示復位成功*/*-進行溫度轉換:先初始化然后跳過ROM:跳過64位ROM地址,直接向ds18B20發(fā)溫度轉換命令,適合單片工作發(fā)送溫度轉換命令-*/void tem_change()ds_reset(); delay(1); /約2msds_write_byte(0xcc);/單線情況下,跳躍ROM指令ds_write_byte(0x44);/溫度轉換指令/*-獲得溫度:-*/uint get_temperature()float wendu;uchar a,b;ds_reset();delay(1); /約2msds_write_byte(0xcc);ds_write_byte(0xbe);/發(fā)送讀溫度命令a=ds_read_byte();/讀出溫度低8位b=ds_read_byte();/讀書溫度高8位temp=b;temp<<=8;temp=temp|a;wendu=temp*0.0625; /得到真實十進制溫度值,因為DS18B20 /可以精確到0.0625度,所以讀回數(shù)據(jù)的最低位代表的是 /0.0625度temp=wendu*10+0.5; /放大十倍,這樣做的目的將小數(shù)點后第一位 /也轉換為可顯示數(shù)字,同時進行一個四舍五入操作。return temp;/*-讀ROM -*/*void ds_read_rom() /這里沒有用到 uchar a,b; ds_reset(); delay(30); ds_write_byte(0x33); a=ds_read_byte(); b=ds_read_byte();*/void main() uint a; init_com(); while(1) tem_change(); /12位轉換時間最大為750msfor(a=10;a>0;a-)display( get_temperature(); 此文檔可自行編輯修改,如有侵權請告知刪除,感謝您的支持,我們會努力把內容做得更好最新可編輯word文檔

注意事項

本文(單片機中使用DSB溫度傳感器C語言程序.doc)為本站會員(鐘***)主動上傳,裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對上載內容本身不做任何修改或編輯。 若此文所含內容侵犯了您的版權或隱私,請立即通知裝配圖網(wǎng)(點擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因為網(wǎng)速或其他原因下載失敗請重新下載,重復下載不扣分。




關于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對上載內容本身不做任何修改或編輯。若文檔所含內容侵犯了您的版權或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!