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.

SD16 使用出现问题

使用MSP430FE4252做了一个段式液晶的温度控制器,使用SD16的时候,单步运行出来的结果不对,信号输入短接时测得的数据在65314-65534 之间跳动,不短接的时候也是如此。

volatile unsigned int i; // Use volatile to prevent removal
// by compiler optimization
int Vol;
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
FLL_CTL0 |= XCAP14PF; // Configure load caps
for (i = 0; i < 10000; i++); // Delay for 32 kHz crystal to
// stabilize

SD16CTL = SD16REFON+SD16SSEL0; // 1.2V ref, SMCLK
/*
SD16CCTL0 |= SD16OSR_256+SD16SNGL+SD16IE; // Single conv, enable interrupt
//////////

SD16INCTL0 = SD16INCH_7;
SD16CCTL0 |= SD16SC;
while(!(SD16INCTL0&SD16IFG ));
offset=SD16MEM0;//得到偏移量
//////////

SD16CCTL0 |= SD16OSR_256+SD16SNGL+SD16IE; // Single conv, enable interrupt
SD16INCTL0 |= SD16INCH_0; // Select Channel A0
*/
/////////////
SD16CCTL1 |= SD16OSR_256+SD16SNGL+SD16IE; // Single conv, enable interrupt
SD16INCTL1 |= SD16INCH_0 + SD16INTDLY_1; // Select Channel A1



for (i = 0; i < 0x3600; i++); // Delay for 1.2V ref startup

// LCD_Init(); //LCD初始化

LCDCTL = LCD4MUX + LCDP0 + LCDON; //4位数码管 S0-S15 LCD 打开
BTCTL = BTFRFQ1; // STK LCD freq = ACLK/128
for( i = 0; i < 20; i ++)
{
LCD_Display[i] = 0; // Clear LCD
;
}


_EINT(); // Enable general interrupts

while (1)
{
SD16CCTL1 |= SD16SC;
_BIS_SR(LPM0_bits); // Enter LPM0

Vol=((ADC_Result_1-32767) * 60 * 10)/65536;//校正零点,
Dis_Play(0X67,Vol,0X67) ;
}
}

#pragma vector=SD16_VECTOR
__interrupt void SD16ISR(void)
{
switch (SD16IV)
{
case 2: // SD16MEM Overflow
break;
case 4: // SD16MEM0 IFG
ADC_Result_0 = SD16MEM0-54; // Save results (clears IFG)
case 6: // SD16MEM0 IFG
ADC_Result_1 = SD16MEM1-54; // Save results (clears IFG)

break;
}
_BIC_SR_IRQ(LPM0_bits); // Exit LPM0
}