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.

ADC10采样值为何会这样 锯齿状波动?采样的是固定电压源,电压稳定

Other Parts Discussed in Thread: MSP430G2553

#include <msp430g2553.h>
unsigned int AD_IN=0;
unsigned int AD_OUT=0;
unsigned int AD_IL=0;
unsigned int VO_SET=8000;
unsigned int VO;
unsigned int VI;
unsigned int IL;
unsigned int n=0;
unsigned int first=0;
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
void BCSplus_graceInit(void);
void delay(int del);
BCSplus_graceInit();
ADC10CTL0 = REFON+REF2_5V+ADC10SHT_2 + ADC10ON + ADC10IE; // ADC10ON, interrupt enabled
ADC10CTL1 = INCH_2+SHS_1+ADC10SSEL_2+CONSEQ_3; // input a0 A1 a2
ADC10AE0 |= 0x07; // PA.1 ADC option select
P2DIR |= 0x10;
//P1DIR|=0x40;
P2SEL|=0x10;
delay(1600);
TACTL|=TASSEL_2+MC_1;
ADC10CTL0|=ENC;
TACCR0=533;
TACCTL1=OUTMOD_7;
TACCR1=100;
TA1CTL|=TASSEL_2+MC_1;
TA1CCR0=267;
TA1CCTL2=OUTMOD_7;
TA1CCR2=156;
__enable_interrupt();
}
void delay(int del)
{
int i=0;
for(i;i<del;i++)
;
}
void BCSplus_graceInit(void)
{

BCSCTL2 = SELM_0 | DIVM_0 | DIVS_0;

if (CALBC1_16MHZ != 0xFF) {
__delay_cycles(100000);

DCOCTL = 0x00;
BCSCTL1 = CALBC1_16MHZ; /* Set DCO to 16MHz */
DCOCTL = CALDCO_16MHZ;
}
BCSCTL1 |= XT2OFF | DIVA_0;
BCSCTL3 = XT2S_0 | LFXT1S_0 | XCAP_1;
}


// ADC10 interrupt service routine
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void)
{

int qiuyu=n%3;
if(n<=29)
{
switch(qiuyu)
{
case 0:AD_OUT=AD_OUT+ADC10MEM;
break;
case 1:AD_IL=AD_IL+ADC10MEM;
break;
case 2:AD_IN=AD_IN+ADC10MEM;
break;
default:;
}
}
else
{
AD_IN=AD_IN/10;
VI=AD_IN*10+AD_IN*83/100;
AD_OUT=AD_OUT/10;
VO=AD_OUT*21+AD_OUT*74/100;
AD_IL=AD_IL/10;
IL=AD_IL;
n=0;
AD_IN=0;
AD_OUT=0;
AD_IL=0;
if(VO>=VO_SET)
TA1CCR2=5;

}
n++;
//first++;
//if(first==60000)
//{
// first=0;
// P1OUT^=0x40;
//}

}