打印

单片机通信问题

[复制链接]
1384|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xsgy123|  楼主 | 2012-3-11 12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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

相关帖子

沙发
yybj| | 2012-3-11 12:37 | 只看该作者
lZ再仔细看看错误提示

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

229

主题

2603

帖子

1

粉丝