📄 master.c
字号:
/**************************/
/*C语言多机通讯-从机(中断)*/
/**************************/
#include<reg51.h>
#define uchar unsigned char
#define SLAVE 0x02
#define BN 16
/*************************/
uchar idata trbuf[16];
uchar idata rebuf[16];
bit tready;
bit rready;
/*************************/
void str(void);
void sre(void);
void ssio(void);
/*************************/
void main(void)
{
TMOD=0x20; /*T1定义为模式2*/
TL1=0xfd;
char tready,rready;
TH1=0xfd;
PCON=0x00;
SCON=0xf0; /*串行口为方式3*/
ES=1; /*开中断*/
EA=1; /*开串行口中断*/
while(1)
{
tready=1;
rready=1;
}
ssio();
}
void ssio(void)
{
uchar a,i;
RI=0;
ES=0; /*关串行口中断*/
if(SBUF!=SLAVE){ES=1;goto reti;} /*非本地地址,继续监听*/
SM2=0; /*取消监听状态*/
SBUF=SLAVE; /*从机地址发回*/
while(TI!=1);TI=0;
while(RI!=1);RI=0;
if(RB8==1){SM2=1;ES=1;goto reti;}
a=SBUF;
if(a=0x01){
if(rready==1)SBUF=0x01;
else SBUF=0x00;
while(TI!=1);TI=0;
while(RI!=1);RI=0;
if(RB8==1){SM2=1;ES=1; goto reti;}
sre();
}
else{
if(a=0x02){
if(tready==1)SBUF=0x02;
else SBUF=0x00;
while(TI!=1);TI=0;
while(RI!=1);RI=0;
if(RB8==1){SM2=1;ES=1;goto reti;}
str();
}
else{
SBUF=0x80; /*1000 0000b*/
while(TI!=1);TI=0;
SM2=1;ES=1;
}
}
reti:;
}
void str(void) /*发送数据块*/
{
uchar p,i;
tready=0;
do{
p=0;
for(i=0;i<BN;i++)
{SBUF=trbuf[i];
p+=trbuf[i];
while(TI!=1);TI=0;
}
SBUF=p;
while(TI==0);TI=0;
while(RI==0);RI=0;
}while(SBUF!=0);
SM2=1;
ES=1;
}
void sre(void) /*接收数据块*/
{
uchar p,i;
rready=0;
while(1)
{
p=0;
for(i=0;i<BN;i++)
{
while(RI!=1);RI=0;
rebuf[i]=SBUF;
p+=rebuf[i];
}
while(RI!=1);RI=0;
if(SBUF==p){SBUF=0x00;break;}
else{
SBUF=0xff;
while(TI==0);TI=0;
}
}
SM2=1;
ES=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -