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

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循环的发送就开始了,而此时如果另一台单片机还没启动,是不是就接受不到?
如果发送的还没启动,接受的单片机启动了,是不是接受就完成了?
怎么让他们同步?比如说一台发送指令的单片机先启动,怎么知道另一台单片机是否已经准备好接受,如果没有准备好就等待启动,接受的先启动也这样?求教,谢谢。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
icewu521
1楼-- · 2019-07-15 17:58
 精彩回答 2  元偷偷看……
chen499103
2楼-- · 2019-07-15 21:35
这种程序有很大的问题:  启动时,两个的参数不一样,发送和接收的时间不能保证同步。
如果把发送和接收放到while循环里,并最好采用中断接收

一周热门 更多>