📄 多机通信.c
字号:
主机程序:
#include <reg51.h>
#define uchar unsighed char
#define bn 16
uchar master(uchar addrs,uchar commd);
uchar addreceive=16;
uchar addsend=18;
uchar idata rdata[bn];
uchar idata sdata[bn]=("abcdefghijklmnop");
void main(void)
{
uchar i;
for(i=0;i<10;i++);
TMOD=OX20;
TH1=TL1=OXE6;
PCON=0;
SCON=0xd8;
TR1=1;
master(addrs,commd);
}
uchar master(uchar addrs,uchar commd)
{
int i;
do
{
SBUF=addrs;
while(TI!=1);
TI=0;
while(Ri!=1);
RI=0;
if (SBUF==addreceive)
{ break; }
else
{
TB8=0;
SBUF=0xff;
while(TI!=1);
TI=0;
TB8=1;
` }
}while(1)
while(1)
{
SBUF=commd;
while(TI==0);
TI=0;
while(Ri!=1);
RI=0;
if(SBUF==2)
if(commd=1) //send
{
for(i=0;i<bn;i++)
{
SBUF=sdata[i];
while(TI==0);
TI=0;
}
return ;
}
else
{
for(i=0;i<bn;i++)
{
while(Ri!=1);
RI=0;
rdata[i]=SBUF;
}
return ;
}
}
}
乙机程序:
#include <reg51.h>
#define uchar unsighed char
#define bn 16
uchar master(uchar commd);
uchar idata rdata[bn];
uchar idata sdata[bn]="ABCDEFJHIJKLMNOP";
sbit psw_5=psw^5;
void main(void)
{
uchar i;
for(i=0;i<10;i++);
TMOD=OX20;
TH1=TL1=OXe6;
PCON=0;
SCON=0xf0;
TR1=1;
while(1)
{if (psw_5==1) master(commd);}
}
uchar master(uchar commd)
{
do
{
while(RI!=1);
RI=0;
if(SBUF==SLAVE)
{
SM2=0;
SBUF=SLAVE;
while(TI!=1);
TI=0;
while(RI!=1);
RI=0;
if(RB8==0)
{ SM2=1;contuine;}
else
break;
}
}while(1)
while(1)
{
while(SBUF>1)
{
SBUF=3;
while(TI!=1);
TI=0;
while(RI!=1);
RI=0;
}
SBUF=2;
while(RI!=1);
RI=0;
if(commd==1) //send
{
for(i=0;i<bn;i++)
{
SBUF=sdata[i];
while(TI==0);
TI=0;
}
return ;
}
else
{
for(i=0;i<bn;i++)
{
while(Ri!=1);
RI=0;
rdata[i]=SBUF;
}
return ;
}
}
}
乙机中断接收程序:
#include <reg51.h>
#define uchar unsighed char
#define bn 16
uchar master(uchar commd);
uchar idata rdata[bn];
uchar idata sdata[bn]="ABCDEFJHIJKLMNOP";
sbit psw_5=psw^1; //接收就绪标志
sbit fo=F0; //发送就绪标志
void main(void)
{
uchar i;
for(i=0;i<10;i++);
TMOD=OX20;
TH1=TL1=OXe6;
TR1=1;
PCON=0;
SCON=0xf0;
ES=1;
EA=1;
while(1)
{fo=psw_5=1;}
}
void ssio(void) interrupt 4 using 1
{
void send(void);
void receive(void);
int i,j,k;
RI=0;ES=0;
if (SBUF!=SLAVE)
{ES=1;return;}
SM2=0;
SBUF=SLAVE;
while(!TI);TI=0;
while(!RI);RI=0;
if(RB8==1||SBUF>2)
{ ES=1;return;}
else
if(SBUF==1)
{send();return;}
else
{reveive(); return;}
}
void send(void)
{
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -