打印

串行数据发生错误,麻烦大家给支支招~~~

[复制链接]
2227|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sfesdm|  楼主 | 2011-9-19 13:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通信波特率为9600
晶振为11.0592  ,但是晶振不稳定,有时是11.0143 ,有时是11.0164 ,有时
又是11.0184,不知道数据出错跟这个有没有关系

下面是我的发送程序

#define BUF_MAX 200             //设置发送数组的大小

uchar TXD_MAX      = 0;    //发送数据的个数
uchar TXD_Counter = 0;    //发送数据的计数
uchar *TXD_POINT ;          //指向要发送的数组的指针
xdata uchar TXD_RXD_BUF[BUF_MAX] ;//接收串行数据的数组



void Send_Message(uchar *mssg,uchar count)
  {
    TXD_POINT    = mssg;
    TXD_MAX      = count;
    SBUF             = TXD_POINT[0];
    TXD_Counter = 1;
  }





void UART_Interrupt()  interrupt 4   //串行中断处理程序
{
     if(TI)
      {
         TI = 0;
         if((TXD_Counter < TXD_MAX) && (TXD_Counter < BUF_MAX))  //发送的数据不能超过数组最大值
           {
              SBUF = TXD_POINT[TXD_Counter];
              TXD_Counter++;
           }
       else
          {
             TXD_Counter = 0;
             TXD_MAX      = 0;
          }
      }  
}



错误描述:
在一个2~3秒循环发送一次的循环中,当发送的以16进制显示的200个数据(0~199)时,刚开机第一次发送,电脑接收数据显示会发生跳过发送0x14(第21个数据,都是固定这个被跳过)的现象,然后从第二次发送开始,数据一切正常。

如果是以字符发送数据,电脑显示的字符是出现几次乱码,然后再出现一次正常的情况,有时又是几次乱码,几次正常。


我分析过上面的程序,实在想不到哪里会发生发送错误了,如果真的是程序有问题,那为什么能出现正确发送的情况呢??
现在我能分析到的只有晶振问题了,我现在所在的地方没有条件更换晶振,所以没法验证是不是晶振问题。
请各位前辈驻足一下下,帮忙分析一下,可能是哪里出现问题呢,谢谢了!!!

相关帖子

沙发
xmxqiyan| | 2011-11-22 13:24 | 只看该作者
可能是你串口调试软件的问题,不妨换一个串口调试软件。一般串口调试软件用十六进制显示是比较准确的。

使用特权

评论回复
板凳
ayb_ice| | 2011-11-22 13:33 | 只看该作者
Send_Message函数操作期间最好关掉中断
其次每次发送新的数据前需要判断以前是否发送完成

使用特权

评论回复
地板
hotpower| | 2011-11-22 13:46 | 只看该作者
开机延时一会如何?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

49

主题

346

帖子

3

粉丝