#include <reg51.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
#define BUF_LEN 16 // 接收缓冲区长度
void init_UART(); // 串口初始化
void send_char(uchar ch); // 发送一个字符
uchar rec_data(uchar *buf); // 接收一帧数据
void delay(uint time); // 延时函数
uchar inbuf[BUF_LEN]; // 接收缓冲区
sbit P16 = P1^6; // 绿灯指示
sbit P17 = P1^7; // 红灯指示
void main()
{
uchar i = 0;
uchar self_add; // 本机地址
uchar rec_char; // 接收字符
uchar return_flag; // 接收数据返回标志
self_add = P1; // 获取本机地址
P16 = 1; // 上电初始化,绿灯灭
P17 = 1; // 上电初始化,红灯灭
init_UART(); // 串口初始化
while(1)
{
while (rec_char!= self_add) // 等待本机地址
{
RI = 0;
while(!RI)
rec_char = SBUF;
RI = 0;
}
RI = 0;
while(!RI)
rec_char = SBUF; // 检测下一个字符是否是0xAA?
RI = 0;
if(rec_char==0xAA) // 若是,则准备接收数据,否则返回等待地址
{
send_char(0xBB); // 给主机发送允许接收标志0xBB
/****************接收数据*****************/
return_flag = rec_data (buf); // 检查返回标志
if (return_flag==0xFF) // 校验正确
{
P16 = 0; // 数据接收成功,绿灯亮1s
delay(1000);
P16 = 1;
}
else if(return_flag==0x00) // 校验错误
{
P17 = 0; // 数据接收错误,红灯亮1s
delay(1000);
P17 = 1;
}
}
}
}
/*************************延时子程序*******************************/
void delay(uint time)
{
uint i;
while(time --)
{
for (i=0;i<125;i++)
{}
}
}
/*************************串口初始化*******************************/
void init_UART()
{
TMOD=0x20; // T1,方式2,8位自动重装
TL1=0xFD;
TH1=0xFD;
SCON=0x50; // 串口工作于方式1,10位异步
PCON=0x00; // 晶振11.0592MHz,9600bit/s
}
/************************发送一个字符******************************/
void send_char(uchar ch)
{
SBUF=ch;
while(TI==0);
TI=0;
}
/************************接收一帧数据******************************/
uchar rec_data(uchar *buf)
{
uchar i,erc; // erc为主机发送的校验字节
uchar data_len; // 数据长度字节
uchar data_erc; // 接收数据校验字节
/***********第一个字节为数据长度************/
RI = 0;
while(!RI);
data_len = SBUF;
RI = 0;
data_erc = data_len; //从数据长度字节开始校验
/***********此后的字节为有效数据************/
for (i=0;i< data_len;i++)
{
while(!RI);
*buf = SBUF;
data_erc = data_erc ^(*buf); //将每个字节进行异或校验
RI = 0;
buf++;
}
while(!RI);
erc = SBUF; // 接收校验字节
RI = 0;
data_erc = erc^ data_erc; // 进行数据校验
if (data_erc!=0) // 如果校验错误
{
*(buf- data_len) = 0; // 数据缓冲区清空
send_char(0x00); // 通知主机校验错误
return 0x00; // 校验错误返回码0x00
}
else
{
send_char(0xFF); // 通知主机校验正确
return 0xFF; // 校验正确返回码0xFF
}
}
以上代码在编译时报错,请问是为什么?
报错如下:
Build target 'Target 1'
assembling STARTUP.A51...
compiling tx.c...
TX.C(38): error C100: unprintable character 0xA3 skipped
TX.C(38): error C100: unprintable character 0xBB skipped
TX.C(41): error C141: syntax error near 'return_flag'
TX.C(41): error C202: 'buf': undefined identifier
TX.C(111): error C100: unprintable character 0xA3 skipped
TX.C(111): error C100: unprintable character 0xBB skipped
TX.C(112): error C141: syntax error near 'return'
TX.C(116): error C100: unprintable character 0xA3 skipped
TX.C(116): error C100: unprintable character 0xBB skipped
TX.C(117): error C141: syntax error near 'return'
Target not created |