当前位置: 代码迷 >> 单片机 >> 51与PC串口通讯时,readfile()不能读取,用ClearCommError()得到的cs.cbInQue老是为0.解决思路
  详细解决方案

51与PC串口通讯时,readfile()不能读取,用ClearCommError()得到的cs.cbInQue老是为0.解决思路

热度:273   发布时间:2016-04-28 16:17:25.0
51与PC串口通讯时,readfile()不能读取,用ClearCommError()得到的cs.cbInQue老是为0...

例如要发送“MCS-51”是‘M’、‘C’、...这样一个字符一个字符发呢,还是“MCS-51”一起串出去呢,如果是一起的话,如何得到其字符数

以下是部分测试代码:
//-----------------上位机接收代码--------------------------------
void   __fastcall   TForm1::Button4Click(TObject   *Sender)
{
    String   Temp;
    char   inbuff[1024];
    DWORD   nBytesRead,   dwEvent,   dwError;
    COMSTAT   cs;
       
      ClearCommError(hComm,&dwError,&cs);     //取得状态
   
      if   (cs.cbInQue   >   sizeof(inbuff))         //   数据是否大于我们所准备的缓冲区
      {
          PurgeComm(hComm,   PURGE_RXCLEAR);     //   清除通信端口数据
          return;
        }
      ReadFile(hComm,   inbuff,cs.cbInQue,&nBytesRead,NULL);   //   接收通信端口的数据
//readfile()不能读取,用ClearCommError()得到的cs.cbInQue老是为0...
     
      inbuff[cs.cbInQue]=   '\0 ';//数组中的字符串结尾处补上零字符
     
      mReceive-> Text   =   inbuff;//   将数据显示于Memo1   上

}
//------------------------------

//-----------------下位机发送代码--------------------------------
 
trdata[7]={‘M’、‘C’、...、0x00}
main()
{
    while(1)
    {
        if(trdata[i]!=0x00)
        {
          SBUF=trdata[i];
          while(TI==0);
          delay(12500);   //此处是否需要延时?
          TI=0;
    }

}

//---------------------------
另:单片机发送后是否需要延时等待?

------解决方案--------------------
不懂单片机。
用串口工具测试一下
------解决方案--------------------
从上层一点讲,一般是一帧一个字节

从底层一点讲,一次传一位

...................................
基本上可以说是:一次发一个字符

这么理解也没有大问题
------解决方案--------------------
不用延时!!

------解决方案--------------------
怎么你下位机一直只发送字符M哦 i没有增加!“MCS-51”一起串出去 也是一个字符一个字符的发送的,

trdata[7]={‘M’、‘C’、...、0x00}
main()
{ i=0;

while(1)
{
if(trdata[i]==0x00)
{ delay(12500); //发送完一组数据后延时
i=0;
}
SBUF=trdata[i];
while(TI==0);
TI=0;
i++;
}

------解决方案--------------------
你跳到中断里面去了。。。