yangfan19641964 发表于 2013-11-27 10:25
不知道Serial_Send_Data、Serial_Rec_Data、while(Serial_Rec_Str());这三个函数的内容
/************************************************************
**函数名称:void Serial_Init(void)
**参数说明:void
**函数功能:串口通信初始化设置函数
**函数返回:void
************************************************************/
void Serial_Init(void)
{
SCON=0xf0; //设置串口工作方式3即:SM0SM1=11,SM2=1,REN=1
TMOD|=0x20; //设置定时器T1为工作方式2
TH1=0Xfd; // 波特率为9600下的初值设置
TL1=0Xfd;
TR1=1; //打开定时器T1
ES=1; //打开串口中断
EA=1; //打开总中断
}
/************************************************************
**函数名称:void Serial_Send_Data(uchar byte)
**参数说明:byte--->即要发送的无符号型数据;
**函数功能:9位异步收发数据的串口发送数据函数
**函数返回:void
************************************************************/
void Serial_Send_Data(uchar byte)
{
//TB8=0; //TB8---即多机通信中9位异步收发数据的第九位数据,TB8=1指发送的是地址,TB8=1指发送的是数据
SBUF=byte;
while(!TI);
TI=0;
}
/************************************************************
**函数名称:void Serial_Rec_Data(uchar byte)
**参数说明:void
**函数功能:9位异步收发数据的串口接收数据函数
**函数返回:temp--->串口接收到的数据
************************************************************/
uchar Serial_Rec_Data(void)
{
uchar temp;
while(!RI);
RI = 0;
temp = SBUF;
return temp;
}
/************************************************************
**函数名称:uchar Serial_Send_Str(void)
**参数说明:void
**函数功能:9位异步收发数据的串口发送字符串函数
**函数返回:主机接收到字符串后的校验值
************************************************************/
uchar Serial_Send_Str(void)
{
uchar p,i,temp;
p=0; //p=0--->清校验和
for(i=0;i<BN;i++)
{
p+=tbuf;
Serial_Send_Data(tbuf); //发送一数据
}
Serial_Send_Data(p); //发送校验和
temp = Serial_Rec_Data(); //接收校验结果
return temp;
}
/************************************************************
**函数名称:uchar Serial_Rec_Str(void)
**参数说明:void
**函数功能:9位异步收发数据的串口接收字符串函数
**函数返回:0--->接收字符串成功
** 1--->接收字符串失败
************************************************************/
uchar Serial_Rec_Str(void)
{
uchar p,i,temp;
p=0; //p=0--->清校验和
for(i=0;i<BN;i++)
{
rbuf = Serial_Rec_Data(); //接收数据
p+=rbuf;
}
temp = Serial_Rec_Data(); //接收校验码
if(temp==p)
{
Serial_Send_Data(0x00); //校验和相同发"00"
return 0;
}
else
{
Serial_Send_Data(0xFF); //校验和不同发"FF",重新接收
return 1;
}
}
|