?? 11.1.c
字號:
#include<reg51.h>
#define uchar unsigned char
#define TR 1 //接收、發(fā)送區(qū)別值,TR=0為發(fā)送
uchar idata buf[10];
uchar sum; //檢驗(yàn)和
void init(void)
{TMOD=0x20; //串行口初始化
TH1=0xE8;TL1=0xE8; //設(shè)定波特率
PCON=0x00;
TR1=1; //啟動T1
SCON=0x50; //串行口工作在方式1,并允許接收
}
/*發(fā)送程序*/
void send(void)
{uchar i;
do{
SBUF=0xAA; //發(fā)送聯(lián)絡(luò)信號"AA"
while(TI==0); //等待發(fā)送結(jié)束
TI=0;
while(RI==0); //等待B機(jī)回答
RI=0;
}while((SBUF^0xBB)!=0); //B機(jī)未準(zhǔn)備好,繼續(xù)聯(lián)絡(luò)
do{
sum=0; //清檢驗(yàn)和
for(i=0;i<16;i++)
{SBUF=buf[i];
sum+=buf[i]; //求校驗(yàn)和
while(TI==0);
TI=0;
}
SBUF=sum; //發(fā)送校驗(yàn)和
while(TI==0);TI=0;
while(RI==0);RI=0; //等待B機(jī)應(yīng)答
}while(SBUF!=0); //出錯(cuò)則重發(fā)
}
/*接收程序*/
void receive()
{uchar i;
do{}while(RI==0);RI=0;
while((SBUF^0xAA)!=0) //判斷A機(jī)是否發(fā)出請求
SBUF=0xBB; //發(fā)送應(yīng)答信號"BB"
while(TI==0); //等待發(fā)送結(jié)束
TI=0;
while(1)
{sum=0; //清校驗(yàn)和
for(i=0;i<16;i++)
{while(RI==0);RI=0;
buf[i]=SBUF; //接收一個(gè)數(shù)據(jù)
sum+=buf[i]; //求校驗(yàn)和
}
while(RI==0);RI=0; //接收A機(jī)校驗(yàn)和
if((SBUF^sum)==0) //比較檢驗(yàn)和
{SBUF=0x00;break;} //校驗(yàn)和相同則發(fā)"00"
else
{SBUF=0xFF; //出錯(cuò)發(fā)"FF",重新接收
while(TI==0);TI=0;
}
}
}
/*主程序main()*/
void main(void)
{init();
if(TR==0) {send();} //發(fā)送
else{receive();} //接收
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -