串口通信课程设计(微机原理课程设计)_第1页
串口通信课程设计(微机原理课程设计)_第2页
串口通信课程设计(微机原理课程设计)_第3页
串口通信课程设计(微机原理课程设计)_第4页
串口通信课程设计(微机原理课程设计)_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

串行通信控制理学院、实验目的1、掌握串行通信的原理和控制方法。2、采用三线连接方法,编程控制,实现两台微机异步串行通信。二、实验原理1、串口通信连接本次实验使用了RS-232C接口,其标准规定有25根连线,在一般的微机通信中,只有9个信号经常使用,它们的引脚定义如下表和图所示:引脚名称引脚名称功能1DCD载波检测2RXD接受数据3TXD发送数据4DTR数据终端就绪5SG信号地6DSR数据准备好7RTS请求发送8CTS清除发送9RI振铃提示“三线连接”是指使用RS-232C接口上的RXD、TXD和SG三线进行连接,PC1的RXD连接到PC2的TXD,PC2的RXD连接到PC1的TXD,PC2的SG连接到PC1的SG,只有像这样在物理上连接起两台微机,才能进行后续软件上通信的工作。2、软件设计基础本次实验我们使用了C#编程,其中的SerialPort控件类可用来控制串行端口文件资源,它属于命名空间System.IO.Ports,它提供了同步I/O和事件驱动的I/O、对管脚和中断状态的访问以及对串行驱动程序属性的访问。SerialPort主要含有以下属性:Encoding——获取或设置传输前后文本转换的字节编码PortName——获取或设置通信端口,包括但不限于所有可用的COM端口BaudRate ——获取或设置串行波特率DataBits ——获取或设置每个字节的标准数据位长度Parity ——获取或设置奇偶校验检查协议StopBits ——获取或设置每个字节的标准停止位数SerialPort主要含有以下方法:Open ——打开一个新的串行端口连接Close 关闭端口连接,将IsOpen属性设置为false,并释放内部Stream对象。Write ——将数据写入串行端口输出缓冲区ReadExisting——在编码的基础上,读取SerialPort对象的流和输入缓冲区中所有立即可用的字节三、实验步骤1、打开VisualStudio2008,新建C#Windows窗体应用程序项目2、设计界面,添加界面元素3、为各个控件设置事件响应代码4、调试并完成程序四、设计的控制界面及其操作设计的控制界面如下所示:通过“串口设置”可以选择串口、设置帧格式、打开及关闭串口等通过“状态”可以查看串口状态、发送的数据帧数和接受的数据帧数在“发送数据”窗口中输入内容,点击“发送”,即把数据发送给对方在“数据显示”窗口中会显示接受的数据五、实验小结这次实验硬件上只需连三根线,比较简单,难点在于软件编程,我们选择的是C#语言编写,利用VisualStudio2008可以轻松快捷地构建出基于C#语言的窗体应用程序,界面设计上很简单,重点就在于如何利用SerialPort的属性和方法完成系统功能,这就涉及一些控件,如按钮、下拉列表框的事件响应代码的编写。通过这次实验我掌握了利用RS-232C接口实现串行通信的基本原理和方法(三线连接),另外增加了对C#的理解,增强了动手能力。附录(主要源代码)usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Threading;//添加线程类引用usingSystem.IO.Ports; //添加serialPort类引用namespaceSerialCom{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privatevoidForm1_Load(objectsender,EventArgse){//处理线程错误问题Control.CheckForIllegalCrossThreadCalls=false;//初始化系统界面上下拉列表的数据string[]PortName=SerialPort.GetPortNames();foreach(stringsinPortName){cbPortName.Items.Add(s);}this.cbPortName.SelectedIndex=PortName.Length-1;this.cbBaud.SelectedIndex=3;this.cbDataBit.SelectedIndex=0;this.cbParityBit.SelectedIndex=0;this.cbStopBit.SelectedIndex=0;〃调用初始化COM端口程序ResetPort();//设置停止位publicstringstopbits(inti){stringstrstop;switch(i){case0:strstop="One";break;case1:strstop="Two";break;case2:strstop="OnePointFive";break;default:strstop="One";break;}returnstrstop;}//初始化端口privatevoidResetPort(){serialPort1.Encoding=Encoding.GetEncoding("GB2312");serialPort1.PortName=cbPortName.Text;serialPort1.BaudRate=int.Parse(cbBaud.Text);serialPort1.DataBits=int.Parse(cbDataBit.Text);serialPort1.Parity=(Parity)Enum.Parse(typeof(Parity),this.cbParityBit.Text);serialPort1.StopBits=(StopBits)Enum.Parse(typeof(StopBits),stopbits(this.cbStopBit.SelectedIndex));serialPort1.ReadTimeout=500;serialPort1.WriteTimeout=1000;try{serialPort1.Open();lbPortState.Text="串口打开";}catch{MessageBox.ShowC指定串口正在使用,您是否要结束它?\n”,”操作提示");lbPortState.Text="串口关闭";

}//发送数据按钮privatevoidbtnSend_Click(objectsender,EventArgse){if(txtSend.Text==""){MessageBox.Show(”发送数据为空!”);return;}try{SendStringData(serialPort1);}catch(Exceptione1){MessageBox.Show(el.Message,"发送数据异常”);}//开启接收数据线程ReceiveData(serialPortl);}privatevoidSendStringData(SerialPortserialPortl){serialPortl.Write(txtSend.Text);〃发送数据帧加1lbSendNum.Text=(int.Parse(lbSendNum.Text.Trim())+l).ToString();}//开启接收数据privatevoidReceiveData(SerialPortserialPort1){Thread(new//异步接收数据线程Thread(newThread threadReceiveSub = newParameterizedThreadStart(AsyReceiveData));threadReceiveSub.Start(serialPort1);}//异步读取privatevoidAsyReceiveData(objectserialPortobj){SerialPortserialPort=(SerialPort)serialPortobj;System.Threading.Thread.Sleep(500);try{txtReceive.Text=serialPort.ReadExisting();//接收数据帧加1lbReceiveNum.Text=(int.Parse(lbReceiveNum.Text.Trim())+1).ToString();}catch(Exceptione){MessageBox.Show(e.Message,"接收数据异常”);〃处理错误}}//选择串口privatevoidcbPortName_SelectedIndexChanged(objectsender,EventArgse){if(serialPort1.IsOpen){serialPort1.Close();lbPortState.Text="串口关闭";}}//选择波特率privatevoidcbBaud_SelectedIndexChanged(objectsender,EventArgse){serialPort1.BaudRate=int.Parse(cbBaud.Text);}//选择数据位privatevoidcbDataBit_SelectedIndexChanged(objectsender,EventArgse){serialPort1.DataBits=int.Parse(cbDataBit.Text);}//选择校验位privatevoidcbParityBit_SelectedIndexChanged(objectsender,EventArgse){serialPort1.Parity=(Parity)Enum.Parse(typeof(Parity),this.cbParityBit.Text);}//选择停止位privatevoidcbStopBit_SelectedIndexChanged(objectsender,EventArgse){serialPort1.StopBits = (StopBits)Enum.Parse(typeof(StopBits),stopbits(this.cbStopBit.SelectedIndex));}//打开串口privatevoidbtnOpenPort_Click(objectsender,EventArgse){if(serialPort1.IsOpen){MessageBox.Show(”串口已经打开!");return;}else{ResetPort();}}//关闭串口privatevoidbtnClosePort_Click(objectsender,EventArgse){serialPort

温馨提示

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

评论

0/150

提交评论