文号
t71511
阅读
20047
回复
9
收藏
3
推力数据搜集:如何将一个长整型数据存储在AT24C08中
2015/05/16
IP:广东
看到论坛越来越多人拥有推力测试台,我也做了一个。能搜集到推力数据,对火箭的研制是非常重要的。在大学学了半年51单片机,前几个星期弄了3个传感器,分别用来搜集推力,加速度和飞行高度,基本上做好了,迟些我会把代码和制作过程发到论坛上。我从推力传感器搜集到的数据是一个long型数据,我把它存储在AT24C08中,这样在测试时就不用从连接电脑了。现在有一个问题是,AT24C08一次只能存储一个字节,也就是8位。我的想法是:将long型数据分成4个字符再存储在AT24C08中,但当该long型数据大于65536时,却会溢出。
于是用下面的程序模拟一下,

  char i;
   unsigned char j,c[4];
   unsigned long int b;
   b=75536;
 
 
//将b的32位分到4个字符中
   
 for(i=0;i<4;i++)    { c="(unsigned" char)(b&0xff);   b>>=8;
   }</4;i++)>

//再将4个字符合成变成原来的long型数据
   a=(c[3]<<24)+(c[2]<<16)+(c[1]<<8)+c[0];
却发现输出的a为10000,也即如果数据超过65536,那么输出的数据就会减去65536.
请教:该怎么解决?或者有什么更好的方法?


(我明明在那个for语句中的c有个中括号,并且里面有个i,为何发到论坛上却不行了,已经修改几次了)
9
沙暴作者
11年7个月前IP:广东
768910
1楼
我明明在那个for语句中的c有个中括号,并且里面有个i,为何发到论坛上却不行了,已经修改几次了
引用
评论
11年7个月前IP:四川
768913
2楼
请使用代码工具插入代码,已有编辑示例。
引用
评论
11年7个月前IP:广东
768945
3楼
试试这个
main()
{
  unsigned char i,c[4];
  unsigned long b,a;
  b=75536;
     
  for(i=0;i<4;i++)     {       c[i]="(unsigned" char)b;       b>>=8;
    }
  a=(c[3]*16777216)+(c[2]*65536)+(c[1]*256)+c[0]; 
  while(1);
}</4;i++)>
引用
评论
沙暴作者
11年7个月前IP:广东
768978
4楼
试试这个

实在是太谢谢你了。不过想问:为什么我那样做不行
引用
评论
11年7个月前IP:广东
768996
5楼
引用 沙暴:
实在是太谢谢你了。不过想问:为什么我那样做不行
对数组元素进行移位操作出了问题
引用
评论
沙暴作者
11年7个月前IP:广东
769000
6楼
对数组元素进行移位操作出了问题
不明白
引用
评论
11年7个月前IP:广东
769062
7楼
引用 沙暴:
不明白
就是"c[2]<<16;"和"c[3]<<24;"两句有问题,本来行的,但经过编译器编译后就有问题了。你仿真一下。这种移位操作最好用乘法。
引用
评论
沙暴作者
11年7个月前IP:广东
769069
8楼
就是"c[2]<<16;"和"c[3]<<24;"两句有问题,本来行的,但经过编译器编译后就有问题了。你仿真一下。这种移位操作最好用乘法。
好的,非常感谢
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的