打印

NRF24le1单片机串口接收问题,换成STC也不行,

[复制链接]
3345|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
frankfly|  楼主 | 2013-1-30 17:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 frankfly 于 2013-1-30 17:35 编辑

有个项目,中间有个串口设备,波特率是38400,需要读取数据后无线发送,因此选用了nrf24le1单片机。但是接收数据后对数据进行处理出现问题。请各位大侠指教。接收数据的格式“12345,-1.0,2.5,0.5,-0.1<回车>”
我用PC模拟设备,
第一步,PC发送什么数据,单片机返回什么数据,没有问题。
void uart_isr()  interrupt 4
{
unsigned char buf,i;
if( RI ) {RI = 0;
buf = SBUF;
UART_T(buf);
    if(buf_num>=0&&buf_num<30)
   {
    buffer_dat[buf_num++]=buf;
   if(buffer_dat[buf_num-1]==',')flag_douhao++;
   if(buffer_dat[buf_num-2]=0x0D&&buffer_dat[buf_num-1]==0x0A&&flag_douhao==4)
   {
//     for(i=0;i<30;i++)
//            {
//     UART_T(buffer_dat);
//   }
   }
   if(buffer_dat[buf_num-2]=0x0D&&buffer_dat[buf_num-1]==0x0A)
   {
    flag_douhao=0;
    buf_num=0;
   }
//     UART_T(flag_douhao);
   }
  else buf_num=0;   
  }
}

第二步,PC发送“12345,-1.0,2.5,0.5,-0.1<回车>”,单片机解析逗号的个数,通过 UART_T(flag_douhao);打印
void uart_isr()  interrupt 4
{
unsigned char buf,i;
if( RI ) {RI = 0;
buf = SBUF;
// UART_T(buf);
    if(buf_num>=0&&buf_num<30)
   {
    buffer_dat[buf_num++]=buf;
   if(buffer_dat[buf_num-1]==',')flag_douhao++;
   if(buffer_dat[buf_num-2]=0x0D&&buffer_dat[buf_num-1]==0x0A&&flag_douhao==4)
   {
//     for(i=0;i<30;i++)
//            {
//     UART_T(buffer_dat);
//   }
   }
   if(buffer_dat[buf_num-2]=0x0D&&buffer_dat[buf_num-1]==0x0A)
   {
    flag_douhao=0;
    buf_num=0;
   }
      UART_T(flag_douhao);
   }
  else buf_num=0;   
  }
}
串口调试助手打印“00 00 00 00 00 01 01 01 01 01 02 02 02 02 03 03 03 03 04 04 04 04 04 04 00 ”,也没有问题,说明读出了数据,一共4个逗号
第三步,将接收的数据存入一个全局静态数据中,就有问题了
void uart_isr()  interrupt 4
{
unsigned char buf,i;
if( RI ) {RI = 0;
buf = SBUF;
// UART_T(buf);
    if(buf_num>=0&&buf_num<30)
   {
    buffer_dat[buf_num++]=buf;
   if(buf==',')flag_douhao++;
   if(buffer_dat[buf_num-2]=0x0D&&buffer_dat[buf_num-1]==0x0A&&flag_douhao==4)
   {
     for(i=0;i<30;i++)
            {
     UART_T(buffer_dat);
   }
   }
   if(buffer_dat[buf_num-2]=0x0D&&buffer_dat[buf_num-1]==0x0A)
   {
    flag_douhao=0;
    buf_num=0;
   }
//      UART_T(flag_douhao);
   }
  else buf_num=0;   
  }
}
将数据存在全局静态数组,一帧结束后,打印该数据,却面目全非
串口助手字符打印“”十六进制打印“00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 0A 00 00 00 00 00”
本来以为是单片机的问题,但是换了stc12C5A60S2也是一样的结果,肯定是程序的问题,
难道是波特率太高,处理不过来,还是其他原因呢?
请高手不吝赐教


相关帖子

沙发
frankfly|  楼主 | 2013-1-30 21:44 | 只看该作者
高手指点啊,自己顶起

使用特权

评论回复
板凳
airwill| | 2013-2-4 18:52 | 只看该作者
波特率是38400, 虽然中断服务程序有点长, 应该不算很高.

使用特权

评论回复
地板
joyme| | 2013-2-5 15:21 | 只看该作者
比较语句问题多,没有考虑运算符的优先级,还有数组访问会存在越界
比如 buf_num-2在buf_num = 0和1时就是问题

使用特权

评论回复
5
joyme| | 2013-2-5 15:22 | 只看该作者
== 写成 =,编写代码不规范,导致自己查错都查不出来

使用特权

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

本版积分规则

21

主题

68

帖子

0

粉丝