|
MSP430G2553单通道重复测温度的程序温度显示一直都为0
[复制链接]
本程序用的是软件触发内部测温通道,问题应该在中断程序中,请大家帮忙看看
整个程序太多,所以这里省去了显示程序,有关的部分程序如下:
#define num 5
long IntDeg;
static unsigned long results[num]={0};
void main()
{
WDTCTL=WDTPW+WDTHOLD;
ADC10_graceInit();
LCD_Init();
while(1)
{
ADC10CTL0 |= ENC + ADC10SC;
LCD_Display();
}
}
void ADC10_graceInit(void)
{
/* USER CODE START (section: ADC10_graceInit_prologue) */
/* User initialization code */
/* USER CODE END (section: ADC10_graceInit_prologue) */
/* disable ADC10 during initialization */
ADC10CTL0 &= ~ENC;
/*
* Control Register 0
*
* ~ADC10SC -- No conversion
* ~ENC -- Disable ADC
* ~ADC10IFG -- Clear ADC interrupt flag
* ~ADC10IE -- Disable ADC interrupt
* ADC10ON -- Switch On ADC10
* REFON -- Enable ADC reference generator
* REF2_5V -- Set reference voltage generator = 2.5V
* ~MSC -- Disable multiple sample and conversion
* ~REFBURST -- Reference buffer on continuously
* ~REFOUT -- Reference output off
* ~ADC10SR -- Reference buffer supports up to ~200 ksps
* ADC10SHT_3 -- 64 x ADC10CLKs
* SREF_5 -- VR+ = VREF+ and VR- = VREF-/ VeREF-
*
* Note: ~ indicates that has value zero
*/
ADC10CTL0 = ADC10ON | REFON | REF2_5V | ADC10SHT_3 | SREF_5;
/*
* Control Register 1
*
* ~ADC10BUSY -- No operation is active
* CONSEQ_2 -- Repeat single channel
* ADC10SSEL_0 -- ADC10OSC
* ADC10DIV_3 -- Divide by 4
* ~ISSH -- Input signal not inverted
* ~ADC10DF -- ADC10 Data Format as binary
* SHS_0 -- ADC10SC
* INCH_10 -- Temperature Sensor
*
* Note: ~ indicates that has value zero
*/
ADC10CTL1 = CONSEQ_2 | ADC10SSEL_0 | ADC10DIV_3 | SHS_0 | INCH_10;
/* Software delay for REFON to settle */
__delay_cycles(30000);
/* enable ADC10 */
ADC10CTL0 |= ENC;
/* USER CODE START (section: ADC10_graceInit_epilogue) */
/* User code */
/* USER CODE END (section: ADC10_graceInit_epilogue) */
}
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void)
{ __delay_cycles(1000);
static unsigned char index=0;
results[index++]=ADC10MEM;
if(index==num)
{ unsigned char i;
unsigned long sum=0;
index=0;
ADC10CTL0 &= ~ENC;
for(i=1;i<=num;i++)
{
sum=sum+results[i];
}
sum=sum/num;
IntDeg= (sum*7042/1024 - 2777)*10; //IntDeg用于显示程序中去
}
}
|
|