Visual Basic 串口通讯编程.docx

上传人:b****6 文档编号:8016252 上传时间:2023-01-28 格式:DOCX 页数:8 大小:19.88KB
下载 相关 举报
Visual Basic 串口通讯编程.docx_第1页
第1页 / 共8页
Visual Basic 串口通讯编程.docx_第2页
第2页 / 共8页
Visual Basic 串口通讯编程.docx_第3页
第3页 / 共8页
Visual Basic 串口通讯编程.docx_第4页
第4页 / 共8页
Visual Basic 串口通讯编程.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

Visual Basic 串口通讯编程.docx

《Visual Basic 串口通讯编程.docx》由会员分享,可在线阅读,更多相关《Visual Basic 串口通讯编程.docx(8页珍藏版)》请在冰豆网上搜索。

Visual Basic 串口通讯编程.docx

VisualBasic串口通讯编程

VisualBasic串口通讯编程

2006-07-1907:

34

       对于串行口的应用,相信大家多少知道一些,例如,它可以连接鼠标、MODEM、数码相机、打印机,等等,可以做很多很多的事情。

但是,对于串行口的理论,可能了解一二有所剩无几了。

什么是串行口?

它是如何工作的?

为什么用串行口?

您知道吗?

一、 关于串行口发明计算机的人,肯定注意到了一点,那就是计算机必须与外界进行信息的交换,所以他们为计算机设计了外设口。

要与显示器相连,于是设计了显示口;要与硬盘相连,于是设计了IDE口;要与打印机相连,于是设计了打印口。

那么,有没有用最少数量的线(线多了麻烦多),就能与外界发生联系,并且能够成为通用的接口呢?

当然,这就是诞生于设计大师们手中的串......

       对于串行口的应用,相信大家多少知道一些,例如,它可以连接鼠标、MODEM、数码相机、打印机,等等,可以做很多很多的事情。

但是,对于串行口的理论,可能了解一二有所剩无几了。

什么是串行口?

它是如何工作的?

为什么用串行口?

您知道吗?

一、 关于串行口

      发明计算机的人,肯定注意到了一点,那就是计算机必须与外界进行信息的交换,所以他们为计算机设计了外设口。

要与显示器相连,于是设计了显示口;要与硬盘相连,于是设计了IDE口;要与打印机相连,于是设计了打印口。

那么,有没有用最少数量的线(线多了麻烦多),就能与外界发生联系,并且能够成为通用的接口呢?

当然,这就是诞生于设计大师们手中的串行口。

串行口所需要的线的确很少,一根公共地线无论如何也得要,然后,一根发送数据的线和一根接收数据的线,共三根线就行了。

也许您还会问,“能不能再少些呢?

两根,一根,干脆一根都不要,成吗?

”当然行,红外接口不就是一根线都没有吗?

也许当时搞无线通讯的天才就是像您这么想的,不过这已经超出了今天我们讨论的范围。

       既然是通讯,那么就必须有两台设备才行。

常用的串行线是怎样制作的呢?

在计算机后边,您最少会看到一个串行口(笔记本电脑通常为一个,台式计算机通常为二个),采用的是梯型DB-9或DB-25插座,即采用9根线或25根线的插座,这是因为有的外设需要像数据准备、载波检测、请求发送等联络信号(对这些信号线感兴趣的先生/女士,可以查阅有关串行口的资料)。

作为VB爱好者,您只要了解其中的三根线就可以了。

这三根线分别是发送数据TXD、接收数据RXD和信号地SG,对于DB-9既九芯串行口插口来说,它们对应于3、2、5;对于25芯串行口插口,则对应于2、3、7。

千万别搞错呀!

因为串行口通讯,往往是一个发送,一个接收,所以在制作联接线时,一头的发送必须与另一头的接收相连,地线与地线相连。

对于硬件知识较少的朋友,可以直接到电脑配套市场采购,不方便的话也可以请有一定电子电路基础的亲朋好友帮忙。

       我们经常听到有关波特率的词,以“猫”为例,有14400bps、28800bps、36600bps、56000bps,等等。

波特率代表了串行口的数据传输速度。

例如:

9600代表每秒传输约9600个数据位,它代表约1000个(1k)英文字符(每个字符占8位,1个开始位,1个停止位)。

要传输100k的文件,就需要100秒。

二、编程要求

相信许多网友都在网上聊过天,当您在一个输入框中键入一些话时,这些话会传到聊天室的每一个人,同样,其他人的话您也会看到。

我们试着编制一段程序,实现这种功能。

为适应不同速率设备之间的连接,应当可以设定其连接速度;为避免设备冲突,应当允许进行通讯端口的选择。

另外,为拓宽用途,该程序对于接收的数据,最好还能提供ASCII码显示。

这样,当有两台用串口相连的设备相连接时,您若想知道它们在发送或接收写什么的话,只要将拥有该程序的计算机串口的接收数据线与通讯者的线相连,就可以监看其过程。

例如,您可以使用该程序监测计算机与调制解调器之间的通讯。

       在我们调试程序时,很难做到一个人同时占用两台计算机。

为此,我们可以使用在计算机中随处可见的跳线,直接短接串口的2、3两个脚,即将串行口的2、3脚连接在一起,从而使发送的数据直接被本机接收。

这样,就我们就可以在一台计算机上调试程序了。

在该种状态下,本程序还有另外一个用途,即您可以将之用于查找任何字符的ASCII码。

其实很多情况都是如此,软件或硬件本身提供的功能或许有限,关键的问题是如何开动脑筋、灵活运用。

三、预备知识和技巧

1、串行通讯控件Mscomm

      调入Mscomm控件:

在“项目”菜单中打开“部件”子菜单,在部件选择对话框中选择  “Microsoft comm Control 5.0”,Mscomm控件即加入到您的控件箱中.

常用属性:

Commport-通讯端口号,如串口1、串口2。

Setting-返回或设置串口参数。

InputLen-从接收缓冲区读出的字符数。

InBufferSize、OutBufferSize-输入、输出缓冲区尺寸。

InBufferCount-输入缓冲区内的字符数。

常用方法:

Output、Input-将发送数据发送出去和将接收数据读出。

常用事件:

OnComm-无论串行口发生什么事,都会触发该事件。

2、字符处理函数

Left:

取字符串的左边n个字符。

例如:

s=Left(s,2) 即为取s的左边两个字符再放回s。

Right:

与Left类似,取字符右边n个字符。

Mid:

从第m个数开始,取n个数。

例如:

s=Mid(s,2,3)即为从s的第二个数开始,取三个数放回s。

Asc:

返回第一个字符(包括汉字)的Ascii码。

Str:

将一个数字变为字符形式

Hex:

返回Ascii码的16进制数

3、错误处理的应用

我们在程序中加入这样一条语句:

On Error Resume Next。

当程序运行出现错误,比如当打开串行口1时,该串口已被其它程序占用,程序就会出现错误,如果开始时执行过上述语句,程序将跳过错误语句,接着往下执行。

同时,VB置Err标志有效。

利用Err的值,我们可以判断一些与硬件相关的操作是否正确和有效,以改变程序的进程。

四、界面

画出界面,控件上的字符是它们的名称。

需要提请大家注意的是,串口控件(即那个电话控件)在VB默认的控件栏中不存在,需要以下述方式添加,在工程菜单->部件->控件选项卡中选中Microsoft Comm Control 5.0复选框,其它备用控件的添加也采用相同的方式,希望大家记住,以后将不再重复。

当不再需要该控件而欲从控件栏中将其删除时,只需依上述步骤进入到控件选项卡,然后取消对该控件的选中即可。

除Text1在设计时将多行显示使能属性Multiline设为True,以使Text1能显示多行文字外,其它各控件属性将在窗口调入时进行设置。

五、程序源代码

Private Sub Form_Load()

Me.Show

'初始化,为各控件的相关属性赋值

Label1.Caption = "串口接收"

Label2.Caption = "串口发送"

Label3.Caption = "串口设置‘波特率,奇偶校验,数据位,停止位’"

Text3.Text = "9600,n,8,1"

Text1.Text = ""

Text2.Text = ""

Text2.SetFocus

Frame1.Caption = "串口选择"

Option1.Caption = "COM1"

Option2.Caption = "COM2"

Frame2.Caption = "显示方式"

Option3.Caption = "文本"

Option3.value = True

Option4.Caption = "ASCii"

Command1.Caption = "清除接收"

Command2.Caption = "退出"

OldSet = Text3.Text

'打开串口

MSComm1.CommPort = 1

‘将通讯口设为COM1

On Error Resume Next

‘错误监视

MSComm1.PortOpen = True

‘打开串口

‘如果没有错误,串口1将被确认打开,否则打开串口2

If Not Err Then

MsgBox "COM1口工作"

Option1.value = True

Else

Err = 0

MSComm1.CommPort = 2

MSComm1.PortOpen = True

‘打开串口2,如果仍然有错误,则两个口都不能打开,这时应退出程序。

If Err Then MsgBox "COM1、COM2都不能打开,程序终止":

 End

MsgBox "COM2口工作"

Option2.value = True

End If

‘接收数据

Dim aaa, i%, s$, s1$, s2$

aaa = False

‘下面的循环是死循环,程序不断的检测输入缓冲区内是否有接收到的字符,如果有,即进行处理。

Do While aaa = False

DoEvents

‘该语句使程序可以在此处响应其它事件。

如果没有该语句,程序就真成了死循环,一个运行的程序无法让其停止,是很可怕的。

这是所有程序编制人员时刻注意的问题,也可以算编程的规律之一。

If MSComm1.InBufferCount > 0 Then

Timer1.Enabled = False

‘关闭定时器

s = MSComm1.Input

‘取串行口数据

s1 = "":

 s2 = ""

If Option3 Then

‘如果显示方式为文本,则将接收到的字符串累加到JSStr 变量中

JSStr = JSStr + s

Else

‘如果显示方式为ASCii,则对每个字符进行转换

For i = 1 To Len(s)

s2 = Right("0000" + Hex(Asc(Mid(s, i, 1))), 4)

‘取出第i个字符,转换成ASCii码,再转换成16进制,并整理成四位字符。

例如数字1的ASCii码为31,则转换成0031,汉字“科”的转换结果为“BFC6”

If Left(s2, 2) = "00" Then

s2 = Right(s2, 2)

Else

s2 = Left(s2, 2) + Space

(1) + Right(s2, 2)

End If

‘字符取两位字符,汉字取两个两位字符

s1 = s1 + s2 + Space

(1)

Next i

JSStr = JSStr + s1

End If

End If

Timer1.Enabled = True

‘定时器开始工作

Loop

End Sub

 

‘发送数据:

当在发送文本框进行回车操作时,将文本内容送出。

Private Sub Text2_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then

‘13为回车符

KeyAscii = 0

‘清按键,使本次按键失效

MSComm1.Output = Text2.Text

‘发送数据

Text2 = ""

End If

End Sub

‘修改参数,通过修改Text3的内容,可以修改波特率等参数

Private Sub Text3_KeyPress(KeyAscii As Integer)

If KeyAscii <> 13 Then Exit Sub

KeyAscii = 0

Err = 0

On Error Resume Next

MSComm1.PortOpen = False

MSComm1.Settings = Text3.Text

MSComm1.PortOpen = True

If Err Then

Err = 0

MSComm1.PortOpen = False

MSComm1.Settings = OldSet

MSComm1.PortOpen = True

Text3 = OldSet

End If

OldSet = Text3.Text

On Error GoTo 0

End Sub

‘滚动显示

Private Sub Timer1_Timer()

Static js%

Dim i%, s$

If JSStr <> "" Then

js = js + 1

For i = 0 To 8

ss(i) = ss(i + 1)

Next i

ss(9) = Chr(13) + Chr(10) + Trim(Str(js)) + ":

\" + JSStr

For i = 1 To 9

s = s + ss(i)

Next i

Text1.Text = Right(s, Len(s) - 2)

JSStr = ""

End If

End Sub

六、执行程序

两个计算机连接完毕(或短接2、3脚),均执行该程序,显示初始界面,提示目前默认工作的端口号。

单击确定按钮,然后对波特率、奇偶校验、数据位、停止位进行必要的设置,如果您使用过Modem,这当然是小菜一碟,如果您不太熟悉也没有关系,只需简单地将波特率修改一下即可。

然后选择欲使用的端口,默认值为COM1,如果不巧该端口正在被其它设备所占用,可选择COM2进行通讯。

如果欲在接收方显示您键入的字符,则选中“文本”选项按钮,若欲显示其ASCII码,则必须选中“ASCII”选项按钮。

然后,在“串口发送”文本框中键入字符,即可分段显示在“串口接收”栏中,并进行计数。

每次回车均另起一段、计数一次,并将其段落号加在每一段的开头。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1