当前位置:编程学习 > VB >>

VB 串口接收不到数据(急!)

VB与单片机的通信
运行结果Text1 , Text2 接收到“A”,Text3 却没有收到,即使多发几个也一样没收到,请各位高手帮帮小弟,感激不尽!!(程序如下)
单片机发送用MATLAB仿真过,没有问题

Dim str_buff As String

Private Sub rungo_click()
If MSC.PortOpen = False Then 
    MSC.InputMode = comInputModeText    '文本接收
    MSC.Settings = "4800,n,8,1"     '设置波特率4800,无校验,8位数据位,1位停止位
    MSC.InputLen = 0                '一次读出输入缓冲区中的所有数据
    MSC.InBufferCount = 0           '清空接收缓冲区
    MSC.OutBufferCount = 0          '清空发送缓冲区
    MSC.OutBufferSize = 512         '发送缓冲区字节
    MSC.RThreshold = 0                '不触发OnComm()事件
    MSC.PortOpen = True              '打开COM1
End If
Call runstart
End Sub

Private Sub runstart()
MSC.Output = addr '一段 BYTE 数据(2字节)
Call comEvent
Text1=  str_buff          '显示接收到的“A”
MSC.Output = hexdata '一段 BYTE 数据(512字节)
Call comEvent
Text2 = str_buff         '显示接收到的“A”
MSC.Output = hexdata2 '一段 BYTE 数据( < 512字节)
Call comEvent
Text3 = str_buff         '显示接收到的“A”
MSC.PortOpen = False      '关闭com1
End Sub

Private Sub comEvent()
Do
    'MSC.InputLen = 1           '接收一个字节
    DoEvents
    str_buff = MSC.Input
Loop Until str_buff = "A" '当接收到"A"继续发送下一段
MSC.InBufferCount = 0           '清空接收缓冲区
MSC.OutBufferCount = 0          '清空发送缓冲区
End Sub
--------------------编程问答-------------------- Option Explicit
    Dim str_buff As String
    Dim addr
    Dim hexdata
    Dim hexdata2

Private Sub Form_Load()
    addr = "01"
    hexdata = "0123456789"
    hexdata2 = "9876543210"
End Sub

Private Sub rungo_click()
    If MSC.PortOpen = False Then
        MSC.InputMode = comInputModeText    '文本接收
        MSC.Settings = "9600,n,8,1"     '设置波特率4800,无校验,8位数据位,1位停止位
        MSC.InputLen = 0                '一次读出输入缓冲区中的所有数据
        MSC.InBufferCount = 0           '清空接收缓冲区
        MSC.OutBufferCount = 0          '清空发送缓冲区
        MSC.OutBufferSize = 512         '发送缓冲区字节
        MSC.RThreshold = 0                '不触发OnComm()事件
        MSC.PortOpen = True              '打开COM1
    End If
    Call runstart
End Sub

Private Sub runstart()
    MSC.Output = addr   '一段 BYTE 数据(2字节)
    Call comEvent
    Text1 = str_buff          '显示接收到的“A”
    MSC.Output = hexdata    '一段 BYTE 数据(512字节)
    Call comEvent
    Text2 = str_buff         '显示接收到的“A”
    MSC.Output = hexdata2   '一段 BYTE 数据( < 512字节)
    Call comEvent
    Text3 = str_buff         '显示接收到的“A”
    'MSC.PortOpen = False      '关闭com1
End Sub

Private Sub comEvent()
    Do
        MSC.InputLen = 1           '接收一个字节
        str_buff = MSC.Input
        DoEvents
    Loop Until str_buff = "A"   '当接收到"A"继续发送下一段
    MSC.InBufferCount = 0           '清空接收缓冲区
    MSC.OutBufferCount = 0          '清空发送缓冲区
End Sub
--------------------编程问答-------------------- 谢谢了!
不过不行。
我原来的数据差不多是这样的
addr(0)=&hf0
addr(1)=&h0
hexdata(0)=&hf0  …… hexdata(511)=&hf0
hexdata(0)=&hf0 …… hexdata(n<512)=&hf0
--------------------编程问答-------------------- Option Explicit
    Dim str_buff As String
    Dim addr(1) As Byte
    Dim hexdata(511) As Byte
    Dim hexdata2(511) As Byte
    Dim i As Integer
Private Sub Form_Load()
    addr(0) = &HF0
    addr(1) = &H0
    For i = 0 To 511
    hexdata(i) = &HF0
    hexdata2(i) = &HF0
    Next
End Sub

Private Sub rungo_click()
    If MSC.PortOpen = False Then
        MSC.InputMode = comInputModeText    '文本接收
        MSC.Settings = "9600,n,8,1"     '设置波特率4800,无校验,8位数据位,1位停止位
        MSC.InputLen = 0                '一次读出输入缓冲区中的所有数据
        MSC.InBufferCount = 0           '清空接收缓冲区
        MSC.OutBufferCount = 0          '清空发送缓冲区
        MSC.OutBufferSize = 512         '发送缓冲区字节
        MSC.RThreshold = 0                '不触发OnComm()事件
        MSC.PortOpen = True              '打开COM1
    End If
    Call runstart
End Sub

Private Sub runstart()
    MSC.Output = addr   '一段 BYTE 数据(2字节)
    Call comEvent
    Text1 = str_buff          '显示接收到的“A”
    MSC.Output = hexdata    '一段 BYTE 数据(512字节)
    Call comEvent
    Text2 = str_buff         '显示接收到的“A”
    MSC.Output = hexdata2   '一段 BYTE 数据( < 512字节)
    Call comEvent
    Text3 = str_buff         '显示接收到的“A”
    MSC.PortOpen = False      '关闭com1
End Sub

Private Sub comEvent()
    Do
        MSC.InputLen = 1           '接收一个字节
        str_buff = MSC.Input
        DoEvents
    Loop Until str_buff = "A"   '当接收到"A"继续发送下一段
    MSC.InBufferCount = 0           '清空接收缓冲区
    MSC.OutBufferCount = 0          '清空发送缓冲区
End Sub
--------------------编程问答-------------------- 将
MSC.Settings = "9600,n,8,1"     '设置波特率4800,无校验,8位数据位,1位停止位
改为:
MSC.Settings = "4800,n,8,1"     '设置波特率4800,无校验,8位数据位,1位停止位 --------------------编程问答-------------------- 很有可能是COM口通讯线有问题 --------------------编程问答-------------------- 单片机和控件的波特率要一样 --------------------编程问答-------------------- 谢谢各位!!
自已解决了 --------------------编程问答-------------------- lz要干嘛? --------------------编程问答-------------------- 好像没那么简单,呵呵. --------------------编程问答-------------------- 是怎么解决地呀? --------------------编程问答-------------------- 其实找个串行口助手测试一下就可以了,注意最好采用十六进制
补充:VB ,  资源
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,