400-810-1218加入收藏夹|设为主页|广告服务|网币|登录|注册
当前位置:首页 >> 技术频道 >> 单片机开发

51单片机与VB串行通信的实现

来源:东哥单片机学习网 作者:佚名 发布时间:2009-05-26 10:14:53 发表评论

摘要:   在设计的减振控制系统中,控制器采用两片AT89C52单片机,分别用于对左右减振器实施控制,同时将测量的温度、电流、速度等信号按一定采样时间保存在E2PROM ATC256中。

关键词:51单片机

  2.VB6.0的通信控件及通信方式③

  MSComm是VB6.0提供的ActiveX控件,使用前需将该控件添加到VB工具栏。MSComm控件具有功能完善的串口数据发送和接受功能,有两种处理通信的方式,即事件驱动方式和查询方式,事件驱动方式是利用MSComm控件的OnComm事件捕获并处理通信错误事件,是处理串行端口交互作用的一种非常有效的方法;查询方式是通过检查CommEvent属性的值来判断事件和错误。

  本系统采用事件驱动方式进行串口通信设计,图4为上位机通信界面,设计4个命令按纽,分别为发送命令、退出、保存、浏览数据;两个文本框,Text2用于输入需从下位机读取的记录个数,Text3用于显示下位机发送来的数据;进行数据通信的单片机和串行通信口的选择通过两组单选按纽完成。在发送命令按纽的Click事件中,将通信指令通过串行口发送给上位机,当选择左侧单片机时(变量LR(1)=1),通信指令为“ET”, 选择右侧单片机时(变量LR(1)=2),通信指令为 “DT”,数据传送以回车符(十进制ASCII码为13)作为结束标记。

  下面是MSComm控件的初始化程序、部分数据发送和接受程序:

  MSComm控件的初始化(属性设置)程序:

  MScomm1.ComPort=1 ;设置串行端口(com1)

  MScomm1.Settings=2400,n,8,1 ;设置波特率及数据帧格式

  MScomm1.InputMOde=1 ;数据接受按字节(binary)方式

  MScomm1.InbufferSize=4000 ;数据接受缓冲区大小为4000字节

  MScomm1.InputLen=0 ;INPUT读取缓冲区的所有内容

  数据发送程序:

  Private Sub Command1_Click()

  Dim outbuf(1 To 6) As Byte

  Dim lstr1 As String

  Dim hstr2 As String

  Dim len1 As Integer

  Command1.Enabled = False

  len1 = Len(Hex(Val(Text2.Text)))

  ………

  If LR(1) = 1 Then

  outbuf(1) = 69 ;对应字符“E”

  Else

  outbuf(1) = 68 ;对应字符“D”

  End If

  outbuf(2) = 84 ;对应字符“T”

  outbuf(3) = LR(1)

  outbuf(4) = stoby(hstr2)

  outbuf(5) = stoby(lstr1)

  outbuf(6) = 13

  MScomm1.RThreshold = 5 * Val(Text2.Text)

  MScomm1.Output = outbuf

  End Sub

  数据接受程序:

  Private Sub MScomm1_OnComm()

  Select Case MScomm1.CommEvent

  Case comEvReceive

  Dim inbuf() As Byte, i%, buf$

  buf = ""

  inbuf = MScomm1.Input

  Rev_num = UBound(inbuf)

  ReDim lnum(0 To Rev_num) As Integer

  For i = 0 To Rev_num

  lnum(i) = inbuf(i)

  buf = buf + Str(inbuf(i)) + " "

  Next i

  Case comEvSend

  End Select

  End Sub

  由于MSComm控件数据接受设计为按字节方式,可接发的数值范围为0~255。当上位机读取数据个数超过255(1字节)时,为了能让下位机正确接受,解决方法是通过编制的函数stoby将文本框Text2输入的记录个数(字符型)转化成字节型,并分成两个字节送给下位机。另外,系统中有关数据保存、数据图表处理、打印等功能的实现在此不再赘述。

  5.结论

  I2C总线器件的采用简化了硬件电路设计,提高了可靠性。本系统已投入使用,经过实际应用表明,通信系统工作稳定、可靠。满足系统要求,每到一分钟就向ATC256中写入1条记录(5个数据),ATC256可保存12小时的记录,下位机需要读取数据时,可根据下位机的读取指令读取任意条记录。

0
顶一下
0
踩一下

相关文章

发表评论

请自觉遵守互联网相关政策法规,作者管理后台可以删除恶意评论、广告和违禁词语。