|
我用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;
while(!TI0);
TI0=0;
}
EA = 1;
SFRPAGE = CONFIG_PAGE;
TXEN = 0; //485接收使能
SFRPAGE = old_SFRPAGE;
}
|
|