关于单片机浮点的运算的程序问题

具体如下,比如说在16位DA给定最大值时(0XFFFF)对应电源输出是20000mA,那么在上位机给定任一电流输出时,DA的程序是怎么样的?以下是我的程序,求高人指点程序... 具体如下,比如说在16位DA给定最大值时(0XFFFF)对应电源输出是20000mA,那么在上位机给定任一电流输出时,DA的程序是怎么样的? 以下是我的程序,求高人指点程序是否可行
上位机给定的要求输出电流为val..比如说val=10000mA,
则DA相应输出Vout=ivb*val 其中ivb=0XFFFF/20000=3.27675
void main()
{
uint val,Vout;
float ivb=3.27675;
Vout*=ivb ;
write_data(Vout);//DA输出子程序
}
展开
 我来答
丿江城子丿
2011-02-26
知道答主
回答量:13
采纳率:0%
帮助的人:0
展开全部
计算DA值,是个比例关系:val:20000 = Vout:0XFFFF
求解Vout=val * 0xFFFF / 20000
直接将上式写进程序就得到Vout,用整型运算,不要做浮点,因为单片机做浮点运算很慢且容易异常延迟;
而且,要先做乘法、再做除法;因为整型除法默认取整,对精确度有影响
另,LZ些的“Vout*=ivb “是Vou=Vout*ivb=Vout*(0XFFFF/20000),右值的Vout是不是应该“val”??
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做而论道
高能答主

2011-02-26 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3.2万
采纳率:86%
帮助的人:8818万
展开全部
用不着浮点数。
上位机给定的要求输出电流为val..比如说val=10000mA,
那么就把 FFFFH 的 (1/2) ,即 8000H 送到 DA 即可。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tangnaner
2011-02-26 · 超过26用户采纳过TA的回答
知道答主
回答量:59
采纳率:0%
帮助的人:86.5万
展开全部
我觉得应该是Vout=(uint)(val*ivb),val是你要的输出电流
还有,ivb可以用宏,不要用变量,占内存
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
军军106
2011-02-26 · TA获得超过453个赞
知道小有建树答主
回答量:1747
采纳率:0%
帮助的人:817万
展开全部
单片机不懂。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式