資源描述:
《通信網(wǎng)絡(luò)設(shè)計(jì)課程設(shè)計(jì)-利用MSCOMM串口通信控件進(jìn)行異步串行通信的VC程序設(shè)計(jì).doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、利用MSCOMM串口通信控件進(jìn)行異步串行通信的VC程序設(shè)計(jì)一課程設(shè)計(jì)題目利用MSCOMM串口通信控件進(jìn)行異步串行通信的VC程序設(shè)計(jì)二課程設(shè)計(jì)要求●環(huán)境要求:Windows95/98/2000/XP●功能要求:能將鍵盤上輸入的數(shù)據(jù)發(fā)送到另一臺(tái)計(jì)算機(jī)上;能將接收到的數(shù)據(jù)顯示到屏幕窗口內(nèi);了解常用通信網(wǎng)絡(luò)設(shè)備的操作和應(yīng)用,掌握常用的通信協(xié)議的工作原理,能利用VisualC++、開發(fā)工具完成相應(yīng)的通信程序的設(shè)計(jì)工作。學(xué)習(xí)簡明地介紹自己的設(shè)計(jì)工作。三課程設(shè)計(jì)目的用VisualC++編程工具主機(jī)提供的接口,解決網(wǎng)絡(luò)用戶之間的
2、交互式對(duì)話問題。進(jìn)一步深入掌握網(wǎng)絡(luò)設(shè)計(jì)和通信程序的設(shè)計(jì)原理。使學(xué)生對(duì)計(jì)算機(jī)通信網(wǎng)絡(luò)的設(shè)計(jì)實(shí)現(xiàn)有較深的了解,培養(yǎng)較高的通信網(wǎng)絡(luò)設(shè)計(jì)能力。四程序思路硬件連接方面:數(shù)據(jù)的發(fā)送和接收由軟件控制,不進(jìn)行硬件握手,其連接方法如圖真正需要互相連接的是RXD、TXD和GND;軟件方面:串行端口的本質(zhì)功能是作為CPU和串行設(shè)備間的編碼轉(zhuǎn)換器。當(dāng)數(shù)據(jù)從CPU經(jīng)過串行端口發(fā)送出去時(shí),字節(jié)數(shù)據(jù)轉(zhuǎn)換為串行的位。在接收數(shù)據(jù)時(shí),串行的位被轉(zhuǎn)換為字節(jié)數(shù)據(jù)在Windows環(huán)境(WindowsNT、Win98、Windows2000)下,串口是系統(tǒng)
3、資源的一部分。應(yīng)用程序要使用串口進(jìn)行通信,必須在使用之前向操作系統(tǒng)提出資源申請(qǐng)要求(打開串口),通信完成后必須釋放資源(關(guān)閉串口)。VC++6.0提供的MSComm控件通過串行端口發(fā)送和接收數(shù)據(jù),為應(yīng)用程序提供串行通信功能。使用非常方便?!、牛诋?dāng)前的Workspace中插入MSComm控件?! roject菜單------>AddtoProject---->ComponentsandControls----->Registered ActiveXControls--->選擇Components:Micros
4、oftCommunicationsControl, version6.0插入到當(dāng)前的Workspace中。結(jié)果添加了類CMSComm(及相應(yīng)文件:mscomm.h和mscomm.cpp)?!、疲趍scomm.h中加入MSComm控件。protected: CMSCommm_ComPort;在mscomm.cpp::OnCreare()中: DWORDstyle=WS_VISIBLE
5、WS_CHILD; if(!m_ComPort.Create(NULL,style,CRect(0,0,0,0),this
6、,ID_COMMCTRL)){TRACE0("FailedtocreateOLECommunicationsControl");return-1; //failtocreate }⑶.打開并初始化串口voidCComDlg::OnOpencom(){if(m_Com.GetPortOpen())//打開通信端口m_Com.SetPortOpen(FALSE);m_Com.SetCommPort(1);//選擇com1if(!m_Com.GetPortOpen()){m_Com.SetPortOpen(
7、TRUE);//打開串口MessageBox("串口已經(jīng)打開");}elseMessageBox("不能打開串口!");m_Com.SetSettings("9600,n,8,1");//波特率9600,無校驗(yàn),8個(gè)數(shù)據(jù)位,1個(gè)停止位//以字符串的形式設(shè)置并返回波特率、奇偶校驗(yàn)、數(shù)據(jù)位、停止位m_Com.SetInputMode(1);//定義Input屬性獲取數(shù)據(jù)的方式(為0:文本方式;為1:二進(jìn)制方式)。m_Com.SetRThreshold(1);//為1表示有一個(gè)字符引發(fā)一個(gè)事件m_Com.SetInpu
8、tLen(0);//設(shè)置每次Input讀入的字符個(gè)數(shù),缺省值為0,表明讀取接收緩沖區(qū)中的全部內(nèi)容m_Com.GetInput();m_opened=TRUE;}⑷.捕捉串口事項(xiàng)。MSComm控件可以采用輪詢或事件驅(qū)動(dòng)的方法從端口獲取數(shù)據(jù)。我們介紹比較使用的事件驅(qū)動(dòng)方法:有事件(如接收到數(shù)據(jù))時(shí)通知程序。在程序中需要捕獲并處理這些通訊事件。在MainFrm.h中:protected:afx_msgvoidOnCommMscomm();DECLARE_EVENTSINK_MAP()在ComDlg.cpp中:BEGIN
9、_EVENTSINK_MAP(CComDlg,CDialog)//{{AFX_EVENTSINK_MAP(CComDlg)ON_EVENT(CComDlg,IDC_MSCOMM2,1/*OnComm*/,OnComm,VTS_NONE)//}}AFX_EVENTSINK_MAPEND_EVENTSINK_MAP()//映射ActiveX控件⑸.串口讀寫.完成讀寫的函數(shù)的確