找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

MCU将8位AD采集到的值转换成实际值遇到的坑求解

查看数: 2666 | 评论数: 6 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-3-31 04:19

正文摘要:

MCU AD采集到的值dat从二进制转换成10进制实际电压值输出中遇到了一些问题 采集到电压值dat区间在0-255之间,实际参考位5V,讲采集到的值做运算,输出实际电压值 1.unsigned char型的变量转换成int型,为什么需要 ...

回复

ID:250416 发表于 2021-4-1 08:23
sdarling 发表于 2021-4-1 00:51
为什么uchar型的dat和500先运算,是以int型输出而不是以char型吗,是因为前边变量temp的缘故?

uchar型dat和500运算是int型,因为500是int型常量
ID:886945 发表于 2021-4-1 00:51
张天师 发表于 2021-3-31 09:11
dat为0-255,那么500*dat最大值为127500。这里存在C语言运算类型转换原则,,500*1.0就转换为float运算,其 ...

为什么uchar型的dat和500先运算,是以int型输出而不是以char型吗,是因为前边变量temp的缘故?
ID:886945 发表于 2021-4-1 00:49
liujunping11 发表于 2021-3-31 13:21
如果dat值为255,则temp11为500,远远大于255,8位无法表示,所以乱码

temp是int型,而且你这里理解是错了,不管怎么算 temp都是要大于255的,我现在有问题的是这个运算顺序,1.0放在变量dat前边还是放在dat后边相乘,两个结果是不一样的
ID:712560 发表于 2021-3-31 13:21
如果dat值为255,则temp11为500,远远大于255,8位无法表示,所以乱码

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

ID:814525 发表于 2021-3-31 09:11
dat为0-255,那么500*dat最大值为127500。这里存在C语言运算类型转换原则,,500*1.0就转换为float运算,其类型是32位,500*1.0*dat其值不会溢出;而500*dat*1.0,就先以int类型运算再以浮点运算,而int运算时,有可能已经溢出了,结果就出错。所以运算的类型及前后顺序很重要,这就是稍不注意就出错的原因

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

ID:886945 发表于 2021-3-31 04:26
我看别人的程序,这个1.0放在变量后边都没问题,编译器问题?看视屏里用的keil4,我用的keil5

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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