gpt4 book ai didi

C 方程返回的值与我的计算值不同

转载 作者:行者123 更新时间:2023-12-04 09:11:23 25 4
gpt4 key购买 nike

我用这个方程求解温度传感器的温度。

变量是:

unsigned char AD_DATA; values is usually 100- 110;
int TEMP;

原方程:

TEMP = 50 - (AD_DATA * 175) / 1000;

我将其更改为:

TEMP = 500 - (AD_DATA * 1750) / 1000;

因为TEMP是整数,所以第一个等式在计算出有小数的时候会自动四舍五入,所以我改成小数也包含在数字里。

我不使用 float 的原因是因为在我使用的 MCU 中,每当我在 ISR(中断服务例程)中声明一个 float 变量时,它都会返回一个错误,因此我需要创造性地只使用 INT, double 也会返回错误。

Now using an AD_DATA value of 100

第一个等式的结果是:32.5,但由于它是一个整数,所以现在是 33。

第二个等式应该输出 325,但在我的输出中是 521

我需要在我的显示中包含小数,因此将其包含在等式中非常重要。

我的 ISR 程序:

__interrupt void ADC_int(void){
IO_ADCSH.bit.INT = 0;
AD_DATA = IO_ADCRLH.DATA8;
TEMP = 500 - (AD_DATA * 1750) / 1000;
}

单片机规范

int 2bytes
long 4bytes
unsigned char 1byte

最佳答案

作为快速破解,您可以将 (AD_DATA * 1750)/1000 替换为 (AD_DATA * 7)/4

如需更多想法,请阅读下文。


注意通过改变

TEMP = 50 - (AD_DATA * 175) / 1000;

TEMP = 500 - (AD_DATA * 1750) / 1000;

您更改了 TEMP 变量的含义。假设它的意思是“温度”(并不重要),它的意思是“以度为单位的温度”,现在它的意思是“以 1/10 度为单位的温度”。但是,为什么要乘以 10?只是为了方便,我猜 - 你没有义务为你的单位使用 10 的幂。您可以使用任何其他数字,只要您记得它是什么,并相应地处理结果 TEMP(例如,打印出来时将其除以 10)。因此,最好使用的数字是 40:它消除了除法(或者更确切地说,将它推迟到后面的代码行),从而避免了精度损失。

TEMP_MULTIPLIED_BY_40 = 2000 - AD_DATA * 7;

关于C 方程返回的值与我的计算值不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29332984/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com