搜索
bottom↓
回复: 10

请教下KEIL C中数字后面跟的点号

[复制链接]

出0入0汤圆

发表于 2012-11-2 12:36:00 | 显示全部楼层 |阅读模式
在做ADC0808实验时用到的两种数据处理办法,一种是把得到的数值直接乘以192,然后分离万,千,百位,如下:
  1.                 adin=adin*192;
  2.                 hangliexie(1,1,adin/1000/10);
  3.                 xieshuju('.');
  4.                 hangliexie(1,3,adin/1000%10);
  5.                 hangliexie(1,4,adin/100%10);
复制代码
结果误差较大,最大测量结果大概比实际值小0.09V左右。

另一种处理办法,把得到的数值乘以500./255(注意500后面有个点号),再分离千,百,十位,如下:
  1.         adin=adin*500./255;
  2.                 hangliexie(1,1,adin/100%10);
  3.                 xieshuju('.');
  4.                 hangliexie(1,3,adin/10%10);
  5.                 hangliexie(1,4,adin%10);
复制代码
结果误差很小,最大只比实际值小0.01V。


想请教下,这两种数据处理方式的不同在哪里,500后面的点是什么讲究?

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-11-2 12:42:32 | 显示全部楼层
adin=adin*192;
adin=adin*500./255;
对这两个感觉很无力

出0入0汤圆

发表于 2012-11-2 12:59:30 | 显示全部楼层
楼主,500/255=1.960784313725490196078431372549,当然与1.92不相等了

出0入0汤圆

 楼主| 发表于 2012-11-2 13:18:53 | 显示全部楼层
lcw_swust 发表于 2012-11-2 12:59
楼主,500/255=1.960784313725490196078431372549,当然与1.92不相等了

原来是这样啊,谢谢。

那么500后面的点号是什么意思,我试过,去掉后结果就不对了。

出0入0汤圆

发表于 2012-11-2 13:28:42 | 显示全部楼层
小数点啊

出0入0汤圆

发表于 2012-11-2 13:39:09 | 显示全部楼层
加个点,显式表示为浮点数,运算结果是浮点数。不加点就当整型处理了,没有小数部分的结果。

出0入0汤圆

发表于 2012-11-2 13:42:20 | 显示全部楼层
renwocai 发表于 2012-11-2 13:18
原来是这样啊,谢谢。

那么500后面的点号是什么意思,我试过,去掉后结果就不对了。 ...

adin定义的是什么类型?
这样试试:
adin=(unsigned long)adin*500/255;

出0入0汤圆

发表于 2012-11-2 13:54:28 | 显示全部楼层
500是unsigned int整形,500.是float浮点型,一个是双字节的一个是四字节的,所以精度差了很多,浮点型的十进制数有7位有效数字。

出0入0汤圆

发表于 2012-11-2 14:33:14 | 显示全部楼层
LZ你应该是用的5V电压作为AD转换的基准吧?那么这样就应该是:Vout/5V = ADIN/256(注意这里是256而不是255)。
Vout
= (ADIN/256)*5
= ADIN*5/256

加了小数点后,编译器会生成浮点运算代码,得不偿失,乘以100后转换为定点运算,在保证运算精度的同时可以大幅度减小运算量:
Vout*100
= ADIN*500/256
= ADIN*(500/256)
= ADIN*((512-12)/256)
= ADIN*(2-12/256)
= ADIN*2-((ADIN*12)>>8)
实现方式:
  1. adin =  adin*2 - ((adin*12)>>8);
  2. hangliexie(1,1,adin/100);
  3. xieshuju('.');
  4. hangliexie(1,3,adin/10%10);
  5. hangliexie(1,4,adin%10);
复制代码

出0入0汤圆

发表于 2012-11-6 15:58:28 | 显示全部楼层
500. 就是 500.0,在 keil c 里,这个 . 后面是 0 可以不写,于是就出来了 500. 这个比较不好理解的数字了。

出0入0汤圆

发表于 2012-11-6 20:21:29 | 显示全部楼层
9楼的建议不错。。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 14:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表