#include<reg51.h>
#define uchar unsigned char
#define SLAVE 0x02
#define NUMB 16
uchar idata rbuffer[16]
uchar idata tbuffer[16]={“master transmit”}
void error(void)
{
SBUF=0xff;
while(TI!=1);
TI=0;
}
uchar master(uchar address,uchar cmd)
{
uchar status,I,count;
while(1)
{
SBUF=SLAVE;
while(TI!=1);
TI=0;
while(RI!=1);
RI=0;
if(SBUF!=address)
error();
else
{
TB8=0;
SBUF=cmd;
while(TI!=1);
TI=0;
while(RI!=1);
RI=0;
status-SBUE;
if((status&0x08)==0x08)
{
TB8=1;
error();
}
else
{
if(cornmand==0x01)
{
if((status&0x01)==0x01)
{
do
{
count=0;
for(i=0;i<NUMB;i++)
{
SBUF=tbuffer[i];
count+= tbuffer[i];
while(TI!=1);
TI=0;
SBUF=count;
while(TI==0);
TI=0;
while(RI==0);
R1=0;
}
while(SBUF!=0);
TB8=1;
return(0);
}
}
else
{
if((status&0x02)==0x02)
while(1)
{
count=0;
for(i=0;i<NUMB;i++)
{
while(RI!=1);
RI=0;
Rbuffer[i]=SBUF;
count+=rbuffer[i];
while(RI==0);
RI=0;
If(SBUF==COUNT)
{
SBUF=0x00;
while(TI==0);
TI=0;
break;
}
else
{
SBUF=0xff;
while(TI==0);
TI=0;
}
}
TB8=1;
return(0);
}
}
}
}
void main(void)
{
TMOD=0x20;
TL1=0xfd;THl=0xfd;
PCON=0x00;
TR1=1;
{SCON=0xf0;
master(SLAVE,0x01);
master(SLAVE,0x02);
}
#include<reg51.h>
#define uchar unsigned char
#define SLAVE 0x02
#ddfine NUMB 16
uchar idata trbuffer[16];
uchar idata rebuffer[16];
bit tok;
bit rok;
void main(void)
{
TMOD=0x20;
TL1=0xfd;
TH1=0xfd;
PCON=0x00;
TR1=1;
SCON=0xf0;
ES=1;
EA=1;
while(1)
{
tok=1;
rok=1;
}
}
void SSIO(void)
{
void send(void);
void receive(void);
uchar a,i;
RI=0;
ES=0;
if(SBUF!=SLAVE)
{
ES=1;
goto reback;
}
SM2=0;
SBUF=SLAVE;
while(TI!=1);
TI=0;
while(RI!=1);
RI=0;
if(RB8==1)
{
SM2=1;
ES=1;
goto reback;
}
a=SBUF;
if(a= 0x01)
{
if(rok==1)
SBUF=0x01;
else
SBUF=0x00;
while(TI!=1);
TI=0;
while(RI!=1);
RI=0;
if(RB8==1)
{
SM2=1;
ES=1;
goto reback;
}
receive();
}
else
{
if(a=0x02)
{
if(tok==1)
SBUF=0x02;
else
SBUF=0x00;
while(TI=1);
TI=0;
while(RI!=1);
RI=0;
if(RB8==1)
{
SM2=1;
ES=1;
goto reback;
}
send();
}
else
{
SBUF=0x8;
while(TI!=1);
TI=0;
SM2=1;
ES=1;
}
)
reback;
}
void send (void)
(
uchar sum,i;
tok=0;
do
{
sum=0;
for(i=0;i<NUMB;i++)
{
SBUF=trbuffer[i];
Sum+=trbuffer[i;
while(TI!=1);
TI=0;
}
SBUF=sum;
while(TI==0);
TI=0;
while(RI==0);
RI=0;
}
while(SBUF!=0);
SM2=1;
ES=1;
}
void receive(void)
{
uchar sum,i;
rok=0;
while(1)
{
sum=0;
for(i=0;i<NUMB;i++)
{
while(RI!=1);
RI=0;
rebuffer[i]=SBUF;
sum+=rebuffer[i];
}
while(RI!=1);
RI=0;
if(SBUF==sum)
{
SBUF=0x00;
break;
}
else
SBUF=0xff;
while(TI==O);
TI=0;
}
SM2=1;
ES=1;
}