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

2019-07-15 16:34发布

[size=13.3333330154419px]1.我用的是M430F149学习板[size=13.3333330154419px]2.我用的是IAR编译环境,MSPFET烧录软件
[size=13.3333330154419px]我自己写了好久,就是写不成功,网上也找过例程了,实在是不会了,希望各位能出手帮帮我。[size=13.3333330154419px]这是我写的ADC程序,我想用外部基准电压,因为我觉得内部2.5V的电压不够。


[size=13.3333330154419px]就这个程序一直不成功,希望各位好心人指点迷津,再次感谢
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 ;


}
求大家帮忙,谢谢



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
hatemax115
2019-07-16 03:04
程序很菜呀。发生中断就是转换完成,所以不要在中断里写while。全局一个变量static conv_res,将转换结果传结它。全局另外一个你需要的处理结果static data_INeed, 将转换结果运算存放在处理结果上。 处理函数放在你写的 while(1){}的里面。中断函数要求越简越好。XX_ISR{ static uint16 conv_res = ADC12MEM0 ;  Flag = 1; };

一周热门 更多>