19.2.3 接收方程序设计

接收方B可以按照同样的方式建立项目。接收方B的程序源代码示例如下。


include<reg52.h>

define uchar unsigned char

uchar idata buf[10];

uchar CheckSum;//校验和

void main(void)

{

uchar i;

SCON=0x50;//设置串行口:方式1,8位UART,允许接收

TMOD|=0x20;//设置定时器T1,方式2,8位自动重装

PCON=0x80;//设置SMOD=1

TL1=0xF4;//波特率4800bit/s,初值

TH1=0xF4;

TR1=1;//启动定时器T1

do

{

}while(RI==0);

RI=0;

while((SBUF^0xAB)!=0)//判断A机是否发出请求

SBUF=0xBA;//发送应答信号BA

while(TI==0);//等待发送结束

TI=0;

while(1)

{

CheckSum=0;//清校验和

for(i=0;i<10;i++)

{

while(RI==0);

RI=0;

buf[i]=SBUF;//接收一个数据

CheckSum+=buf[i];//求校验和

}

while(RI==0);

RI=0;//接收A机校验和

if((SBUF^CheckSum)==0)//比较校验和

{

SBUF=0x00;

break;

}//校验和相同则发00

else

{

SBUF=0xEE;//出错发EE,重新接收

while(TI==0);

TI=0;

}

}

}


在程序中,首先初始化串口。然后,接收方B接收联络信号0xAB,并返回应答信号0xBA,表示可以接收数据。接着,接收方B接收数据以及校验和。如果接收数据出错,则向发送方A发送0xEE,表示发送出错,请求A重新发送。接收方B的程序流程如图19.12所示。