我正在开发压力测量装置。我使用过MSP430F133芯片和IAR嵌入式工作台。它以3个不同的单位显示压力。
我取了32个样本,然后取平均值。单位选择在P5上,根据选择的单位计算出输出值并显示在液晶屏上。
现在,单元"IN WC“显示的是输入的二进制平均值,仅供分析。
问题:在默认单位(MM,WC)中,值显示正确,但在测试情况下,当释放压力时,它会下降,LCD显示如下
+31.8
+31.7
+31.6
+31.5
+31.4
+31.3
+31.2
+31.2
+31.1
+31.5 (wrong reading randomly between *.4 to *.7)
+30.9因为你可以看到有一个错误的值正在显示,我不能找出原因。
发布于 2009-02-26 20:06:11
在下面的代码ptiveValue = value和d1 = value so d2 always is 0中,那么在你的循环中你有for (i=0;i<= 3||resi!='\0';i++),它应该是for (i=0;i<= 3&&resi!='\0';i++),所以它总是打印出缓冲区中剩下的东西,而不是你想要的东西
错误代码:
if (cntd <= 4)
{
d2 = (unsigned int) abs((ptiveValue - d1) * 10000); // get 4 digits of real part
itoa1(d2, res, &cntreal);
for (i=0; i<= 3||res[i]!='\0'; i++)
{
wr_lcd_dr(res[i]);
}
}固定代码
if (cntd <= 4)
{
// get 4 digits of real part
d2 = (unsigned int) ((ptiveValue - (unsigned int)(d1)) * 10000);
itoa1(d2, res, &cntreal);
for (i=0; (i<= 3) && (res[i]!='\0'); i++)
{
wr_lcd_dr(res[i]);
}
}您还会覆盖您的缓冲区,并可能创建奇怪的行为。
unsigned short Adcinb[32];
for (i = 0; i <= 63; i++)
Adcinb[i] = 3180;应该是
unsigned short Adcinb[32];
for (i = 0; i < 32; i++)
Adcinb[i] = 3180;发布于 2009-04-29 12:06:26
不幸的是,这两个指向源代码的链接都不起作用了。但据我所知,原因可能是这个地方预期的“正确”最后一个数字是零。我的猜测是,在计算或可视化代码中的某个地方,这个零被错误地视为停止条件,并导致在其位置显示一个随机数字。(仅向输出提供'31‘,但向显示器发送3位数字)
上面的'||'/'&&‘问题表明代码并不是非常简单,如果对其余的代码也是如此,那么错误的stop条件和固定长度的循环可能会导致这种情况。
这只是一个“胡乱猜测”(TM),但在不知道实际代码的情况下,我只能给出最好的结果。
发布于 2009-02-26 19:44:16
这看起来有点可疑,||可能应该是&&:
for (i=0; i<= 3||res[i]!='\0'; i++)但我不明白这怎么会引起你的问题。
另外,你应该清理和简化你的代码。因为它是很难阅读的。
https://stackoverflow.com/questions/592029
复制相似问题