visual c++ MSComm 串口控制項程式開發

來源:互聯網
上載者:User

        在電腦中,資料通訊主要有兩種:一種是串口通訊,每個字元的二進位位按位排列進行傳輸,速度慢,但傳輸距離較遠。滑鼠口和usb口都屬於串口。另一種是並行通訊,每個字元的二進位位使用多條資料線同時進行傳輸,傳輸速度快,但傳輸距離相對比較近。電腦內部傳輸一般使用這種方式,列印口也屬於並行連接埠。

        一、串口通訊原理

       序列埠是cpu和串列裝置間的編碼轉換器,當資料從串口發送出時,位元組資料轉化為串列的位。在接收時,串列的位轉化為位元組資料。在Windows下串口是系統的一種資源,應用程式要使用串口進行通訊,必須向電腦申請該串口資源,使用完畢,應釋放資源。

       二、串口通訊特點

            1,通訊成本低,僅一條通訊鏈路

            2,傳輸速度慢。

      三、串口通訊傳輸方式

            1,單工通訊,固定的由發送端發送資料到接收端 電台與電視機

            2,半雙工通訊,允許雙向互相發送資料,但是不能同時 對講機

            3,雙工通訊,允許雙方互相同時發送和接收資料 手機

       四、MSComm控制項串口通訊開發

        MSComm空間是微軟公司提供的ActiveX空間,用於簡化串口程式開發。在Visual C++和VS2005環境中都可以方便地添加該控制項。當匯入CMSComm類後,就可以在程式中使用MSComm控制項了。

        1,MSComm常用方法

1)GetCommPort() 擷取串口號

2)SetCommPort() 設定連接埠號碼

3)GetRThreshold()與SetRThreshold()用於擷取與設定接收緩衝區接收到多少個字元,MSComm控制項觸發Oncomm事件。

4)GetInputMode()與SetInputMode()用於擷取和設定傳輸資料的類型,參數為1,二進位傳輸,參數為0,文本傳輸。

5)SetSettings()用於設定傳輸速率、同位,資料位元和停止位參數

6)GetInput()用於從接收緩衝區擷取資料

7)SetOutput()用於向發送緩衝區寫入資料

8)GetPortOpen()/SetPortOpen()擷取串口狀態,開啟或關閉串口

9)GetCommEvent()擷取串口發生的事件。1----發送資料;2---接收資料;3----CTS訊號發生變化,準備發送資料;4---DSR訊號發生變化,準備接受資料。

       2,串口配置代碼

       if(m_com.GetPortOpen())

        
m_com.SetPortOpen(FALSE);

        m_com.SetCommPort(com);  //設定連接埠

       if(!m_com.GetPortOpen())

        
m_com.SetPortOpen(TRUE);  //開啟串口

        else

        
AfxMessageBox("cannot open serial port");

        m_com.SetSettings("9600,n,8,1");//設定傳輸速率,校正,資料位元,停止位

 

       m_com.SetInputMode(0); //以文本方式撿取資料

       m_com.SetRThreshold(1); //參數表示每當串口接收緩衝區中有多於或者等於個字元時將引發一個接收資料的OnComm事件

     m_com.SetInputLen(0); //設定當前接收區資料長度為

2,串口接收OnComm事件代碼如下

     intresEvent;

     resEvent =m_mscom.GetCommEvent();

     switch(resEvent)

     {

     case 2: //接收資料

            {

                   if(IsSended) //開始接收資料

                   {

                          VARIANTdata;

                          data= m_mscom.GetInput();

 

                          CStringstr;

                          str= data.bstrVal;

                          IsSended= FALSE;

                          MessageBox(str);

                   }

            }

            break;   

     }           

3,串口發送資料代碼如下

CString str ;

     m_data.GetWindowText(str);

     IsSended =FALSE; //發送完成

     m_mscom.SetOutput((COleVariant)str);  

     IsSended =TRUE; //發送完成

     Sleep(1000);//延時1妙

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.