我用spcomm控件和下位机通信,8位,停止位1,无校验,泼特1200。单片机相同设置。把要发送的数据(byte型)放到一个32大小的临时数组里,循环发送这个数组,每发送一个字节,延时1个毫秒,发送完成一次,更新一下数组,再发送,中间是连续的。可是发现单片机只能接收并显示600多个字节,太多就跳不出中断,死掉了,请问是怎么会事。波特率从1200-9600都试了,都不行。部分源程序如下:for a:=1 to 128 do      //循环发送128个32大小的数组           
     begin                  
         for i:=1 to 32 do         
             begin
                 comm1.WriteCommData(@newarray[i],1);      //send
                 sleep(1);        //延时 
             end;      
         updatearray();     //此处更新一下数组
     end;还请通讯高手指点迷津。谢谢。

解决方案 »

  1.   

    sleep(1)改为sleep(10)就差不多了.
      

  2.   

    不行的,换成sleep(20)还是一样。不知道哪位还有更好的解决办法?
      

  3.   

    注意,SPCOMM本身是多线程的。
      

  4.   

    comm1.WriteCommData(@newarray[i],1);      //send
                 
    可以返回一个发送是否成功的表示
      

  5.   

    TO:ChinaOk(授人以鱼,不如授人以渔) :   我还没用过多线程,也不了解。请问我的代码会出问题吗?   “comm1.WriteCommData(@newarray[i],1);可以返回一个发送是否成功的表示”,我想不明白的是可以正确发送900个以下的字节,也就是返回的是否成功的标志应该是正确的。   还请指教。
      

  6.   

    上述代码改为:
         comm1.WriteCommData(newarray,sizeof(newarray));
    即可 。
    在缓冲区为空的事件里,编写剩下代码。
    程序调试通过后,给我发Email。  [email protected]      
      

  7.   

    最近DELPHI方面有两本专门搞串口的书卖。
      

  8.   

    象楼上的说的。应该可以直接一次性写入
    comm1.WriteCommData(newarray,sizeof(newarray));
    而具体发送时,spcomm自己会自动调用多线程来处理的。
      

  9.   

    谢谢楼上的几位,现在可以了。用的是comm1.WriteCommData(newarray,sizeof(newarray))一次性发送。速度快了很多,又稳定。十分感谢。让这个贴字多呆些时间吧,晚上结贴。