我在做串口控制的自动测试程序,下位机AVR的遥控器,发射命令到机器上,不需要接受信号,可每次产生MSComm事件返回的值总是1001(comEventBreak),属性是这样设置的,
    MSComm1.CommPort = 1       '"选用com1串行口
    MSComm1.Settings = "9600,n,8,1"       '"波特率9600,奇校验,8位数据位,1位停止位
    MSComm1.InputLen = 1       '"读取input接收缓冲区全部字节
    MSComm1.InBufferSize = 1024      '"设置接收缓冲区的字节长度
    MSComm1.InBufferCount = 0       '"清除发送缓冲区数据
    MSComm1.OutBufferCount = 0       '"清除接收缓冲区数据
    MSComm1.InputMode = 0       
    MSComm1.RThreshold = 0      '"控件收到数据时将触发OnComm事件
    MSComm1.SThreshold = 1
    MSComm1.PortOpen = True
问题是,程序执行的时候有时机器没反应,有时又有反应,但是如果我单步执行的话又是好的,请教一下这是怎么一回事?

解决方案 »

  1.   

    应该是你程序的问题,如果你程序没有问题,
    就要看avr的程序了,红外信号,误码率要根据你的电路看,还要看你的协议
      

  2.   

    MSComm1.RThreshold = 0 将不产生oncomm事件,
    试着用MSComm1.RThreshold = 1 ,即有一字节就产生oncomm事件。
      

  3.   

    InputLen 属性的缺省值是 0。设置 InputLen 为 0 时,使用 Input 将使 MSComm 控件读取接收缓冲区中全部的内容。若 Rthreshold 属性设置为 0(缺省值)则不产生 OnComm 事件。
    Private Sub Form_Load()
        MSComm1.CommPort = 1
        MSComm1.Settings = "9600,n,8,1"
        MSComm1.InputLen = 0 '读取input接收缓冲区全部字节
        MSComm1.InBufferSize = 1024 '"设置接收缓冲区的字节长度
        MSComm1.InBufferCount = 0 '"清除发送缓冲区数据
        MSComm1.OutBufferCount = 0 '"清除接收缓冲区数据
        MSComm1.InputMode = 0
        MSComm1.RThreshold = 1 '
        MSComm1.SThreshold = 1
        MSComm1.PortOpen = True
    End Sub
      

  4.   

    也没搞懂ON_COMM事件,
    我只出来第一次,之后的事件都没有发生,参数改了N种,
    最后还只是用了TIMER事件来处理
      

  5.   

    MSComm1.RThreshold = 0 '"控件收到数据时将触发OnComm事件是不会正常触发事件的
    楼主考虑一下看看串口通信的书,对它应该有一个基本的了解:
    http://download.csdn.net/source/1498637
    http://download.csdn.net/source/1498644