本文主要利用MSComm控件實(shí)現(xiàn)單片機(jī)與PC機(jī)的串口通信,重點(diǎn)是軟件部分的設(shè)計(jì)。采用VC++ 6.0軟件開(kāi)發(fā)平臺(tái),利用MFC編程的思想方法,建立友好的人機(jī)交互界面。PC機(jī)向單片機(jī)發(fā)送信號(hào),將單片機(jī)接收到信號(hào)后向PC機(jī)返回的數(shù)據(jù)在界面中實(shí)現(xiàn)動(dòng)態(tài)顯示、保存等。該系統(tǒng)具有操作簡(jiǎn)單,實(shí)用性強(qiáng),可視化程度高等優(yōu)點(diǎn),為以后的軟件設(shè)計(jì)打下了一定的基礎(chǔ)。
1.引言
在眾多集成可視化開(kāi)發(fā)環(huán)境中,VisualC++是編程環(huán)境的最佳選擇,VC++應(yīng)用程序的開(kāi)發(fā)主要有兩種模式,一種是WIN API方式,另一種是MFC方式,傳統(tǒng)的WIN API方式比較繁瑣,而MFC是對(duì)WIN API再次封裝,MFC相對(duì)于WIN API開(kāi)發(fā)更具備效率優(yōu)勢(shì),開(kāi)發(fā)者只要在局部做簡(jiǎn)單地修改,即可處理大部分窗口事物。MFC封裝了200多個(gè)類(lèi)并且提供了友好的界面環(huán)境,具有類(lèi)管理靈活方便、代碼編寫(xiě)和界面設(shè)計(jì)集成交互操作、可移植性強(qiáng)等優(yōu)點(diǎn),與各種數(shù)學(xué)手段和數(shù)據(jù)處理、分析算法相結(jié)合還可以實(shí)現(xiàn)海量數(shù)據(jù)分析,智能、快速、靈活數(shù)據(jù)處理,使便攜現(xiàn)場(chǎng)檢測(cè)儀器功能強(qiáng),靈活度高,速度快,擴(kuò)展性好。
串口通信具有連續(xù)簡(jiǎn)單、使用靈活方便、數(shù)據(jù)傳遞可靠等優(yōu)點(diǎn),在數(shù)據(jù)采集系統(tǒng)、監(jiān)控系統(tǒng)和通信系統(tǒng)中,得到廣泛的應(yīng)用。在Win32下,用來(lái)實(shí)現(xiàn)串口通信的編程方式有兩種:其一可以調(diào)用Windows的API函數(shù),其二可以使用ActiveX控件。調(diào)用Windows提供的API函數(shù),可以實(shí)現(xiàn)用戶(hù)自定義功能,自由度高,缺點(diǎn)是這種方法編寫(xiě)復(fù)雜,需要清楚地掌握串口通信機(jī)制;使用ActiveX控件可以屏蔽底層的通信協(xié)議,只需對(duì)控件的屬性進(jìn)行設(shè)置并添加響應(yīng)的響應(yīng)處理函數(shù)即可實(shí)現(xiàn)串口通信中的數(shù)據(jù)收發(fā),缺點(diǎn)是不支持用戶(hù)對(duì)屬性的修改,只能使用控件提供的功能,在使用時(shí)有一定限制本文要實(shí)現(xiàn)RS232協(xié)議的串口通信,采用ActiveX控件即可滿(mǎn)足需求。
2.通信原理
PC機(jī)給單片機(jī)發(fā)送一個(gè)55(發(fā)其他的數(shù)據(jù)單片機(jī)不響應(yīng)),單片機(jī)通過(guò)串口將返回三個(gè)數(shù)據(jù)傳給PC:第一個(gè)是AA(作為數(shù)據(jù)包開(kāi)包的用的);第二個(gè)數(shù)據(jù)是一個(gè)隨機(jī)數(shù),第三個(gè)數(shù)據(jù)時(shí)EE(作為數(shù)據(jù)包結(jié)束的標(biāo)志)。
點(diǎn)擊接收數(shù)據(jù)就會(huì)在PC機(jī)上以16進(jìn)制、ASCII碼、10進(jìn)制方式顯示出來(lái)。指示燈LED:紅色的是電源燈,單片機(jī)處于待機(jī)狀態(tài)時(shí):綠燈亮,黃燈不亮;到單片機(jī)收到55數(shù)據(jù)時(shí),單片機(jī)要返回?cái)?shù)據(jù)的過(guò)程中:綠燈亮,黃燈會(huì)一閃(指示在發(fā)送數(shù)據(jù))。
3.硬件
單片機(jī)和PC機(jī)的波特率都設(shè)置為9600kbps.上位機(jī)的串口是COMl,其電平是RS232電平,而下位機(jī)的電平是T T L電平,所以需要電平轉(zhuǎn)換芯片MAX3232進(jìn)行電平轉(zhuǎn)換,實(shí)現(xiàn)PC機(jī)和單片機(jī)的通信。在MAX3232芯片上,選用其中一路發(fā)送/接收,R20UT接PIC16f877的RX,T2IN接PIC16f877的TX,T20UT接PC機(jī)的RD,R2IN接PC機(jī)的TD,這樣就能實(shí)現(xiàn)單片機(jī)與計(jì)算機(jī)互聯(lián)通信。圖1為單片機(jī)與PC的連接示意圖。
4.軟件
MSComm通信控件是最常用的ActiveX串口控件之一,它提供了一系列標(biāo)準(zhǔn)協(xié)議的通信接口,可以連接到其他通信設(shè)備(如單片機(jī),以及本系統(tǒng)使用的FPGA),而且在VC++、VB等語(yǔ)言中使用[8]。通過(guò)建立串行通信,完成命令發(fā)送、數(shù)據(jù)發(fā)送/接收、監(jiān)視和響應(yīng)在通信過(guò)程中可能發(fā)生的各種事件和錯(cuò)誤。本文選用MSComm控件采用事件驅(qū)動(dòng)機(jī)制。一般情況下,事件發(fā)生時(shí)將產(chǎn)生通知,MSComm控件提供的OnComm事件可以用來(lái)捕獲并處理這些通信事件??梢酝ㄟ^(guò)在OnComm事件處理函數(shù)中加入讀取串口程序代碼和處理數(shù)據(jù)代碼來(lái)提高程序響應(yīng)度及可靠性。圖2為本文設(shè)計(jì)的軟件界面。
?。?)建立應(yīng)用工程
啟動(dòng)VC++6.0,新建工程名為“TEST”
的對(duì)話框應(yīng)用程序,這時(shí)在Resource View的Dialog樹(shù)狀文件夾中會(huì)自動(dòng)生成IDD_TEST_DIALOG對(duì)話框。
?。?)在當(dāng)前的Workspace中插入MSComm控件
選擇Project菜單下Add to Project子菜單中的Components and Controls選項(xiàng),在彈出的對(duì)話框中雙擊R e g i s t e r e dA c t i v e X C o n t r o l s項(xiàng),選擇M i c r o s o f tCommunications Control version 6.0,單擊insert按鈕即可將通信控件插入該工程,這時(shí)添加了類(lèi)CMSComm及相應(yīng)文件:MSComm.h和MSComm.cpp.
?。?)添加MSComm控件
在I D D _ T E S T _ D I A L O G對(duì)話框內(nèi)添加MSComm控件,通過(guò)class wizard添加成員變量m_Com.
(4)串口初始化
在初始化對(duì)話框進(jìn)行串口初始化,包括端口號(hào)、波特率、輸入方式等。
?。?)捕捉串口事件
雙擊I D D _ T E S T _ D I A L O G對(duì)話框內(nèi)的MSComm控件,這時(shí)在TESTDlg.h中,添加了TESTDlg類(lèi)消息響應(yīng)、在TESTDlg.cpp中映射了MSComm控件事件。
?。?)串口讀寫(xiě)
當(dāng)用戶(hù)輸入“55”后,使用函數(shù)Set-Output()向串口寫(xiě)入數(shù)據(jù),點(diǎn)擊“手動(dòng)發(fā)送”按鈕,點(diǎn)擊一次發(fā)送一次。點(diǎn)擊“自動(dòng)發(fā)送”按鈕,則設(shè)置一個(gè)Timer定時(shí),1s發(fā)送一次。
在進(jìn)行讀操作時(shí),當(dāng)接收緩沖區(qū)有數(shù)據(jù)時(shí),使用GetInput()將緩沖區(qū)的數(shù)據(jù)保存到COleSafeArray類(lèi)型的變量里,以便后續(xù)的數(shù)據(jù)處理。
?。?)存儲(chǔ)數(shù)據(jù)
使用MFC提供的文件操作,將數(shù)據(jù)保存在TestData.txt文本文件中。CStdioFile是CFile的派生類(lèi),適用于文本文件的讀寫(xiě),可以按行讀取寫(xiě)入。同時(shí)在文件寫(xiě)入數(shù)據(jù)之前寫(xiě)入本次保存數(shù)據(jù)的時(shí)間,為數(shù)據(jù)的正確保存提供保障。如圖3所示。
5.程序測(cè)試及結(jié)果
程序測(cè)試過(guò)程中,首先利用串口調(diào)試助手進(jìn)行演示,確保單片機(jī)能正常工作,串口可以自由接收和發(fā)送。然后使用本文設(shè)計(jì)的軟件實(shí)現(xiàn)數(shù)據(jù)的發(fā)送顯示,結(jié)果如圖2所示。
6.結(jié)論
本文利用VC++6.0中的MSComm控件便捷地實(shí)現(xiàn)了PC機(jī)與單片機(jī)之間的串口通信,顯示了ActiveX技術(shù)充分的靈活性和易用性。
在Windows環(huán)境下開(kāi)發(fā)上位機(jī)的串口通信程序,軟件界面友好,操作簡(jiǎn)單,軟件設(shè)計(jì)簡(jiǎn)單可靠,降低了工作量,準(zhǔn)確、有效地實(shí)現(xiàn)了數(shù)據(jù)的采集顯示保存。
評(píng)論