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.

关于MSP430的AD转换

Other Parts Discussed in Thread: MSP430F5529

我用的是5529,AD转换设置如下:

ADC12CTL0 = ADC12SHT02 + ADC12ON + ADC12REFON; // Sampling time, ADC12 on
ADC12CTL1 = ADC12SHP; // Use sampling timer
ADC12MCTL0 = ADC12INCH_0; // Use A0 (power voltage) as input
ADC12CTL0 |= ADC12ENC; // Enable conversions
ADC_PORT_SEL |= ADC_INPUT_A0; // P6.0 ADC option select (A0)

adc_completed = 0;
ADC12IE = 0x01; // Enable interrupt
ADC12CTL0 |= ADC12SC; // Start sampling/conversion
for(;;){if(adc_completed == 1)break;}   /*在中断取AD结果*/
ADC12IE = 0x00; // Disable interrupt

问题是:我变化A0上的输入电压,从1.0到1.5的变化,为什么AD结果不变?

谢谢!

  • 为什么不发到MSP430板块呢?

    给你发个参考。

    #include<msp430f5529.h>
    void sysInit()
    {
    ADC12CTL0 = ADC12SHT02+ADC12REFON + ADC12ON; // Sampling time, ADC12 on
    ADC12CTL1 = ADC12SHP; // Use sampling timer
    ADC12IE = 0X001;
    ADC12MCTL0=ADC12SREF_1+ADC12INCH_7;// Enable interrupt
    __delay_cycles(75);
    ADC12CTL0 |= ADC12ENC+ADC12EOS;
    P6SEL |= BIT7; // P6.0 ADC option select
    P8DIR |= BIT1;
    P8OUT &=~BIT1;

    }
    void main(void)
    {
    WDTCTL = WDTPW + WDTHOLD; // Stop WDT
    REFCTL0 &= ~REFMSTR;
    sysInit();
    while(1)
    {
    ADC12CTL0 |= ADC12SC;
    __bis_SR_register(LPM0_bits + GIE);
    //__no_operation();
    }
    }
    #pragma vector = ADC12_VECTOR
    __interrupt void ADC12_ISR(void)
    {
    switch(__even_in_range(ADC12IV,34))
    {
    case 0:break;
    case 2:break;
    case 4:break;
    case 6:
    if(ADC12MEM0 >= 0x7FF)
    P8OUT |= BIT1;
    else
    P8OUT &=~BIT1;
    __bic_SR_register_on_exit(LPM0_bits);
    break;
    //case 8:break;
    default:break;
    }

    }