基于串口通信的數(shù)據(jù)采集系統(tǒng)研究_第1頁(yè)
基于串口通信的數(shù)據(jù)采集系統(tǒng)研究_第2頁(yè)
基于串口通信的數(shù)據(jù)采集系統(tǒng)研究_第3頁(yè)
基于串口通信的數(shù)據(jù)采集系統(tǒng)研究_第4頁(yè)
基于串口通信的數(shù)據(jù)采集系統(tǒng)研究_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

PAGEPAGE1基于串口通信的數(shù)據(jù)采集系統(tǒng)研究摘要在實(shí)際生活生產(chǎn)中數(shù)據(jù)采集系統(tǒng)隨處可見(jiàn)。特別是當(dāng)要求數(shù)據(jù)具有高實(shí)時(shí)性和高精確性的時(shí)候,需要我們熟悉各元器件的電氣特性,搭建外圍設(shè)備,設(shè)計(jì)專(zhuān)用的電路來(lái)實(shí)現(xiàn)系統(tǒng)的高需求。以上因素直接關(guān)系到系統(tǒng)對(duì)數(shù)據(jù)的敏感度和穩(wěn)定性。本設(shè)計(jì)研究了基于串口通信的數(shù)據(jù)采集系統(tǒng)。確定以周?chē)娜粘囟戎禐閿?shù)據(jù)采集對(duì)象,利用溫度傳感器和單片機(jī)實(shí)現(xiàn)模擬信號(hào)的采集和轉(zhuǎn)換成為數(shù)字信號(hào),使用九針串口完成上位機(jī)和下位機(jī)之間的內(nèi)部信息傳輸。然后在上位機(jī)中利用VisualC++編程語(yǔ)言實(shí)現(xiàn)串口通信的數(shù)據(jù)接收顯示控制界面完成數(shù)據(jù)的傳輸、分析和存儲(chǔ)。關(guān)鍵詞:數(shù)據(jù)采集系統(tǒng)、串口通信、STC89C51單片機(jī)、VisualC++AbstractIntheproductiondataacquisitionsystemcanbeseeninreallife.Especiallywhentherequesteddatawithreal-timeandhighprecisionwhenneededwearefamiliarwiththecomponentsoftheelectricalcharacteristics,buildaperipheraldevice,specialcircuitdesignedtorealizehighdemand.Thesefactorsdirectlyrelatedtodatasensitivityandstabilityofthesystem.Thedesignofdataacquisitionsystembasedonserialcommunication.Determinevaluefordailydatacollectionobjectsaround,byusingatemperaturesensorandmicrocontrollerforanalogsignalcollectionandconvertedtoadigitalsignal,usingnine-pinserialportcompletePCandinformationtransmissionbetweenslave.AndthenusingtheVisualC++programminglanguageimplementedinthePCserialcommunicationdatareceptiondisplaycontrolinterfacedatatransfer,analysisandstorage.Keywords:Dataacquisitionsystems,SerialCommunication,STC89C51single-chip,VisualC++第一章前言1.1研究目的和意義在信息科學(xué)技術(shù)以及通信技術(shù)的日新月異發(fā)展的現(xiàn)在,互聯(lián)網(wǎng)和機(jī)器的遠(yuǎn)程通訊已滲透到經(jīng)濟(jì)、工業(yè)生產(chǎn)、農(nóng)業(yè)生產(chǎn)、軍工太空探索等多個(gè)領(lǐng)域。人們對(duì)生活中高端電子產(chǎn)品的需求例如手機(jī)、電腦是居高不下的,甚至達(dá)到了有些人離開(kāi)了手機(jī)就不知道如何生活的地步。人們追求更好的生活,更方便的出行,我們?cè)瓉?lái)經(jīng)常使用的并行通信的接口技術(shù)遠(yuǎn)遠(yuǎn)滿(mǎn)足不了我們的這種需要。遠(yuǎn)程控制串行通信接口,并在同一網(wǎng)絡(luò)的優(yōu)勢(shì)性能的幾個(gè)允許發(fā)送者已經(jīng)發(fā)現(xiàn)擴(kuò)大以滿(mǎn)足市場(chǎng)需求,提高國(guó)民經(jīng)濟(jì)和串行通信接口的概念和技術(shù)研究的了解人民的生活水平具有十分重要的意義。實(shí)際的工業(yè)生產(chǎn)和生活的要求,特別是在要求具有高實(shí)時(shí)性和高精確性的數(shù)據(jù)的時(shí)候,往往才會(huì)體現(xiàn)出數(shù)據(jù)采集的重要性。在某些特定的情況下,自然工作條件惡劣,氣候條件復(fù)雜,在現(xiàn)場(chǎng)處理數(shù)據(jù)在實(shí)際上并不可行,但這些實(shí)際生產(chǎn)又離不開(kāi)實(shí)時(shí)數(shù)據(jù)的支持來(lái)指導(dǎo)生產(chǎn),以及各大山區(qū)也需求大量的數(shù)據(jù)通信和實(shí)時(shí)數(shù)據(jù)采集,收集信號(hào)的需求量逐步上升。使得我們隊(duì)數(shù)據(jù)采集的精確性,實(shí)時(shí)性和穩(wěn)定性有了更高層次的需求,在這當(dāng)中,基于串口通信的數(shù)據(jù)采集系統(tǒng)是非常重要的。因?yàn)樾枰訌?qiáng)數(shù)據(jù)采集系統(tǒng)的穩(wěn)定性,我們用單片機(jī)作為下位機(jī)采集數(shù)據(jù)、轉(zhuǎn)換數(shù)據(jù),然后榮計(jì)算機(jī)處理數(shù)據(jù)、分析數(shù)據(jù)、存儲(chǔ)數(shù)據(jù),通過(guò)通信協(xié)議實(shí)現(xiàn)上位機(jī)和下位機(jī)的內(nèi)部數(shù)據(jù)通信,開(kāi)發(fā)了一個(gè)可實(shí)現(xiàn)的數(shù)據(jù)采集和監(jiān)控的數(shù)據(jù)。1.2國(guó)內(nèi)外研究現(xiàn)狀1.2.1課題在國(guó)內(nèi)的研究發(fā)展?fàn)顩r隨著全國(guó)城市的規(guī)劃發(fā)展和工業(yè)生產(chǎn)科技的進(jìn)步,小型電子產(chǎn)品的自動(dòng)化程度向人工智能方向發(fā)展,我們?cè)瓉?lái)經(jīng)常使用的并行通信的接口技術(shù)限制了數(shù)據(jù)通信的傳輸速度。串口通信接口技術(shù)和并行接口技術(shù)相比,串口通信設(shè)計(jì)簡(jiǎn)單、控制方便,不僅簡(jiǎn)化了系統(tǒng)的線路,縮小了電路板的面積,節(jié)省了系統(tǒng)資源,而且還具有擴(kuò)展性好、編程方便、易于實(shí)現(xiàn)用戶(hù)系統(tǒng)的硬件和軟件模塊的標(biāo)準(zhǔn)化、串行接口更少、傳輸方便等優(yōu)點(diǎn)。因此,串行通信接口技術(shù)逐漸成為主流技術(shù)。在RS232通信協(xié)議和RS485通信協(xié)議應(yīng)用最為廣泛的串行通信接口的今天。新興的科技公司例如華為,中性和電信等這幾年的主要產(chǎn)品電腦和手機(jī)的硬件系統(tǒng)的升級(jí)都離不開(kāi)串口通信的發(fā)展。另外,人們對(duì)于智能化設(shè)備的日益密切,也確定了串口通信的硬件標(biāo)準(zhǔn)和軟件開(kāi)發(fā)技術(shù)是發(fā)展主流。在人們的生活中,技術(shù)的需求將一直是一個(gè)主要的流,這是為開(kāi)發(fā)串行通信接口覆蓋著一條光明的道路。1.2.2課題在國(guó)外的研究發(fā)展?fàn)顩r串行通信接口技術(shù)的迅速發(fā)展。不僅在國(guó)內(nèi)外的發(fā)展也迅速,由于外國(guó)政府對(duì)它的關(guān)注和照顧,采取了一系列政策,促進(jìn)串行通信技術(shù)的發(fā)展,使串行技術(shù)進(jìn)入寬帶,網(wǎng)格,而且還擁有一個(gè)移動(dòng),無(wú)處不在的可信網(wǎng)絡(luò)。例如美國(guó)的環(huán)境影響評(píng)估,微軟和其他協(xié)會(huì),公司附加到串行技術(shù)和不斷升級(jí)改進(jìn)的串行技術(shù)。蘋(píng)果、三星等國(guó)外智能手機(jī)的不斷升級(jí)完善,無(wú)需進(jìn)一步開(kāi)發(fā)串行通信接口,因此人們希望能更好地進(jìn)行電子技術(shù)的研究是必不可少的,而串行通信技術(shù)是最重要的。1.3研究?jī)?nèi)容和方法如前所述,為了實(shí)現(xiàn)需求,采用較少的電器元件,提高系統(tǒng)的抗干擾能力,降低系統(tǒng)的功耗和系統(tǒng)的能力,以更快速地處理為目標(biāo)。本設(shè)計(jì)開(kāi)發(fā)出基于串口通信的數(shù)據(jù)采集系統(tǒng)。系統(tǒng)設(shè)計(jì)有電路設(shè)計(jì)(硬件)和程序設(shè)計(jì)(軟件)倆部分。硬件設(shè)計(jì)主要包括主控芯片的設(shè)計(jì)、溫度傳感電路的設(shè)計(jì)和液晶顯示模塊的設(shè)計(jì)。軟件設(shè)計(jì)包括串口通信界面的設(shè)計(jì)和上位機(jī)軟件通過(guò)數(shù)據(jù)傳輸?shù)耐ㄐ艆f(xié)議,以MicrosoftVisualC+++編寫(xiě)采集到的數(shù)據(jù)的控制和顯示界面,對(duì)傳過(guò)來(lái)的數(shù)據(jù)進(jìn)行顯示和發(fā)送控制命令。主控芯片我們可以選擇STC89C51系列微型電子單片機(jī)。該系列單片機(jī)由于其經(jīng)濟(jì)、方便、可靠,能夠同時(shí)采集和預(yù)處理,廣泛應(yīng)用于家用電器、儀器儀表、機(jī)電一體化、智能終端和一般工業(yè)控制領(lǐng)域。以在8051核心ISP(在系統(tǒng)編程)可在系統(tǒng)可編程芯片,最高時(shí)鐘頻率為80MHz,內(nèi)含8K字節(jié)的可反復(fù)擦寫(xiě)1000閃存只讀存儲(chǔ)器,在系統(tǒng)可編程(ISP),再加上我們的PC端程序的用戶(hù)代碼可以下載到單片機(jī),無(wú)需購(gòu)買(mǎi)通用編程器,讀取速度更快。實(shí)時(shí)溫度的模擬信號(hào)我們需用DS18D20芯片。該系列芯片不僅僅電子線路連接簡(jiǎn)單明了,組成的電路模塊體積小巧。而且是達(dá)拉斯公司生產(chǎn)的單總線器件,具有可靠的工業(yè)生產(chǎn)質(zhì)量,經(jīng)久耐用,電子誤差小而穩(wěn)定。液晶顯示模塊以其低功耗、體積小、顯示內(nèi)容豐富、模塊化、界面簡(jiǎn)單等優(yōu)點(diǎn)而得到廣泛應(yīng)用。液晶顯示模塊分字符型和點(diǎn)陣型兩種,字符型只能顯示字符。通常使用點(diǎn)陣液晶顯示模塊,其除了顯示字符還顯示了各種圖形和漢字。微軟的VisualC++是一個(gè)結(jié)構(gòu)化的,由微軟開(kāi)發(fā),模塊化,面向?qū)ο蠛褪录?qū)動(dòng)機(jī)制,包含協(xié)助可視化編程語(yǔ)言開(kāi)發(fā)環(huán)境。這是一種可以在微軟自己的產(chǎn)品開(kāi)發(fā)中使用的語(yǔ)言。它來(lái)源于基本的編程語(yǔ)言。使用微軟VisualC++寫(xiě)的串口通信接口是很容易實(shí)現(xiàn)的,界面直觀清晰,由PC接收單片機(jī)采集到的數(shù)據(jù)及把預(yù)處理的結(jié)果收集起來(lái),集中對(duì)數(shù)據(jù)分析、處理與研究。這同時(shí)彌補(bǔ)了單片機(jī)硬件條件的限制,軟件比較簡(jiǎn)單,而且內(nèi)存容量有限等缺點(diǎn)。在單片機(jī)上對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,使得上位機(jī)得到的信號(hào)更具有針對(duì)性,對(duì)于更快速響應(yīng)處理站點(diǎn)信號(hào)的要求降低有負(fù)擔(dān),上位機(jī)按執(zhí)行監(jiān)測(cè)到數(shù)據(jù),發(fā)布命令,響應(yīng)具有實(shí)時(shí)性和快速響應(yīng)特性。第二章串口通信和數(shù)據(jù)采集系統(tǒng)串口通信(SerialCommunication)是指通過(guò)數(shù)據(jù)信號(hào)線和地線的計(jì)算機(jī)及外圍設(shè)備,作為傳輸數(shù)據(jù)的通信手段。計(jì)算機(jī)和單片機(jī)(例如,MCS-51)具有串行通信端口,實(shí)現(xiàn)了串行通信程序的設(shè)計(jì),完成兩個(gè)任務(wù)之間的數(shù)據(jù)通信。在實(shí)際工作完成時(shí),利用串口進(jìn)行通信是非常多的,通過(guò)串口通信編程的過(guò)程是多種多樣的。在Win98環(huán)境下利用MSComm計(jì)算機(jī)VisualC++提供的ActiveX控件進(jìn)行串行通信的汽輪機(jī)葉片振動(dòng)監(jiān)測(cè)系統(tǒng),也有基于java數(shù)據(jù)采集串口通信,用m圖書(shū)館數(shù)字化管理系統(tǒng)例如串行通信設(shè)計(jì)。2.1串口通信簡(jiǎn)介串口通信就是按位傳輸信息的設(shè)備。2.1.1串口通信的主要特點(diǎn)在串行通信中,傳送順序是在單條一位寬的傳輸線上一位一位的傳輸數(shù)據(jù)。這樣分八次由低位到高位按順序一位一位地傳送一個(gè)字節(jié)的數(shù)據(jù)。綜上所述,串行通信有如下特點(diǎn):1)優(yōu)點(diǎn):節(jié)省傳輸線。尤其是在遠(yuǎn)程通信時(shí),傳輸線的成本是主要考慮因素。2)缺點(diǎn):與并行通信比數(shù)據(jù)傳送效率低。2.1.2

串口通信的重要參數(shù)串口通信有很多參數(shù),包括波特率、數(shù)據(jù)位、停止位和奇偶校驗(yàn)。1)波特率(Baud

rate):這個(gè)是一個(gè)運(yùn)送各式各樣符號(hào)速率的度量。指在單位時(shí)間內(nèi)的信號(hào)變化的調(diào)制,載波參數(shù)變化的時(shí)間單位多少的數(shù)量,如傳輸每秒36個(gè)字符,每個(gè)字符格式包含9比特(一個(gè)起始位,一個(gè)停止位,八個(gè)數(shù)據(jù)位),和波特率36bd、10位×36=360bps/二比特率。調(diào)制速率大于傳輸速率,如曼徹斯特編碼)。2)數(shù)據(jù)位(Databits):這是是一個(gè)衡量實(shí)際數(shù)據(jù)的通信度量。當(dāng)上位機(jī)需要運(yùn)送一系列數(shù)據(jù)包時(shí),實(shí)際發(fā)送的數(shù)據(jù)一般不會(huì)正好為八位,而是更不為人知的標(biāo)準(zhǔn)值為六、七和八。3)停止位(Stopbit):最后一個(gè)是用來(lái)表示一個(gè)包。典型值分別為一、一點(diǎn)五和二。因?yàn)楦嗟臄?shù)據(jù)是在他們自己的信號(hào)線上實(shí)現(xiàn)定時(shí)功能的,而且每個(gè)傳輸線都有他們的獨(dú)立計(jì)時(shí)方式,很可能出現(xiàn)在通信設(shè)備之間的一點(diǎn)點(diǎn)的同步。所以計(jì)時(shí)方式停止不只是表明本次數(shù)據(jù)傳輸?shù)慕Y(jié)束,而是矯正了微機(jī)內(nèi)置計(jì)時(shí)器一致的時(shí)期。適用于停止位的位數(shù)越少,不一樣的計(jì)時(shí)器的容忍程度越小,但也有較慢的數(shù)據(jù)傳輸速率。4)奇偶校驗(yàn)位(Paritybit):一個(gè)簡(jiǎn)單的方法來(lái)檢查串行通信中的錯(cuò)誤。有四種方法來(lái)檢查錯(cuò)誤:偶數(shù),奇數(shù),高和低。當(dāng)然也沒(méi)有平價(jià)位可以。奇偶校驗(yàn),串口會(huì)設(shè)置校驗(yàn)位(數(shù)據(jù)位后面的一位),用一個(gè)值確保傳輸?shù)臄?shù)據(jù)有偶個(gè)或者奇?zhèn)€邏輯高位。要注意,以上四個(gè)參數(shù)必須同時(shí)匹配才能實(shí)現(xiàn)倆個(gè)不同的通信端口的數(shù)據(jù)傳輸。2.1.3串口通信的通信協(xié)議在串口通信中,RS-232、RS-422和RS-485是比較常見(jiàn)的通信協(xié)議。2.1.4串口通信的傳輸格式串口通信(以RS232為例),通信數(shù)據(jù)通道在傳輸數(shù)據(jù)的時(shí)候,通道的TTL電平一直是低的,通過(guò)返向RS232通道的電平一直是高的。起初的RS232是高電平,最后的RS232是低電平。通道發(fā)送數(shù)據(jù)是按位傳輸,從低位到高位。注意在最后讀取數(shù)據(jù)信息的時(shí)候,右邊的數(shù)據(jù)是低位。2.1.5串口通信的通信過(guò)程1)通信的開(kāi)始,我們要確認(rèn)串口已經(jīng)處于打開(kāi)狀態(tài),這個(gè)時(shí)候信號(hào)的通道處于空閑狀態(tài),我們計(jì)為邏輯一。當(dāng)通道檢測(cè)出信號(hào)電平由一躍變到零的時(shí)候,內(nèi)部的接受信號(hào)的時(shí)鐘開(kāi)始計(jì)數(shù)。2)內(nèi)部的接收信號(hào)時(shí)鐘計(jì)數(shù)數(shù)到第八個(gè)單位時(shí)間的時(shí)候,通道內(nèi)部再次對(duì)輸入的信號(hào)電平進(jìn)行檢測(cè)。如果該信號(hào)電平為高電平,則證明它是一個(gè)干擾信號(hào),通道會(huì)忽略該信號(hào);如果該信號(hào)電平為低電平,證明她是一個(gè)“起始位”,而不是干擾信號(hào)。3)接受到“起始位”的信號(hào)之后,接受端開(kāi)始后續(xù)位的檢測(cè),在接受信號(hào)的時(shí)鐘計(jì)時(shí)的十六個(gè)單位時(shí)間內(nèi)對(duì)信道內(nèi)輸入信號(hào)進(jìn)行檢測(cè),檢測(cè)對(duì)象為對(duì)應(yīng)的數(shù)據(jù)D0的數(shù)值。4)如果邏輯一,作為數(shù)據(jù)位1;如果邏輯二,作為數(shù)據(jù)位2。以此往復(fù),每隔接受信號(hào)時(shí)鐘計(jì)時(shí)的十六個(gè)單位時(shí)間就對(duì)輸入信號(hào)重新檢測(cè)一次,直到全部的數(shù)據(jù)輸入完畢。5)檢測(cè)檢驗(yàn)位P,該位可能不會(huì)存在。6)接收端接收到指定數(shù)的數(shù)據(jù)位和奇偶校驗(yàn)位后,串口按信息的幀數(shù)來(lái)檢驗(yàn)是否存在錯(cuò)誤。如果存在錯(cuò)誤,狀態(tài)寄存器重置“幀錯(cuò)誤”標(biāo)志;如果不存在錯(cuò)誤,重置狀態(tài)等級(jí)校驗(yàn)錯(cuò)誤標(biāo)志。7)把沒(méi)有錯(cuò)誤所在幀的所有數(shù)據(jù)的信道出現(xiàn)的高電平作為空閑位。8)當(dāng)信道檢測(cè)出信號(hào)電平由一躍變到零的時(shí)候,內(nèi)部的接收信號(hào)時(shí)鐘開(kāi)始計(jì)數(shù),重復(fù)步驟一,開(kāi)始進(jìn)入下一幀的檢測(cè)。2.2數(shù)據(jù)采集系統(tǒng)2.2.1數(shù)據(jù)采集系統(tǒng)的分類(lèi)1)微機(jī)數(shù)據(jù)采集系統(tǒng)經(jīng)過(guò)系統(tǒng)傳感器信號(hào)的放大、濾波等步驟,得到比較容易學(xué)習(xí)的信號(hào),將信號(hào)采樣和轉(zhuǎn)換成數(shù)字信號(hào)后,通過(guò)接口轉(zhuǎn)換成計(jì)算機(jī),然后顯示結(jié)果或經(jīng)過(guò)模數(shù)轉(zhuǎn)換成模擬信號(hào)輸出的其他用途。它有以下特點(diǎn)a)系統(tǒng)在硬件上的圍合要求,系統(tǒng)性能很好,實(shí)際需要的不是很高,所以系統(tǒng)的價(jià)格/性能不是很高。b)系統(tǒng)的高擴(kuò)展性、優(yōu)良的配置、豐富的可開(kāi)發(fā)資源給設(shè)計(jì)開(kāi)發(fā)提供了很大的發(fā)揮余地。c)系統(tǒng)的響應(yīng)速度更快,性能更好。2)單片機(jī)數(shù)據(jù)采集系統(tǒng)它由單片機(jī)及其外圍數(shù)據(jù)采集系統(tǒng)的輔助電路組成,是近年來(lái)計(jì)算機(jī)技術(shù)飛速發(fā)展的產(chǎn)物,它具有以下特點(diǎn):a)系統(tǒng)的開(kāi)發(fā)要借助于專(zhuān)用的軟件設(shè)計(jì)工具以及程序燒錄工具。b)系統(tǒng)的外圍電路的設(shè)計(jì)是以滿(mǎn)足系統(tǒng)需求為主的,不存在無(wú)意義的電路,系統(tǒng)的軟件也是專(zhuān)為實(shí)現(xiàn)系統(tǒng)功能服務(wù)的,所以它的性?xún)r(jià)比極高。系統(tǒng)程序是利用專(zhuān)門(mén)工具開(kāi)發(fā)設(shè)計(jì)。所以程序的穩(wěn)定性強(qiáng),安全性高,通常狀況不會(huì)受到外界因素的破壞。2.2.2數(shù)據(jù)采集系統(tǒng)的組成現(xiàn)代科學(xué)技術(shù)的發(fā)展對(duì)系統(tǒng)速度、響應(yīng)速度、數(shù)據(jù)精確度、承載能力、功耗和噪聲、干擾的要求也越來(lái)越高。一種通用的數(shù)據(jù)采集系統(tǒng)由以下部分組成:1)信號(hào)采集原件負(fù)責(zé)數(shù)據(jù)的現(xiàn)場(chǎng)采集。一般來(lái)說(shuō),它由傳感器探測(cè)信號(hào),測(cè)量信號(hào)需要被翻譯成電流或電壓的形式,這相當(dāng)于轉(zhuǎn)換形式,有利于我們的信號(hào)的探索和研究。2)信號(hào)放大電路通過(guò)傳感器檢測(cè)信號(hào)的測(cè)量往往是微弱的,對(duì)信號(hào)的分析和研究,我們需要對(duì)信號(hào)進(jìn)行放大處理,在放大信號(hào)的同時(shí),通常也把這些干擾信號(hào),所以我們?cè)诜糯笮盘?hào)的同時(shí),對(duì)于那些干擾信號(hào),有時(shí)我們也要設(shè)計(jì)一些減弱噪聲、減少干擾的電路也提高系統(tǒng)的穩(wěn)定性和精度。3)模數(shù)轉(zhuǎn)換電路信號(hào)通過(guò)由傳感器信號(hào)處理的放大電路,電路信號(hào)是一個(gè)模擬信號(hào)的循環(huán),以及隨后的處理的信號(hào),往往與數(shù)字系統(tǒng),所以我們需要模數(shù)轉(zhuǎn)換,把模擬信號(hào)量化為相應(yīng)的數(shù)字信號(hào)。4)數(shù)模轉(zhuǎn)換電路通過(guò)所產(chǎn)生的數(shù)字信號(hào)處理,我們可以模擬信號(hào)進(jìn)行詳細(xì)的分析和研究,如果你需要信號(hào)反饋電路的電路,我們將要去模數(shù)轉(zhuǎn)換,轉(zhuǎn)換成模擬信號(hào)的數(shù)字信號(hào)。第三章系統(tǒng)硬件設(shè)計(jì)3.1總體設(shè)計(jì)思想這次設(shè)計(jì)的基于串口通信的數(shù)據(jù)采集系統(tǒng)主要以采集周?chē)粘囟茸鳛橹饕獢?shù)據(jù)收集,使用溫度傳感器感應(yīng)周?chē)臏囟戎挡⒏袘?yīng)得到的溫度值交由STC89C51單片機(jī)處理。主控芯片選擇了STC89C51系列電子微型單片機(jī),在PC機(jī)上運(yùn)用微軟VisualC++編程語(yǔ)言做出可視化界面,控制數(shù)據(jù)的定時(shí)采集。然后利用STC89C51單片機(jī)串口通信與PC機(jī)接收相應(yīng)的溫度值轉(zhuǎn)換為數(shù)字信號(hào)。STC89C51單片機(jī)的串口負(fù)責(zé)單片機(jī)與PC機(jī)的串口通信,然后采用9針串口作為連接下位機(jī)(STC89C51單片機(jī))和上位機(jī)PC機(jī)的橋梁,這樣可以實(shí)現(xiàn)計(jì)算機(jī)對(duì)下位機(jī)所傳上來(lái)的數(shù)據(jù)的采集。VisualC++數(shù)據(jù)接收界面目的是起到控制數(shù)據(jù)的接收和顯示接收到的數(shù)據(jù)的作用。結(jié)構(gòu)框圖如圖3-1所示。圖3-1系統(tǒng)總體結(jié)構(gòu)框圖3.2主控芯片模塊3.2.1主控芯片模塊電路本次主控芯片模塊的外圍電路包括電子微型單片機(jī)STC89C51和其他功能電路,復(fù)位電路提供復(fù)位電壓,提供水晶系統(tǒng)頻率。這部分電路負(fù)責(zé)程序存儲(chǔ)和運(yùn)行。晶體可以在1.2MHz的~12MHz的選擇,電容典型值為20pF~100pF的C1和C2之間做出選擇,但在高頻率穩(wěn)定度60pf~70pF振蕩器的時(shí)間。典型值通常選擇為30pF,但此電路采用30pF。STC89C51的減少是通過(guò)外部復(fù)位電路實(shí)現(xiàn)。復(fù)位電路通常用于自動(dòng)復(fù)位和復(fù)位按鈕的方式。這個(gè)設(shè)計(jì)是用在按鈕復(fù)位的電源上。本次設(shè)計(jì)的基于STC89C51主控芯片模塊電路,如圖3-2所示。圖3-2STC89C51單片機(jī)系統(tǒng)3.2.2主控芯片簡(jiǎn)介STC89C51單片機(jī)是一種低功耗,高性能CMOS8位微控制器。采用了高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)產(chǎn)品8OC51指令和引腳完全兼容。STC89C51單片機(jī)具有以下標(biāo)準(zhǔn)功能:八千多媒體,二百五十六字節(jié)RAM,三十二位I/0口,看門(mén)狗定時(shí)器,倆個(gè)數(shù)據(jù)指針,3個(gè)十六位定時(shí)器/計(jì)數(shù)器,一個(gè)六向量二級(jí)中斷結(jié)構(gòu),全雙工串口芯片晶體振蕩器和時(shí)鐘電路。此外,STC89C51可降至O赫茲靜態(tài)邏輯,支持倆種軟件可選擇省電模式。3.2.3STC89C51引腳功能STC89C51的引腳圖,如圖3-3所示。圖3-3STC89C51的引腳圖STC89C51引腳功能說(shuō)明如下:1)

VCC:電源電壓。2)GND:地。3)P0口:P0口為一個(gè)8位漏級(jí)開(kāi)路雙向I/O口,也即地址/數(shù)據(jù)總線復(fù)用口。4)

P1口:P1是一個(gè)具有內(nèi)部上拉電阻的8位雙向I/O口,P1輸出緩沖器可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門(mén)級(jí)。其第二功能具體如表3-1所示表3-1

P1口第二功能端口引腳第二功能P1.0T2(定時(shí)器/計(jì)數(shù)器T2的外部計(jì)數(shù)輸入),時(shí)鐘輸出P1.1T2EX(定時(shí)器/計(jì)數(shù)器T2的捕捉/重載觸發(fā)信號(hào)和方向控制)P1.5MOSI(在系統(tǒng)編程用)P1.6MISO(在系統(tǒng)編程用)P1.7SCK(在系統(tǒng)編程用)5)P2口:P2是具有內(nèi)部上拉電阻的一個(gè)8位雙向I/O口,P2輸出緩沖器能驅(qū)動(dòng)4個(gè)TTL邏輯電平。6)P3口:與P2口相同。P3的第二功能表如表3-2所示。表3-2P3口的第二功能端口引腳第二功能端口引腳第二功能P3.0RXD(串行輸入口)P3.4TO(定時(shí)/計(jì)數(shù)器0)P3.1TXD(串行輸出口)P3.5T1(定時(shí)/計(jì)數(shù)器1)P3.2INTO(外中斷0)P3.6WR(外部數(shù)據(jù)存儲(chǔ)器寫(xiě)選通)P3.3INT1(外中斷1)P3.7RD(外部數(shù)據(jù)存儲(chǔ)器讀選通)另外,P3口還可以接收用于FLASH閃存編程和程序校驗(yàn)的控制信號(hào)。3.3

溫度傳感模塊3.3.1溫度傳感器模塊電路基于DS18B20多點(diǎn)測(cè)溫系統(tǒng)STC89C51為中心的設(shè)備,以KEIL進(jìn)行系統(tǒng)開(kāi)發(fā)平臺(tái),采用C語(yǔ)言編程,在PROTEUS仿真軟件中設(shè)計(jì)。智能溫度傳感器DS18B20是它的數(shù)字輸入/輸出,基于單總線技術(shù),接收來(lái)自主機(jī)的命令下處理相應(yīng)的DS18B20的內(nèi)部協(xié)議,溫度將被轉(zhuǎn)換為串行端口到主機(jī)。根據(jù)與IO口模擬DS18B20定時(shí)的通信協(xié)議主機(jī)發(fā)送命令(初始化命令,ROM命令,功能命令)給DS18B20,并讀取溫度值,在內(nèi)部流程,圖形化LCD顯示模塊溫度相應(yīng)的數(shù)值每個(gè)點(diǎn)。在系統(tǒng)啟動(dòng)的時(shí)候,可以使用4×4鍵盤(pán)設(shè)定溫度值的上限,當(dāng)溫度超過(guò)設(shè)定值時(shí),報(bào)警啟動(dòng)報(bào)警,實(shí)現(xiàn)對(duì)每個(gè)點(diǎn)溫度的實(shí)時(shí)監(jiān)測(cè)。每個(gè)DS18B20都有其自身的序列號(hào),因此,系統(tǒng)可以在一個(gè)總線4DS18B20上連接,通過(guò)CRC校驗(yàn),每個(gè)DS18B20ROM地址,尋址多達(dá)DS18B20的響應(yīng),接收主機(jī)命令,發(fā)送給主機(jī)轉(zhuǎn)換溫度。使用DS18B20尋址技術(shù),使得硬件更簡(jiǎn)單。DS18B20與單片機(jī)的連接電路如圖3-4所示。圖3-4DS18B20與單片機(jī)的連接電路DS18B20數(shù)字溫度計(jì)是達(dá)拉斯公司的單總線器件,具有簡(jiǎn)潔的線路,更精致的小尺寸。因此用它來(lái)組成一個(gè)測(cè)量系統(tǒng),其特點(diǎn)是簡(jiǎn)單的線路,在單一的通信線路上,可以有很多這樣的數(shù)字溫度計(jì),非常方便。3.3.2DS18B20引腳功能表3-3DS18B20詳細(xì)引腳功能描述序號(hào)名稱(chēng)引腳功能描述1GND接地信號(hào)2DQ數(shù)字輸入輸出引腳,開(kāi)漏總線接口引腳,當(dāng)使用寄生電源時(shí),可向電源提供電源。3VDD可選擇的VDD引腳,當(dāng)工作于寄生電源時(shí),該引腳必須接地3.3.3DS18B20工作流程DS18B20通電后,在空閑狀態(tài)。以啟動(dòng)溫度測(cè)量和模擬到數(shù)字的轉(zhuǎn)換,所述處理器所需的轉(zhuǎn)換完成后,發(fā)出一個(gè)轉(zhuǎn)換T[44H]的命令,

DS18B20返回到空閑狀態(tài)。溫度數(shù)據(jù)被存儲(chǔ)在溫度寄存器的一個(gè)符號(hào)的16位的補(bǔ)充。符號(hào)位說(shuō)明了溫度是正值還是負(fù)值。正值時(shí)S=0,負(fù)值時(shí)S=1。預(yù)想訪問(wèn)DS18B20必須嚴(yán)格遵守以上這一命令序列,如果不慎丟失任何一步或操作序列混亂,DS18B20就都不會(huì)響應(yīng)主機(jī)(除了SearchROM和AlarmSearch這兩個(gè)命令,但是在這兩個(gè)命令后,主機(jī)往往必須返回到第一步)。a)初始化:DS18B20通過(guò)初始化序列交換的所有數(shù)據(jù)。由主機(jī)復(fù)位脈沖以及由DS18B20發(fā)出的后續(xù)響應(yīng)脈沖形式發(fā)出。當(dāng)DS18B20發(fā)給主機(jī)的響應(yīng)時(shí)間,這表明它在總線上,并準(zhǔn)備工作主機(jī)的響應(yīng)。b)ROM命令:ROM命令的64位到每個(gè)設(shè)備的ROM代碼,主機(jī)指定一個(gè)特定的設(shè)備(如果您有多個(gè)設(shè)備掛在總線上)進(jìn)行通信。每個(gè)ROM命令的是8位長(zhǎng)。DS18B20的ROM如表3-4所示。表3-4ROM命令指令協(xié)議功能讀ROM33H讀DS18B20中的編碼(即64位地址)。符合ROM55H發(fā)出此命令后,接著發(fā)出64位ROM編碼,訪問(wèn)單總線上與該編碼相對(duì)應(yīng)的DS18B20,使之做出響應(yīng),為下一步對(duì)該DS18B20的讀寫(xiě)做準(zhǔn)備。搜索ROM0F0H用于確定掛接在同一總線上DS18B20的個(gè)數(shù)和識(shí)別64位ROM地址,為操作各器件作好準(zhǔn)備。跳過(guò)ROM0CCH忽略64位ROM地址,直接向DS18B20V溫度轉(zhuǎn)換命令,適用于單個(gè)DS18B20工作。告警搜索命令0ECH執(zhí)行后,只有溫度超過(guò)廟宇值上限或下限的片子才做出響應(yīng)。溫度轉(zhuǎn)換44H啟動(dòng)DS18B20進(jìn)行溫度轉(zhuǎn)換,轉(zhuǎn)換時(shí)間最長(zhǎng)為500ms(典型為200ms),結(jié)果傳入內(nèi)部9字節(jié)RAM中。讀暫存器BEH讀取內(nèi)部RAM中9字節(jié)的內(nèi)容。寫(xiě)暫存器4EH發(fā)出向內(nèi)部RAM的第3、4字節(jié)寫(xiě)上、下溫度數(shù)據(jù)命令,發(fā)送溫度命令之后,傳達(dá)兩字節(jié)的數(shù)據(jù)。復(fù)制暫存器48H將RAM中第3、4字內(nèi)容復(fù)制到E2PROM中。重調(diào)E2PROM0B8H將E2PROM中內(nèi)容恢復(fù)到RAM中的第3、4字節(jié)。讀供電方式0B4H讀DS18B20的供電模式,寄生供電時(shí)DS18B20發(fā)送“0”,外部供電時(shí)DS18B20發(fā)送“1”。3.4液晶顯示模塊3.4.1液晶顯示模塊電路液晶顯示模塊憑借其低功耗和小尺寸,液晶顯示模塊顯示內(nèi)容豐富,模塊化,簡(jiǎn)單的接口等諸多優(yōu)點(diǎn)被廣泛使用。液晶顯示模塊通常分字符型和點(diǎn)陣型兩種。前者往往只能顯示常用的字符,而點(diǎn)陣型液晶顯示模塊除了顯示字符外還能顯示出各種圖形和漢字。其外圍電路如圖3-5所示。圖3-5液晶顯示屏與單片機(jī)的連接電路3.4.2液晶顯示屏簡(jiǎn)介12864是一個(gè)4位/8位并行,2線或以多種方式3線串行接口,內(nèi)部含有國(guó)標(biāo)一級(jí)、二級(jí)簡(jiǎn)體中文字庫(kù)的點(diǎn)陣圖形液晶顯示模塊。其128×64顯示分辨率,內(nèi)置8,192個(gè)16*16中國(guó)字和12816*8的ASCII字符集。靈活的接口和模塊是簡(jiǎn)單,容易說(shuō)明,可能構(gòu)成了漢語(yǔ)的人機(jī)交互圖形界面??梢燥@示8×416×16點(diǎn)陣的字符。圖形顯示就可以完成。低壓電力消耗是另一個(gè)顯著特點(diǎn)。由具有相同類(lèi)型的圖形點(diǎn)陣液晶顯示模塊的比較模塊LCD顯示程序,不管硬件結(jié)構(gòu)或顯示程序的更加簡(jiǎn)潔,模塊價(jià)格比相同點(diǎn)陣圖形LCD模塊略低。其結(jié)構(gòu)圖如圖3-6所示。圖3-6LCD結(jié)構(gòu)尺寸3.4.3液晶顯示器接口控制器接口信號(hào)說(shuō)明:如表3-5,3-6所示。表3-5RS和R/W的配合選擇決定控制界面的4種模式RSR/W功能說(shuō)明LLMPU寫(xiě)指令到指令暫存器(IR)LH讀出忙標(biāo)志(BF)及地址記數(shù)器(AC)的狀態(tài)HLMPU寫(xiě)入數(shù)據(jù)到數(shù)據(jù)暫存器(DR)HHMPU從數(shù)據(jù)暫存器(DR)中讀出數(shù)據(jù)表3-6E信號(hào)E狀態(tài)執(zhí)行動(dòng)作結(jié)果高——>低I/O緩沖——>DR配合/W進(jìn)行寫(xiě)數(shù)據(jù)或指令高DR——>I/O緩沖配合R進(jìn)行讀數(shù)據(jù)或指令低/低——>高無(wú)動(dòng)作第四章系統(tǒng)軟件設(shè)計(jì)系統(tǒng)軟件設(shè)計(jì)包括兩個(gè)部分:固體程序設(shè)計(jì)和PC應(yīng)用程序設(shè)計(jì)。兩者互相配合,才能完成可靠、高速的數(shù)據(jù)傳輸與采集。實(shí)現(xiàn)對(duì)溫度數(shù)據(jù)的采集、分析與存儲(chǔ)。4.1

固體程序設(shè)計(jì)固體程序設(shè)計(jì)又叫做單片機(jī)程序是指固化到微控制器模塊內(nèi)的程序。只有在運(yùn)行該程序的時(shí)候,外部設(shè)備才也已被認(rèn)為是具有給定功能的外部設(shè)備。系統(tǒng)設(shè)計(jì)的固定程序主要包括數(shù)據(jù)采集系統(tǒng)和數(shù)據(jù)傳輸系統(tǒng)。4.1.1數(shù)據(jù)采集系統(tǒng)單片機(jī)應(yīng)用程序是系統(tǒng)與用戶(hù)的接口,它通過(guò)溫度傳感器將溫度模擬信號(hào)轉(zhuǎn)變?yōu)閿?shù)字信號(hào),利用與單片機(jī)相連的9針串口線,將數(shù)據(jù)傳送到PC端。在PC端檢測(cè)溫度是否達(dá)到報(bào)警閾值,如果大于報(bào)警溫度,則響起警報(bào);如果小于報(bào)警溫度,則不響警報(bào)。最后將數(shù)據(jù)的返回值再通過(guò)與單片機(jī)相連的9針串口線返回到單片機(jī),驅(qū)動(dòng)液晶顯示屏顯示當(dāng)下的溫度。數(shù)據(jù)采集系統(tǒng)流程如圖4-1所示::圖4-1數(shù)據(jù)采集系統(tǒng)流程圖4.1.2數(shù)據(jù)傳輸系統(tǒng)PC機(jī)的串口設(shè)置、數(shù)據(jù)分析與采集。采用了VC++語(yǔ)言編寫(xiě)的winForm程序,實(shí)現(xiàn)對(duì)溫度數(shù)據(jù)的分析與管理。串口程序得到數(shù)據(jù),然后存入臨時(shí)數(shù)組,判定其正確,然后寫(xiě)入記事本文件。否則就會(huì)響起警鈴。這樣可以方便以后的調(diào)用與分析。在該系統(tǒng)里,設(shè)置了采集的溫度的上下限,并在線性圖中描繪出來(lái)。若溫度超過(guò)上下限值,系統(tǒng)會(huì)記錄下超過(guò)上下限溫度的實(shí)時(shí)數(shù)據(jù)值,并寫(xiě)入日志。數(shù)據(jù)傳輸系統(tǒng)的流程如圖4-2所示。圖4-2溫度采集軟件流程圖4.2串口通信程序設(shè)計(jì)4.2.1MicrosoftVisualC++開(kāi)發(fā)環(huán)境簡(jiǎn)介在電腦上登陸微軟官網(wǎng)下載并安裝既可以使用。4.2.2MicrosoftVisualC++程序設(shè)計(jì)實(shí)現(xiàn)(一)

打開(kāi)串口1)Win32系統(tǒng)把文件的概念進(jìn)行了擴(kuò)展。無(wú)論是文件、通信設(shè)備、命名管道、郵件槽、磁盤(pán)、還是控制臺(tái),都是用API函數(shù)CreateFile來(lái)打開(kāi)或創(chuàng)建的,其原型為:HANDLECreateFile(LPCTSTRfilename,

//將要打開(kāi)的串口邏輯名,如COM1或COM2DWORDdwAccess,//指定串口訪問(wèn)的類(lèi)型,可以是讀取、寫(xiě)入或兩者并列DWORDdwShareMode,//指定共享屬性,由于串口不能共享,該參數(shù)必須置為0LPSECURITY_ATTRIBUTESlaps,//引用安全性屬性結(jié)構(gòu),缺省值為NULLDWORDdwCreate,//創(chuàng)建標(biāo)志,對(duì)串口操作該參數(shù)必須置為OPENEXISTINGDWORD

dwAttrsAndFlags,//屬性描述,用于指定該串口是否進(jìn)行異步操作,該值為FILE_FLAG_OVERLAPPED,表示使用異步的I/O;該值為0,表示同步I/O操作;HANDLEhTemplateFile,//指向模板文件的句柄,對(duì)串口而言該參數(shù)必須置為NULL);2)同步I/O方式打開(kāi)串口的程序代碼:C++代碼1.HANDLEhCom;//全局變量,串口句柄2.hCom=CreateFile("COM1",//COM1口3.GENERIC_READ|GENERIC_WRITE,//允許讀和寫(xiě)4.0,//獨(dú)占方式5.NULL,6.OPEN_EXISTING,//打開(kāi)而不是創(chuàng)建7.0,//同步方式8.NULL);9.if(hCom==(HANDLE)-1)10.{11.AfxMessageBox("打開(kāi)COM失敗!");12.returnFALSE;13.}14.returnTRUE;3)異步I/O打開(kāi)串口的示例代碼:C++代碼1.HANDLEhCom;//全局變量,串口句柄2.hCom=CreateFile("COM1",//COM1口3.GENERIC_READ|GENERIC_WRITE,//允許讀和寫(xiě)4.0,//獨(dú)占方式5.NULL,6.OPEN_EXISTING,//打開(kāi)而不是創(chuàng)建7.FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,//異步方式8.NULL);9.if(hCom==INVALID_HANDLE_VALUE)10.{11.AfxMessageBox("打開(kāi)COM失敗!");12.returnFALSE;13.}3.14.returnTRUE;(二)配置串口1)

typedstruck_DCB{……DWORDBaudRate;//波特率,指定通信設(shè)備的傳輸速率。這個(gè)可以是實(shí)際波特率值,也可以是下面的常量值之一:CBR_110,CBR_300,CBR_600,CBR_1200,CBR_2400,CBR_4800,CBR_9600,CBR_19200,CBR_38400,CBR_56000,CBR_57600,CBR_115200,CBR_128000,CBR_256000,CBR_14400DWORDfParity;//指定奇偶校驗(yàn)使能。若該成員為1,允許奇偶校驗(yàn)檢查……BYTEByteSize;//通信字節(jié)位數(shù),4—8BYTEParity;//指定奇偶校驗(yàn)方法。該成員可以有下列值:EVENPARITY偶校驗(yàn)NOPARITY無(wú)校驗(yàn)MARKPARITY標(biāo)記校驗(yàn)ODDPARITY奇校驗(yàn)BYTEStopBits;//指定停止位的位數(shù)。該成員可以有下列參數(shù):ONESTOPBIT1位停止位TWOSTOPBITS2位停止位ON5STOPBITS1.5位停止位}2)GetCommState函數(shù)可以獲得COM口的設(shè)備控制塊,從而獲得相關(guān)參數(shù):BOOLGetCommState(HANDLEhFile,//標(biāo)識(shí)通訊端口的句柄LPDCBlpDCB//指向一個(gè)設(shè)備控制塊(DCB結(jié)構(gòu))的指針);3)SetCommState函數(shù)設(shè)置COM口的設(shè)備控制塊:BOOLSetCommState(HANDLEhFile,LPDCBlpDCB);4)SetupComm函數(shù)可以設(shè)置串行口的輸入和輸出緩沖區(qū)的大小。除了在BCD中的設(shè)置外,程序一般還需要設(shè)置I/O緩沖區(qū)的大小和超時(shí)。Windows用I/O緩沖區(qū)來(lái)暫存串口輸入和輸出的數(shù)據(jù)。如果通信的速率較高,則應(yīng)該設(shè)置較大的緩沖區(qū)。BOOLSetupComm(HANDLEhFile,//通信設(shè)備的句柄DWORDdwInQueue,//輸入緩沖區(qū)的大?。ㄗ止?jié)數(shù))DWORDdwOutQueue//輸出緩沖區(qū)的大?。ㄗ止?jié)數(shù))

);5)

SetCommTimeouts可以用某一個(gè)COMMTIMEOUTS結(jié)構(gòu)的內(nèi)容來(lái)設(shè)置超時(shí)。在用ReadFile和WriteFile讀寫(xiě)串行口時(shí),需要考慮超時(shí)問(wèn)題。超時(shí)的作用是在指定的時(shí)間內(nèi)沒(méi)有讀入或發(fā)送指定數(shù)量的字符,ReadFile或WriteFile的操作仍然會(huì)結(jié)束。要查詢(xún)當(dāng)前的超時(shí)設(shè)置應(yīng)調(diào)用GetCommTimeouts函數(shù),該函數(shù)填充一個(gè)COMMTIMEOUTS結(jié)構(gòu)。讀寫(xiě)串口的超時(shí)有兩種:間隔超時(shí)和總超時(shí)。間隔超時(shí)是指在接收時(shí)兩個(gè)字符之間的最大時(shí)延??偝瑫r(shí)是指讀寫(xiě)操作總共花費(fèi)的最大時(shí)間。寫(xiě)操作只會(huì)識(shí)別總超時(shí),而讀操作兩種超時(shí)都支持。用COMMTIMEOUTS結(jié)構(gòu)可以規(guī)定讀寫(xiě)操作的超時(shí)。COMMTIMEOUTS結(jié)構(gòu)的定義為:typedefstruck_COMMTIMEOUTS{DWORDReadIntervalTimeout;//讀間隔超時(shí)DWORDReadTotalTimeoutMultiplier;//讀時(shí)間系數(shù)DWORDReadTotalTimeoutConstant;//讀時(shí)間常量DWORDWriteTotalTimeoutMultiplier;//寫(xiě)入時(shí)間系數(shù)DWORDWriteTotalTimeoutConstant;//寫(xiě)入時(shí)間常量}COMMTIMEOUTS結(jié)構(gòu)的成員都以毫秒作為單位。配置串口的示例代碼:C++代碼SetupComm(hCom,1024,1024);//輸入緩沖區(qū)和輸出緩沖區(qū)的大小都是10241.COMMTIMEOUTSTimeOuts;//設(shè)定讀超時(shí)2.TimeOuts.ReadIntervalTimeout=1000;3.TimeOuts.ReadTotalTimeoutMultiplier=500;4.TimeOuts.ReadTotalTimeoutConstant=5000;//設(shè)定寫(xiě)超時(shí)5.TimeOuts.WriteTotalTimeoutMultiplier=500;6.TimeOuts.WriteTotalTimeoutConstant=2000;7.SetCommTimeouts(hCom,&TimeOuts);//設(shè)置超時(shí)8.DCBdcb;9.GetCommState(hCom,&dcb);10.dcb.BaudRate=9600;//波特率為960011.dcb.ByteSize=8;//每個(gè)字節(jié)有8位12.dcb.Parity=NOPARITY;//無(wú)奇偶校驗(yàn)位13.dcb.StopBits=TWOSTOPBITS;//兩個(gè)停止位14.SetCommState(hCom,&dcb);15.PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);參數(shù)dwFlags指定要完成的操作,可以是下列值的組合:PURGE_TXABORT中斷所有寫(xiě)操作并立即返回,即使寫(xiě)操作還沒(méi)有完成。PURGE_RXABORT中斷所有讀操作并立即返回,即使讀操作還沒(méi)有完成。PURGE_TXCLEAR清除輸出緩沖區(qū)。PURGE_RXCLEAR清除輸入緩沖區(qū)。(三)讀寫(xiě)串口1)使用ReadFile和WriteFile讀寫(xiě)串口。在用ReadFile和WriteFile讀寫(xiě)串口時(shí),既可以同步執(zhí)行,也可以異步執(zhí)行。在同步執(zhí)行時(shí),函數(shù)直到操作完成后才返回。這意味著同步執(zhí)行時(shí)線程會(huì)被阻塞,從而導(dǎo)致效率下降。在異步執(zhí)行時(shí),即使操作還未完成,這兩個(gè)函數(shù)也會(huì)立即返回,費(fèi)時(shí)的I/O操作在后臺(tái)進(jìn)行。下面是兩個(gè)函數(shù)的聲明:BOOLReadFile(HANDLEhFile,//串口的句柄//讀入的數(shù)據(jù)存儲(chǔ)的地址,//即讀入的數(shù)據(jù)將存儲(chǔ)在以該指針的值為首地址的一片內(nèi)存區(qū)LPVOIDlpBuffer,//要讀入的數(shù)據(jù)的字節(jié)數(shù)DWORDnNumberOfBytesToRead,//指向一個(gè)DWORD數(shù)值,該數(shù)值返回讀操作實(shí)際讀入的字節(jié)數(shù)LPDWORDlpNumberOfBytesRead,//異步操作時(shí),該參數(shù)指向一個(gè)OVERLAPPED結(jié)構(gòu),同步操作時(shí),該參數(shù)為NULL。LPOVERLAPPEDlpOverlapped);BOOLWriteFile(HANDLEhFile,//串口的句柄//寫(xiě)入的數(shù)據(jù)存儲(chǔ)的地址,//即以該指針的值為首地址的LPCVOIDlpBuffer,//要寫(xiě)入的數(shù)據(jù)的字節(jié)數(shù)DWORDnNumberOfBytesToWrite,//指向一個(gè)DWORD數(shù)值,該數(shù)值返回實(shí)際寫(xiě)入的字節(jié)數(shù)LPDWORDlpNumberOfBytesWritten,//異步操作時(shí),該參數(shù)指向一個(gè)OVERLAPPED結(jié)構(gòu),//同步操作時(shí),該參數(shù)為NULL。LPOVERLAPPEDlpOverlapped);ERROR_IO_PENDING。這說(shuō)明異步操作還未完成。同步方式實(shí)現(xiàn)讀寫(xiě)串口的程序C++代碼//同步讀串口1.charstr[100];2.DWORDwCount;//讀取的字節(jié)數(shù)3.BOOLbReadStat;4.bReadStat=ReadFile(hCom,str,100,&wCount,NULL);5.if(!bReadStat){AfxMessageBox("讀串口失敗!");returnFALSE;}6.returnTRUE;//同步寫(xiě)串口7.charlpOutBuffer[100];8.DWORDdwBytesWrite=100;9.COMSTATComStat;10.DWORDdwErrorFlags;11.BOOLbWriteStat;12.ClearCommError(hCom,&dwErrorFlags,&ComStat);13.bWriteStat=WriteFile(hCom,lpOutBuffer,dwBytesWrite,&dwBytesWrite,NULL);14.if(!bWriteStat){AfxMessageBox("寫(xiě)串口失敗!");}15.PurgeComm(hCom,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);2)OVERLAPPED結(jié)構(gòu)和GetOverlappedResult函數(shù)異步I/O非常靈活,它也可以實(shí)現(xiàn)阻塞(例如我們可以設(shè)置一定要讀取到一個(gè)數(shù)據(jù)才能進(jìn)行到下一步操作)。有兩種方法可以等待操作完成:一種方法是用像WaitForSingleObject這樣的等待函數(shù)來(lái)等待OVERLAPPED結(jié)構(gòu)的hEvent成員;另一種方法是調(diào)用GetOverlappedResult函數(shù)等待。OVERLAPPED結(jié)構(gòu)包含了異步I/O的一些信息,定義如下:typedefstruck_OVERLAPPED{DWORDInternal;DWORDInternalHigh;DWORDOffset;DWORDOffsetHigh;HANDLEhEvent;}OVERLAPPED;在使用ReadFile和WriteFile異步操作時(shí),線程需要?jiǎng)?chuàng)建OVERLAPPED結(jié)構(gòu),以給這兩個(gè)函數(shù)使用。線程通過(guò)OVERLAPPED結(jié)構(gòu)獲得當(dāng)前的操作狀態(tài),該結(jié)構(gòu)最重要的成員是hEvent。hEvent是讀寫(xiě)事件。當(dāng)串口使用異步通訊時(shí),函數(shù)返回時(shí)操作可能還沒(méi)有完成,程序可以通過(guò)檢查該事件得知是否讀寫(xiě)完畢。當(dāng)調(diào)用ReadFile,WriteFile函數(shù)的時(shí)候,該成員會(huì)自動(dòng)被置為無(wú)信號(hào)狀態(tài);當(dāng)異步操作完成后,該成員變量會(huì)自動(dòng)被置為有信號(hào)狀態(tài)。GetOverlappedResult函數(shù)BOOLGetOverlappedResult(HANDLEhFile,//串口的句柄//指向異步操作開(kāi)始時(shí)指定的OVERLAPPED結(jié)構(gòu)LPOVERLAPPEDlpOverlapped,//指向一個(gè)32位變量,該變量的值返回實(shí)際讀寫(xiě)操作傳輸?shù)淖止?jié)數(shù)。LPDWORDlpNumberOfBytesTransferred,//該參數(shù)用于指定函數(shù)是否一直等到異步操作結(jié)束。//如果該參數(shù)為T(mén)RUE,函數(shù)直到操作結(jié)束才返回。//如果該參數(shù)為FALSE,函數(shù)直接返回,這時(shí)如果操作沒(méi)有完成,通過(guò)調(diào)用GetLastError()函數(shù)會(huì)返回ERROR_IO_INCOMPLETE。BOOLbWait);該函數(shù)返回異步操作的結(jié)果,用來(lái)判斷異步操作是否完成,它是通過(guò)判斷OVERLAPPED結(jié)構(gòu)中的hEvent是否被置位來(lái)實(shí)現(xiàn)的。異步讀寫(xiě)串口的程序代碼C++代碼//異步讀串口1.charlpInBuffer[1024];2.DWORDdwBytesRead=1024;3.COMSTATComStat;4.DWORDdwErrorFlags;5.OVERLAPPEDm_osRead;6.memset(&m_osRead,0,sizeof(OVERLAPPED));7.m_osRead.HEvent=CreateEvent(NULL,TRUE,FALSE,NULL);8.ClearCommError(hCom,&dwErrorFlags,&ComStat);9.dwBytesRead=min(dwBytesRead,(DWORD)ComStat.cbInQue);10.if(!dwBytesRead)returnFALSE;11.BOOLbReadStatus;12.bReadStatus=ReadFile(hCom,lpInBuffer,dwBytesRead,&dwBytesRead,&m_osRead);13.if(!bReadStatus)//如果ReadFile函數(shù)返回FALSE14.{15.if(GetLastError()==ERROR_IO_PENDING)//GetLastError()函數(shù)返回ERROR_IO_PENDING,表明串口正在進(jìn)行讀操作16.{17.WaitForSingleObject(m_osRead.hEvent,2000);//使用WaitForSingleObject函數(shù)等待,直到讀操作完成或延時(shí)已達(dá)到2秒鐘//當(dāng)串口讀取操作進(jìn)行完畢后,m_osRead的hEvent事件會(huì)變?yōu)橛行盘?hào)18.PurgeComm(hCom,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);19.returndwBytesRead;20.}21.return0;22.}23.PurgeComm(hCom,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);24.returndwBytesRead;//異步寫(xiě)串口25.

charbuffer[1024];26.DWORDdwBytesWritten=1024;27.DWORDdwErrorFlags;28.COMSTATComStat;29.OVERLAPPEDm_osWrite;30.BOOLbWriteStat;31.bWriteStat=WriteFile(hCom,buffer,dwBytesWritten,&dwBytesWritten,&m_OsWrite);32.if(!bWriteStat)33.{if(GetLastError()==ERROR_IO_PENDING)34.{WaitForSingleObject(m_osWrite.hEvent,1000);35.returndwBytesWritten;}36.return0;}37.returndwBytesWritten;(四)關(guān)閉串口使用CreateFile函數(shù)返回的句柄作為參數(shù)調(diào)用CloseHandle即可:BOOLCloseHandle(HANDLEhObject;//handletoobjecttoclose);第五章系統(tǒng)仿真結(jié)果5.1串口通信仿真結(jié)果本次設(shè)計(jì)的串口通信在上位機(jī)的界面,利用VC++生成一個(gè)系統(tǒng)窗口,顯示串口通信的實(shí)時(shí)詳細(xì)數(shù)據(jù)的傳輸情況。在窗口的上半部分是串口通信的通信內(nèi)容,可以看到正在通信的解碼后的詳細(xì)數(shù)據(jù)信息。在左下角外設(shè)參數(shù)設(shè)置選項(xiàng),可以實(shí)時(shí)調(diào)整該串口的串口序號(hào)、波特率、數(shù)據(jù)位、停止位和校驗(yàn)位。并且設(shè)置了“應(yīng)用設(shè)置”按鈕,在右下角是“設(shè)置數(shù)據(jù)包”條框,可以把要發(fā)送的數(shù)據(jù)通過(guò)手寫(xiě)輸入并通過(guò)串口通信進(jìn)行數(shù)據(jù)傳輸。在最后還有“關(guān)閉串口”,點(diǎn)擊就可以直接退出該串口通信的過(guò)程。該界面就像圖5-1顯示的一樣。圖5-1串口通信界面需要注意的是,在調(diào)試對(duì)不同的串口數(shù)據(jù)通信的時(shí)候,我們必須對(duì)通信串口的各個(gè)參數(shù),比如他們的編號(hào)、他們的波特率、他們的數(shù)據(jù)位等等不同的參數(shù)進(jìn)行設(shè)置,然后測(cè)試同信串口的有效性。在串口通信中,發(fā)送數(shù)據(jù)、接收數(shù)據(jù)的倆個(gè)不同串口對(duì)接收數(shù)據(jù)和發(fā)出數(shù)據(jù)都有程式化約定,其中重要的一點(diǎn)的約定就是不同通信串口之間的參數(shù)中的波特率必須相同。5.2數(shù)據(jù)采集系統(tǒng)仿真本次設(shè)計(jì)的溫度數(shù)據(jù)采集包括對(duì)溫度數(shù)據(jù)的獲取、加工與保存。本次設(shè)計(jì)在WIN3

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論