我用單片机c51做下位机向PC連續傳送一個8字節的數組。 PC以二進制接收數据.
inputlen: 0
Rthreshold: 1
Sthreshould: 1
inbuffersize: 1024
PC每接收一個字節后判斷后. 加入接收數組中.
為何如果我的單片机不間隔地發送數組時候. PC只能接收一兩個數据. 但是如果將單片机每次發送一個字節后.再延長8-10ms發送下個字節數据. PC接收OK. 不會漏數据.
有沒有辦法解決這個問題.

解决方案 »

  1.   

    Rthreshold: 8因为你每接收到一个字节就触发了接收事件。此时后续的字节还没有到达。这是开始处理当然要丢数据了。你要么将 Rthreshold 设置为 8。串口缓冲区得到 8 个字节再触发事件。每次接收后清空缓冲区。或者在事件中检测缓冲区的内容长度,直到 8 字节再处理:Do Until Com1.CommEvent = comEvReceive And Com1.InBufferCount = 8
    Do Events
    Loop
      

  2.   

    我的速度是9600 bps. 應該不高吧. 我按of123的做法做了. 還是不行.
    只能在單片机程序中插入delay了. 哎.又浪費了我單片机資源.
      

  3.   

    你可以试试在ONCOMM里延时,触发时间后,延时上1秒之类的,在做处理
      

  4.   

    适当的延时是必需的,但不用太长。我的波特率设成38400还没问题。
    of123说的没错,可以设置阀值为8,然后在OnComm事件中设置动态接收数组,Char型,不用设置长度,到时直接获取就行。