实际电路中两单片机串口通信有时成功,有时不成功,求解?
时间:10-02
整理:3721RD
点击:
第一个发送指令的程序如下:
#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循环的发送就开始了,而此时如果另一台单片机还没启动,是不是就接受不到?
如果发送的还没启动,接受的单片机启动了,是不是接受就完成了?
怎么让他们同步?比如说一台发送指令的单片机先启动,怎么知道另一台单片机是否已经准备好接受,如果没有准备好就等待启动,接受的先启动也这样?求教,谢谢。
#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循环的发送就开始了,而此时如果另一台单片机还没启动,是不是就接受不到?
如果发送的还没启动,接受的单片机启动了,是不是接受就完成了?
怎么让他们同步?比如说一台发送指令的单片机先启动,怎么知道另一台单片机是否已经准备好接受,如果没有准备好就等待启动,接受的先启动也这样?求教,谢谢。
小编分析应该是这样的,接收方可以使用串行中断来实现即可
这种程序有很大的问题: 启动时,两个的参数不一样,发送和接收的时间不能保证同步。
如果把发送和接收放到while循环里,并最好采用中断接收