帮忙看看KEIL C51中,这个变量的数据类型到底是怎么回事了...

2020-01-27 11:25发布

本帖最后由 lf8013 于 2013-8-16 17:17 编辑

首先不好意思一下,看了本版这么多主题都是来放什么资料,什么代码的出来,我却是来找人帮忙的》》》》》。。。

下面这个函数是把ADC转换的数值换算成我需要的数据,函数中声明了一个32位的整数变量 tmp ,但是不管是烧写代码时间运行,还是软件仿真,都表明这个tmp其实是16位的整数,看下面注释

void adc_convert(void)
{
        unsigned long tmp;

        tmp=vcc*adc_value1;  //vcc是电源电源,adc_value1是通道CH0 的转换值,虽然tmp声明的是32位变量,但是只要两个数相乘的值大于65535则tmp中的值只是低16位中的数
                                                                   //正确的应该是两个数的乘积呀,不明白到底是怎么回事???
        in_data=(tmp*1248)/256000;         //只要tmp的值不大于65535,这个结果就是正确的,大于65535就不对了

        a=vcc*adc_value2;   //这里和上面相同
        out_data=(a*10)/2560;   //adc1,输出端的电压
               
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
i_kkyu
1楼-- · 2020-01-27 13:18
tmp=(unsigned long)vcc*(unsigned long)adc_value1;
lf8013
2楼-- · 2020-01-27 15:16
i_kkyu 发表于 2013-8-16 17:19
tmp=(unsigned long)vcc*(unsigned long)adc_value1;

谢谢,可以了
lf8013
3楼-- · 2020-01-27 16:11
只是不明白为什么要把那两个数强制转换为32为数据
Maurice
4楼-- · 2020-01-27 19:39
keil中的语法有时很不严格
lf8013
5楼-- · 2020-01-27 22:11
 精彩回答 2  元偷偷看……

一周热门 更多>