版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
基于RS485和VB的遠程溫度采集系統(tǒng)信息工程學院生醫(yī)0701摘要:本系統(tǒng)以RS485總線和VB上位機控制臺為核心,構(gòu)成了一個可遠達1200M范圍內(nèi)的遠程溫度采集網(wǎng)絡。系統(tǒng)通過雙絞線作為信號傳輸媒介,引入RS485總線信號傳輸?shù)囊恍┨幚泶胧?,具有良好的信息傳輸準確性和系統(tǒng)抗干擾性。另外,本系統(tǒng)可以在RS485總線上掛接最多由51單片機和DS18B20構(gòu)成的32個溫度采集節(jié)點,并且系統(tǒng)密切與RS485總線的“輪詢〞思想和VB上位機控制臺相結(jié)合,因此可以說是構(gòu)成了真正意義上的遠程智能溫度采集網(wǎng)絡!該系統(tǒng)可以廣泛應用在需要對溫度進行實時和全天候觀察的各種場合,具有較高的實際應用價值!關鍵詞:RS485總線輪詢VB上位機51單片機DS18B20正文RS485總線接口做為多點、差分數(shù)據(jù)傳輸?shù)臉藴?,現(xiàn)已成為業(yè)界應用較為廣泛的標準通信接口之一。RS485標準只對接口的電氣特性做出了規(guī)定,而不涉及接插件、電纜或協(xié)議,因此,用戶可在此根底上建立自己的高層通信協(xié)議。在工業(yè)自動控制中,計算機通過串口與單片機系統(tǒng)之間進行通信的應用越來越廣泛。一般情況下,控制系統(tǒng)需要一個高級語言開發(fā)的相當于控制臺的用戶界面,用來進行參數(shù)設置,發(fā)送指令和系統(tǒng)檢測,VB在這一領域用著很強的優(yōu)勢。從控制臺發(fā)出的指令經(jīng)過計算機串口傳送給單片機系統(tǒng),此時VB攜帶的通信控件MSComm起到了橋梁作用,給編程者帶來了極大的方便。DALLAS公司生產(chǎn)的DS18B20可組網(wǎng)數(shù)字溫度傳感器具有“一線總線〞接口、測溫范圍-55℃~+125℃、固有測溫分辨率0.5℃、體積小、耐磨耐碰等特點,非常適合與傳統(tǒng)的51單片機構(gòu)成溫度采集節(jié)點。將RS485總線及“輪詢思想〞、VB上位機控制臺、51單片機和DS18B20構(gòu)成的溫度采集節(jié)點有機的結(jié)合起來就可以構(gòu)成一個遠程的智能溫度采集系統(tǒng)。RS485總線1.1RS485總線介紹電子工業(yè)協(xié)會〔EIA〕于1983年制訂并發(fā)布RS-485標準,并經(jīng)通訊工業(yè)協(xié)會〔TIA〕修訂后命名為TIA/EIA-485-A,習慣地稱之為RS-485標準。RS-485標準是為彌補RS-232通信距離短、速率低等缺點而產(chǎn)生的。RS-485標準只規(guī)定了平衡發(fā)送器和接收器的電特性,而沒有規(guī)定接插件、傳輸電纜和應用層通信協(xié)議。1.2RS485總線獨特之處RS-485標準與RS-232不一樣,數(shù)據(jù)信號采用差分傳輸方式〔DifferentialDriverMode〕,也稱作平衡傳輸,它使用一對雙絞線,將其中一線定義為A,另一線定義為B,如圖1-1所示。圖1-1通常情況下,發(fā)送發(fā)送器A、B之間的正電平在+2~+6V,是一個邏輯狀態(tài);負電平在-2~-6V,是另一個邏輯狀態(tài)。另有一個信號地C。在RS-485器件中,一般還有一個“使能〞控制信號?!笆鼓塄曅盘栍糜诳刂瓢l(fā)送器與傳輸線的切斷與連接,當“使能〞端起作用時,發(fā)送發(fā)送器處于高阻狀態(tài),稱作“第三態(tài)〞,它是有別于邏輯“1〞與“0〞的第三種狀態(tài)。 對于接收發(fā)送器,也作出與發(fā)送發(fā)送器相對的規(guī)定,收、發(fā)端通過平衡雙絞線將A-A與B-B對應相連。當在接收端A-B之間有大于+200mV的電平時,輸出為正邏輯電平;小于-200mV時,輸出為負邏輯電平。在接收發(fā)送器的接收平衡線上,電平范圍通常在200mV至6V之間。參見圖1-2所示。圖1-2定義邏輯1〔正邏輯電平〕為B>A的狀態(tài),邏輯0〔負邏輯電平〕為A>B的狀態(tài),A、B之間的壓差不小于200mV。TIA/EIA-485串行通訊標準的性能如表格1-2所示:規(guī)格TIA/EIA-485傳輸模式平衡電纜長度@90Kbps4000ft〔1200m〕電纜長度@10Mbps50ft〔15m〕數(shù)據(jù)傳輸速度10Mbps昀大差動輸出±6V昀小差動輸出±1.5V接收器敏感度±0.2V發(fā)送器負載〔歐姆〕60Ω昀大發(fā)送器數(shù)量32單位負載昀大接收器數(shù)量32單位負載 RS-485標準的最大傳輸距離約為1219米,最大傳輸速率為10Mbps。通常,RS-485網(wǎng)絡采用平衡雙絞線作為傳輸媒體。平衡雙絞線的長度與傳輸速率成反比,只有在20kbps速率以下,才可能使用規(guī)定昀長的電纜長度。只有在很短的距離下才能獲得昀高速率傳輸。一般來說,15米長雙絞線昀大傳輸速率僅為1Mbps。RS-485網(wǎng)絡采用直線拓樸結(jié)構(gòu),需要安裝2個終端匹配電阻,其阻值要求等于傳輸電纜的特性阻抗〔一般取值為120Ω〕。在矩距離、或低波特率波數(shù)據(jù)傳輸時可不需終端匹配。RS485轉(zhuǎn)換器及RS-485網(wǎng)絡直線拓撲結(jié)構(gòu)1.3.1RS485轉(zhuǎn)換器外形圖1.3.2RS485轉(zhuǎn)換器內(nèi)部電路圖1.3.3RS-485網(wǎng)絡直線拓撲結(jié)構(gòu)下位機RS485通信接口電路較為理想的下位機RS485通信接口電路本電路采用MAX485作為RS485總線的驅(qū)動芯片,如圖1-3所示,將/RE和DE短接,由MCS-51的P1^0端口經(jīng)反相器控制半雙工通信時接收和發(fā)送的狀態(tài)切換。三極管Q1及電阻R1、R2構(gòu)成反向電路;R3、R4為總線空閑時的上拉電阻,抗隨機干擾作用;R7為阻抗匹配電阻,以減小信號反射;R5、R6及四個快恢復穩(wěn)壓管D1~D4均為保護和抗干擾作用。圖1-3實驗室用下位機RS485通信接口電路在環(huán)境不是十分惡劣的現(xiàn)場中,可以采用圖1-4中的RS485通信接口電路,圖1-4實際上就是圖1-3的精簡版。圖1-4RS485總線軟件設計8051串行口的控制存放器SCON是一個特殊功能存放器,用以設定串行口的工作方式、接收/發(fā)送控制以及設置狀態(tài)標志:M0和SM1為工作方式選擇位,可選擇四種工作方式:SM2,多機通信控制位,主要用于方式2和方式3。當接收機的SM2=1時可以利用收到的RB8來控制是否激活RI〔RB8=0時不激活RI,收到的信息丟棄;RB8=1時收到的數(shù)據(jù)進入SBUF,并激活RI,進而在中斷效勞中將數(shù)據(jù)從SBUF讀走〕。當SM2=0時,不管收到的RB8為0和1,均可以使收到的數(shù)據(jù)進入SBUF,并激活RI〔即此時RB8不具有控制RI激活的功能〕。通過控制SM2,可以實現(xiàn)多機通信。TB8/RB8在方式2或方式3中,是發(fā)送數(shù)據(jù)的第九位,在多機通信中,作為地址幀/數(shù)據(jù)幀的標志位。RS485總線的程序?qū)崿F(xiàn)流程所有從機的SM2位置1,處于接收地址幀狀態(tài)。主機發(fā)送一地址幀,其中8位是地址,第9位為地址/數(shù)據(jù)的區(qū)分標志,該位置1表示該幀為地址幀。所有從機收到地址幀后,都將接收的地址與本機的地址比擬。對于地址相符的從機,使自己的SM2位置0〔以接收主機隨后發(fā)來的數(shù)據(jù)幀〕,并把本站地址發(fā)回主機作為應答;對于地址不符的從機,仍保持SM2=1,對主機隨后發(fā)來的數(shù)據(jù)幀不予理睬。主機收到從機應答地址后,確認地址是否相符,如果地址不符,發(fā)復位信號〔數(shù)據(jù)幀中TB8=1〕;如果地址相符,那么清TB8,開始發(fā)送數(shù)據(jù).在前一步的根底上,如果從機收到的是復位命令那么回到監(jiān)聽地址狀態(tài)〔SM2=1〕。否那么開始接收數(shù)據(jù)和命令,并相應的向上位機傳送數(shù)據(jù)!從機發(fā)送數(shù)據(jù)結(jié)束后,置第9位〔TB8〕為1,再發(fā)送一幀校驗和給上位機,作為從機數(shù)據(jù)傳送結(jié)束的標志。(可以忽略)主機接收數(shù)據(jù)時先判斷數(shù)據(jù)接收標志〔RB8〕,假設RB8=1,表示數(shù)據(jù)傳送結(jié)束,并比擬此幀校驗和,假設正確那么回送正確信號00H,此信號命令該從機復位〔即重新等待地址幀〕;假設校驗和出錯,那么發(fā)送FFH,命令該從機重發(fā)數(shù)據(jù)。假設接收幀的RB8=0,那么存數(shù)據(jù)到緩沖區(qū),并準備接收下幀信息。〔可以忽略〕從機發(fā)送或接收完畢后置SM2=1,繼續(xù)地址偵聽。主機發(fā)送或接收完畢后修改MSComm的Settings屬性為〞9600,M,8,1〞,并退出本次通信。發(fā)送另一從機地址幀準備進行一次通信。RS485總線接口程序清單#include<reg51.h>#include<absacc.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintsbitRT=P2^0;//MAX485收發(fā)控制位,低--接收,高---發(fā)送ucharqian,bai,shi,ge,data_crc;uintflag; //flag為從機地址驗證正確標志位voiddelay(uintz){ uintx,y; for(x=0;x<z;x++) for(y=0;y<110;y++) ;}/***************************************************串行口中斷子程序****************************************************/voidserial(void)interrupt4using1{ RI=0; ES=0;//一進入中斷就把ES=0,這好似是比擬合理的方式---出自CNKI的優(yōu)質(zhì)PDF if(SBUF==0x04)//地址驗證 { TB8=1;//**其實從機的第九位似乎根本起不到什么作用! /***********************************************************************這里要想讓發(fā)送的數(shù)據(jù)在上位機上正常顯示的話,必須使TB8=1,但是有些情況那么必須使TB8=0,以后我們可以兩種情況都試一下以保證數(shù)據(jù)的正常顯示;〔這好似于上位機軟件的工作方式有關〕當上位機接收界面出現(xiàn)"???"時,我們可以馬上更改TB8位的值,以期到達正確顯示的目的! **********************************************************************/ P1=0xfe;//從機與主機建立連接的標志 SM2=0;//以后就可以直接接收主機發(fā)來的命令 flag=1; RT=1;//下面局部為向上位機返回自己的地址 SBUF=48; while(TI!=1);TI=0; SBUF=48+4; while(TI!=1);TI=0; RT=0; TB8=0; } if(flag==1) { if(SBUF==0x21)//要求從機發(fā)送數(shù)據(jù)的功能指令 { TB8=0;RT=1; data_crc=(qian+bai+shi+ge)%10; SBUF=48+qian;//向主機發(fā)送信息 while(TI!=1);TI=0; SBUF=48+data_crc;//JIAOYAN---->Thesecondbitwhile(TI!=1);TI=0; SBUF=48+bai;//向主機發(fā)送信息 while(TI!=1);TI=0; SBUF=48+shi;//向主機發(fā)送信息 while(TI!=1);TI=0; SBUF=48+ge;//向主機發(fā)送信息 while(TI!=1);TI=0; SBUF='';//向主機發(fā)送信息 while(TI!=1);TI=0; RT=0; TB8=0; } if(SBUF==0x30)//預定的結(jié)束通信指令 { TB8=0;//其實這里我們可以不管TB8,因為初始化的時候TB8=0; RT=0; SM2=1; flag=0; P1=0xff; } } ES=1; }/**********************主程序局部************************************/voidmain(void){ TMOD=0x20; TL1=0xfd; TH1=0xfd;PCON=0x00; //SCON=0xf0; SM0=1;SM1=1; SM2=1; REN=1; EA=1; ES=1;TR1=1; RT=0;//接收/發(fā)送數(shù)據(jù)控制位,初始化為接收while(1) {}}VB上位機控制臺AT89S52與電腦的通信接口芯片比擬:綜合觀察比擬,我們可以利用“校驗位〞模擬單片機的TB8/RB8.具體就是發(fā)送地址的時候校驗位設定為〞M〞(值為1),發(fā)送指令的時候校驗位設定為〞S〞〔值為0〕;VBMSComm通信控件的屬性及參數(shù)設置Commport設置翻開端口號位1或2,3,4;Handshaking=0時無握手協(xié)議;InBufferSize=1024,接收緩沖區(qū)中字節(jié)數(shù);InputLen=1,設置一次接收緩沖字節(jié)數(shù)位1;InputMode=0表示數(shù)據(jù)通過Input屬性以文本形式取回,為1表示數(shù)據(jù)通過Input屬性以二進制形式取回;OutBufferSize=512,設置并返回傳輸緩沖區(qū)的大?。籖htreshold=1,在發(fā)生接收事件后并觸發(fā)OnComm事件之前,設置并返回要接收的字節(jié)數(shù)。即接收緩沖區(qū)收到每一個字節(jié)后都會使MSComm控件產(chǎn)生OnComm事件。RTSEnable=False,假設設為True那么會發(fā)送信息到調(diào)制解調(diào)器,而不是通過串口通信;Setting=〞9600,N,8,1〞,設置并返回波特率、奇偶校驗、數(shù)據(jù)位、停止位參數(shù)。9600,N,8,1即波特率為9600,無奇偶校驗,8個數(shù)據(jù)位,1個停止位;Sthreshold=0(缺省值),數(shù)據(jù)傳輸事件不會產(chǎn)生OnComm事件。假設設置Sthreshold屬性為1,當傳輸緩沖區(qū)完全為空時,MSComm控件產(chǎn)生OnComm事件。主從式多機通信中,必須為每個從機分配不同的地址,主機通過發(fā)送地址與從機取得聯(lián)絡后再與該從機進行數(shù)據(jù)幀或命令幀的交互,MCS-51中可通過靈活地控制串行口控制器SCON的SM2位和發(fā)送/接收的第9位TB8/RB8來區(qū)分地址或數(shù)據(jù)信息。本系統(tǒng)中以PC機為主機,使用VB6.0的MSComm控件與單片機通信,PC機要區(qū)分下發(fā)的是地址信息還是數(shù)據(jù)信息,是通過設置MSComm控件Settings屬性中的奇偶校驗位來巧妙實現(xiàn)的。發(fā)送地址時設置為M,即Settings=“9600,M,8,1〞,那么主機發(fā)送地址時置發(fā)送的第9位為1;發(fā)送數(shù)據(jù)時,設置為S,那么主機在每個字節(jié)數(shù)據(jù)時置發(fā)送的第9位為0;由于上位機中數(shù)據(jù)的發(fā)送和接收涉及到的情形比擬多,因此在這里不詳加介紹。關于這方面比擬好的論文有深圳職業(yè)技術學院溫曉軍的《VB在串行通信中的應用》,當然該論文講得比擬淺顯,如果想要更深入的了解學習必須參看更多其它相關資料。VB上位機控制臺及軟件特色用VB6.0編寫的上位機控制臺如圖1-5所示。圖1-5軟件特色解析:“通信設置〞區(qū)域該區(qū)域可進行串口號、波特率、數(shù)據(jù)位數(shù)、停止位數(shù)以及地址/數(shù)據(jù)幀設置。這些是通過MSComm控件的Settings屬性來實現(xiàn)的。通常,在某些情況下我們會結(jié)合下位機進行波特率的修改,其它幾個參數(shù)保持不變。“節(jié)點檢測〞區(qū)域該區(qū)域可進行下位機節(jié)點是否正常性檢查,做為后面節(jié)點選擇的依據(jù)。在實際操作的時候是這樣實現(xiàn)的:上位機發(fā)送從機地址并開啟一個定時器,如果在500ms內(nèi)收到了從機的應答地址那么彈出提示框“正常工作!〞,否那么彈出提示框“非正常工作!〞?!跋挛粰C節(jié)點〞區(qū)域該區(qū)域可進行下位機節(jié)點選擇、“輪詢〞時間間隔設置和目標數(shù)據(jù)以Excel保存的名稱和位置設置。在這里可以將所選擇的下位機節(jié)點一天24小時所采集的溫度數(shù)據(jù)連續(xù)保存在所指定的Excel表格中,以供后續(xù)的數(shù)據(jù)分析。該區(qū)域功能的實現(xiàn)主要通過數(shù)組及相應算法、定時器、VB調(diào)用Excel表格的靈活組合應用來完成的。實現(xiàn)效果如圖1-6、圖1-7所示。圖1-6圖1-7(4) “節(jié)點顯示單元〞區(qū)域通過該區(qū)域可以實時的觀察所選擇節(jié)點的溫度數(shù)據(jù)。(5) 其它特性該上位機軟件還具有端口開閉檢測能力和突發(fā)事件處理能力。這里著重介紹一下突發(fā)事件處理能力。該上位機軟件的突發(fā)事件處理能力表達在中選擇的某一個下位機節(jié)點出現(xiàn)崩潰的時候可以很好的進行應急處理,從而防止對整個系統(tǒng)造成影響。該功能同樣是通過定時器的靈活應用來實現(xiàn)的。下位機溫度采集節(jié)點微處理器目前微處理器領域最火爆的莫過于32位的ARM,但出于本系統(tǒng)對微處理要求不高和性價比的考慮,因此選擇傳統(tǒng)的8051單片機.。本系統(tǒng)選擇國產(chǎn)宏晶STC89C52RC,不選擇AT89S52是因為兩者性能根本一樣,但STC價格廉價一半。STC89C52具有如下特點:40個引腳,8kBytesFlash片內(nèi)程序存儲器,512bytes的隨機存取數(shù)據(jù)存儲器〔RAM〕,32個外部雙向輸入/輸出〔I/O〕口,5個中斷優(yōu)先級2層中斷嵌套中斷,3個16位可編程定時計數(shù)器,2個全雙工串行通信口,看門狗〔WDT〕電路,片內(nèi)時鐘振蕩器。可以看出STC89C52完全滿足系統(tǒng)對微處理的要求。DS18B20DS18B20特性簡介DALLAS半導體公司的數(shù)字化溫度傳感器DS1820是世界上第一片支持“一線總線〞接口的溫度傳感器。一線總線獨特而且經(jīng)濟的特點,使用戶可以輕松的組建傳感器網(wǎng)絡,為測量系統(tǒng)的構(gòu)建引入全新概念?,F(xiàn)在新一代DS18B20體積更小、更經(jīng)濟、更靈活,使你可以充分發(fā)揮“一線總線〞的長處。DS18B20的具體特性如下:獨特的單線接口僅需一個端口引腳進行通訊簡單的多點分布應用無需外部器件可通過數(shù)據(jù)線供電零待機功耗測溫范圍-55~+125攝氏度,以0.5攝氏度遞增9~12位可選分辨率溫度數(shù)字量轉(zhuǎn)換時間200ms(典型值)用戶可定義的非易失性溫度報警設置應用包括溫度控制、工業(yè)系統(tǒng)、消費品、溫度計或任何熱感測系統(tǒng)DS18B20典型應用電路 上圖是通過VDD引腳引入一個外部電源,這樣做的好處是I/O線上不需要加強上拉,而且總線控制器不用在溫度轉(zhuǎn)換期間總保持高電平。這樣在轉(zhuǎn)換期間可以允許在單線總線上進行其它數(shù)據(jù)往來。另外,在單線總線上可以掛任意多片DS18B20,并且如果它們使用外部電源的話,就可以先發(fā)一個SkipROM命令,再接一個ConvertT命令,讓它們同時進行溫度轉(zhuǎn)化。注意當加上外部電源時,GND引腳不能懸空。51單片機驅(qū)動DS18B20溫度轉(zhuǎn)化流程圖51單片機和DS18B20溫度采集局部程序清單#include<reg51.h>#include<intrins.h>#include<stdio.h>#include<math.h>#defineucharunsignedchar#defineuintunsignedintsbitDS=P3^2;//DS18b20的數(shù)據(jù)線端口sbitkey=P3^3;ucharcodetable0[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};//0到9與“-〞編碼ucharcodetable3[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0E,0xff};//共陽帶小數(shù)點段選ucharcodetable1[8]={0x28,0x1e,0x45,0xe9,0x00,0x00,0x00,0xb7};//兩1820的ROM編碼,可在單個時用readrom讀出ucharcodetable2[8]={0x28,0x87,0x3f,0x08,0x02,0x00,0x00,0xc9};ucharzf_flag=0,temph,templ,ge,shi,bai,qian;ucharchoose=0;//1-wire總線,尋訪不同1820的標志位inttemper;//溫度真實值/********************************************************函數(shù)名稱:delay_us(uintt)入口參數(shù):t出口參數(shù):無注備:此程序是為了1wire總線寫時的us級延時而寫的; 其中在外部晶振為11.0592MHz時,每次進入函數(shù) 大約要18us左右,每次循環(huán)大約13us左右********************************************************/voiddelay_us(uintt) { uinti; for(i=0;i<t;i++); }/********************************************************函數(shù)名稱:delay_nms(uintt)入口參數(shù):t出口參數(shù):無注 備:毫秒級軟件延時********************************************************/voiddelay_nms(uintt) { uinti; ucharj; for(i=0;i<t;i++) for(j=0;j<110;j++); }/********************************************************函數(shù)名稱:reset_1820()入口參數(shù):無出口參數(shù):bit一位數(shù):返回1,初始化成功;返回0,初始化失敗注 備:這里主要要注意的是延時的問題********************************************************/bitresert_1820() { DS=1; _nop_();//MCU將DS拉低后,要保持至少大于1us,數(shù)據(jù)手冊上說的。 _nop_();//這里為確保穩(wěn)定延時2us左右 DS=0; delay_us(55);//這里延時大約750us左右 DS=1; // delay_us(2);//這里大約50us左右---********適當調(diào)整! delay_us(3); if(!DS){delay_us(50);//這個延時很重要?。?!650us!!*****可能有點偏長!DS=1; //一定要在初始化完成后將DS置1,以釋放總線return1;} else return0; }/********************************************************函數(shù)名稱:write_bit(bitwei)入口參數(shù):bitwei出口參數(shù):無注 備:********************************************************/voidwrite_bit(bitwei) { DS=1; DS=0; _nop_(); //MCU將DS拉低后,要保持至少大于1us,數(shù)據(jù)手冊上說的。 _nop_(); //這里為確保穩(wěn)定延時2us左右 if(wei) DS=1; elseDS=0; delay_us(6);//*************大概81us DS=1; _nop_(); }/********************************************************函數(shù)名稱:read_bit()入口參數(shù):無出口參數(shù):bit一位注 備:********************************************************/bitread_bit()//初期寫程序出問題處!?。。。。。。?! { DS=1; DS=0; _nop_();_nop_();//MCU將DS拉低后,要保持至少大于1us,數(shù)據(jù)手冊上說的。//這里為確保穩(wěn)定延時2us左右DS=1; //這里必須拉高:讓MCU釋放總線,好讓DS18B20利用總線回送數(shù)據(jù) _nop_();_nop_();//等待一定時間,讓DS18B20回送的數(shù)據(jù)穩(wěn)定_nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); returnDS; }/********************************************************函數(shù)名稱:write_byte(ucharbyte)入口參數(shù):byte出口參數(shù):無注備:DB18B20寫入數(shù)據(jù)或讀出數(shù)據(jù)都是從最低位開始的********************************************************/voidwrite_byte(ucharbyte){ bitflag1; uchari,temp;temp=byte; for(i=0;i<8;i++) { temp=(temp>>1);//DB18B20寫入數(shù)據(jù)或讀出數(shù)據(jù)都是從最低位開始的 flag1=CY; /***********這種方式還是不錯的!*/ write_bit(flag1); } }/********************************************************函數(shù)名稱:read_byte()入口參數(shù):無出口參數(shù):byte型注備:DB18B20寫入數(shù)據(jù)或讀出數(shù)據(jù)都是從最低位開始的********************************************************/ucharread_byte() { bitflag2; uchari,j,temp; for(i=0;i<8;i++) { temp=(temp>>1); flag2=read_bit(); if(flag2)/*******中間變量對一個位進行操作!*/ j=0x80; else j=0x00; temp=temp|j; } returntemp; }/********************************************************函數(shù)名稱:uint conversion(ucharh_byte,ucharl_byte)入口參數(shù):ucharh_byte,ucharl_byte出口參數(shù):uint型注備:將DB18B20讀出的數(shù)據(jù)轉(zhuǎn)化為真正的溫度值********************************************************/uintconversion(ucharh_byte,ucharl_byte){ intwendu; floattt;//注意數(shù)據(jù)類型對運算的影響?。。。。。。。?! if(h_byte<7||h_byte==7) { zf_flag=0; //溫度正負標志位:1,為負;0,為正 wendu=h_byte; //將讀入的帶字符的高字節(jié)放入int型溫度變量中 wendu=wendu<<8; //將其左移八位,讓其進入高字節(jié) wendu=wendu|l_byte; //并與溫度的低字節(jié)相或,湊成整型值 tt=wendu*0.0625; //乘
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 粽子生成課程設計意圖
- 二零二五版液化天然氣液化廠安全風險評估合同3篇
- 2025年度個人寵物醫(yī)療貸款及還款服務協(xié)議4篇
- 2024年學校培訓管理制度
- 2024年學校安全大排查大整治工作方案
- 2025年金融理財產(chǎn)品售后風險控制合同2篇
- 2024行政復議案件調(diào)解與代理服務委托協(xié)議范本3篇
- 年度玉米酒精糟回收蛋白飼料成套設備(DDGS)市場分析及競爭策略分析報告
- 年度娛樂、游覽用船舶戰(zhàn)略市場規(guī)劃報告
- 2025年度個人屋頂防水隔熱一體化合同2篇
- 2025年度杭州市固廢處理與資源化利用合同3篇
- 2024年安徽省公務員錄用考試《行測》真題及答案解析
- 部編版二年級下冊《道德與法治》教案及反思(更新)
- 充電樁項目運營方案
- 退休人員出國探親申請書
- 高中物理競賽真題分類匯編 4 光學 (學生版+解析版50題)
- 西方經(jīng)濟學-高鴻業(yè)-筆記
- 幼兒園美術教育研究策略國內(nèi)外
- 2024屆河南省五市高三第一次聯(lián)考英語試題及答案
- 孕婦學校品管圈課件
- 《愿望的實現(xiàn)》交流ppt課件2
評論
0/150
提交評論