亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

        2012-10-20 08:35:54張利利李曉京胡文東
        微型電腦應(yīng)用 2012年9期
        關(guān)鍵詞:單片機(jī)系統(tǒng)

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

        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í)也稱為起止式協(xié)議。

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

        普通的單片機(jī)都是通過(guò) RS232C串行口信號(hào)線與計(jì)算機(jī)相連。考慮到通信程序之間采用軟件握手以及降低編寫PC與單片機(jī)的程序的復(fù)雜性,PC與單片機(jī)之間的連接只采用了RS232接口中的3根線,即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)行,依賴于串口通訊協(xié)議的制定。串口通訊協(xié)議分為底層通訊協(xié)議和用戶層協(xié)議。底層協(xié)議一般由計(jì)算機(jī)硬件提供商和設(shè)備廠家提供,而用戶層協(xié)議則是指數(shù)據(jù)以何種格式發(fā)送出去,或如何從接收到的某種格式的數(shù)據(jù)中提取需要的數(shù)據(jù)等,本系統(tǒng)采用的用戶層協(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ù)的操作方式、良好的用戶界面和強(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ǔ)的串口類CSerialPort,該串口類將API和ActiveX控件結(jié)合起來(lái),以API編程的靈活性彌補(bǔ)了C++Builder中串口控件的不足。

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

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

        1)首先在應(yīng)用程序的工程中添加該類,同時(shí)要包含該類的定義文件“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類的指針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.

        猜你喜歡
        單片機(jī)系統(tǒng)
        Smartflower POP 一體式光伏系統(tǒng)
        WJ-700無(wú)人機(jī)系統(tǒng)
        ZC系列無(wú)人機(jī)遙感系統(tǒng)
        基于單片機(jī)的SPWM控制逆變器的設(shè)計(jì)與實(shí)現(xiàn)
        電子制作(2019年13期)2020-01-14 03:15:28
        基于PowerPC+FPGA顯示系統(tǒng)
        基于單片機(jī)的層次漸變暖燈的研究
        電子制作(2019年15期)2019-08-27 01:12:10
        基于單片機(jī)的便捷式LCF測(cè)量?jī)x
        電子制作(2019年9期)2019-05-30 09:42:02
        半沸制皂系統(tǒng)(下)
        小議PLC與單片機(jī)之間的串行通信及應(yīng)用
        電子制作(2018年12期)2018-08-01 00:48:04
        連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
        500 Internal Server Error

        500 Internal Server Error


        nginx
        500 Internal Server Error

        500 Internal Server Error


        nginx
        500 Internal Server Error

        500 Internal Server Error


        nginx
        500 Internal Server Error

        500 Internal Server Error


        nginx
        500 Internal Server Error

        500 Internal Server Error


        nginx
        日韩a级精品一区二区| 无码AV无码免费一区二区| 日本久久精品在线播放| 日本按摩偷拍在线观看| 久久婷婷五月国产色综合| 少妇寂寞难耐被黑人中出| 呦泬泬精品导航| 色婷婷精久久品蜜臀av蜜桃| av中文字幕一区不卡| 亚洲а∨精品天堂在线| 日韩免费一区二区三区在线| 成人免费视频自偷自拍| 亚洲成人福利在线视频| 99久久免费国产精品| 成人激情四射网| 美女人妻中文字幕av| 欧美精品色婷婷五月综合| 亚洲日韩欧洲无码av夜夜摸| 国产一区二区丰满熟女人妻| 麻豆国产精品久久天堂| 无套内内射视频网站| 一本一本久久a久久精品综合麻豆| 日本韩国三级aⅴ在线观看 | 免费观看又色又爽又黄的| 日本中文字幕不卡在线一区二区| 久久青青草原亚洲av| 精品无码国产一区二区三区麻豆| 水蜜桃无码视频在线观看| 日韩成人精品日本亚洲| 蜜桃av中文字幕在线观看| 青青草国产精品一区二区| 亚洲天堂在线视频播放| 日本一区二区在线看看| 国精产品一区一区三区有限在线| 人与禽交av在线播放| 亚洲区精选网址| 中文字幕乱码亚洲在线| 欧美一区二区三区久久综| 国产精品毛片久久久久久l| 久久精品亚洲热综合一本色婷婷| 亚洲成aⅴ人片久青草影院|