乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

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

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

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

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

        Windows下串行通信

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

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

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

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

        CommPort 設置并返回通訊端口號,缺省為COM1。

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

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

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

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

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

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

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

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

        以下是通過設置控件屬性對串口進行初始化的實例:

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

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

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


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

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多