由于通迅速率为非标准速率,故用API实现异步通讯.
PC机发送指令XXAA(XX:为指令位,AA为单片机地址位)到单片机,单片机回送53字节信息.但由于延时关系,PC机每次都只能接收到单片机回送数据的一部分.后来改用了多次接收(一次收不完多收几次)还是不行,接收到的内容和实际回送的内容不一样.请问各路英雄如何解决这个问题?
另:如果是总线型结构将多个单片机连在一起,周期性的轮询每个单片机那又该注意些什么?
小弟在此先谢过了!

解决方案 »

  1.   

    我自己做了个串口类,用vb的MSComm加api实现非标准波特率设定,接收数据直接在OnComm事件里接收处理,和使用普通控件一样,但实现了非标准波特率和操作简单化.使用如下:Option Explicit
    Private WithEvents MSComm1 As clsMSCommPrivate Sub Form_Load()
        '//创建一个MSComm1
        Set MSComm1 = New clsMSComm
        '//设置存放Comm的容器和名字
        MSComm1.MSCommCreat Me, "Commx"
         '// 打开串口           串口号,非标准波特率,检验,数据位,停止位
        MSComm1.funOpenCommPort "COM1", 1234, None, 8, 1
    End SubPrivate Sub MSComm1_OnCommEvent(InputData As Variant)
        '接收一字节进入OnComm事件,可以自己设置.在此编写处理代码
    End Sub不知道是不是你想要的.在OnComm事件里处理数据就不会出现丢数据和省去查询的麻烦了.
      

  2.   

    对于总线型的返回数据应该包含地址,直接根据地址判断哪个单片机的返回就行了.当发送指令后,如果数据有返回,直接在OnComm事件里处理就行了.
      

  3.   

    [email protected] 麻烦您有空发到这个邮箱吧,小弟先谢过了