久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

用VC 6.0實(shí)現(xiàn)串行通信的三種方法

 bluecrystal 2006-08-07
本文介紹了在Windows平臺(tái)下串行通信的實(shí)現(xiàn)機(jī)制,,討論了根據(jù)不同的條件用Visual C++ 設(shè)計(jì)串行通信程序的三種方法
 

  摘要: 本文介紹了在Windows平臺(tái)下串行通信的實(shí)現(xiàn)機(jī)制,討論了根據(jù)不同的條件用Visual C++ 設(shè)計(jì)串行通信程序的三種方法,,并結(jié)合實(shí)際,,實(shí)現(xiàn)對(duì)溫度數(shù)據(jù)的接收監(jiān)控。

  在實(shí)驗(yàn)室和工業(yè)應(yīng)用中,,串口是常用的計(jì)算機(jī)與外部串行設(shè)備之間的數(shù)據(jù)傳輸通道,,由于串行通信方便易行,所以應(yīng)用廣泛,。依據(jù)不同的條件實(shí)現(xiàn)對(duì)串口的靈活編程控制是我們所需要的,。

  在光學(xué)鏡片鍍膜工藝中,用單片機(jī)進(jìn)行多路溫度數(shù)據(jù)采集控制,,采集結(jié)果以串行方式進(jìn)入主機(jī),,每隔10S向主機(jī)發(fā)送一次采樣數(shù)據(jù),主機(jī)向單片機(jī)發(fā)送相關(guān)的控制命令,,實(shí)現(xiàn)串行數(shù)據(jù)接收,,處理,記錄,,顯示,,實(shí)時(shí)繪制曲線。串行通信程序開發(fā)環(huán)境為 VC++ 6.0,。

  Windows下串行通信

  與以往DOS下串行通信程序不同的是,,Windows不提倡應(yīng)用程序直接控制硬件,而是通過(guò)Windows操作系統(tǒng)提供的設(shè)備驅(qū)動(dòng)程序來(lái)進(jìn)行數(shù)據(jù)傳遞,。串行口在Win 32中是作為文件來(lái)進(jìn)行處理的,,而不是直接對(duì)端口進(jìn)行操作,對(duì)于串行通信,,Win 32 提供了相應(yīng)的文件I/O函數(shù)與通信函數(shù),,通過(guò)了解這些函數(shù)的使用,,可以編制出符合不同需要的通信程序。與通信設(shè)備相關(guān)的結(jié)構(gòu)有COMMCONFIG ,,COMMPROP,,COMMTIMEOUTS,COMSTAT,,DCB,,MODEMDEVCAPS,MODEMSETTINGS共7個(gè),,與通信有關(guān)的Windows API函數(shù)共有26個(gè),詳細(xì)說(shuō)明可參考MSDN幫助文件,。以下將結(jié)合實(shí)例,,給出實(shí)現(xiàn)串行通信的三種方法。

  實(shí)現(xiàn)串行通信的三種方法

  方法一:使用VC++提供的串行通信控件MSComm 首先,,在對(duì)話框中創(chuàng)建通信控件,,若Control工具欄中缺少該控件,可通過(guò)菜單Project --> Add to Project --> Components and Control插入即可,,再將該控件從工具箱中拉到對(duì)話框中,。此時(shí),你只需要關(guān)心控件提供的對(duì) Windows 通訊驅(qū)動(dòng)程序的 API 函數(shù)的接口,。換句話說(shuō),,只需要設(shè)置和監(jiān)視MSComm控件的屬性和事件。

  在ClassWizard中為新創(chuàng)建的通信控件定義成員對(duì)象(CMSComm m_Serial),,通過(guò)該對(duì)象便可以對(duì)串口屬性進(jìn)行設(shè)置,,MSComm 控件共有27個(gè)屬性,這里只介紹其中幾個(gè)常用屬性:

  CommPort 設(shè)置并返回通訊端口號(hào),,缺省為COM1,。

  Settings 以字符串的形式設(shè)置并返回波特率、奇偶校驗(yàn),、數(shù)據(jù)位,、停止位。

  PortOpen 設(shè)置并返回通訊端口的狀態(tài),,也可以打開和關(guān)閉端口,。

  Input 從接收緩沖區(qū)返回和刪除字符。

  Output 向發(fā)送緩沖區(qū)寫一個(gè)字符串,。

  InputLen 設(shè)置每次Input讀入的字符個(gè)數(shù),,缺省值為0,表明讀取接收緩沖 區(qū)中的全部?jī)?nèi)容,。

  InBufferCount 返回接收緩沖區(qū)中已接收到的字符數(shù),,將其置0可以清除接收緩 沖區(qū),。

  InputMode 定義Input屬性獲取數(shù)據(jù)的方式(為0:文本方式;為1:二進(jìn)制方式),。

  RThreshold 和 SThreshold 屬性,,表示在 OnComm 事件發(fā)生之前,接收緩沖區(qū)或發(fā)送緩沖區(qū)中可以接收的字符數(shù),。

  以下是通過(guò)設(shè)置控件屬性對(duì)串口進(jìn)行初始化的實(shí)例:

BOOL CSampleDlg:: PortOpen()
{
BOOL m_Opened;
......
m_Serial.SetCommPort(2); // 指定串口號(hào)
m_Serial.SetSettings("4800,N,8,1"); // 通信參數(shù)設(shè)置
m_Serial.SetInBufferSize(1024); // 指定接收緩沖區(qū)大小
m_Serial.SetInBufferCount(0); // 清空接收緩沖區(qū)
m_Serial.InputMode(1); // 設(shè)置數(shù)據(jù)獲取方式
m_Serial.SetInputLen(0); // 設(shè)置讀取方式
m_Opened=m_Serail.SetPortOpen(1); // 打開指定的串口
return m_Opened;
}

  打開所需串口后,,需要考慮串口通信的時(shí)機(jī)。在接收或發(fā)送數(shù)據(jù)過(guò)程中,,可能需要監(jiān)視并響應(yīng)一些事件和錯(cuò)誤,,所以事件驅(qū)動(dòng)是處理串行端口交互作用的一種非常有效的方法。使用 OnComm 事件和 CommEvent 屬性捕捉并檢查通訊事件和錯(cuò)誤的值,。發(fā)生通訊事件或錯(cuò)誤時(shí),,將觸發(fā) OnComm 事件,CommEvent 屬性的值將被改變,,應(yīng)用程序檢查 CommEvent 屬性值并作出相應(yīng)的反應(yīng),。在程序中用ClassWizard為CMSComm控件添加OnComm消息處理函數(shù):

void CSampleDlg::OnComm()
{
......
switch(m_Serial.GetCommEvent())
{
case 2:
// 串行口數(shù)據(jù)接收,處理,;
}
}


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多