TI中文支持网
TI专业的中文技术问题搜集分享网站

在运算中结果是char类型为正确,而结果定义为int错误了,是什么原因?

请教!

程序一如下:

//环境:IAR5.6、launchpad ,,MCU:MSP430G2231,系统时钟:VLO
//功能:读取MCU内部温度传感器,并且温度值用十进制表示。

#include "msp430g2231.h"

char ADC10_TEMP( )

{ char T;
ADC10CTL0 = SREF_1 + REFON + ADC10SR + ADC10ON;
ADC10CTL1 = INCH_10 + ADC10SSEL_1 + CONSEQ_0;
ADC10CTL0 |= ENC + ADC10SC;
while( ADC10CTL1&ADC10BUSY );
ADC10CTL0 &= ~ADC10IFG;
//T = 1500mV*TEMP/1024/3.55 – 986/3.55
T = ADC10MEM*423/1024 – 278;
return( T );

}

 char T;

main()
{ WDTCTL = WDTPW + WDTHOLD;

BCSCTL3 = LFXT1S_2;
while( IFG1&OFIFG ){ IFG1 &= ~OFIFG; }
BCSCTL2 = SELM_3 + DIVM_0;
while(1)
{ T = ADC10_TEMP(); LPM3; }
}

程序二如下:

//环境:IAR5.6、launchpad ,,MCU:MSP430G2231,系统时钟:VLO
//功能:读取MCU内部温度传感器,并且温度值用十进制表示。

#include "msp430g2231.h"
int ADC10_temp()
{
int T;
ADC10CTL0 = SREF_1 + REFON + ADC10SR + ADC10ON;
ADC10CTL1 = INCH_10 + ADC10SSEL_1 + CONSEQ_0;
ADC10CTL0 |= ENC + ADC10SC;
while( ADC10CTL1& ADC10BUSY );
ADC10CTL0 &= ~ADC10IFG;
T = ADC10MEM*423/1024 – 278; return(T);}

int T;
main()
{ WDTCTL = WDTPW + WDTHOLD;
//系统时钟选VLO
BCSCTL3 = LFXT1S_2;
while( IFG1 & OFIFG ){ IFG1 &= ~OFIFG; }
BCSCTL2 = SELM_3 + DIVM_0;
T = ADC10_temp(); while(1);

}

以上程序一和程序二是基本是一样的,就是T的类型不同,程序一结果正确,但是程序二的结果是错误的,是什么原因呢?

 

Bruce Wei:

楼主你好!

T = (int)(ADC10MEM*423/1024 – 278); 这个和第一个程序不一样,楼主可以自己调试下找下原因。

user1223687:

回复 Bruce Wei:

我调试过了,把“T = (int)(ADC10MEM*423/1024 – 278);”改成一样的话,程序二的结果还是有错。

kooking:

能想到的就是char表示int时越界了

Ken Wang:

回复 user1223687:

Hi Xunke,

   方便的话,能不能在线调试的时候设个断点,看下寄存器ADC10MEM的具体数字是多少?然后再具体计算一下,ADC10MEM*423/1024-278的结果是多少?

另外还有一个小建议,如果是做除法运算的话,还是建议使用向右移位的语句会来得计算效率和速度更好一些。即:T= (ADC10MEM * 423)<< 10;

 

 

谢谢

ken

user1223687:

回复 Ken Wang:

你好

“(ADC10MEM * 423)<< 10” 有误吧,应该是((ADC10MEM * 423)>>10 ) – 278;

Ken Wang:

回复 user1223687:

Hi xunke,

不好意思,是我打错了。给你造成误解了。

谢谢

ken

user1223687:

回复 Ken Wang:

没事,人非圣贤!

我调试了,程序一和程序二的ADC10MEM都一样的、都是正确的,就是T的类型不一样,T的结果就不一样。

user1223687:

回复 Ken Wang:

是不是IAR  C不支持int运算?

zc:

建议先把全局变量T和局部变量T 改为不同的变量名!再debug看一下

user1223687:

回复 zc:

改成不同名,结果还是不对,只要是int 型的,结果就不对了、结果就是 FFxx、高8位是错的、低8位是对了。

赞(0)
未经允许不得转载:TI中文支持网 » 在运算中结果是char类型为正确,而结果定义为int错误了,是什么原因?
分享到: 更多 (0)