📄 ppcomun.c
字号:
#include<reg51.h>
#define uchar unsigned char
#define TR 1
uchar idata buf[10];
uchar pf;
void init(void)
{TMOD=0X20; /*定时方式2*/
TH1=0XE8; /*波特率*/
TL1=0XE8;
PCON=0X00;
TR1=1;
SCON=0X50;
}
void send(uchar idata *d)
{uchar i;
do{SBUF=0XAA; /*发送联络信号*/
while(TI==0);TI=0; /*等待发送出去*/
while(RI==0);RI=0; /*等待B机回答*/
}while((SBUF^0xbb)!=0); /*B机未准备好,继续联络*/
do{pf=0; /*清校验和*/
for(i=0;i<16;i++)
{SBUF=d[i];
pf+=d[i]; /*求校验和*/
while(TI==0);TI=0;
}
SBUF=pf; /*发送校验和,并等待B机回答*/
while(TI==0);TI=0;
while(RI==0);RI=0;
}while(SBUF!=0); /*回答出错,重发*/
}
void receive(uchar idata *d)
{ uchar i;
do{while(RI==0);RI=0;}
while((SBUF^0xaa)!=0); /*判断A机有无请求*/
SBUF=0xbb; /*发应答信号*/
while(TI==0);TI=0;
while(1)
{pf=0; /*清校验和*/
for(i=0;i<16;i++)
{while(RI==0);RI=0;
d[i]=SBUF;
pf+=d[i]; /*求检验和*/
}
while(RI==0);RI=0; /*接收A机校验和*/
if((SBUF^pf)==0) /*比较校验和*/
{SBUF=0x00;break;} /*相同发“00”*/
else{SBUF=0xff; /*出错发“FF”,重新接收*/
while(TI==0);TI=0;
}
}
}
void main(void)
{
init();
if(TR==0){send(buf);}
else{receive(buf);}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -