<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 一種基于MFC的串口連續通信的簡(jiǎn)易實(shí)現

一種基于MFC的串口連續通信的簡(jiǎn)易實(shí)現

作者: 時(shí)間:2014-05-04 來(lái)源:網(wǎng)絡(luò ) 收藏

摘要 設計了一種在中實(shí)現與串口連續通信的簡(jiǎn)易方法,利用微軟提供的控件,仿照MODBUS-RTU協(xié)議,并根據數據包之間的時(shí)間間隔T1,將間隔

本文引用地址:http://dyxdggzs.com/article/246314.htm

串口通信適用于長(cháng)距離控制與數據傳輸,許多單片機在內部均集成了串口通信模塊,而計算機的操作系統也內嵌有對串口通信的支持。在現代各工業(yè)控制和數據傳輸等通信系統領(lǐng)域中,單片機與計算機的串口通信得到了廣泛應用。因此,在Windows操作系統下實(shí)現串口通信,開(kāi)發(fā)與單片機通信軟件顯得尤為重要。(Microsoft Foundation Classes),是微軟公司提供的一個(gè)類(lèi)庫(Class Libraries),以C++類(lèi)的形式封裝了Windows的API,且包含一個(gè)應用程序框架,減少了應用程序開(kāi)發(fā)人員的工作量,因此基于VC++的平臺開(kāi)發(fā)串口通信界面程序的方式深受程序員青睞。

傳統串口通信軟件采用兩種方法處理連續傳輸的數據包。一種是采用固定字節長(cháng)度的數據包協(xié)議,該方法靈活性差,即使傳輸極少字節的數據也必須使用固定長(cháng)度的數據包。另一種方法是加入數據包包頭,該方法必須先對接收到的每個(gè)字節進(jìn)行判斷,從而造成了CPU的大量浪費。本文采用微軟的控件,設計了一種簡(jiǎn)便的方法,有效彌補了以上兩種方法的缺陷。

1 數據包連續串口通信原理

單片機的時(shí)鐘頻率遠小于計算機CPU,如常用單片機C8051F02頻率為25 MHz,低于計算機CPU上GHz的處理速度。單片機傳給上位機的數據,每個(gè)數據包均獨立反映硬件對上位機的一個(gè)響應狀態(tài)或硬件處理完的一個(gè)任務(wù)。因此,單片機連續傳送數據包時(shí),數據包之間存在一定的時(shí)間間隔,而每個(gè)數據包中相鄰字節是連接傳送的,時(shí)間間隔遠小于數據包之間的間隔。

仿照MODBUS-RTU協(xié)議,利用數據包之間的時(shí)間間隔T作為是否去讀寫(xiě)串口緩存的判斷依據,其只需滿(mǎn)足以下兩個(gè)條件:(1)單獨數據包自身發(fā)送時(shí),數據包內部數據字節之間發(fā)送時(shí)間間隔小于時(shí)間T;(2)不同的數據包之間發(fā)送時(shí)間間隔>T,便可實(shí)現從串口緩存中連接讀取接收到的數據包。

2 基于MFC的軟件設計方案

計算機串口通信界面軟件包括串口初始化、Comm事件響應、時(shí)間間隔判斷、讀取串口數據和數據處理,其具體流程如圖1所示。

 

 

3 軟件代碼實(shí)現

打開(kāi)VS2008軟件開(kāi)發(fā)平臺,新建一個(gè)MFC程序,并插入一個(gè)串口控件。增加了控件響應函數,數據包時(shí)間間隔T此處暫設為20 ms。為調試方便,加入時(shí)間溢出標志m_time_out_flag變量。

m_time_out_flag=0;//時(shí)間溢出標志設為0,表明數據已處理完

為了方便測試,此處添加的數據處理函數是在一個(gè)大的編輯框中,將串口接收到的連接數據包全部顯示出來(lái)。

4 軟件驗證與結果分析

在單片機開(kāi)發(fā)板中,燒入每隔25 ms向串口發(fā)送數據包“Xidian University”的小程序,成功后連接到計算機,并打開(kāi)編寫(xiě)的MFC串口通信軟件以及單片機開(kāi)發(fā)板電源,具體效果如圖2所示。

 

 

設置時(shí)間間隔T為不同的值,相應地修改單片機的數據包發(fā)送時(shí)間間隔,并在不同CPU型號計算機下進(jìn)行多次測試,測出結果平均值如表1所示。

 

 

從表1中可得出結論,計算機CPU的處理速度越快,數據包長(cháng)度越短,時(shí)間間隔T可設的值也越小。另外,經(jīng)測試,當數據處理函數變復雜時(shí),最小時(shí)間間隔T可設的值也會(huì )相應增大。

5 結束語(yǔ)

文中方法,充分利用了數據包內部數據字節間發(fā)送時(shí)間間隔小,數據包之間發(fā)送時(shí)間間隔大的特點(diǎn)。采用微軟提供的MSComm控件,在Comm事件中設置定時(shí)器,并根據計算機CPU處理速度、數據包長(cháng)度、數據處理函數復雜程度,選取適當的T值。當定時(shí)器時(shí)間T溢出時(shí),讀取并處理串口緩沖區中的數據。由于是根據數據包之間發(fā)送的時(shí)間間隔T來(lái)判斷數據包,所以數據包長(cháng)度可不固定,也無(wú)需對每個(gè)數據字節進(jìn)行判斷,故有效解決了計算機與串口間的連接數據包傳輸處理問(wèn)題。

51單片機相關(guān)文章:51單片機教程


c++相關(guān)文章:c++教程


數字通信相關(guān)文章:數字通信原理


通信相關(guān)文章:通信原理




關(guān)鍵詞: MFC MSComm

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>