資源描述:
《在vc++中用activex控件實現(xiàn)與單片機的串行通信》由會員上傳分享,免費在線閱讀,更多相關內容在工程資料-天天文庫。
1、在VC++中用ActiveX控件實現(xiàn)與單片機的串行通信
2、第1關鍵詞:VC++ActiveX串行通信在單片機應用系統(tǒng)中,經常需要通過RS-232串行口與微機進行通信。目前在各種操作系統(tǒng)中,Microsoft的icrosoft為簡化SM控件時,1個MSM控件只能同時對應1個串口。如果應用程序需要訪問和控件多個串口,那么必須使用多個MSM控件。在VC++中,MSM控件只對應著1個C++類--CMSm。由于MSM控件本身沒有提供方法,所以CMSm類除了Create()成員函數(shù)外,其他的函數(shù)都是Get/Set函數(shù)對,用來獲取或設置控件的屬性。
3、MSM控件也只有1個Onm事件,用來向調用者通知有通信事件發(fā)生。MSM控件有許多很重要的屬性,限于篇幅只給出幾個較為重要和常用的屬性,如表1所列。表1MSM控件的重要屬性屬性說明mPort通信端口號Settings以字符串形式表示的波特率、奇偶校驗、數(shù)據位PortOpen通信端口的狀態(tài),打開或是關閉Input接收數(shù)據Output發(fā)送數(shù)據InputMode接收數(shù)據的類型:0為文本;1為二進制二、編程實現(xiàn)從表1可以看到,MSM可以兩種不同的形式接收數(shù)據,即以文本形式和以二進制形式。用MSM控件進行字符數(shù)據傳輸?shù)奈墨I和資料可以找到很多,在
4、Microsoft的MSDN(MicrosoftDeveloperNete框中填入MyM(可根據需要命名),之后點OK按鈕。在接著出現(xiàn)的對話框中選中DialogBased項,然后點NEXT按鈕。以下的各對話框都按照缺省設置,這樣即可生成一個基于對話框的應用程序。在資源編程器中會出現(xiàn)其對話框模板。2.插入MSM控件選擇菜單項Project/Addtoproject/ponentsandControls…,在彈出的對話框中選擇RegisteredActiveXControls文件夾下的MicrosoftmunicationsContro
5、l,version6.0,然后按下Insert按鈕,接著會彈出一個對話框,提示生成的類名及文件名,按OK按鈕即可實現(xiàn)控件的插入。這時在對話框的控件工具欄上會多出一個機模樣的控件圖標,SM控件加入到對話框模板,加入方法與其他控件一樣。然后還要在對話框類中相應加入一個成員變量,此處我們將其命名為m_m。加入方法為:首先,在對話框模板中,用鼠標右鍵點擊該控件,選擇ClassemberVariables標簽的ControlIds項下,選中IDC_MSM1。然后,按AddVariable…按鈕,在出現(xiàn)的對話框的MemberVariableNa
6、me項中輸入m_m。最后,按OK按鈕即可。3.設置屬性可以在兩個地方對控件的屬性進行設置:(1)對話框資源編輯器中。在對話框模板上,用右鍵單擊MSM控件,然后選擇Properties…菜單項,最后便可設置各項屬性。此處只對以下幾處進行改動,其他接受缺省設置:Rthershold:1,InputLen:1,DTREnable:不選,InputMode:1-Binary。(2)對話框類的OnInitDialog()函數(shù)中。下面是以上設置的函數(shù)實現(xiàn):BOOLCMyMDlg::OnlnitDialog(){CDialog::OnlnitDi
7、alog();//此處為應用框架自動生成代碼,不予列出//TODO:Addextrainitializationherem_m.SetmPort(1);//使用串口1m_m.SetSettings("9600,N,8,1");//波特率為9600,無奇偶校驗,8位數(shù)據位,1位停止位m_m.SetRThreshold(10);//每接收10個字符就觸發(fā)1次接收事件m_m.SetSThreshold(0);//不觸發(fā)發(fā)送事件m_m.SetInputLen(10);//每次讀操作從緩沖區(qū)中取10個字符m_m.SetInputMode(1)
8、;//二進制數(shù)據傳輸形式m_m.SetPortOpen(TRUE);//打開串口returnTRUE;//returnTRUEunlessyousetthefocustoacontrol}4.發(fā)送二進制數(shù)據如果需要發(fā)送二進制數(shù)據,可將數(shù)據作如下處理。具體代碼如下:CByteArraybytOutArr;bytOutArr.Add(0x0);//給數(shù)組賦值bytOutArr.Add(0x1);bytOutArr.Add(0x2);bytOutArr.Add(0x3);bytOutArr.Add(0x4);COleVariantvarO
9、ut;varOut=COleVariant(bytOutArr);//將數(shù)據轉換為變體數(shù)據類型m_m.SetOutput(varOut);//發(fā)送數(shù)據5.接收二進制數(shù)據當需要接收大量的數(shù)據時,最好采用事件驅動方式進行編程。具體步驟如下