| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3759 人关注过本帖
标题:自己编的一个串口程序接收到的数据不对、
只看楼主 加入收藏
liu_liuk
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-5-18
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
自己编的一个串口程序接收到的数据不对、
要接收四个变量,从上位机,这是个变量有整数,有小数。有负数。接收到小数后,在进行运算。然后把运算的值发出去。被上位机接收。你弄了好久也不成功。。请给位看看问题在哪。该怎麽该,先拜谢。。
#include <hidef.h>      
#include <mc9s12dg256.h>     
#pragma LINK_INFO DERIVATIVE "mc9s12dg256"


byte num;
byte rev_data[3];

//.................SCI0模块初始化....................//
void SCI0_Init(void)
    {
SCI0BDL=(unsigned char)((16000000UL /* OSC freq */ / 2) / 9600 /* baud rate */ / 16 /*factor*/);
SCI0CR1=0X00;
SCI0CR2=0X2C;
    }


//..................主函数...................//
void main(void)
{
SCI0_Init();
 DisableInterrupts; /*禁止中断*/
while(1)
{      
static uchar k=0;
if(SCI0SR1_RDRF==1)
{
  rev_data[k++]=SCI0DRL;
 

num= rev_data[0]+1;   /*接收第一个数据并运算
  while(!SCI0SR1_TDRE);
 SCI0DRL=num;          /*把第一个运算结果输出
 
 num= rev_data[1]+2;      /*接收第二个数据并运算
  while(!SCI0SR1_TDRE);
 SCI0DRL=num;               /*把第二个运算结果输出
  
 num= rev_data[2]+3;  /*接收第三个数据并运算
  while(!SCI0SR1_TDRE);
 SCI0DRL=num;    /*把第三个运算结果输出
 
  num= rev_data[3]+4;      /*接收第四个数据并运算
  while(!SCI0SR1_TDRE);
 SCI0DRL=num;            /*接收第四个数据并运算
  
}
}
搜索更多相关主题的帖子: void 数据 include factor 
2012-05-18 15:37
silent_world
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:258
专家分:1138
注 册:2011-9-24
收藏
得分:20 
呵呵,首先问一句,这个程序不死机吗?
对于数组的操作,存在明显问题。
byte rev_data[3];
而你操作num= rev_data[3]+4;
另外rev_data[k++]=SCI0DRL; 中,k在不停的增大?
你是如何知道数组rev_data中,数据长度。

num= rev_data[0]+1;   /*接收第一个数据并运算
这个运算是什么意思?能不能讲得明白些?为什么需要加1,如果是小数呢?


[ 本帖最后由 silent_world 于 2012-5-18 16:16 编辑 ]
2012-05-18 16:12
liu_liuk
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-5-18
收藏
得分:0 
回复 2楼 silent_world
关于k的增加问题。我用k++,是因为,我后面还有序没贴出来。if(k>=4){k=0}.而关于运算问题。就是加减运算。我要把收到的数字进行加减运算的目地,只是为了测试这个程序的正确性、可以与小数等相加减,并可以发送小数负数等。。程序验证通过,我要把做好的控制程序嵌入入进去。实现控制功能。您所说的加减小数。也是我的问题。我不知道该如何解决。所以才来求助。请您帮忙解答,谢谢。

[ 本帖最后由 liu_liuk 于 2012-5-19 15:44 编辑 ]
2012-05-19 15:41
silent_world
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:258
专家分:1138
注 册:2011-9-24
收藏
得分:0 
所有关于数据的传输,需要有个协议。
比如,你不知道你传的数据类型是什么,没关系,自己定义一个传输格式就行了。
在定义传输格式时,注意到数据长度的对齐,如:每次接收到对齐长度后,再开始解析,如果解析partail,等下一个数据补充,或者超时。

在协议解析过程中,如果方便,用个状态机处理。
2012-05-22 18:54
快速回复:自己编的一个串口程序接收到的数据不对、
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025931 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved