daiwill
驱动牛犊
驱动牛犊
  • 注册日期2002-04-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2088回复:12

弱问题:单片机和计算机用vb接口通讯

楼主#
更多 发布于:2002-05-03 15:01
现有pic单片机通过232和计算机通讯,使用了vb里面的mscomm控件,inputmode=1(binary方式),rthreshold=1,有一个字节就引发oncomm事件,但是收到的数是0或者244(收数也设为binary)。改rthreshold=3,再oncomm事件里面设置一个inbyte数组(binary),照书上有句话:
for i=lbound(inbyte) to ubound(inbyte)
用这个重新定义数组大小并读数。但是vb并不执行这一指令,调试时,鼠标放到这句话上时显示:下标越界。
不知道怎么回事?
I know that I will fail and fail again.I do not care , what is the goal , it is the end of an honorable contest,life consists of strugle. The struggle itself must be the goal.
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2002-05-03 15:14
用户被禁言,该主题自动屏蔽!
daiwill
驱动牛犊
驱动牛犊
  • 注册日期2002-04-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-05-03 19:31
那个接发数是指什么?i 么?i我申明为int型,应该可以把。
I know that I will fail and fail again.I do not care , what is the goal , it is the end of an honorable contest,life consists of strugle. The struggle itself must be the goal.
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2002-05-03 20:24
用户被禁言,该主题自动屏蔽!
daiwill
驱动牛犊
驱动牛犊
  • 注册日期2002-04-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-05-03 21:08
好,明天我试试,然后再给你回消息!
I know that I will fail and fail again.I do not care , what is the goal , it is the end of an honorable contest,life consists of strugle. The struggle itself must be the goal.
daiwill
驱动牛犊
驱动牛犊
  • 注册日期2002-04-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-05-04 18:32
我把i改为variant变量形式,还是不行。for语句的下一句到next i
都不执行。
I know that I will fail and fail again.I do not care , what is the goal , it is the end of an honorable contest,life consists of strugle. The struggle itself must be the goal.
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2002-05-04 20:40
用户被禁言,该主题自动屏蔽!
jep
jep
驱动小牛
驱动小牛
  • 注册日期2001-12-26
  • 最后登录2017-08-12
  • 粉丝0
  • 关注0
  • 积分98分
  • 威望30点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2002-05-05 09:08
vb里面的mscomm控件有问题,数据不能大于128 :)
daiwill
驱动牛犊
驱动牛犊
  • 注册日期2002-04-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-05-06 15:03
现在我用一台机器做实验,com口的2,3脚接到一块,然后自发自收。发送的是文本型数据。但是接收的时候,使用了把数据在文本框中显示的语句:txtreceive.Text = buf,其中 buf=mscomm.input
调试的时候,监视窗口诊断为“上下文溢出”。我以前用mscomm做过多机通讯程序,根本就没有这么麻烦,出了这么多问题,什么原因?
I know that I will fail and fail again.I do not care , what is the goal , it is the end of an honorable contest,life consists of strugle. The struggle itself must be the goal.
zwhnz
驱动牛犊
驱动牛犊
  • 注册日期2002-05-08
  • 最后登录2008-12-12
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-05-08 21:54
碰巧我也刚做了一个类似的程序,你看看,哪用的着,你试试看。
Public Sub InitCommControl()
    On Error GoTo ErrorTrap

    If CommControl.PortOpen Then
        CommControl.PortOpen = False
    End If
    
    CommControl.CommPort = CommPort
    CommControl.InputMode = comInputModeBinary
    CommControl.InBufferCount = 0
    CommControl.InputLen = 0
    CommControl.OutBufferCount = 0
    CommControl.RThreshold = 1
    CommControl.SThreshold = 1
    CommControl.PortOpen = True
    Exit Sub
ErrorTrap:
    Select Case Err.Number
        Case comPortAlreadyOpen
            MsgBox \"端口已经打开,请换一个串口试试\", , \"错误\"
        Case Else
            MsgBox \"串口错误,请换一个串口试试\", , \"错误\"
    End Select
    
    Err.Clear
End Sub

Private Sub CommControl_OnComm()
    Dim Buffer As Variant
    Dim BufferCount As Integer
    Dim Arr() As Byte
    Dim i As Integer
    
    If (CommControl.CommEvent = comEvReceive) Then
        If (CommControl.InBufferCount > 0) Then
            BufferCount = CommControl.InBufferCount
            Buffer = CommControl.Input
            Arr = Buffer
            For i = 0 To BufferCount - 1
                InCommBuffer (Arr(i))
            Next i
            DealCommBufferData
        End If
    End If
End Sub


源程序在下
附件名称/大小 下载次数 最后更新
2002-05-08_Control.zip (108KB)  12
zizi
daiwill
驱动牛犊
驱动牛犊
  • 注册日期2002-04-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-05-09 11:02
程序还是不行。我的程序如下:

串口的初始化:
Private Sub Form_Load()
\'初始化,有一位的停止位,一位的起始位
If MSComm.PortOpen Then
        MSComm.PortOpen = False
    End If
MSComm.InputMode = 1
MSComm.InBufferCount = 0
\'MSComm.Settings = \"19200,n,8,1\"
MSComm.InputLen = 0
MSComm.OutBufferCount = 0
\'MSComm.Handshaking = comRTS
\'首先处于接收状态
MSComm.RTSEnable = True
MSComm.DTREnable = True
\'又一个字节输入时,引发com口中断
MSComm.RThreshold = 1
MSComm.SThreshold = 1
MSComm.PortOpen = True
End Sub
oncomm事件
Private Sub MSComm_OnComm()
Dim bufcount As Integer
Dim nowtime
Dim re As Variant
Dim retemp() As Byte
  Select Case MSComm.CommEvent
   Case comEdvReceive
      nowtime = Time
       If (MSComm.InBufferCount > 0) Then
       bufcount = MSComm.InBufferCount
       re = MSComm.Input   \'接收数据
       retemp = re
       End If
          infortxt.Text = infortxt.Text & nowtime & \"             :\" & CStr(retemp(0)) & \"   V\" & vbCrLf
    \'Next i
    End Select
End Sub
奇怪的是:运行时,要是不在初始化的sub中加中断,然后单步执行完该sub,就不会引发oncomm事件。在oncomm事件的处理中,调试时,re显示为空,inbuffercount=1024,retemp(0)为下标越界。
Private Sub mnucomm_Click()
Dim i As Integer, j As Integer
Do
DoEvents
Loop Until MSComm.InBufferCount > 10
re = MSComm.Input
For i = 0 To 9
retemp(i) = re(i)
infortxt.Text = infortxt & Str(retemp(i)) & vbCrLf
 Next i
End Sub
若用上面这个按钮事件来收数,则收到的全是0。
附:用计算机不停的发送数,然后用示波器看,发现全是毛刺波,而且幅值在2v以内。而单片机送数在232出口的波形为方波,非常规整。幅值符合232标准。
什么原因呢?
I know that I will fail and fail again.I do not care , what is the goal , it is the end of an honorable contest,life consists of strugle. The struggle itself must be the goal.
daiwill
驱动牛犊
驱动牛犊
  • 注册日期2002-04-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-05-11 10:47
现在总算有点进展了,谢谢各位帮忙。能用一个串口通讯了。也能收发2进制数据。但是有个问题就是,只能收固定长度的数据。如果使用lbound(),ubound()来确定数组大小的话,就会出现“上下文溢出”的问题。
I know that I will fail and fail again.I do not care , what is the goal , it is the end of an honorable contest,life consists of strugle. The struggle itself must be the goal.
abeh
驱动牛犊
驱动牛犊
  • 注册日期2001-04-10
  • 最后登录2003-01-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-05-12 10:49
用C(++)吧,VB的数据结构让我吐!
我爱开发
游客

返回顶部