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++;
}
[解决办法]
你跳到中断里面去了。。。