为什么用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结合时硬件延时应该考虑到。
[解决办法]
同上,估计是硬件切换收发问题。验证是不是一直发送错误,还是开始的几个字符错误。