首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

为什么用UART发送数据前要加延时?解决办法

2012-02-09 
为什么用UART发送数据前要加延时?我用UART做的一个小的发送数据的程序,数据发送采用的是中断的方式.采用48

为什么用UART发送数据前要加延时?
我用UART做的一个小的发送数据的程序,数据发送采用的是中断的方式.采用485转232和上位机通信,用串口调试精灵观察接收到的数据.现在的问题是:如果在发送数据前不加延时接收到的数据就是错误的,可是查了很多单片机资料都没说要在发送数据前要加延时,我用的是c8051f064单片机.是不是我的程序有问题呢?大家指点下,程序片段如下:
        void   UART0_ISR(void)   interrupt   4
{    
    unsigned   int   i,j;    
    char   old_SFRPAGE   =   SFRPAGE;
    SFRPAGE   =   CONFIG_PAGE;  
    TXEN   =   1;                                                       //485发送使能
    SFRPAGE   =   UART0_PAGE;                               //   Switch   to   UART0   page
    EA   =   0;
    EA   =   0;
    RI0   =   0;
    RB80   =   0;
    for(j=0;j <20;j++);                                   //延时,不加则收到的数据就是错误的,
                                                                          //而且每次收到的错误数据是一样的.
    for(i=0;i <5;i++)
  {
            SBUF0=a[i];
            while(!TI0);
            TI0=0;
  }
    EA   =   1;
    SFRPAGE   =   CONFIG_PAGE;
    TXEN   =   0;                                                   //485接收使能
      SFRPAGE   =   old_SFRPAGE;
}


[解决办法]
for(j=0;j <20;j++); //延时,不加则收到的数据就是错误的,
//而且每次收到的错误数据是一样的.


看看,你的485芯片的切换发送的反应时间...
[解决办法]
软硬件0结合时硬件延时应该考虑到。
[解决办法]
同上,估计是硬件切换收发问题。验证是不是一直发送错误,还是开始的几个字符错误。

热点排行