串行异步通信程序设计_第1页
串行异步通信程序设计_第2页
串行异步通信程序设计_第3页
串行异步通信程序设计_第4页
串行异步通信程序设计_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、*实践教学* 兰州理工大学计算机与通信学院2014年秋季学期通信系统综合训练课程设计 题 目: 串行异步通信程序设计 专业班级: 通信工程(1)班 姓 名: 李银环 学 号: 11250134 指导教师: 王惠琴 成 绩: 摘要 在Windows环境下实现通信的方法主要有利用MSComm控件和直接用Windows API编程,软件采用Microsoft Visual C+ 6.0,利用MSComm控件编程相对来说更简单一些,而直接使用Windows API编程更灵活一些。   本次课程设计分析了串行异步通信的基本原理,在VC

2、+6.0的环境下利用MSComm控件实现了两个PC机的COM口间的数据发送和接收。本文通过对COM1口进行初始化编程,以及对建立的工程中的每个对话框和按钮分别进行编程和设置,成功的实现了利用PC机的两个COM口进行异步通信,并能根据设置调整异步传行通信参数。关键词:VC+6.0;MSComm控件;串行异步通信目录前言1第1章 串行异步通信基本原理21.1 串行通信协议21.2 串口通信的基本概念31.3 RS-232简介4第2章 VC+软件简介52.1 VC+6.0简介52.2 Microsoft Communications Control 控件6第3章 串行异步通信系统分析7第4章 串行异

3、步通信系统设计84.1建立工程84.2 在程序中添加MSComm控件94.3 初始化串口:设置MSComm控件的属性114.4 发送数据12第5章 串行异步通信程序调试185.1 计算机串口设置185.2 程序运行结果18参考文献20附录21致谢290前言随着现代信息技术的发展以及计算机网络的广泛应用,计算机通信技术已经日趋成熟,串口通信作为一种灵活、方便、可靠的通信方式,被广泛应用于工业控制中。同时串行通信还应用于交通控制、分布数据采集系统、通信距离扩展、电力系统数据采集与控制系统、高速公路收费系统、远程控制、保密通信系统和教学实验等等。 在数据通信、计算机网络以及工业上的分布式控制系统中,

4、经常需要采用串行通信来达到远程信息交换的目的。当控制计算机与各数控机床相距较远时,一般采用串行通信方式而不采用并行通信方式。这是因为并行通信系统的造价较高、众多的连线不仅容易引入干扰,也容易发生线路故障。串行通信由于接线少、成本低,在数据采集和控制系统中得到了广泛的应用,控制系统中常用的串行通信一般采用RS-232串行总线标准,RS-232是PC机与通信工业中应用最广泛的一种串行接口。 WINDOWS下双机点到点的串行通信系统是一个典型的通信系统,它是我们为了实现计算机底层的工作,以及为了用户更好地和系统能够直接相连而提出来的。 经过分析我使用了RS-232C为接口线路以及Microsoft公

5、司的Visual C+ 6.0作为开发工具,利用其提供的各种面向对象的开发工具来开发的系统。论述了采用自顶向下的设计方法,模块化设计思路,以及总体设计编码和调试,其开发主要包括数据的发送与接收等方面。在本次课程设计中,讨论了使用VC+的开发环境实现两台PC机间的串口通信。就是通过一个MSComm控件,用一个RS-232串口线将两台机子间的串口连接起来,从而进行数据收发。而使用WinAPI进行串口通信不像使用MSComm控件那么容易,需要设置多个参数。28第1章 串行异步通信基本原理1.1 串行通信协议串行传输可采用以下两种方法:异步传输和同步传输。1.1.1 异步传输协议在异步传输方式中,数据

6、传输单位是字符。在通信的数据流中,字符间异步,字符内部各位间同步。异步通信方式的“异步”主要体现在字符与字符之间通信没有严格的定时要求。异步传输中,字符可以是连续地、一个个地发送,也可以是不连续地、随机地进行单独发送。在一个字符格式的停止位之后,立即发送下一个字符的起始位,开始一个新的字符的传输,这叫做连续的串行数据发送,即帧与帧之间是连续的。断续的串行数据传送是指在一帧结束之后维持数据线的“空闲”状态,新的起始位可在任何时刻开始。一旦传送开始,组成这个字符的各个数据位将被连续发送,并且每个数据位持续的时间是相等的。接收端根据这个特点与数据发送端保持同步,从而正确地恢复数据。收发双方则以预先约

7、定的传输速率,在时钟的作用下,传送这个字符中的每一位。 起止式异步协议的特点是一个字符一个字符传输,并且传送一个字符总是以起始位开始,以停止位结束,字符之间没有固定的时间间隔要求。每一个字符的前面都有一位起始位(低电平,逻辑值0),字符本身有57位数据位组成,接着字符后面是一位校验位(也可以没有校验位),最后是一位,或意味半,或二位停止位,停止位后面是不定长度的空闲位。停止位和空闲位都规定为高电平(逻辑值),这样就保证起始位开始处一定有一个下跳沿。异步串行通信的可靠性高,但由于要在每个字符的前后加上起始位和停止位这样一些附加位,使得传输效率变低了,只有约80%。因此,起止协议一般用在数据速率较

8、慢的场合(小于19.2kbit/s)。在高速传送时,一般要采用同步协议。1.1.2 同步传输协议在同步传输方式中,以帧为数据传输单位,每个帧中含有多个字符代码,而且字符代码与字符代码之间没有间隙以及起始位和停止位。和异步传输相比,数据传输单位的加长容易引起时钟漂移。为了保证接收端能够正确地区分数据流中的每个数据位,收发双方必须通过某种方法建立起同步的时钟。可以在发送器和接收器之间提供一条独立的时钟线路,由线路的一端(发送器或者接收器)定期地在每个比特时间中向线路发送一个短脉冲信号,另一端则将这些有规律的脉冲作为时钟。这种技术在短距离传输时表现良好,但在长距离传输中,定时脉冲可能会和信息信号一样

9、受到破坏,从而出现定时误差。另一种方法是通过采用嵌有时钟信息的数据编码位向接收端提供同步信息。(1)面向字符的同步协议这种协议的特点是一次传送由若干个字符组成的数据块,而不是只传送一个字符,并规定了10个字符作为这个数据块的开头与结束标志以及整个传输过程的控制信息,它们也叫做通信控制字。由于被传送的数据块是由字符组成,故被称作面向字符的协议。(2)面向比特的同步协议该协议的特点是所传输的一帧数据可以是任意位,而且它是靠约定的位组合模式,而不是靠特定字符来标志帧的开始和结束,故称“面向比特”的协议。1.2 串口通信的基本概念1.2.1 串行通信 串行通信数据传送的特点是:数据传送按位顺序进行,最

10、少只需要一根传输线即可完成,节省传输线。与并行通信相比,串行通信还有较为显著的优点:传输距离长,可以从几米到几千米;在长距离内串行数据传送速率会比并行数据传送速率快;串行通信的通信时钟频率容易提高;串行通信的抗干扰能力十分强,其信号间的互相干扰完全可以忽略。但是串行通信传送速度比并行通信慢得多,并行通信时间为T,则串行时间为NT。1.2.2 串行通信的工作模式串行数据通信的基础是单线传输信息,数据通常是在两个站(点对点)之间进行传送,按照数据流的方向可分成3种传送模式:单工形式、半双工形式和全双工形式。 (1)单工形式:在单工形式中数据传送是单向的。通信双方中,一方固定为发送端,另一方则固定为

11、接收端。信息只能沿一个方向传送,使用一根传输线,例如,计算机与打印机之间的通信是单工形式,因为只有计算机向打印机传送数据,而没有相反的数据传送。还有在某些通信信道中,如单工无线发送等。 (2)半双工形式:半双工通信使用同一根传输线,既可发送数据又可接收数据,但不能同时发送和接收。在任何时刻只能由其中的一方发送数据,另一方接收数据。因此半双工形式既可以使用一条数据线,也可以使用两条数据线。半双工通信中每端需有一个收发切换电子开关,通过切换来决定数据向哪个方向传输。因为有切换,所以会产生时间延迟。但是对于像打印机这样单方向传输的外围设备,用半双工方式就能满足要求了,不必采用全双工方式,可节省一根传

12、输线。 (3)全双工形式:全双工数据通信分别由两根可以在两个不同的站点同时发送和接收的传输线进行传送,通信双方都能在同一时刻进行发送和接收操作,在全双工方式中,每一端都有发送器和接收器,有两条传送线,可在交互式应用和远程监控系统中使用,信息传输效率较高。1.3 RS-232简介 在串行通讯时,要求通讯双方都采用一个标准接口,使不同的设备可以方便地连接起来进行通讯.本次课程设计采用RS-232接口。RS-232-C接口(又称EIA RS-232-C)是目前最常用的一种串行通讯接口. ("RS-232-C"中的"-C"只不过表示RS-232的版本,所以与&q

13、uot;RS-232"简称是一样的)它是在1970年由美国电子工业协会(EIA)联合贝尔系统,调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准.它的全名是"数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准"该标准规定采用一个25个脚的DB-25连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定.后来IBM的PC机将RS232简化成了DB-9连接器,从而成为事实标准.而工业控制的RS-232口一般只使用RXD,TXD,GND三条线.它适合于数据传输速率在020000b/s范围内的通信。这个标准对串行

14、通信接口的有关问题,如信号线功能、电器特性都作了明确规定。在TxD和RxD上:逻辑1(MARK)=-3V-15V,逻辑0(SPACE)=+315V,在RTS、CTS、DSR、DTR和DCD等控制线上:               信号有效(接通,ON状态,正电压)+3V+15V               &

15、#160;   信号无效(断开,OFF状态,负电压)=-3V-15  RS232的逻辑电平与TTL以高低电平表示逻辑状态的规定不同。因此,为了能够同计算机接口或终端的TTL器件连接,必须在EIA-RS-232C与TTL电路之间进行电平和逻辑关系的变换。实现这种变换的方法可用分立元件,也可用集成电路芯片。目前较为广泛地使用集成电路转换器件,如MC1488、SN75150芯片可完成TTL电平到EIA电平的转换,而MC1489、SN75154可实现EIA电平到TTL电平的转换。MAX232芯片可完成TTLEIA双向电平转换。 第2章 VC+软件简介2

16、.1 VC+6.0简介VC+6.0是Microsoft公司推出的一个基于Windows系统平台、可视化的集成开发环境,它的源程序按C+语言的要求编写,并且加入了微软提供的功能强大的MFC(Microsoft Foundation Class)类库。MFC中封装了大部分Windows API函数和Windows控件,它包含的功能涉及到整个Windows操作系统。MFC不仅给用户提供了Windows图形环境下应用程序的框架,而且还提供了创建应用程序的组件,这样,开发人员不必从头设计创建和管理一个标准Windows应用程序所需的程序,而是从一个比较高的起点编程,故节省了大量的时间。另外,它提供了大量

17、的代码,指导用户编程时实现某些技术和功能。因此,使用VC+提供的高度可视化的应用程序开发工具和MFC类库,可使应用程序开发变得简单。VC+部分说明如下:(1)LRESULT表示函数返回值为长整数,由系统使用。(2)CALLBACK表示该函数是回调函数,由系统调用。(3)hwnd该参数是接收消息的窗口句柄,它和CreateWindow()函数的返回值相同。(4)message该参数是用来标识该消息的数字。(5)wParam和 lParam 两个参数是32位的消息参数,用来提供消息的附加信息。在窗口函数中,根据接收的消息信息(message,wParam和lParam)进行判断,然后分门别类地进行

18、处理。窗口函数中使用switch语句定义对应用程序接收到的不同消息的响应,包含了对各种可能接收到的消息的处理过程。每一条case语句对应一种消息,当应用程序接收到一个消息时,相应的case语句被激活并执行相应的响应程序模块。程序员可以在switch语句中增加对各种消息的处理代码。WM_DESTROY消息是关闭窗口时发出的,处理方法是调用函数PostQuitMessage() 向应用程序发出WM_QUIT消息,请求退出处理函数。MFC应用程序是建立在窗口应用程序开发模式的基础上的,同样MFC应用程序也有一个WinMain()函数,但程序员不用编写该函数,WinMain()函数由框架提供,当应用程

19、序启动时被自动调用。MFC有一个内部的消息系统处理由类产生的绝大多数消息。当一个消息不能被 MFC所处理,应用程序将它交给默认窗口处理函数DefWindowProc()来处理。在VC+中有两种方法可以进行串口通讯。一种是利用Microsoft公司提供的ActiveX控件 Microsoft Communications Control。另一种是直接用VC+访问串口。下面主要简述前一种方法。2.2 Microsoft Communications Control 控件 Microsoft公司在WINDOWS中提供了一个串口通讯控件,用它,我们可以很简单的利用串口进行通讯。在使用它之前,应将控件加

20、在应用程序的对话框上。然后再用ClassWizard 生成相应的对象。现在我们可以使用它了。该控件有很多自己的属性,可以通过它的属性窗口来设置,也可以用程序设置。用程序设置,更灵活。以下介绍设置中遇到的几个相关函数。SetCommPort:指定使用的串口。GetCommPort:得到当前使用的串口。SetSettings:指定串口的参数。一般设为默认参数"9600,N,8,1"。这样方便与其他串口进行通讯。GetSettings:取得串口参数。SetPortOpen:打开或关闭串口,当一个程序打开串口时,另外的程序将无法使用该串口。GetPortOpen:取得串口状态。Ge

21、tInBufferCount:输入缓冲区中接受到的字符数。SetInPutLen:一次读取输入缓冲区的字符数。设置为0时,程序将读取缓冲区的全部字符。GetInPut:读取输入缓冲区。GetOutBufferCount:输出缓冲区中待发送的字符数。SetOutPut:写入输出缓。 第3章 串行异步通信系统分析 在串行异步通信系统设计中首先对串口1进行初始化,等初始化完成后发送送握手信号,等发送完握手信号后继续发送控制信号,等收到准备应答的信号后开始发送数据,如果数据发送成功则结束通信,否则继续发送。 发送数据 数据发送完成结束通信 初始化串口1 发送握手信号 收到准备接收的应答 发送控制信号

22、接收握手信号 Y Y N Y Y N Y Y N 图3.1 系统分析流程图 第4章 串行异步通信系统设计4.1建立工程 打开VC+6.0建立基于对话框的MFC应用程序11250134,单击“工程”选项,选择MFCAppWizardexe,如图4.1所示: 图 4.1创建项目文件11250134 单击图4.1中的“确定”键,出现如图4.2所示的对话框,选中基本对话框D,如图4.2所示:图 4.2 应用程序11250134 单击图4.2中的“下一步”出现如图4.3所示的对话框,选中除“自动操作U”以外的所有内容,如图4.3所示: 图 4.3 应用程序11250134一直单击“下一步”,直到出现如图

23、4.4所示的对话框,点击“完成”,工程建立完成,如图4.4所示: 图4.4 应用程序112501344.2 在程序中添加MSComm控件 首先打开工程对话框,右击插入ActiveX Controls控件,选择Microsoft Communications Control, version 6.0,点击插入,按默认值添加,多了个电话图标,这是增加后串口通信控件。删除确认、取消和提示框,添加“电话”、静态文本、按钮、编辑框,拖动添加的控件如图4.5所示:图4.5 软件布局界面单击“发送”按钮,设置标题为“发送”,ID为“IDC_BUTTON_SEND1”,如图4.6所示: 图4.6 设置发送按钮

24、ID右击“数据接收”编辑框,点击“属性”,设置ID名为“IDC_EDIT_RECEIVE”,如图4.7所示: 图4.7 设置接收框ID4.3 初始化串口:设置MSComm控件的属性 首先打开工具栏的查看,选择建立类向导MFC ClassWizard,在选择Member Viariable,打开ClassName为Cmy11250134Dlg的类,Control ID为MSCOMM1,双击它,为它添加控制变量m_ctrlComm类似的,选择其它项修改,改后如图3.10所示: 图3.10 设置MSComm控件的属性 对CWy11250134:OnInitDialog()函数中写入对串口的初始化语句

25、,串口初始化语句由IDC_MSCOMM1的CMSComm控制变量m_ctrlComm来设置串口控件属性。添加初始化代码,代码如下:/ TODO: Add extra initialization here if(m_ctrlComm.GetPortOpen() m_ctrlComm.SetPortOpen(FALSE); m_ctrlComm.SetCommPort(1); /选择com1 if( !m_ctrlComm.GetPortOpen() m_ctrlComm.SetPortOpen(TRUE);/打开串口 else AfxMessageBox("cannot open s

26、erial port"); m_ctrlComm.SetSettings("9600,n,8,1"); /波特率9600,偶校验,8个数据位,1个停止位 m_ctrlComm.SetInputModel(1); /1:表示以二进制方式检取数据 m_ctrlComm.SetRThreshold(1); /参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件 m_ctrlComm.SetInputLen(0); /设置当前接收区数据长度为0 4.4 发送数据先为发送按添加一个单击消息BN_CLICKED处理函数,打开ClassWiz

27、ard,选择Message Maps,打开类CMytestDlg,IDC_BUTTON_MANUALSEND,双击BN_CLICKED添加OnButtonManualsend()函数,然后在函数中添加代码如下:/ CMy11250134Dlg message handlersBOOL CMy11250134Dlg:OnInitDialog()CDialog:OnInitDialog();/ Add "About." menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSE

28、RT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL)CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, ID

29、M_ABOUTBOX, strAboutMenu); / Set the icon for this dialog. The framework does this automatically/ when the application's main window is not a dialog SetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization here /初始化COM1m_ctrlComm.SetCommPort(1

30、); /串口1 m_ctrlComm.SetInBufferSize(1024); /设置输入缓冲区的大小,Bytes m_ctrlComm.SetOutBufferSize(512); /设置输入缓冲区的大小,Bytes if(!m_ctrlComm.GetPortOpen() /打开串口 m_ctrlComm.SetPortOpen(true);m_ctrlComm.SetInputMode(1); /设置输入方式为二进制方式 m_ctrlComm.SetSettings("9600,n,8,1"); /设置波特率等参数 m_ctrlComm.SetRThreshold

31、(1); /为1表示有一个字符即引发事件 m_ctrlComm.SetInputLen(0);return TRUE; / return TRUE unless you set the focus to a controlvoid CMy11250134Dlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);void CMy11250134Dlg

32、:OnDestroy()WinHelp(0L, HELP_QUIT);CDialog:OnDestroy();/ If you add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC applications using the document/view model,/ this is automatically done for you by the framework.void CMy11250134Dlg:OnPaint() if (IsIconic()C

33、PaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); / Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;i

34、nt y = (rect.Height() - cyIcon + 1) / 2; / Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();/ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CMy11250134Dlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;BEGIN_EVENTSINK_MAP(CMy11250134

35、Dlg, CDialog)/AFX_EVENTSINK_MAP(CMy11250134Dlg)ON_EVENT(CMy11250134Dlg, IDC_MSCOMM1, 1 /* OnComm */, OnOnCommMscomm1, VTS_NONE)/AFX_EVENTSINK_MAPEND_EVENTSINK_MAP()void CMy11250134Dlg:OnOnCommMscomm1() / TODO: Add your control notification handler code hereUpdateData(TRUE);/定义一些临时变量VARIANT variant_i

36、np; COleSafeArray safearray_inp; long i=0;int len;BYTE rxdata1000;switch(m_ctrlComm.GetCommEvent() case 2: /表示接收缓冲区内有字符/读取缓冲区数据 variant_inp=m_ctrlComm.GetInput();/将VARIANT型变量值赋给ColeSafeArray类型变量 safearray_inp=variant_inp;/获得数据长度 len=safearray_inp.GetOneDimSize();/将数据保存到字符数组中 for(i=0;i<len;i+) saf

37、earray_inp.GetElement(&i,&rxdatai); /字符串结束rxdatai='0'm_rece1 += rxdata; UpdateData(false);break;default:break;void CMy11250134Dlg:OnButtonSend1() / TODO: Add your control notification handler code hereUpdateData(TRUE);CByteArray sendArr;WORD wLen;/获得发送数据长度wLen=m_send1.GetLength();/给变

38、量sendArr设置长度 sendArr.SetSize(wLen);/把数据赋给CByteArray类型变量用于发送数据for(int i=0;i<wLen;i+)sendArr.SetAt(i,m_send1.GetAt(i);/发送数据 m_ctrlComm.SetOutput(COleVariant(sendArr);void CMy11250134Dlg:OnButtonDelete1() / TODO: Add your control notification handler code herem_send1=""UpdateData(FALSE);第5

39、章 串行异步通信程序调试5.1 计算机串口设置进入Windows中“计算机”系统属性,在“设备管理器”列表中有端口COM和LPT设备信息,选中通信端口COM1,查看其属性,在COM1端口属性的端口设置选项中,将其波特率(即每秒位数)设为9600,数据位设为8位,停止位设为1,采用偶校验,如图4.1所示:图 4.1 计算机通信端口设置5.2 程序运行结果该程序可以实现利用PC机的两个COM口实现异步通信,并能根据设置调整异步传行通信参数。当com1发送数据“11250134”时,com2能够准确的接受,同样,当com2发送字符“ok!”时com1也能够准确的收到。Com1接受和发送数据的界面如图

40、4.2所示: 图4.2 com1发送和接收数据总结 本次课程设计,在VC+6.0平台下,利用MSComm控件编写串口通信程序,成功地实现了数据发送、数据接收,由于数据发送会受一些因素的影响,因此在发送数据时有时会存在明显的延迟。用MSComm控件来完成设计,这种方法程序比较简单,而调用Windows的API函数,这种方法可以清楚地掌握串口通信的机制,相对比较自由灵活。串口通信中还有同步与异步串口通信之分,由于时间和知识的有限,这次我只做了比较容易学会的控件法。通过查找资料还知道串行通信也可以用VB,VC语言完成,所以感到知识的无穷无尽,我们还得不断地学习新知识,不断地实践。在此次课设中,我学习

41、了VC+的运用,我们通过动手实践操作,进一步学习和掌握了有关串行异步通信的知识,加深了对串口通信的认识,一定程度上拓宽了我们的视野,丰富了我们的知识。做设计的过程中,我有许多不懂得地方,在老师的指导下我一步步的解决问题完成论文,在完成过程中老师指导我去怎么选择资料,如何去利用网络资源。 这次课程设计,使我坚定了我在以后的学习中要认真学好基础知识,不能只做表面工作。读书不仅是要读书还要读活书,把学到的知识灵活地运用到实践中去,达到学有所用的地步。通过这段时间的亲身经历,我感觉自己学到了:收集、整理资料、共同协作、分析及处理问题等许多方面的知识。这次课程设计还让我们知道了,我们平时所学的知识如果不

42、加以实践的话等于纸上谈兵。课程设计主要是我们理论知识的延伸,它的目的主要是要在设计中发现问题,锻炼我们的动手能力,并且自己要能找到解决问题的方案,形成一种独立的意识。我们还能从设计中检验我们所学的理论知识到底有多少,巩固我们已经学会的,不断学习我们所遗漏的新知识,把这门课学的扎实。当然在做课程设计的过程中总会出现各种问题,在这种情况下我们都会努力寻求最佳路径解决问题,无形间提高了我们的动手,动脑能力,并且同学之间还能相互探讨问题,研究解决方案,增进大家的团队意识。总的来说,这次课程设计让我们收获颇多,不仅让我们更深一步理解书本的知识,提高我们分析问题和解决问题的能力,而且让我们体会到团队的重要

43、性。 参考文献1 李鹏.计算机通信技术及其程序设计.西安: 西安电子科技大学出版社,1999.6 2(美)史蒂芬(Stevens,A.), 林丽闽译.标准C+宝典M.北京:电子工业出版社,20013 杨永田.计算机通信. 哈尔滨:哈尔滨工程大学出版社,20024 韩毅刚.计算机通信技术. 北京市:北京航空航天大学出版社,20075 王莉,阳春华.基于VC+的串口通信设计及其应用J.控制工程,20046 龚建伟,熊光明.Visual C+/Turbo C串口通信编程实践M.电子工业出版社.20047 潘新民.计算机通信技术(第2版)M. 北京市;电子工业出版社,2006.88(美)Jan Axe

44、lson.串行端口大全M.北京市;中国电力出版社,20019 Peter M.Grant.Digital Communications(Second Edition).China Machine PressM10 H.S.Black.Modulation Theory.1993,Chap.4J附录/ 11250134Dlg.cpp : implementation file#include "stdafx.h"#include "11250134.h"#include "11250134Dlg.h"#ifdef _DEBUG#defi

45、ne new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA / ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)pr

46、otected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL / Implementationprotected:/AFX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDia

47、log:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ CMy11250134Dlg dialogCMy11250134Dlg:CMy11250134Dlg(CWnd* pParent /*=NULL*/): CDialog(CMy11250134Dlg:IDD, pParent)/AFX_DATA_INIT

48、(CMy11250134Dlg)m_send1 = _T("");m_rece1 = _T("");/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);void CMy11250134Dlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP

49、(CMy11250134Dlg)DDX_Control(pDX, IDC_BUTTON_DELETE1, m_com1delete);DDX_Control(pDX, IDC_BUTTON_SEND1, m_com1send);DDX_Control(pDX, IDC_MSCOMM1, m_ctrlComm);DDX_Text(pDX, IDC_EDIT_SEND, m_send1);DDX_Text(pDX, IDC_EDIT_RECEIVE, m_rece1);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CMy11250134Dlg, CDialog)/AFX_MSG_M

50、AP(CMy11250134Dlg)ON_WM_SYSCOMMAND()ON_WM_DESTROY()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON_SEND1, OnButtonSend1)ON_BN_CLICKED(IDC_BUTTON_DELETE1, OnButtonDelete1)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CMy11250134Dlg message handlersBOOL CMy11250134Dlg:OnInitDialog()CDialog:OnInitDialog();

51、 / Add "About." menu item to system menu. / IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL)CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); / Set the icon for this dialog. The framework does this automatically/ when the application's main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set b

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论