求教单片机中定点小数转化为BCD的算法

[复制链接]
3899|10
 楼主| singleywy 发表于 2010-10-10 15:50 | 显示全部楼层 |阅读模式
我在做频率计,不过需要单片机中定点小数转化为BCD的算法,请大家想想法子,找一个好的算法,如,0.56783,如何转化到BCD[5]数组中,
 楼主| singleywy 发表于 2010-10-10 15:52 | 显示全部楼层
本帖最后由 singleywy 于 2010-10-10 15:56 编辑

我暂时自己想出一个算法,如
i=0.56783
if(i>=0.8){BCD[0]+=8;i-=0.8;}
if(i>=0.4){BCD[0]+=4;i-=0.4;}
if(i>=0.2){BCD[0]+=2;i-=0.2;}
if(i>=0.1){BCD[0]+=1;i-=0.1;}
if(i>=0.08){BCD[1]+=8;i-=0.08;}
if(i>=0.04){BCD[1]+=4;i-=0.04;}
if(i>=0.02){BCD[1]+=2;i-=0.02;}
if(i>=0.01){BCD[1]+=1;i-=0.01;}
if(i>=0.008){BCD[2]+=8;i-=0.008;}
if(i>=0.004){BCD[2]+=4;i-=0.004;}
if(i>=0.002){BCD[2]+=2;i-=0.002;}
if(i>=0.001){BCD[2]+=1;i-=0.001;}
............
 楼主| singleywy 发表于 2010-10-10 15:57 | 显示全部楼层
不知道大家还有什么好的算法,用在51单片机上,
 楼主| singleywy 发表于 2010-10-10 16:15 | 显示全部楼层
 楼主| singleywy 发表于 2010-10-10 17:30 | 显示全部楼层
没人帮忙么,求教呀,大家谈谈自己的算法呀
 楼主| singleywy 发表于 2010-10-10 19:46 | 显示全部楼层
哥,蛋疼了,真的没有高手来帮忙么,或者谈一下我的算法效率怎么样也可以,发表一下自己的看法呀,不能来一下不留自己的脚印吧
免证入网 发表于 2010-10-11 09:55 | 显示全部楼层
首先声明我不是高手。你的for 循环恐怕……呵呵。我觉得首先你要确定精度问题,把一个实数分整和小数两部分,然后整数部分高到低位入栈,入完小数点入线,然后放大小数部分,如精确千分之一则乘1000,结果用整数入栈的方法入栈,最后栈里就是那个数的bcd表示。
免证入网 发表于 2010-10-11 09:58 | 显示全部楼层
哦,看错,原来是表示成8421码
 楼主| singleywy 发表于 2010-10-11 18:35 | 显示全部楼层
我在想,还有一种算法就是乘10,提取整数法,定点小数的乘法感觉还是好处理的
 楼主| singleywy 发表于 2010-11-10 20:59 | 显示全部楼层
结贴,这贴真蛋疼,只有自己在顶
ejack 发表于 2010-11-11 08:01 | 显示全部楼层
……最初的定点小数是怎么来的?

如果能处理原始的整数,势必大大减轻单片机的负荷。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

295

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部