请教带小数点的数值串口显示的奇怪问题!!

2020-01-25 15:26发布

本帖最后由 flashzgg 于 2013-12-19 10:37 编辑

........
int16 temp;
float value;
........
temp = adc();
value = temp * 0.00061;

pTxData[0]= (uint8)(tvalue/10)+48;
pTxData[1]= '.';
pTxData[2]= (uint8)(tvalue*10)%10+48;
pTxData[3]= (uint8)(tvalue*100)%10+48;
pTxData[4]= (uint8)(tvalue*1000)%10+48;
.........
上面的程序显示到串口助手为什么是0.000
实际上temp是几百的整数。
是哪里有错吗?用的IAR for 8051,芯片是CC2530增强型的8051
====================
......
int16 temp;
int32 value;

temp = adc();
value = temp * 61;
              
pTxData[0]= (uint8)(value/100000)+48;
pTxData[1]= '.';
pTxData[2]= (uint8)((value%100000)/10000)+48;
pTxData[3]= (uint8)((value%10000)/1000)+48;
pTxData[4]= (uint8)((value%1000)/100)+48;
...
如果改成这样显示到串口助手都是/.///
=====================

以上两种方式测试如果把temp直接随便赋值比如;temp = 0x0185;串口显示是正确的0.237,但是这个ADC()返回的值就是0x0185,写成temp = adc();就是不行,这是什么问题呢??
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
flashzgg
1楼-- · 2020-01-26 01:55
直接发十六进制给上位机再转了,没问题了
lcw_swust
2楼-- · 2020-01-26 02:23
flashzgg 发表于 2013-12-20 14:02
直接发十六进制给上位机再转了,没问题了

如果以后遇到相同的问题怎么办?
楼主可以把每一步计算的结果都发到串口上,看究竟哪一步出的错。
duqinglin
3楼-- · 2020-01-26 03:16
 精彩回答 2  元偷偷看……

一周热门 更多>