急救!!!做stc98c52单片机两机通信,出现怪问题,

我做了两个stc89c52通信,

把一个单片机(1#机)的p0,p1,p2口的状态,发送给另一个单片机(2#机)并在2#机的p0,p1,p2口输出。

程序如下:

发信息1#机

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit p20=P2^0;
sbit p10=P1^0;
sbit p11=P1^1;
sbit p12=P1^2;
sbit p13=P1^3;
sbit p14=P1^4;
sbit p21=P2^1;
sbit p22=P2^2;
sbit p23=P2^3;
sbit p24=P2^4;
sbit p25=P2^5;
sbit p37=P3^7;
uchar shu[5];
uchar jiaoyan;
uchar i;
uchar time=0;
void yanshi(uint x,uint y)
{uint i,j;
for(i=x;i>0;i--)
for(j=y;j>0;j--);
}
main()
{TMOD=0x21;
TH1=0xfd;
TL1=0xfd;
TH0=0xdc;
TL0=0x00;
SCON=0x50;
EA=1;
PT0=1;
TR1=1;
TR0=1;
ET0=1;

while(1)
{

shu[0]=P0;
shu[0]=~shu[0];
yanshi(50,50);
P1=0xff;
shu[1]=P1;
shu[1]=~shu[1];
yanshi(50,50);
P2=0xff;
shu[2]=P2;
shu[2]=~shu[2];
if(time>=100)
{time=0;
for(i=0;i<3;i++)
{SBUF=shu[i];
while(!TI);
TI=0;
}
}

}
}
void dingshi(void) interrupt 1 //每一秒发一次数据
{
time++;
TH0=0xdc;
TL0=0x00;
}

接收机2#机:

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit p20=P2^0;
sbit p10=P1^0;
sbit p11=P1^1;
sbit p12=P1^2;
sbit p13=P1^3;
sbit p14=P1^4;
sbit p21=P2^1;
sbit p22=P2^2;
sbit p23=P2^3;
sbit p24=P2^4;
sbit p25=P2^5;
sbit p37=P3^7;
uchar shuz[3];
uchar num;

main()
{TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0x50;
EA=1;ES=1;

while(1);

}
void zhuji(void) interrupt 4
{

for(num=0;num<3;num++)
{ while(!RI);
shuz[num]=SBUF;
RI=0;

}
P0=shuz[0];

P1=shuz[1];

P2=shuz[2];

}

1#单片机在自己买的开发板和电脑串口调试,每隔一秒发送一次24位数据。运行正常。

2#机在自己的开发板上与pc通信,pc每隔一秒发送24位数据,2#机接收正常。

于是我自己用洞洞板做了两个板通信,就不行了。找不到原因。有时候单片机的程序就没了,得从新下载。

我下载stc时 选的是“下次下载p00,p01同时为零方可下载”。

希望有高人指点一下,看看如何修改。

我两机通信测试时,将两机T接R,R接T ,两机共Vss。不能正常工作。不过有事突然就好了,试验10也就有1次可以工作。 小弟不知是因为干扰还是 接错了还是什么原因,希望大虾们指点
板子反面

我最近也在做两个单片机异步串行通信方面的学习,碰到的问题和你的差不多,也是两个单片机之间无法完成正常的串行通信。不同的是我采用的是查询法。尽管对于两个单片机的通信这一块我同样还是还没有搞明白,但是有一点是值得我们共同注意的,就是我们用单个的单片机和电脑进行串行通信可能是正常的,是由于PC机作为一个超级终端,省去了很多我们不必要的关于他的设置。而两个单片机之间的异步串行通信却是不同的,首先检查波特率是否一致,在一个就是程序,你要保证两个单片机之间进行正确的握手连接,就象我之前遇到的情况一样,因为是查询法,两个单片机之间应该实现正常的握手连接,否则可能上位机开始接收的数据不是从第一位开始的,有可能是下位机发送过来的数据的第二位开始的,然后从这位起开始接受八位,所以收到的数据也就不对了。要保证两个单片机之间实现正常的握手连接。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-09-03
10次有一次 好了 ,也就是通讯可能是正常的

你是不是上电复位电路没加????? 晶振和两边的电容接好了吗

主要检查这两个地方 还有电源是不是接好了,要是有示波器的话,可以测下各个信号和电源的状态
第2个回答  2009-09-01
试试,用查询接收的方法,不要用中断来接收...
第3个回答  2009-09-01
做串行通信的时候,最好使用串口助手,这样很容易知道发送的数据是否正确,还有就是,两机的波特率设的是否正确,还有考虑一下连接两机的导线是否太长了,这些都有可能,慢慢来吧,调程序要有耐性的。