导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→vb与单片机串口通信的问题!急!加急!!![cjy0312]

 *第16470篇: vb与单片机串口通信的问题!急!加急!!!

  
楼 主:cjy0312 2003年9月23日12:05
 vb与单片机串口通信的问题!急!加急!!!
单片机发送一串数据,vb每接收一个数据进行处理!
我的程序接收不到单片机发出的每个数据,
eg:单片机发:0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19
   vb收到:0,8,16 (收到数在text窗口中可见)

  mscomm1.settings = "9600,n,8,1"
  mscomm1.rthreshold = 1
  mscomm1.inputmode = cominputmodebinary
  mscomm1.inputlen = 0
  if mscomm1.portopen = false then mscomm1.portopen = true

private sub mscomm1_oncomm()
dim receive_data() as byte
dim inbuffer as variant

    if flag1 = true then    '输入的是数据个数
          select case mscomm1.commevent
            case comevreceive
                inbuffer = " "
                receive_data() = " "
                inbuffer = mscomm1.input
                receive_data() = inbuffer
            
           text1.text = text1.text + str(receive_data(0))                  
           end select
    end if
     mscomm1.inbuffercount = 0
end sub

  
2楼:ffllyy 2003年9月23日13:20
 VB不熟,不过那个控件用过。可能是初始化
VB不熟,不过那个控件用过。可能是初始化有点问题,你到啸峰工作室去看看,那里有详细讲解。
  
3楼:独角 2003年9月23日14:21
 给你一段设置程序看看

MSComm1.CommPort = 2            '使用COM1
MSComm1.Settings = "1200,N,8,1" '设置通信口参数"
MSComm1.InputLen = 1            '设置Input 一次从接收缓冲读取字节数为1
MSComm1.InBufferSize = 1256     '设置MSComm1接收缓冲区为1024字节
MSComm1.OutBufferSize = 512     '设置MSComm1发送缓冲区为2字节
MSComm1.NullDiscard = False

If MSComm1.PortOpen = False Then
   MSComm1.PortOpen = True  '打开通信口
End If

MSComm1.InputMode = comInputModeBinary    '设置接收数据模式为二进制形式

MSComm1.SThreshold = 1  '设置Output 一次从发送缓冲读取字节数为1
MSComm1.RThreshold = 1  '设置接收一个字节产生OnComm事件
MSComm1.RTSEnable = False

  
4楼:cjy0312 2003年9月23日14:35
 谢谢独角!但是我的问题很怪.....
我现在的问题是我如果用:inputmode=0 接收数据在128之内可收齐,超过就接收的不对了!我选inputmode=1则每次只收到连续的几个数据.怎么办呢?
  
5楼:独角 2003年9月23日14:43
 注意接收格式,看下面
JS.Text = JS.Text + Hex(AscB(MidB(m_zichuan, i, 1))) + ","
  
6楼:cjy0312 2003年9月23日16:39
 我需要收一个判断一个,你这样是收一串吧?
  
7楼:独角 2003年9月24日11:02
 哎,算了,给你全套程序吧!!!其它的靠你自己了
这是发送
Private Sub Timer1_Timer()
  ReDim out(6)
  Dim JIYANHE As Integer
  
  'MSComm1.RTSEnable = False  '将485置于发送状态
  FS.Text = ""
  JS.Text = ""
  ReDim out(6)
    
  'MSComm1.RTSEnable = False  '将485置于发送状态
  
  out(0) = Val(&HEB)         '报文头
  out(1) = Val(&H90)
  out(2) = Val(&H4)          '报文长度
  out(3) = Val(&H0)          '属性
  out(4) = Val(DH.Text)      '点号
  
  
  JIYANHE = 0
  FS.Text = ""
  For i = 2 To 4
     JIYANHE = (JIYANHE + out(i)) Mod 256
  Next i
  
  out(5) = JIYANHE Mod 256   '校验和
    
  FS.Text = Hex(out(0)) + "," + Hex(out(1)) + "," + Hex(out(2)) + "," + Hex(out(3)) + "," + Hex(out(4)) + "," + Hex(out(5))
  
  MSComm1.Output = out     '发送
End Sub
这是接收
Private Sub MSComm1_OnComm()

With MSComm1

Select Case .CommEvent '判断MSComm1通讯事件

       Case comEvReceive '收到Rthreshold个字节产生的接收事件
       
          If Len(JS.Text) >   100 Then
             JS.Text = ""
          End If

1111:
             
          m_zichuan = MSComm1.Input '读取一个接收字节
       
          For i = 1 To LenB(m_zichuan)
             JS.Text = JS.Text + Hex(AscB(MidB(m_zichuan, i, 1))) + ","
          Next i
          If MSComm1.InBufferCount >   0 Then GoTo 1111
       
          m_zichuan = ""
End Select

End With
End Sub

  
8楼:cjy0312 2003年9月24日16:11
 谢谢独角不厌其烦的帮助!不要叹气,会老得...快滴...
  
9楼:独角 2003年9月23日14:40
 MSComm1.InputMode = comInputModeBinary    '设置接收数据模式为二进制形式
  
10楼:wangjxy 2003年9月23日17:47
 comtest.MSComm1.Inpu
comtest.MSComm1.InputLen = comtest.MSComm1.InBufferCount

你在读input前加上这句看看!

  
11楼:guest 2003年9月26日14:54
 vb的那个控件不能做到一个字节中断一次,
vb的那个控件不能做到一个字节中断一次,你可以试试MOXA卡带的函数

>>>>>>对该主题发表你的看法

本主题贴数11,分页: [第1页]


[上一篇主题]:请问哪里有贴片的9012资料下载!急!谢谢!

[下一篇主题]:讲128和103差别的文章在哪儿可以找到?