帮忙看看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,输出端的电压
               
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。