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所示。