?? 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; /*發(fā)送聯(lián)絡(luò)信號*/
while(TI==0);TI=0; /*等待發(fā)送出去*/
while(RI==0);RI=0; /*等待B機回答*/
}while((SBUF^0xbb)!=0); /*B機未準(zhǔn)備好,繼續(xù)聯(lián)絡(luò)*/
do{pf=0; /*清校驗和*/
for(i=0;i<16;i++)
{SBUF=d[i];
pf+=d[i]; /*求校驗和*/
while(TI==0);TI=0;
}
SBUF=pf; /*發(fā)送校驗和,并等待B機回答*/
while(TI==0);TI=0;
while(RI==0);RI=0;
}while(SBUF!=0); /*回答出錯,重發(fā)*/
}
void receive(uchar idata *d)
{ uchar i;
do{while(RI==0);RI=0;}
while((SBUF^0xaa)!=0); /*判斷A機有無請求*/
SBUF=0xbb; /*發(fā)應(yīng)答信號*/
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;} /*相同發(fā)“00”*/
else{SBUF=0xff; /*出錯發(fā)“FF”,重新接收*/
while(TI==0);TI=0;
}
}
}
void main(void)
{
init();
if(TR==0){send(buf);}
else{receive(buf);}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -