我做了两个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次可以工作。 小弟不知是因为干扰还是 接错了还是什么原因,希望大虾们指点
板子反面