实际电路中两单片机串口通信有时成功,有时不成功,求解?

2019-07-15 16:44发布

第一个发送指令的程序如下:
#include<reg51.h>
void main()
{
unsigned char i;
unsigned char send[]={9,3,5,4,6,7};
TMOD=0X20;
TL1=0XF4;
TH1=0XF4;
TR1=1;
SCON=0X40;
for(i=0;i<6;i++)
{
SBUF=send[i];
while(ti==0);
TI=0;
}
while(1);
}

第二接收指令如下:
#include<reg51.h>
code unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char buffer[]={0x00,0x00,0x00,0x00,0x00,0x00};
void disp();
void main()
{
unsigned char i;
TMOD=0x20;
TL1=0XF4;
TH1=0XF4;
TR1=1;
SCON=0X40;
for(i=0;i<6;i++)
{
REN=1;
while(RI==0);
buffer[i]=SBUF;
RI=0;

}
for(;;) disp();
}
void disp()
{
unsigned char w,i,j;
w=0x01;
for(i=0;i<6;i++)
{
P0=tab[buffer[i]];
P2=~w;
for(j=0;j<100;j++);
//P2=0Xff;                          /*proteus中的BUG,每显示一次就需要关闭数码一次(消除上次显示的干扰),否则会出现数码管显示不全的问题*/
w<<=1;
}
}

有时候数码管可以显示,有时候不能。
是不是因为没有查询另一台单片机是否工作?
比如发送的单片机,一启动,for循环的发送就开始了,而此时如果另一台单片机还没启动,是不是就接受不到?
如果发送的还没启动,接受的单片机启动了,是不是接受就完成了?
怎么让他们同步?比如说一台发送指令的单片机先启动,怎么知道另一台单片机是否已经准备好接受,如果没有准备好就等待启动,接受的先启动也这样?求教,谢谢。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。