• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于C++Builder的PC機(jī)與單片機(jī)串口通信的實(shí)現(xiàn)

      2012-10-20 08:35:54張利利李曉京胡文東
      微型電腦應(yīng)用 2012年9期
      關(guān)鍵詞:PC機(jī)下位通信協(xié)議

      張利利,李曉京,胡文東,李 婭

      0 引言

      串行口是計(jì)算機(jī)與外部設(shè)備之間進(jìn)行數(shù)據(jù)交換的重要介質(zhì),所以串行通信在工程中有著廣泛的應(yīng)用。這種通信的實(shí)現(xiàn),經(jīng)常要組成上位機(jī)為PC機(jī)而下位機(jī)為單片機(jī)的二級(jí)系統(tǒng), 通過(guò)RS232 進(jìn)行通信【1】。筆者結(jié)合某人體重心測(cè)試系統(tǒng),詳細(xì)介紹在C++ Builder中實(shí)現(xiàn)PC機(jī)與單片機(jī)串行通信的方法。

      1 串行口通信

      串行通信是指數(shù)據(jù)是一位一位按順序傳送的通信方式。它有兩種基本的通信方式:異步通信和同步通信【2】。本系統(tǒng)采用的是異步通信,所以在此只對(duì)異步通信做簡(jiǎn)要介紹。

      1.1 異步串行通信

      異步串行通信時(shí),每個(gè)字符作為一個(gè)獨(dú)立的信息,可以隨機(jī)出現(xiàn)在數(shù)據(jù)流中。為確保異步通信的正確性,必須找到一種方法,使通信雙方在隨機(jī)傳送的字符內(nèi)部實(shí)現(xiàn)同步。這種方法就是在字符格式中設(shè)置起始位和停止位,即在一個(gè)字符正式發(fā)送之前先發(fā)一個(gè)起始位,該字符結(jié)束時(shí)再發(fā)一個(gè)停止位。接收器檢測(cè)到起始位便知道字符到達(dá)并開(kāi)始接收字符,檢測(cè)到停止位則知道字符傳輸已結(jié)束。由于這種通信協(xié)議是靠起始位和停止位來(lái)實(shí)現(xiàn)字符內(nèi)部同步的,所以有時(shí)也稱(chēng)為起止式協(xié)議。

      1.2 單片機(jī)與計(jì)算機(jī)相連

      普通的單片機(jī)都是通過(guò) RS232C串行口信號(hào)線(xiàn)與計(jì)算機(jī)相連??紤]到通信程序之間采用軟件握手以及降低編寫(xiě)PC與單片機(jī)的程序的復(fù)雜性,PC與單片機(jī)之間的連接只采用了RS232接口中的3根線(xiàn),即RXD,TXD,GND。因?yàn)橛蒔C出來(lái)的是RS232電平,而單片機(jī)是典型的TTL電平,因此在PC與單片機(jī)的連接中必須要有電平轉(zhuǎn)換電路,此處采用的是MAX232電平轉(zhuǎn)換電路。PC數(shù)據(jù)發(fā)送是通過(guò)TXD口經(jīng)過(guò)一個(gè)電平轉(zhuǎn)換電路連接到單片機(jī)的RXD端,而接收數(shù)據(jù)是由RXD經(jīng)過(guò)一個(gè)電平轉(zhuǎn)換電路連接到單片機(jī)的TXD口,如圖1所示:

      圖1 PC機(jī)與單片機(jī)的連接

      2 通信的程序設(shè)計(jì)

      本次設(shè)計(jì)中,以一個(gè)人體重心測(cè)控系統(tǒng)為背景,給出單片機(jī)部分和C++ Builder環(huán)境下的通信程序?qū)嵗ㄐ艆f(xié)議采用全雙工異步串行通信方式,通過(guò)RS232的RTS信號(hào)進(jìn)行收發(fā)轉(zhuǎn)換,傳輸數(shù)據(jù)采用16進(jìn)制數(shù)據(jù),PC機(jī)與單片機(jī)之間采用主從式通訊。

      2.1 通信協(xié)議

      串口通訊能有條不紊地進(jìn)行,依賴(lài)于串口通訊協(xié)議的制定。串口通訊協(xié)議分為底層通訊協(xié)議和用戶(hù)層協(xié)議。底層協(xié)議一般由計(jì)算機(jī)硬件提供商和設(shè)備廠家提供,而用戶(hù)層協(xié)議則是指數(shù)據(jù)以何種格式發(fā)送出去,或如何從接收到的某種格式的數(shù)據(jù)中提取需要的數(shù)據(jù)等,本系統(tǒng)采用的用戶(hù)層協(xié)議是自主定義的通信協(xié)議【3】,具體如下:

      (1)波特率19200bps,1個(gè)起始位,8個(gè)數(shù)據(jù)位,1個(gè)停止位,無(wú)奇偶校驗(yàn)。實(shí)際通信中,PC機(jī)和下位機(jī)發(fā)送的數(shù)據(jù),都帶有一個(gè)起始字和結(jié)束字,可以增加它的抗干擾性,當(dāng)下位機(jī)發(fā)送過(guò)來(lái)的數(shù)據(jù)亂了之后,上位機(jī)能立即檢測(cè)出來(lái),并將亂了的那塊數(shù)據(jù)包扔掉,重新開(kāi)始尋找下一個(gè)帶有起始字和結(jié)束符的一組完整數(shù)據(jù),這樣就能確保數(shù)據(jù)傳輸?shù)目煽啃浴?/p>

      (2)通信采用主從式,即PC機(jī)主動(dòng)發(fā)送命令給單片機(jī),單片機(jī)根據(jù)命令進(jìn)行相應(yīng)的動(dòng)作;所有發(fā)送的數(shù)據(jù)均采用16進(jìn)制數(shù)(注:OxA1即16進(jìn)制數(shù)A1)。PC機(jī)和下位機(jī)都采用定長(zhǎng)的數(shù)據(jù)格式進(jìn)行數(shù)據(jù)的發(fā)送,上位機(jī)和下位機(jī)首先只需判斷起始字是否為通信協(xié)議所規(guī)定的起始字,若是,才進(jìn)行下一步的操作;否則就不用對(duì)它進(jìn)行任何操作。這樣就確保了通信的高效性。

      (3)通信數(shù)據(jù)幀格式

      起始符:1個(gè)字節(jié),標(biāo)識(shí)一次發(fā)送的開(kāi)始,PC機(jī)默認(rèn)的A1,下位機(jī)默認(rèn)的為B1;

      命令:3個(gè)字節(jié),區(qū)分不同的操作;

      結(jié)束符:1個(gè)字節(jié),標(biāo)識(shí)一次發(fā)送的結(jié)束,默認(rèn)的為13;

      預(yù)留符:1個(gè)字節(jié),增加程序的可擴(kuò)充性。

      本系統(tǒng)的詳細(xì)命令與數(shù)據(jù)格式如下:

      握手:上位機(jī)發(fā)送A12000010013

      下位機(jī)回復(fù): B1000000000000000000000013

      開(kāi)始測(cè)試:

      無(wú)剩余能力測(cè)試時(shí)上位機(jī)發(fā)送:A12004000113,其中的01表示本次進(jìn)行無(wú)剩余能力測(cè)試。

      有剩余能力測(cè)試時(shí)上位機(jī)發(fā)送:A12004000213,其中的02表示本次進(jìn)行有剩余能力的測(cè)試。

      下位機(jī)根據(jù)第3、4個(gè)字節(jié)確定要發(fā)送多少組數(shù)據(jù)給PC機(jī),根據(jù)第5個(gè)字節(jié)確定要采集那些數(shù)據(jù)發(fā)送給PC機(jī)。

      結(jié)束測(cè)試:上位機(jī)連續(xù)3次發(fā)送命令A(yù)12000000413,其中的04表示結(jié)束本次測(cè)試。

      2.2 上位機(jī)的通信程序設(shè)計(jì)

      上位機(jī)的通信程序作為整個(gè)系統(tǒng)中的主機(jī),肩負(fù)著系統(tǒng)數(shù)據(jù)分析、指令下達(dá),同時(shí)提供信息系統(tǒng)管理功能的多重任務(wù)。因此我們選擇具有多任務(wù)的操作方式、良好的用戶(hù)界面和強(qiáng)大的數(shù)據(jù)庫(kù)管理功能的C++ Builder作為上位機(jī)的開(kāi)發(fā)軟件。在C++ Builder中實(shí)現(xiàn)串口通信的方法有多種,利用MSComm ActiveX控件(它的支持文件:MSComm32.OCX,需注冊(cè)) ,可以非常方便地創(chuàng)建串行通信應(yīng)用程序,但其程序執(zhí)行效率不夠高,并且無(wú)法應(yīng)用串行通信的一些底層功能。還可利用一種以Microsoft Communications Control(version 6)為基礎(chǔ)的串口類(lèi)CSerialPort,該串口類(lèi)將API和ActiveX控件結(jié)合起來(lái),以API編程的靈活性彌補(bǔ)了C++Builder中串口控件的不足。

      下面就詳細(xì)介紹如何利用串口通信類(lèi)CSerialPort來(lái)實(shí)現(xiàn)PC機(jī)與單片機(jī)的通信。 它的工作流程及在本系統(tǒng)的應(yīng)用如下:

      上位機(jī)程序工作流程如下:首先設(shè)置好串口參數(shù),再開(kāi)啟串口監(jiān)測(cè)工作線(xiàn)程,串口監(jiān)測(cè)工作線(xiàn)程監(jiān)測(cè)到串口接收到的數(shù)據(jù)、流控制事件或其他串口事件后,就以消息方式通知主程序,激發(fā)消息處理函數(shù)來(lái)進(jìn)行數(shù)據(jù)處理,這是對(duì)接收數(shù)據(jù)而言;發(fā)送數(shù)據(jù)可以直接發(fā)送。

      1)首先在應(yīng)用程序的工程中添加該類(lèi),同時(shí)要包含該類(lèi)的定義文件“SerialPort.h”,手工添加#include “SerialPort.h”;

      2) 自動(dòng)搜索PC機(jī)上有效的串行端口。一般的PC機(jī)最多可擴(kuò)展到128個(gè)串口,但是最常用的是前面10個(gè)串口,所以本系統(tǒng)只搜索前面10個(gè)串口號(hào)。首先聲明一個(gè)指向CSerialPort類(lèi)的指針CSerialPort *Comm,然后利用InitPort函數(shù)對(duì)1-10號(hào)串口逐一進(jìn)行初始化。如果初始化成功則為當(dāng)前PC機(jī)上的有效串口,并將該串口號(hào)保存在變量中。

      3)打開(kāi)通信端口,進(jìn)行數(shù)據(jù)的傳輸:

      4)關(guān)閉通信端口,釋放系統(tǒng)資源。在完成串行通信操作后,應(yīng)該將串行通信端口的資源歸還給操作系統(tǒng);

      2.3 下位機(jī)的通信程序設(shè)計(jì)

      STC系列單片機(jī)具有采集速度快,帶有8路的10位的A/D轉(zhuǎn)換,價(jià)格便宜等優(yōu)點(diǎn)。所以本系統(tǒng)采用的單片機(jī)為STC12C5412AD ,振蕩頻率為22.1184MHz,串口工作于方式1,定時(shí)/計(jì)數(shù)器1用作波特率發(fā)生器,PCON 中的SMOD位為0,發(fā)送的波特率為19200。下位機(jī)端通信程序采用C51編程語(yǔ)言在KeilC51環(huán)境下開(kāi)發(fā)的,通信流程,如圖2所示:

      圖2 單片機(jī)通信流程圖

      3 結(jié)束語(yǔ)

      利用C++ Builder作為軟件開(kāi)發(fā)平臺(tái),通過(guò)API函數(shù)實(shí)現(xiàn)PC機(jī)與單片機(jī)之間的串口通信,該系統(tǒng)經(jīng)過(guò)調(diào)試,運(yùn)行穩(wěn)定可靠,已成功應(yīng)用到人體重心測(cè)試系統(tǒng)中。本方法實(shí)現(xiàn)簡(jiǎn)單,通用性好,只要稍加改動(dòng)就能應(yīng)用到其他的系統(tǒng)中。

      [1]湯勃,徐立偉,饒潤(rùn)生.基于VB的PC機(jī)與單片機(jī)串行通信程序設(shè)計(jì).[j]武漢理工大學(xué)學(xué)報(bào).2002年 26卷第4期.534~536.

      [2]李朝青.PC機(jī)與單片機(jī)數(shù)據(jù)通信技術(shù).[M]北京航空航天大學(xué)出版社.1999.

      [3]黃良沛,黃昕,陽(yáng)小燕.Delphi環(huán)境中利用MSCOMM實(shí)現(xiàn)PLC與上位機(jī)的串口通信.[j]計(jì)算機(jī)應(yīng)用與軟件.2005年第22卷第4期.125~127.

      猜你喜歡
      PC機(jī)下位通信協(xié)議
      發(fā)射機(jī)房監(jiān)控系統(tǒng)之下位機(jī)
      基于PC機(jī)與單片機(jī)的多機(jī)通信技術(shù)及抗干擾方法
      基于Z-Stack通信協(xié)議棧的紅外地溫采集電路設(shè)計(jì)
      基于三菱FXPLC的感應(yīng)淬火機(jī)床與PC機(jī)的串行通信實(shí)現(xiàn)
      VC.NET下實(shí)現(xiàn)dsPIC單片機(jī)與PC機(jī)的通信
      電子制作(2017年23期)2017-02-02 07:16:47
      景洪電廠監(jiān)控系統(tǒng)下位機(jī)數(shù)據(jù)傳輸網(wǎng)絡(luò)改造
      基于DMX512通信協(xié)議的多路轉(zhuǎn)發(fā)器設(shè)計(jì)與研究
      圍觀黨“下位”,吐槽帝“登基”
      基于NS-3的PLC多頻通信協(xié)議仿真平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)
      CAN總線(xiàn)并發(fā)通信時(shí)下位機(jī)應(yīng)用軟件設(shè)計(jì)
      海门市| 潮安县| 西青区| 凯里市| 合水县| 大竹县| 鹿泉市| 呈贡县| 会宁县| 澎湖县| 塘沽区| 金塔县| 安平县| 襄樊市| 庆城县| 湘潭县| 石河子市| 吉木萨尔县| 铜山县| 祥云县| 炉霍县| 凌海市| 星座| 攀枝花市| 无棣县| 玉林市| 腾冲县| 桃园市| 云阳县| 崇义县| 丰台区| 开平市| 兰西县| 阜康市| 梅州市| 哈尔滨市| 文成县| 靖西县| 巨野县| 青阳县| 丁青县|