基于VB_NET的PC机和MCS_51单片机之间的串行通信

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第14卷第4期北京电子科技学院学报2006年12月Vol.14No.4JournalofBeijingElectronicScienceandTechnologyInstituteDec.2006

基于VB.NET的PC机和MCS-51单片机之间的串行通信

何文才1,2杜鹏1,2刘培鹤1牛晓蕾1,2张媛媛1,2

(1.北京电子科技学院通信工程系,北京,100070;

2.西安电子科技大学通信工程学院,陕西西安,710071)

摘要:本文介绍了基于VisualStudio2005的VisualBasic2005(简称VB.NET)进行串口程序开发的方

法,它具有开发周期短、可靠性强等特点。同时给出了PC机与51单片机串行通信的应用实例,这对快

速掌握最新的PC机与单片机串口通信技术有一定的参考价值。

关键词:VisualBasic.NET;Serialport控件;串行通信;单片机

中图分类号:TP368.2文献标识码:A文章编号:1672-464X(2006)04-0061-04

1引言

PC机和单片机之间的通信问题一直是业界的热门话题,它广泛应用于工业控制系统、智能检测系统、数据采集系统等。PC机与单片机之间通常采用两种通信方式:并行通信和串行通信。并行通信是指将待发送数据的各位同时传送,串行通信则将数据一位一位地按顺序传送。并行通信虽然传输效率高、速度快,但可靠性差,所需硬件设备复杂,不适于长距离通信(通常不超过三十米),所以一般只适用于要求实时性强,传送速率较高的系统中,实用面较窄。相比之下,串行通信虽然速度较慢、效率较低,但可靠性好,简单易实现,传输距离较长,所以被广泛应用于多种场合,特别适合于计算机与计算机、计算机与外设之间的远距离通信[1]。

串行通信包括同步通信和异步通信。在同步通信中,数据开始传送前用同步字符来指示,并由时钟信号来实现发送端和接受端同步。同步通信可以提高传输速率,但硬件实现比较复杂,常用于信息量大,传输速率要求高的场合;而在异步通信中,规定了标准的字符数据传输格式,即每一帧信息由起始位、数据位、奇偶校验位和停止位组成。异步通信由于有冗余位,所以传送效率不高,常用于信息量不大,传输速率要求较低的场合[1]。

VB.NET是Microsoft最新推出的一种集成开发环境,它既继承了旧版VB的特点,又有新的扩充,具有功能强大、界面友好、32位的真正面向对象、易学易用等特点,受到广大用户的青睐,被广泛运用于各个领域。

2串行通信实现方法

常用的串行通信实现方式有两种,一种是直接利用控件,另一种是利用WindowsAPI函数。在VS2005以前的版本中,串行通信控件是Mscomm,而在VS2005中被升级为Serialport。利用控件的操作很直观、也很方便。利用API函数可以完成更强大的功能,适合深度开发。API函数是控件的抽象,控件是API函数的具体化。无论利用哪种方式,其本质都是一样的,首先是串口的初始化,包括选择串口、设置波特率、是否校验、选择握手协议、打开串口等;然后通过缓冲区读取上下行数据;最后通过驱动实现数据的处理。

3串行通信在VB.Net平台下的实现

基于本文的宗旨,我们利用Serialport控件来编程。此控件所在的类是MicroSoft最新在Microsft.NetFramework2.0中引进的。下面介绍此控件的一些主要属性和驱动事件。

BaudRate:设置波特率

DateBits:数据位

DiscardNull:是否忽略空字节,为Boolean型变量

DtrEnable:是否接受就绪,为Boolean型变量

GenerateMember:是否生成当前控件的类变量,为Boolean型变量

HandShake:握手协议选择,其枚举值为None、XOnXOff、RequestToSend、RequestToSendXOnXOff

Modifiers:继承属性控制,其枚举值为Public、Protected、ProtectedFriend、Friend、Private

收稿日期:2006-05-31

北京电子科技学院学报2006年

Parity:检验性,其枚举值为None、Odd、Even、Mark、Space

ParityReplace:

校验替代字节,其值为字符的ASCII码PortName:

串口号,对应Mscomm控件中的CommPortRead:

从缓冲区读数据,对应Mscomm控件中的InputReadBufferSize:

接收缓冲区的大小,对应Mscomm控件中的InBufferCountReadTimeout:

读缓冲区数据最长时间ReceivedBytesThreshold:

接收缓冲区中接收到一个字符,就产生一次DataReceived事件,RtsEnable:

是否启用请求发送,为Boolean型变量StopBits:

停止位Write:

向缓冲区写数据,对应Mscomm控件中的OutputWriteBufferSize:

发送缓冲区的大小,对应Mscomm控件中的OutBufferCountWriteTimeout:

写缓冲区数据最长时间DataReceived事件:

该事件对应Mscomm控件中的OnComm事件,可以在此事件中对数据进行处理,是Serialport最主要的事件

另外,SerialPort控件还具有ErrorReceived事件和PinChanged事件,分别用来处理发生错误和串口针脚电平发生变化的情况,不再赘述。

掌握了这些属性和事件后,编写程序就很容易了。下面给出程序中主要事件的代码。

窗体加载事件的代码如下:

PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load

WithSerialPort1

.PortName="COM1"选择串口1

.BaudRate=9600波特率9600bps

.Parity=IO.Ports.Parity.None无校验

.DataBits=88位数据位

.StopBits=IO.Ports.StopBits.One1位停止位

.ParityReplace=0

EndWith

SerialPort1.Open()打开串口

EndSub

在此设置了一些必要的属性值,其它属性值采用默认值即可。

向串口发送数据按钮的单击事件代码如下:

PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click

SerialPort1.RtsEnable=True启用请求发送

SerialPort1.DtrEnable=True接受就绪

SerialPort1.Write(TextBox1.Text)发送数据至串口

TextBox2.Text=s回显收到数据

EndSub

SerialPort的DataReceived事件代码如下:

PrivateSubSerialPort1_DataReceived(ByValsenderAsObject,ByValeAsSystem.IO.Ports.SerialDataReceivedEventArgs)HandlesSerialPort1.DataReceived

s=SerialPort1.ReadExisting接受串口数据

EndSub

窗体卸载事件代码如下:

PrivateSubForm1_FormClosed(ByValsenderAsObject,ByValeAsSystem.Windows.Forms.FormClosedEventArgs)HandlesMe.FormClosed

SerialPort1.Close()关闭串口

EndSub

此程序功能较单一,重在说明SerialPort控件的用法,读者在实际应用中根据具体要求加以扩展即可。

62・・

相关文档
最新文档