This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

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

Other Parts Discussed in Thread: MSP430G2231

请教!

程序一如下:

//环境: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的类型不同,程序一结果正确,但是程序二的结果是错误的,是什么原因呢?