Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2350798
  • 博文数量: 816
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-17 17:57
文章分类

全部博文(816)

文章存档

2011年(1)

2008年(815)

分类:

2008-12-17 18:03:12

我现在做了一个简单的下位机通讯测试程序,就是利用您的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---------------------

阅读(1085) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~