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.

求专家帮忙M430的ADC程序,万分感谢

1.我用的是M430F149学习板

2.我用的是IAR编译环境,MSPFET烧录软件

我自己写了好久,就是写不成功,网上也找过例程了,实在是不会了,希望各位能出手帮帮我。

这是我写的ADC程序,我想用外部基准电压,因为我觉得内部2.5V的电压不够。
就这个程序一直不成功,希望各位好心人指点迷津,再次感谢
void main(void)
{
  WDTCTL = WDTPW+WDTHOLD;                   // Stop watchdog timer
  Clock_Init();
  P6SEL |= 0x01;                            // Enable A/D channel A0
  ADC12CTL0 = ADC12ON+SHT0_2;               // Turn on ADC12, set sampling time
  ADC12CTL1 = SHS_0+ADC12SSEL_3 +SHP;                          // Use sampling timer
  ADC12MCTL0 = SREF_2;                      // Vr+ = VeREF+ (external)
  ADC12IE|= 0x01;
  Flag=1;                             //标志位先置1
  _EINT();
  while (1)
  {
  
    if(Flag==1)
    {
      ADC12CTL0 |=ENC+ADC12SC;                   // Start conversion
      Flag=0;
    }
  }
}
//*************************************************************************
// ADC中断服务程序
//*************************************************************************
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR(void)
{
  while((ADC12CTL1&0x01)==1);           //如果ADC忙,则等待,否则读取ADC转换数值
  temp=ADC12MEM0/8.19;
 
  Flag = 1 ;
}
求大家帮忙,谢谢
  • 内部基准源一般使用时精度足够了。

    注意检查拼写,ADC12MCTL0好像没有字符M

     

  • 不是精度,是基准啊,内部基准电压是2.5V,这样测不了更高的啊。还有ADC12MCTL0是存储寄存器,谢谢

  • 试试下面的code。再检查写Veref+的电路连接是不是正确

    int main(void)
    {
    WDTCTL = WDTPW+WDTHOLD; // Stop watchdog timer
    P6SEL |= 0x01; // Enable A/D channel A0
    ADC12CTL0 = ADC12ON+SHT0_2; // Turn on ADC12, set sampling time
    ADC12CTL1 = SHP; // Use sampling timer
    ADC12MCTL0 = SREF_2; // Vr+ = VeREF+ (external)
    ADC12CTL0 |= ENC; // Enable conversions

    while (1)
    {
    ADC12CTL0 |= ADC12SC; // Start conversion
    while ((ADC12IFG & BIT0)==0);
    __no_operation(); // SET BREAKPOINT HERE
    }
    }