我现在做了一个简单的下位机通讯测试程序,就是利用您的SendPackage目录下的例子。过程很简单,就是把PC机发送的数据再原封不动的发回PC机(数据部分可能含有与帧头或帧尾相同的字节)。单片机接收的时候已经对控制字符做了相应的处理。这样单片机在发送回PC的时候,还要再添加相应的控制字符。我利用串口调试助手测试的时候,没有问题。但是利用您的程序测试的时候发现:
单片机程序片段1:(C51)
for(i=0;i{
if(i > 0 && i < chRecCounter-1) //首尾字节是接收到的起始和结束字符,不作处理;只对数据部分作处理
{
if(arrRecBuf[i] == STX || arrRecBuf[i] == ETX) //STX,ETX是帧头和帧尾
{
arrSendBuf[j] = CtrlChar;
j++;
}
}
arrSendBuf[j] = arrRecBuf[i];
j++;
}
for(i=0;i{
SBUF = arrSendBuf[i];
while(TI == 0)
{
}
TI = 0;
}
这段程序经测试没有问题.
单片机程序片段2:
for(i=0;i{
if(i > 0 && i < chRecCounter-1)
{
if(arrRecBuf[i] == STX || arrRecBuf[i] == ETX)
{
SBUF = CtrlChar; //插入控制字符
while(TI == 0)
{
}
TI = 0;
}
}
SBUF = arrRecBuf[i];
while(TI == 0)
{
}
TI = 0;
}
这段程序得不到希望的结果,PC机总是显示一个多余的帧尾字符。(利用串口调试助手没有这个问题)。
这两段程序的差别仅在于片段1是把接收到的数据先进行处理,再一起发送出去;而片段2是边发送边判断,插入控制字符。为什么会得到不同的结果。我开始用的是片段2,由于得不到结果,就试着改成片段1。现在虽然得到了结果,可是原因是什么呢?(两种方式用串口调试助手结果一致,没有发现问题)
麻烦版主指点迷津。谢谢!
--------------------next---------------------
阅读(1080) | 评论(0) | 转发(0) |