用vc的串口通信实验报告.docx_第1页
用vc的串口通信实验报告.docx_第2页
用vc的串口通信实验报告.docx_第3页
用vc的串口通信实验报告.docx_第4页
用vc的串口通信实验报告.docx_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

高级Internet编程高级Internet编程实验报告 实验题目:串口通信班 级 :学 号 :姓 名 :日 期 :2015-6-8一、实验要求把两台计算机的串口通过串口线连在一起,通过串口实现两台计算机通讯。可以利用高级语言、C语言编程实现,要求程序界面友好,有发送和接收功能,其接收和发送内容可在屏幕上显示。二、实验原理串口通讯把数据的字节分解成单个的二进制比特流依次传输,其结构简单,连接线少,应用非常广泛。实现串口通信的方法很多。如:利用标准通信函数实现串口通信、利用API实现串口通信和利用ActiveX控件实现。本文主要采用ActiveX控件Microsoft CommunicationsControl(MSComm)编程,Windows平台先进的ActiveX技术使得对串口编程不再需要处理烦琐的细节。利用已有的AxtiveX控件,只需要编写少量的代码,就可以轻松高效地完成任务。以下对ActiveX控件属性进行简单介绍,在ClassWizard中为新创建的通信控件定义成员对象(CMSComm m_comm),通过该对象便可以对串口属性进行设置,MSComm控件共有27个属性,这里只介绍其中几个常用属性:CommPort:设置并回通讯端口号,缺省为COMl。Settings:以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。PortOpen:设置并返回通讯端口的状态,也可以打开和关闭端口。Input:从接收缓冲区返回和删除字符。Output:向发送缓冲区写一个字符串。InputLen:设置每次Input读入的字符个数,缺省值为0,表明读取接收缓冲区中的全部内容。InBufferCount:返回接收缓冲区中已接收到的字符数,将其置0可以清除接收缓冲区。InputMode:定义Input属性获取数据的方式(为0:文本方式;为1:二进制方式)。RThreshold和SThreshold:表示在OnComm事件发生之前,接收缓冲区或发送缓冲区中可以接收的字符数。三、实验步骤1、建立应用工程启动VC+60,创建一个基于对话框的MFC应用程序项目,选择Project菜单下Add to Project子菜单中的Components and Controls选项,在弹出的对话框中双击Registered ActiveX Controls项,则所有注册过的ActiveX控件出现在列表框中。选择Microsoft Communications Control version 60,单击insert按钮即可将通信控件插入该工程。添加该控件到对话框中,设置控件ID号为IDC _MSCOMM.2、添加界面控件将对话框中的按钮“取消”删除,将“确定”按钮改为“退出”。在对话框中添加适当的界面控件。本实验中需添加的标注用的静态控件、用于选择串口和设置波特率的组合框分别设置控件ID号为IDC_COMBO_SELECT和IDC _COMBO_BTL SET、添加控制开始发送/接收按钮控件并设置控件ID号为IDC_BUTTON_START,添加用于输入发送数据和输出接收数据的编辑框并设置控件ID号为IDC_EDIT_SEND和IDC_EDIT_RECEVE,同时为其设置各种属性。添加完后如下图:3、映射控件通用消息 (1)打开MFC ClassWizard对话框,单击Member Valuable为相应控件添加变量。添加变量名和类型如下表:控件ID号变量名变量类似IDC_EDIT_RECEVECStringm_recevedataIDC_EDIT_SENDCStringm_sendIDC_COMBO_SELECTCComboBoxm_comselectIDC _COMBO_BTLSETCComboBoxm_btlsetIDC _MSCOMMCMSComm_comm如下图:(2)单击Message Maps,添加对话框初始化函数BOOL CCOMM_TD lg:OnInitDialog();编辑加入代码如下:BOOL CCOMM_TDlg:OnInitDialog()/ TODO: Add extra initialization herem_comselect.AddString(COM1); /为组合框设置选项,即设定串口选项m_comselect.AddString(COM2);m_comselect.AddString(COM3);m_comselect.AddString(COM4);m_comselect.AddString(COM5);m_comselect.SetCurSel(0); /设置默认串口是COM1m_btlset.AddString(2400);/为组合框设置选项,即设定波特率选项m_btlset.AddString(4800);m_btlset.AddString(9600);m_btlset.AddString(19200);m_btlset.AddString(38400);m_btlset.SetCurSel(0);/设置默认波特率为2400return TRUE; / return TRUE unless you set the focus to a control (3)为按钮IDC_BUTTON_START添加单击响应函数void CCOMM_TDl g:OnButtonStart();函数代码如下:void CCOMM_TDlg:OnButtonStart() int n_com,n_set,i;CString temp;n_set=m_btlset.GetCurSel();/获取波特率选择索引号 switch(n_set) / 转换为对应的波特率case 0:i=19200;break;case 1:i=2400;break;case 2:i=38400;break;case 3:i=4800;break;case 4:i=9600;break;temp.Format(%d,n,8,1,i); /将设置参数转换为CString类型存入temp中m_comm.SetSettings(temp);/波特率设置 m_comm.SetInputMode(1); /1:表示以二进制方式检取数据 m_comm.SetRThreshold(1); m_comm.SetInBufferSize(1024);/设置输入缓冲区的大小 m_comm.SetOutBufferSize(512);/设置输出缓冲区的大小 /参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件 n_com=m_comselect.GetCurSel(); m_comm.SetCommPort(n_com); /选择com if( !m_comm.GetPortOpen() m_comm.SetPortOpen(TRUE);/打开串口 else AfxMessageBox(不能打开该串口。); m_comm.SetInputLen(0); /设置当前接收区数据长度为0 m_comm.GetInput();/先预读缓冲区以清除残留数据 UpdateData(TRUE); /读取编辑框内容 int Count=m_send.GetLength();/字符串长度 char TxData1000; int j; for(j=0;jCount;j+) TxDataj=m_send.GetAt(j);/要发送的字符串送字符数组 CByteArray array; array.RemoveAll(); array.SetSize(Count); for(j=0;jCount;j+) array.SetAt(j,TxDataj);/将字符数组型 m_comm.SetOutput(COleVariant(array);/发送数据/ TODO: Add your control notification handler code here (4)为IDC _MSCOMM添加消息映射函数void CCOMM_TDlg:OnOnCommMscomm()以便当接收缓冲区有数据时做相应处理。添加代码如下:void CCOMM_TDlg:OnOnCommMscomm() VARIANT variant_inp; COleSafeArray safearray_inp; long len,k; BYTE rxdata2048; /设置BYTE数组 An 8-bit integerthat is not signed. CString strtemp; if(m_comm.GetCommEvent()=2) /事件值为2表示接收缓冲区内有字符 /以下你可以根据自己的通信协议加入处理代码 variant_inp=m_comm.GetInput(); /读缓冲区 safearray_inp=variant_inp; /VARIANT型变量转换为ColeSafeArray型变量 len=safearray_inp.GetOneDimSize(); /得到有效数据长度 for(k=0;klen;k+) safearray_inp.GetElement(&k,rxdata+k);/转换为BYTE型数组 for(k=0;klen;k+) /将数组转换为Cstring型变量 BYTE bt=*(char*)(rxdata+k); /字符型 strtemp.Format(%c,bt); /将字符送入临时变量strtemp存放 m_recevedata+=strtemp; /加入接收编辑框对应字符串 UpdateData(FALSE); /更新编辑框内容,显示接收到的数据/ TODO: Add your control notification handler code here (5)编译、链接、运行会在相应工程目录下的debug目录下生成可执行的EXE文件。连接好串口线后运行该文件可进行串口通信。运行如下:四、通信测试A机运行如下:B机运行如下:五、实验心得 通过本次串口通信实验,让我对串口通信原理有了更近一步的理解。同时通过应用VC+ 6.0带的MFC进行串口通信API应用和用户界面制作,使我对VC+的使用更加熟练,同时也掌握了ActiveX控件的使用方法及原理。总之,在本次实验中我收获很多,不仅在通信方面的知识有所提升、VC+软件的使用更加熟练,而且也让我学会了一些调试的方法,通过编程实现如上功能的同时,也让我温习了以前所学的C以及C+语言

温馨提示

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

评论

0/150

提交评论