<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > pc機(jī)與89C51單片機(jī)的串口通信編程

          pc機(jī)與89C51單片機(jī)的串口通信編程

          作者: 時(shí)間:2016-11-20 來(lái)源:網(wǎng)絡(luò) 收藏
          一、pc機(jī)上的串口通信編程過程如下:

          1.建立項(xiàng)目

          本文引用地址:http://www.ex-cimer.com/article/201611/318591.htm

          打開VC++6.0,建立一個(gè)基于對(duì)話框的MFC應(yīng)用程序SCommTest(與我源代碼一致,等會(huì)你會(huì)方便一點(diǎn));

          2.在項(xiàng)目中插入MSComm控件

          選擇Project菜單下Add To Project子菜單中的 Components and Controls…選項(xiàng),在彈出的對(duì)話框中雙擊Registered ActiveX Controls項(xiàng)(稍等一會(huì),這個(gè)過程較慢),則所有注冊(cè)過的ActiveX控件出現(xiàn)在列表框中。 選擇Microsoft Communications Control, version 6.0,,單擊Insert按鈕將它插入到我們的Project中來(lái),接受缺省的選項(xiàng)。(如果你在控件列表中看不到Microsoft Communications Control, version 6.0,那可能是你在安裝VC6時(shí)沒有把ActiveX一項(xiàng)選上,重新安裝VC6,選上ActiveX就可以了),

          這時(shí)在ClassView視窗中就可以看到CMSComm類了,(注意:此類在ClassWizard中看不到,重構(gòu)clw文件也一樣),并且在控件工具欄Controls中出現(xiàn)了電話圖標(biāo)(如圖1所示),現(xiàn)在要做的是用鼠標(biāo)將此圖標(biāo)拖到對(duì)話框中,程序運(yùn)行后,這個(gè)圖標(biāo)是看不到的。

          3.利用ClassWizard定義CMSComm類控制對(duì)象

          打開ClassWizard->Member Viariables選項(xiàng)卡,選擇CSCommTestDlg類,為IDC_MSCOMM1添加控制變量:m_ctrlComm,這時(shí)你可以看一看,在對(duì)話框頭文件中自動(dòng)加入了//{{AFX_INCLUDES() #include "mscomm.h" //}}AFX_INCLUDES (這時(shí)運(yùn)行程序,如果有錯(cuò),那就再?gòu)念^開始)。

          4.在對(duì)話框中添加控件

          向主對(duì)話框中添加兩個(gè)編輯框,一個(gè)用于接收顯示數(shù)據(jù)ID為IDC_EDIT_RXDATA,另一個(gè)用于輸入發(fā)送數(shù)據(jù),ID為IDC_EDIT_TXDATA,再添加一個(gè)按鈕,功能是按一次就把發(fā)送編輯框中的內(nèi)容發(fā)送一次,將其ID設(shè)為IDC_BUTTON_MANUALSEND。別忘記了將接收編輯框的Properties->Styles中把Miltiline和Vertical Scroll屬性選上,發(fā)送編輯框若你想輸入多行文字,也可選上Miltiline。

          再打開ClassWizard->Member Viariables選項(xiàng)卡,選擇CSCommTestDlg類, 為IDC_EDIT_RXDATA添加CString變量m_strRXData, 為IDC_EDIT_TXDATA添加CString變量m_strTXData。說明: m_strRXData和m_strTXData分別用來(lái)放入接收和發(fā)送的字符數(shù)據(jù)。

          5.添加串口事件消息處理函數(shù)OnComm()

          打開ClassWizard->Message Maps,選擇類CSCommTestDlg,選擇IDC_MSCOMM1,雙擊消息OnComm,將彈出的對(duì)話框中將函數(shù)名改為OnComm,(好記而已)OK。

          這個(gè)函數(shù)是用來(lái)處理串口消息事件的,如每當(dāng)串口接收到數(shù)據(jù),就會(huì)產(chǎn)生一個(gè)串口接收數(shù)據(jù)緩沖區(qū)中有字符的消息事件,我們剛才添加的函數(shù)就會(huì)執(zhí)行,我們?cè)贠nComm()函數(shù)加入相應(yīng)的處理代碼就能實(shí)現(xiàn)自已想要的功能了。請(qǐng)你在函數(shù)中加入如下代碼:

          voidCSCommTestDlg::OnComm()
          {
          // TODO: Add your control notification handler code here
          VARIANT variant_inp;
          COleSafeArray safearray_inp;
          LONGlen,k;
          BYTE rxdata[2048];//設(shè)置BYTE數(shù)組 An 8-bit integerthat is not signed.

          CString strtemp;
          if(m_ctrlComm.GetCommEvent()==2)//事件值為2表示接收緩沖區(qū)內(nèi)有字符
          {////////以下你可以根據(jù)自己的通信協(xié)議加入處理代碼
          variant_inp=m_ctrlComm.GetInput();//讀緩沖區(qū)
          safearray_inp=variant_inp;//VARIANT型變量轉(zhuǎn)換為ColeSafeArray型變量
          len=safearray_inp.GetOneDimSize();//得到有效數(shù)據(jù)長(zhǎng)度


          for(k=0;ksafearray_inp.GetElement(&k,rxdata+k);//轉(zhuǎn)換為BYTE型數(shù)組

          for(k=0;k{
          BYTE bt=*(char*)(rxdata+k);//字符型
          strtemp.Format("%c",bt);//將字符送入臨時(shí)變量strtemp存放
          m_strRXData+=strtemp;//加入接收編輯框?qū)?yīng)字符串
          }
          m_strRXData+="rn";//換行

          }
          UpdateData(FALSE);//更新編輯框內(nèi)容

          }



          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();