基于VB的串口通讯及其软件实现

合集下载

VB(12)第五章 串口通信方法与实现2

VB(12)第五章 串口通信方法与实现2
接后的状态。
使用 AT 指令要遵循的规则
◆每个 AT 指令字符串的最后必须加上回车 符 Chr(13),否则调制解调器将不执行传送 过来的指令。
◆除了“A/ ”和“+++”两个指令外,其他 的指令都必须加上“ AT ” 前导符。
◆AT 指令可以一个一个地发送,也可以合 成 一个字符串后再发送。用字符串发送时,总
2.事件驱动方式 事件驱动方式使用串口控件的 OnComm 事件。由于事件驱动方式会产生类似于硬件中 断的效果,所以也称为软中断接收方式。
OnComm 事件 MSComm1 控件只有一个 OnComm 事 件,在这个事件中包含了十七个通信过程中的 事件处理过程并用事件用属性CommEvent 的 十七个值来区分不同的触发事件。
If MSComm1.InBufferCount > 0 Then timel = Timer
While Timer - timel < 0.1 DoEvents
Wend Text2.Text = MSComm1.Input
End If End Sub
运行程序,在发送文本框中输入字符或汉 字,点击“发送”按钮,在“接收”文本框中 就会自动显示接收到的数据。
Case comEvSend
Case comEvEOF
End Select
End Sub
(3) 编写事件驱动方式的通信程序 ◆窗体设计:在查询方式通信窗体中,将 定时器控件及相关的代码去掉。
◆编写代码
Private Sub MSComm1_OnComm() Select Case mEvent Case comEvReceive MSComm1.RThreshold = 0 If MSComm1.InBufferCount > 0 Then timel = Timer While Timer - timel < 0.1 DoEvents Wend Text2.Text = MSComm1.Input End If MSComm1.RThreshold = 1 End Select

用VisualBasic实现串口通信的三种方法

用VisualBasic实现串口通信的三种方法

comm2. InBufferSize = 512 ′设置接收缓冲区为 512 字节
comm2. SThreshold = 1
′发送缓冲区空触发发送事件
comm2. RThreshold = 0
′禁止接收事件
′打开 COM1 ,COM2
comm1. Portopen = True
comm2. Portopen = True
以上五种属性对串口完成基本的设置和操作 ,下面的三 种属性是描述如何利用 VB 提供的事件驱动机制来实现通 信。
CommEvent :返回通信过程中产生的错误信息及事件 ,了 解通信状况 。
SThreshold :设置并返回不触发 OnComm 事件时发送缓冲 区被允许的最少字符数 。当缓冲区的字符少于设置的值时 , 则触发 OnComm 事件 ,并把 CommEvent 设为 MSCOMMM—EV— SEND。当 SThreshold = 0 则禁止发送触发 OnComm 事件 , 当 SThreshold = 1 则发送缓冲区为空时就触发 OnComm 事件 。利 用这一属性 ,就可完成发送数据后的一系列操作 。如 :对刚发 送的数据进行处理 ,当串口是和 MODEM 通信时 ,发送完数据 后可进行拆除线路联接 、挂机等操作 。
′读取接收缓冲区的所有字符
comm1. OutBufferSize = 512 ′设置发送缓冲区为 512 字节
comm1. InBufferSize = 512 ′设置接收缓冲区为 512 字节
comm1. SThreshold = 0
′禁止发送事件
comm1. RThreshold = 1 ′每一个字符到接收缓冲区都
WINDOWS 的 HELP 文件 WINSDK. HLP 中包含了完整的 WINDOWS API 函数信息 ,可用该文件查看联机函数 、数据结 构及错误信息 。

【推荐下载】基于VB的串口通讯

【推荐下载】基于VB的串口通讯

基于VB的串口通讯现在通讯方式越来越多,速度越来越快,但串行通讯由于自身价格低、协议透明、硬件投资少、软件编程简单等诸多优点在远程数据采集、监视、通信及控制领域里一直占据着极其重要的地位。

以下是VB的串口通讯。

 1串口通信的通信机理 PC串行通信是指直接对串行端口的UART(PC机的通用异步收发器,也叫异步通信适配器,是PC机用于异步通信的接口)进行编程实现的通信。

PC机每个UART中的INS8250中有10个可编程的单字节寄存器,可用于控制、监视操作串行端口,COM1的寄存器地址3F8H-3FEH,COM2的寄存器地址为2F8H-2FEH。

10个寄存器由7个地址访问,其中5个寄存器的访问条件是先设置3FBH线路控制寄存器的最高位为 1 ,该位也称为DLAB状态位。

[1] 一般说来,PC机都有一个或多个串行端口,它们依次为Com1、Com2 。

这些串口提供了外部设备与PC进行数据传输和通信的通道,在CPU和外设之间充当了解释器的角色。

当字符数据从CPU发送给外设时,这些字符数据将被转换成串行比特流数据;而当接受数据时,从外界进来的比特流数据被转换成字符数据传递给CPU进行处理。

在操作系统方面,Windows用通信驱动程序(COMM.DRV)调用API函数发送和接受数据。

当用通信控件或声明调用API函数时,它们由COMM.DRV解释并传递给设备驱动程序。

 作为一个VB程序员,要编写串口通信程序,只需知道通信控件提供给Windows通信API函数的接口即可,换言之,只需设定和监视通信控件的属性和时间即可。

 2串行通讯接口RS-232 前一章节讨论了串口通讯的通信机理,但为了实现具体的数据采集、监视、通信功能,必须了解具体的串口形式。

目前使用最广泛的串行接口有两种:RS-232和RS-485。

本文着重讨论RS-232,RS- 485不作介绍。

 tips:感谢大家的阅读,本文由我司收集整编。

仅供参阅!3G,指第三代移动通信技术。

VB中串口通讯的实现

VB中串口通讯的实现

VB中串口通讯的实现在VB中实现串口通讯需要借助于SerialPort类,该类提供了一系列方法和属性用于串口的配置和通讯操作。

接下来,定义一个SerialPort对象和一个字节数组,用于接收和发送数据。

在窗体加载事件中初始化SerialPort对象,并设置串口的一些属性,如波特率、数据位、校验位等,根据实际需求进行配置。

还可以设置数据接收和发送的事件处理函数。

例如,下面的代码演示了如何配置串口:```vbImports System.IO.PortsPublic Class Form1Dim serialPort As New SerialPortDim receiveBuffer(255) As BytePrivate Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load'配置串口属性serialPort.PortName = "COM1"serialPort.BaudRate = 9600serialPort.DataBits = 8serialPort.Parity = Parity.NoneserialPort.StopBits = StopBits.One'数据接收事件处理函数AddHandler serialPort.DataReceived, AddressOfSerialPort_DataReceived'打开串口serialPort.OpenEnd SubPrivate Sub SerialPort_DataReceived(sender As Object, e As SerialDataReceivedEventArgs)'接收数据Dim bytesToRead As Integer = serialPort.BytesToReadDim bytesRead As Integer = serialPort.Read(receiveBuffer, 0, bytesToRead)'处理接收到的数据If bytesRead > 0 ThenDim receivedData As String =Encoding.ASCII.GetString(receiveBuffer, 0, bytesRead) '显示接收到的数据UpdateReceivedData(receivedData)End IfEnd SubPrivate Sub btnSend_Click(sender As Object, e As EventArgs) Handles btnSend.Click'发送数据Dim sendData As String = txtSendData.TextDim sendBuffer As Byte( = Encoding.ASCII.GetBytes(sendData) serialPort.Write(sendBuffer, 0, sendBuffer.Length)'清空发送框txtSendData.Text = ""End SubPrivate Sub UpdateReceivedData(data As String)'更新接收数据的显示If Me.InvokeRequired Then ' 跨线程调用控件Me.Invoke(Sub( UpdateReceivedData(data))ElselblReceivedData.Text = dataEnd IfEnd SubEnd Class```在上述代码中,我们主要关注Form1_Load事件处理函数和btnSend_Click事件处理函数。

基于VB6.0的串口通信方法

基于VB6.0的串口通信方法

基于VB6.0的串口通信方法串口通信在数据采集中有着广泛的应用,因为串口通信通信线路简单、灵活方便、数据可靠。

作为快速开发,利用VB开发串口通信程序既可以使用MSComm控件也可以调用WindowsAPI函数实现。

这里我们使用VB6.0提供的MSComm控件,因为MSComm控件的功能和API调用一样强,甚至更好且使用起来更加简单,能很方便地实现所需的串口通信功能。

1.MSComm控件简介MSComm控件是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。

具体的来说,它提供了两种处理通信问题的方法:一是事件驱动方法,当串口通信产生错误时,MSComm控件会触发OnComm事件,程序员可以在OnComm事件处理函数中加入自己的处理代码。

另外一种是查询法。

查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。

在程序的每个关键功能之后,可以通过检查CommEvent属性的值来查询事件和错误。

2.MSComm控件的常用属性MSComm控件有很多重要的属性,但首先必须熟悉几个关键属性。

CommPort 设置并返回通讯端口号Settings 以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位PortOpen 设置并返回通讯端口的状态。

也可以打开和关闭端口Input 从接收缓冲区返回和删除字符Output 向传输缓冲区写一个字符串3.程序代码设计利用MSComm控件编写串口通信程序是十分便利和简单的。

下面我就事件驱动方式以VB6.0为平台编写了PC间串口通信程序的实例。

代码如下:'串口初始化PrivateSubForm_Load()mPort=1 '设置通信端口号为COM1MSComm1.Settings="9600,n,8,1" '设置串口参数MSComm1.InputMode=0 '接收文本型数据MSComm1.RThreshold=1'接收缓冲区每收到一个字符都会使MSComm控件触发OnComm事件MSComm1.PortOpen=True '打开通信端口1EndSub'把字符通过串口发送出去'启动定时器PrivateSubCmdsend_Click()IfTextsend.Text=""Thenpp=MsgBox("发送的数据不能为空!",16)ExitSubEndIfMSComm1.Output=Trim(Textsend.Text)EndSub'MSComm的OnComm事件程序'由CommEvent属性值的不同,将各自的程序代码写入相关的子程序中'只要RThresold中的设定字符数到达时便会使得CommEvent属性值变成comEvReceive'因此接收的子程序便会被执行PrivateSubMSComm1_OnComm()Dimbuf$mEvent'通过取代每一个case表达式来处理每个事件与错误CasecomEvCD'CD线的状态发生变化CasecomEvCTS'CTS线的状态发生变化CasecomEvDSR'DSR线的状态发生变化CasecomEvReceivebuf=Trim(MSComm1.Input)'将缓冲区内的数据读入buf变量中CasecomEvSendEndSelectTextReceive.Text=TextReceive.Text&bufEndSub'停止程序运行PrivateSubCmdquit_Click()UnloadMeEndSub'关闭通信端口,PrivateSubForm_Unload(CancelAsInteger)MSComm1.PortOpen=FalseEndSub4结束语本文通过具体实例介绍了如何利用VB6.0中的MSComm控件来实现串口通信。

7 串口通讯实例程序(VB)

7 串口通讯实例程序(VB)

第七篇串口通讯实例程序(VB版)上一篇文档中简单了解了一下SerialPort控件。

本篇文档将利用这个控件,编写一个简单的串口收发程序。

打开VS2005。

文件| 新建| 项目。

新建一个项目,名称:SerialPortTest。

打开Form1.vb窗口。

在窗口中添加几个控件。

包括4个按钮,两个编辑框,1个状态栏,两个静态文本,简单的调整一下窗体。

如下图:将两个编辑框的Multiline属性设置为True。

然后给窗体添加一个SerialPort控件。

调整一下其属性如下:BaudRate : 9600 DataBits : 8 Parity : None PortName : COM1StopBits : One ReceivedBytesThreshold : 1添加“打开串口”按钮的单击响应函数,如下:——————————————————————————————————Private Sub BTN_COM_OPEN_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_COM_OPEN.ClickIf Me.SerialPort1.IsOpen = True ThenMe.StatusBar1.Text = "串口已经连接! COM1,9600,8,1"MsgBox("当前设备已连接", MsgBoxStyle.OkOnly, "提示") ElseMe.SerialPort1.Open()If Me.SerialPort1.IsOpen = True ThenMe.StatusBar1.Text = "打开串口成功!COM1,9600,8,1"ElseMe.StatusBar1.Text = "打开串口失败!"End IfEnd IfEnd Sub ——————————————————————————————————上面这段代码,打开串口,并在状态栏上显示一些提示信息。

串口通讯及其在VB平台下的实现

串口通讯及其在VB平台下的实现摘要:本文首先介绍串行通讯的基础知识,然后结合示例剖析在VB平台下的串口通讯的编程技巧。

随着计算机系统的普及与外围设备技术的发展,计算机与外围设备之间的通讯就显得越来越重要了。

由于串行通信是在一根传输线上一位一位的传送信息,所用的传输线少,并且可以借助现成的电话网进行信息传送,因此,特别适合于远距离传输。

对于那些与计算机相距不远的人-机交换设备和串行存储的外部设备如终端、打印机、逻辑分析仪、磁盘等,采用串行方式交换数据也很普遍。

在实时控制和管理方面,采用多台微机处理机组成分级分布控制系统中,各CPU之间的通信一般都是串行方式。

所以串行接口是微机应用系统常用的接口,而相应的应用程序也成为今年来研究的热点。

本文旨在阐述一般的穿口通讯的原理及其程序设计,希望借此能够抛砖引玉,为更深入的研究打下一定的基础。

一、串行通讯的基本原理所谓"串行通信"是指外设和计算机间使用一根数据信号线,数据在一根数据信号线上按位进行传输,每一位数据都占据一个固定的时间长度。

这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,当然,其传输速度比并行传输慢。

相比之下,由于高速率的要求,处于计算机内部的CPU与串口之间的通讯仍然采用并行的通讯方式,所以串行口的本质就是实现CPU与外围数据设备的数据格式转换(或者称为串并转换器),即当数据从外围设备输入计算机时,数据格式由位(bit)转化为字节数据;反之,当计算机发送下行数据到外围设备时,串口又将字节数据转化为位数据。

二、串口通讯的程序设计原理前面介绍了串行通讯的基本原理,那么如何在程序设计中实现它呢?事实上,这个过程并不复杂,一般有两种实现途径:其一就是使用MSCOMM控件,此控件提供很多方便操作的属性和方法,利用它们可以很方便地实现你的目的;另外一种途径就是使用Windows API,微软为开发者提供了很多相关的串行操作的编程接口,使用这些接口,可以很完成更为强大的功能。

vb串口编程实例

VB串口编程实例介绍VB(Visual Basic)是一种基于对象的编程语言,可用于开发Windows应用程序。

串口编程是指通过串行通信接口与外部设备进行数据交互。

本文将介绍如何使用VB进行串口编程,以实现与外部设备的通信。

前提条件在开始编写VB串口程序之前,需要确保以下条件已满足: - 安装了Visual Studio开发环境,可以选择最新版本的Visual Studio Community免费版。

- 确保计算机上有可用的串口(如COM1、COM2等)或USB转串口适配器。

步骤1. 创建新项目打开Visual Studio,选择创建一个新的VB Windows应用程序项目。

2. 添加控件在窗体上添加以下控件: - 一个ListBox控件用于显示接收到的数据。

- 两个Button控件分别用于打开和关闭串口。

- 一个ComboBox控件用于选择串口号。

- 一个TextBox控件用于输入要发送的数据。

- 一个Button控件用于发送数据。

3. 设置串口属性在窗体代码中添加如下代码:Imports System.IO.PortsPublic Class Form1Dim serialPort As New SerialPort()Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Lo ad' 获取可用的串口号并添加到ComboBox中Dim ports As String() = SerialPort.GetPortNames()ComboBox1.Items.AddRange(ports)End SubPrivate Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click' 打开串口TryserialPort.PortName = ComboBox1.SelectedItem.ToString()serialPort.BaudRate = 9600serialPort.Parity = Parity.NoneserialPort.DataBits = 8serialPort.StopBits = StopBits.OneserialPort.Open()Button1.Enabled = FalseButton2.Enabled = TrueCatch ex As ExceptionMessageBox.Show("无法打开串口:" + ex.Message)End TryEnd SubPrivate Sub Button2_Click(sender As Object, e As EventArgs) Handles Button 2.Click' 关闭串口TryserialPort.Close()Button1.Enabled = TrueButton2.Enabled = FalseCatch ex As ExceptionMessageBox.Show("无法关闭串口:" + ex.Message)End TryEnd SubEnd Class4. 接收数据和发送数据在窗体代码中添加如下代码:Imports System.IO.PortsPublic Class Form1Dim serialPort As New SerialPort()Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Lo ad' 获取可用的串口号并添加到ComboBox中Dim ports As String() = SerialPort.GetPortNames()ComboBox1.Items.AddRange(ports)End SubPrivate Sub Button1_Click(sender As Object, e As EventArgs) Handles Button 1.Click' 打开串口' 省略部分代码...AddHandler serialPort.DataReceived, AddressOf DataReceivedHandlerserialPort.Open()Button1.Enabled = FalseButton2.Enabled = TrueEnd SubPrivate Sub Button2_Click(sender As Object, e As EventArgs) Handles Button 2.Click' 关闭串口' 省略部分代码...RemoveHandler serialPort.DataReceived, AddressOf DataReceivedHandler serialPort.Close()Button1.Enabled = TrueButton2.Enabled = FalseEnd SubPrivate Sub DataReceivedHandler(sender As Object, e As SerialDataReceivedE ventArgs)' 接收数据并显示在ListBox中Dim data As String = serialPort.ReadLine()ListBox1.Invoke(Sub() ListBox1.Items.Add(data))End SubPrivate Sub Button3_Click(sender As Object, e As EventArgs) Handles Button 3.Click' 发送数据If serialPort.IsOpen ThenDim dataToSend As String = TextBox1.TextserialPort.WriteLine(dataToSend)TextBox1.Clear()ElseMessageBox.Show("请先打开串口")End IfEnd SubEnd Class5. 运行程序点击运行按钮,程序将打开一个窗口,其中包含串口选择、打开/关闭串口、接收数据和发送数据的功能。

VB下实现串口通信的方法

VB下实现串口通信的方法1 VB下实现串口通信的方法1.1 通信控件MSComm简介VB下的串行端口通信是通过其提供的控件Microsoft Comm control(简称MSComm)实现的。

该控件屏蔽了通信过程中的底层操作,程序员只需设置并监视MSComm控件的属性和事件,结合其它VB提供的控件就可完成对串口的初始化和数据的发送接收。

本系统中用到的主要MSComm控件属性如下:①、Commport:设置并返回通信端口代码。

默认值为1,最大值为16,需要使用超过16个通信端口时,要采用其他方式操控通信端口(如PcommPro软件)。

例如将串口2设为通信端口:mPort=2。

②、Setting:设置初始化参数。

其格式为“****,P,D,S”,其中****为波特率(baud),P为校验方式,D为数据位数,S为停止位。

默认值为“9600,N,8,1”,意为“串口通信速度为9600Baud,无校验,每次数据为8个Bit,停止位为1个Bit”。

波特率可为110,300,600,1200,2400,9600,14400,19200,28800,38400(保留)等等。

校验位默认为None(无校验),若传输距离长,可增加校验位,可选M为符号校验,E为偶校验,O为奇校验,S为空白校验。

停止位的设定值可为:1(默认值),1.5,2。

此处的设置要和单片机侧的设置保持一致,否则不能实现正常的通信。

例如我们采用的初始化参数为“2400,N,8,1”,则单片机侧的设置相应项为:定时器1的初值为E6并且SMOD(串行口波特率加倍位)为1(对应2400Bit),串口控制寄存器SCON为40(10位异步收发,对应8Bit数据位,1Bit停止位)。

③、PortOpen:设置或返回通信端口状态。

④、Input:从缓冲区返回并删除字符。

将串行输入寄存器的数据读出,并清除寄存器中已读取的数据。

寄存器的特性是FIFO(First In First Out,先进先出)。

利用VB实现计算机串口通信实例


+,,+-.,
实践与经验
的是 (’ 对 !3<65 的串口通信方式,即通过采用 标准贺氏指令, 我们可以远程呼叫其他以拨号方式 上网的普通 (’ , 从而具有相当的实用价值。
?
图 . (’ 与 (’ 间通信程序界面
(’ 与单片机间通信实例
在工业测控领域, 我们常采用 (’ 对单片机的
通信方式。通常以 (’ 机作为上位机发送指令到单 片机, 由单片机来完成现场数据采集、 电路控制等 工作, 然后数据返回 (’ 机进行高级处理。由于普 通 的 %=+?+ 串 口 方 式 数 据 传 送 距 离 短 ( .T 米 左 右) , 如果经转换电路转换成 %=ULT 等其他串行方 式, 则传输距离可达 .,,, 米左右, 从而更加实用。 本例中, (’ 机上运行界面如图 + 所示的程序, 在发送数据栏中输入一个“ 之间的整数, 并 ,V+TT” 点击“ 发送” 按钮, 单片机将接收到这个数据并显示 该数据, 然后作除 + 处理, 结果再经串口返回到 (’ 机端。例如, 当发送数据 +UU 时, 单片机电路中数 码管上显示 +UU ,同时单片机对该数作除 + 处理, 得数 .++ 返送回 (’ 机。注意, 要通过 !=’355 控 件发送或接收二进制格式的数据,必须用 /:4@:;8 类型的变量对二进制 0W86 类型的变量进行转换。
从输入寄存器传回并移除字符, 即读端口。 E6F>=: 将一个字符串写入输出寄存器, 即写 ">=F>=: 端口。
%=N;C9N2@7:设置或传回引发 "6’233 事件中
接收事件的字符数,即引起接收事件的 “ 门槛阀 值” 。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

XXXX大学毕业论文课题:专业学生姓名班组学号指导教师完成日期基于VB的串口通讯及其软件实现摘要串口通信因为其简单,灵活易用,在许多领域有着广阔的应用前景。

本文在深入了解串口通讯技术的基础上,结合自身的工程实践,阐述了VB串口编程的技术要点。

并结合一个通讯实例,分析通讯的具体实现,给相关领域的研究人员提供值得参考的信息。

关键词:设备串口通讯RS232 API Pcomm Mscomm 通信程序。

AbstractSerial communication has broad application in many fields because of its simple communication circuitry and flexibility. Based on deep comprehension of the technology of the serial communications, this article expounds important technology detail integrated with practice experience. An example of communication program is presented and analyzed, which gives other researchers valuable reference information..Key words: serial; RS232; API; Pcomm; Mscomm; communication program目录摘要 (1)Abstract (1)第一章串口通信的通信原理 (3)1.1 串口通信定义 (3)1.2 串口通信原理 (4)1.2.1 寄存器 (4)1.2.2 通信原理 (5)1.2.3编程接口 (5)1.3 本章小结 (5)第二章串行通讯标准 (6)2.1 RS-232C标准 (6)2.1.1 RS-232C定义 (6)2.1.2 RS-232C标准 (7)2.2 RS-422 (7)2.2.1 RS-422标准 (7)2.3 RS-485标准 (8)2.3.1 RS-485标准 (8)2.4 握手协议 (8)2.4.1 握手协议 (8)第三章串行通讯实现 (10)3.1 串口数据的读取方式 (10)3.1.1 利用Mscomm控件 (10)3.1.2 直接调用Win32 API通信函数 (11)3.1.3 调用第三方函数库(如Pcomm函数库) (12)第四章串口通讯错误与处理 (13)4.1 串口通讯的错误与处理 (13)4.1.1 串口通讯的错误 (13)4.1.2 串口通讯的错误处理 (13)第五章串口通讯实例 (14)5.1 串口通讯实例 (14)5.1.1 串口通讯实例 (14)结语 (22)参考文献 (23)致谢 (23)第一章串口通信的通信原理1.1 串口通信定义1.1.1串口通信定义串口通信的概念非常简单,串口按位(bit)发送和接收字节。

尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。

它很简单并且能够实现远距离通信。

比如IEEE488定义并行通行状态时,规定设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。

典型地,串口用于ASCII码字符的传输。

通信使用3根线完成:(1)地线,(2)发送,(3)接收。

由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。

其他线用于握手,但是不是必须的。

串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。

对于两个进行通信的端口,这些参数必须匹配:a)波特率:这是一个衡量通信速度的参数。

它表示每秒钟传送的bit的个数。

例如300波特表示每秒钟发送300个bit。

当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。

这意味着串口通信在数据线上的采样率为4800Hz。

通常电话线的波特率为14400,28800和36600。

波特率可以远远大于这些值,但是波特率和距离成反比。

高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。

b)数据位:这是衡量通信中实际数据位的参数。

当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。

如何设置取决于你想传送的信息。

比如,标准的ASCII码是0~127(7位)。

扩展的ASCII码是0~255(8位)。

如果数据使用简单的文本(标准 ASCII码),那么每个数据包使用7位数据。

每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。

由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。

c)停止位:用于表示单个包的最后一位。

典型的值为1,1.5和2位。

由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。

因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。

适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。

d)奇偶校验位:在串口通信中一种简单的检错方式。

有四种检错方式:偶、奇、高和低。

当然没有校验位也是可以的。

对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。

例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。

如果是奇校验,校验位位1,这样就有3个逻辑高位。

高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。

这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。

PC串行通信是指直接对串行端口的UART(PC机的通用异步收发器,也叫异步通信适配器,是PC机用于异步通信的接口)进行编程实现的通信。

1.2 串口通信原理1.2.1 寄存器PC机每个UART中的INS8250中有10个可编程的单字节寄存器,可用于控制、监视操作串行端口,COM1的寄存器地址3F8H-3FEH,COM2的寄存器地址为2F8H-2FEH。

10个寄存器由7个地址访问,其中5个寄存器的访问条件是先设置3FBH线路控制寄存器的最高位为“1”,该位也称为DLAB状态位。

1.2.2 通信原理一般说来,PC机都有一个或多个串行端口,它们依次为Com1、Com2……。

这些串口提供了外部设备与PC进行数据传输和通信的通道,在CPU和外设之间充当了解释器的角色。

当字符数据从CPU发送给外设时,这些字符数据将被转换成串行比特流数据;而当接受数据时,从外界进来的比特流数据被转换成字符数据传递给CPU进行处理。

在操作系统方面,Windows用通信驱动程序(COMM.DRV)调用API函数发送和接受数据。

当用通信控件或声明调用API函数时,它们由COMM.DRV解释并传递给设备驱动程序。

1.2.3编程接口作为一名VB程序开发人员,要编写串口通信程序,只需知道通信控件提供给Windows通信API函数的接口即可,换言之,只需设定和监视通信控件的属性和时间即可。

1.3 本章小结本章介绍了串口通信的定义,并简要描述了串口通信的通信机制。

最后说明了在程序实现时的应用编程接口。

第二章串行通讯标准前一章节介绍了串口通讯的通信机理,但为了实现具体的数据采集、监视、通信功能,必须了解具体的串口形式。

目前使用最广泛的串行接口有:RS-232、RS-485和RS-422,它们都是串行数据接口标准,最初都是由电子工业协会(EIA)制订并发布的,RS-232在1962年发布,命名为EIA-232-E,作为工业标准,以保证不同厂家产品之间的兼容。

RS-422由RS-232发展而来,它是为弥补RS-232之不足而提出的。

为改进RS-232通信距离短、速率低的缺点,RS-422定义了一种平衡通信接口,将传输速率提高到10Mb/s,传输距离延长到4000英尺(速率低于100kb/s时),并允许在一条平衡总线上连接最多10个接收器。

RS-422是一种单机发送、多机接收的单向、平衡传输规范,被命名为TIA/EIA-422-A 标准。

为扩展应用范围,EIA又于1983年在RS-422基础上制定了RS-485标准,增加了多点、双向通信能力,即允许多个发送器连接到同一条总线上,同时增加了发送器的驱动能力和冲突保护特性,扩展了总线共模范围,后命名为TIA/EIA-485-A标准。

由于EIA提出的建议标准都是以“RS”作为前缀,所以在通讯工业领域,仍然习惯将上述标准以RS作前缀称谓。

本章将一一讲解这三中串行标准。

2.1 RS-232C标准2.1.1 RS-232C定义RS-232C标准的全称是EIA-RS-232C标准,其中EIA代表美国电子工业协会,RS代表推荐标准,232是标识号,C代表RS232的最新一次修改(1969年),在这之前,有RS232A、RS232B协议。

它规定连接电缆和机械、电气特性、信号功能及传送过程。

EIA-RS-232C定义了按位串行传输的数据终端设备(DTE)和数据通讯设备(DCE)之间的接口信息。

RS-232C是从DTE或计算机串行接口角度来定义引脚信号的。

2.1.2 RS-232C标准目前RS-232是PC机与通信工业中应用最广泛的一种串行接口。

RS232被定义为一种在低速率串行通讯中增加通讯距离的单端标准。

RS232采取不平衡传输方式,即所谓的单端通讯。

如下是当前最主要的串口方式:a)DB9(9针串口)的接线方式如下:1脚,数据载波检测DCD:2脚,接收数据RXD:3脚,发送数据TXD:4脚,数据终端准备DTR:5脚,信号地GND:6脚,数据设备就绪DSR:7脚,请求发送RTS:8脚,清除发送CTS:9脚,振铃指示DELL。

b)DB25(25阵串口),常用的针脚也有9个,且和DB9可以一一对应,具体接线方式为:8脚,数据载波检测DCD:3脚,接收数据RXD:2脚,发送数据TXD:20脚,数据终端准备DTR:7脚,信号地GND:6脚,数据设备就绪DSR:4脚,请求发送RTS:5脚,清除发送CTS:22脚,振铃指示DELL。

一般来说,对于要求不太高的场合,使用接收数据RXD,发送数据TXD,信号地GND三个脚即可实现数据传输。

如果要求有硬件流控制,则必须使用DTR、DSR、RTS和CTS这四个脚。

值得注意的是RS-232C是用正负电压来表示逻辑状态,与TTL以高电平表示逻辑状态的规定不同。

因此,为了能够与计算机接口或终端的TTL器件连接,必须在RS-232C与TTL电路之间进行电平和逻辑关系的变换。

相关文档
最新文档