Private Sub Form_Load()
   ' 保存输入子串的缓冲区
   'Dim Instring As String
   Dim flag As Boolean
   
   flag = False
   ' 使用 COM1。
   MSComm1.CommPort = 1
   ' 19200 波特,无奇偶校验,8 位数据,一个停止位。
   MSComm1.Settings = "19200,N,8,1"
   ' 当输入占用时,告诉控件读入整个缓冲区。
   MSComm1.InputLen = 0
   ' 打开端口。
   MSComm1.PortOpen = True
   ' 将 attention 命令送到调制解调器。
   MSComm1.Output = "AT" & Chr$(13)
   ' 确保调制解调器以"OK"响应。
   ' 等待数据返回到串行端口。
   Do
      DoEvents
      Buffer$ = Buffer$ + MSComm1.Input
      If InStr(Buffer$, "OK" & vbCrLf) Then
         flag = True
      ElseIf InStr(Buffer$, "ERROR" & vbCr) Then
         flag = False
      End If
   Loop Until flag = True
   Label1.Caption = Buffer$
   MSComm1.PortOpen = False
End Sub

解决方案 »

  1.   

    你确定在字符串中,"OK" 后面有回车换行符(vbCrLf)吗?
    这样的情况我也遇到过,结果把"& vbCrLf"去掉就行了,原来字符串里面不是以他结尾的:)
      

  2.   

    我不知道这段程序是不是你写的,但是,我想知道,你是在你的一台电脑上运行的吗?如果你只是在你的电脑上运行,那么我告诉你,你的buffer$永远是空,没有接受到任何数据,串行通讯不是这么来的额.要是你将com1和com2用线连接一下的话,或许可以.不过,建议你搞个仿真器试试.
    顺便,看看串口通讯方面的书籍!
      

  3.   

    自己做测试的话,  可以把com1的txd rxd和com2的交叉连, gnd对连
    com 1    com 22---\  /--2 rxd
         \/
         /\
    3---/  \--3 txd
    5---------5 gnd然后串口设为硬件握手无 不要用上cts / rts 控制线
    就可以到单机做实验了。
      

  4.   

    晕.一帮人没有明白楼主的意思,楼主现在是想通过串口通讯来控制Moden.
    可能想让moden实现自己摘机或者是拔号.录音.什么的.怎么你们都想成什么了?晕倒.
    楼主.我明白你的意思,也看了你的程序没有发现什么问题.
    要不你先用超级终端连接试试,看行不行?
    我用串口连接手机的时间试过.
      

  5.   

    呵呵, 刚没自己看题目,接了楼上的一位就跟着答下去了
    楼主你需要设定下mscomm1的筏值, 将发送筏值设为1看看Buffer$ = buffer$ + MSComm1.Input
    后面跟加上下面一句作调试看看结果怎么样?if oldbuffer$ <> buffer$ then       
    debug.print buffer$
    oldbuffer$ = buffer$
    endif
      

  6.   

    确定Mscomm1.InputMode=comInputModeText?
      

  7.   

    为什么你不用OnComm事件呢?
    如果Mscomm1.InputMode=comInputModeText不行
    试试改为MSComm1.InputMode =comInputModeBinary
      

  8.   

    最好加上超时退出:
    dim tt as datett = Time + 5 '延迟5秒
      Do
          DoEvents
          Buffer$ = Buffer$ + MSComm1.Input
          If InStr(Buffer$, "OK" & vbCrLf) Then
             flag = True
          End If
          if tt >= Timer then
            msgbox "Modem 连接超时!"
            exit do
          end if
       Loop Until flag = True另外,下面的代码没有必要:
          ElseIf InStr(Buffer$, "ERROR" & vbCr) Then
             flag = False
      

  9.   

    错了,更正:
          if Timer >= tt then
            msgbox "Modem 连接超时!"
            exit do
          end if
      

  10.   

    江通讯速率改为9600
    MSComm1.Settings = "9600,N,8,1"
    如果还不行,就看看你系统中连接modem的串口的参数设置
      

  11.   

    非常感谢各位的热心帮助,问题已经解决了,是在对mscomm设置时,我选用了RTS握手协议,后来我将它改为none就ok了。
    再次感谢各位的热心帮助,谢谢!!