1
程序主要是从机发送数据,主机接收并显示,2从1主。可是,数据接收会不正常,请了解的TX帮忙看下原因,谢谢了。
/********主机程序*********/
void main()
{
SCON=0xd0; //主机模式3 SM2=0, REN=1;
TMOD=0x20;
PCON=0x00;
TH1=0xfd; //9600bit/s
TL1=0xfd;
TR1=1;
ti=0;
RI=0;
initiallcd(); //1602初始化
disponechar(12,0,a[0]);
disponechar(13,0,a[1]);
disponechar(14,0,a[2]);
disponechar(15,0,a[3]);
disponechar(12,1,a[5]);
disponechar(13,1,a[6]);
disponechar(14,1,a[7]);
disponechar(15,1,a[8]);
addr=0x01;
while(1)
{
uchar a,j;
while(a!=addr)
{
TI=0;
TB8=1;
SBUF=addr;
while(!TI);
TI=0;
delay(20);
while(!RI);
a=SBUF;
RI=0;
}
switch(addr)
{
case 0x01:
for(j=0;j<2;j++)
{
while(!RI);
buff[j]=SBUF;
RI=0;
temp1=buff[0]+buff[1];
}
disponechar(0,0,wendu[temp1%100/10]);
disponechar(1,0,wendu[temp1%10]);
break;
case 0x02:
while(!RI);
temp2=SBUF;
RI=0;
disponechar(0,1,wendu[temp2%100/10]);
disponechar(1,1,wendu[temp2%10]);
break;
}
addr++;
if(addr==0x03)
{
addr=0x01;
}
}
}
/********从机1程序*********/
void main()
{
SCON=0xd0; //主机模式3 SM2=0, REN=1;
TMOD=0x20;
PCON=0x00;
TH1=0xfd; //9600bit/s
TL1=0xfd;
TH0=0x00; //9600bit/s
TL0=0x00;
TR1=1;
TI=0;
RI=0;
while(1)
{
uchar a,i;
SM2=1;
while(a!=addr) //addr=0x01;
{
while(!RI);
a=SBUF;
RI=0;
}
TI=0;
TB8=0;
SBUF=addr;
while(!TI);
TI=0;
SM2=0;
delay(20);
for(i=0;i<2;i++)
{
SBUF=buff[i];
while(!TI);
TI=0;
}
SM2=1;
}
}
/********从机2程序*********/
void main()
{
SCON=0xd0; //主机模式3 SM2=0, REN=1;
TMOD=0x20;
PCON=0x00;
TH1=0xfd; //9600bit/s
TL1=0xfd;
TR1=1;
TI=0;
RI=0;
while(1)
{
uchar a;
SM2=1;
while(a!=addr) //addr=0x02;
{
while(!RI);
a=SBUF;
RI=0;
}
TI=0;
TB8=0;
SBUF=addr;
while(!TI);
TI=0;
SM2=0;
delay(20);
SBUF=temp1;
while(!TI);
TI=0;
temp1=temp1+2;
delay(200);delay(200);delay(200);
SM2=1;
}
}
|
|