7485|7

74

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教单片机串口接收字符串问题? [复制链接]

外围模块输出数据格式如:$sat,215,23*
用单片机接收一个字符搞的定,接收字符串问题就来了,要么乱码要么只是显示最后一个。如何将引导词后的2个字符数据分离出来并转换为数据格式!代码如下:
void Com_Int(void) interrupt 4
{
  RI=0;
  if(SBUF==0x24) //判断是不是$
            {
             record=1;   //记录开始
             iaz=0;        //记录字符个数变量
             douhao=0; //逗号个数
             }
      if(record==1)
            {
              if(SBUF==0x2c){douhao++;}
              if(douhao==1)
                 {
                   stringaz[iaz]=SBUF;//中间段字符数据
                   iaz++;
                 }

             //省略处理最后段字符数据
  
              if(SBUF==0x2a)  //是不是*号
                 {
                   stringaz[iaz]='0';
                   len=sprintf(stringaz,"%s",stringaz+1);
                 if(len!=0)
                    {
                      numaz=atoi(stringaz);
                     }
                 numaz=0;
                 douhao=0;
                 record=0;
                 iaz=0;
                 }
            }
}
帮忙看下这样写对不对?哪个老大帮我改下代码?小弟分比较少,不好意思!

最新回复

len=sprintf(stringaz,"%s",stringaz+1); ........你这句是想做什么呀?  详情 回复 发表于 2009-12-23 17:05
点赞 关注

回复
举报

63

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
协议不完整

逗号间的数据是3个字节吗?

最好给一个完整的约定

然后,这个是如果那个啥的话,给分就不太厚道
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
老大,分不多呀!帮个忙色!
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

4
 
呵呵呵,顶下、
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

5
 
在中断里不要做统计,仅仅接收存储。一次完整的数据全都接收完毕后再统一做处理。这样做逻辑清晰,也容易调试错误。
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

6
 
问题出在len=sprintf(stringaz,"%s",stringaz+1);
替换成 len=iaz 。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

7
 
1楼说的对,协议介绍的不完整。

不过从代码上看,


  1.             if(record==1)
  2.             {
  3.                 if(SBUF==0x2c){douhao++;}
  4.                 if(douhao==1)
  5.                 {
  6.                     stringaz[iaz]=SBUF;//中间段字符数据
  7.                        iaz++;
  8.                 }
复制代码

这段好像就有问题,实际上,接收时会将逗号一起存到stringaz中,而且if(douhao==1) 是不是也有问题?如果遇到第二个逗号的话,后面的字符便无法接收。是不是后面的  省略处理最后段字符数据  里面有相应的处理代码?代码不全,只能估计了。
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

8
 
len=sprintf(stringaz,"%s",stringaz+1);
........你这句是想做什么呀?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表