MSP430技术william hill官网
直播中

xiaopeng666666

9年用户 19经验值
私信 关注
[问答]

【求助】MP430F6638芯片,用ADC,单步执行好使但运行不好使

ADC单通道一次采样。
      void ADC_Init()

    P6SEL |= BIT6;                  //选择A6采样通道P6.6

        REFCTL0 &= ~REFMSTR;                        //复位REFMSTR控制位ADC12参考电压控制寄存器
        ADC12CTL1 = ADC12SHP+ADC12CSTARTADD_6+ADC12CONSEQ_0 ;
        //MCLK 采样信号的来源是来自采样定时器   转换存储器选择ADC12MEM6   单通道单次转换
        ADC12MCTL6 = ADC12INCH_6+ADC12SREF_0;//选择模拟输入通道A6   参考电压源Vr+=AVCC,Vr-=AVSS
        ADC12CTL0 = ADC12ON+ADC12SHT0_15;                        //打开ADC12,


        ADC12IE = ADC12IE6;                 // 使能ADC12IFG.6中断
        ADC12CTL0 |= ADC12ENC;          // 使能AD转换


void ADC_Start()
{
        ADC12CTL0 |= ADC12SC;           //启动AD转换
}


#pragma vector=ADC12_VECTOR
__interrupt void ADC12ISR (void)
{

          switch(__even_in_range(ADC12IV,34))
          {
          case  0: break;                                  // Vector  0:  无中断
          case  2: break;                                  // Vector  2:  ADC溢出中断
          case  4: break;                                // Vector  4:  ADC转换时间溢出中断
          case  6: break;                                 // Vector  6:  ADC12IFG0
          case  8: break;                                 // Vector  8:  ADC12IFG1
          case 10: break;                           // Vector 10:  ADC12IFG2
          case 12: break;                           // Vector 12:  ADC12IFG3
          case 14: break;                           // Vector 14:  ADC12IFG4
          case 16: break;                                                         // Vector 16:  ADC12IFG5
          case 18:                           // Vector 18:  ADC12IFG6




  else if (ADC12MEM6 <=20)                         
m=1;


                  else if (ADC12MEM6 <=20)




                          m=2;


                  else if (ADC12MEM6 <= 30)


                          m=3;


                  else if (ADC12MEM6 <=50 )


                          m=4;



                  else if (ADC12MEM6 <= 70)


                          m=5;


                  else if (ADC12MEM6 <=80 )


                          m=6;


                  else if (ADC12MEM6 <= 90)


                          m=7;


                  else


                          m=8;


          case 20: break;                           // Vector 20:  ADC12IFG7
          case 22: break;                           // Vector 22:  ADC12IFG8
          case 24: break;                           // Vector 24:  ADC12IFG9
          case 26: break;                           // Vector 26:  ADC12IFG10
          case 28: break;                           // Vector 28:  ADC12IFG11
          case 30: break;                           // Vector 30:  ADC12IFG12
          case 32: break;                           // Vector 32:  ADC12IFG13
          case 34: break;                                 // Vector 34:  ADC12IFG14
          default: break;

          }
}


下面这个是采样点灯
while(1)
                 {
                         ADC_Init();
                         ADC_Start();
                     __bis_SR_register(GIE);
                         if (m == 1 )
                          {
                                 P1OUT |= (BIT1+BIT2+BIT3+BIT4+BIT5+BIT6+BIT7);
                             P1OUT &= ~(BIT0);//LED低电平点亮
                          }
                         else if (m == 2 )
                          {
                                  P1OUT |= (BIT2+BIT3+BIT4+BIT5+BIT6+BIT7);
                                  P1OUT &= ~(BIT0+BIT1);//LED低电平点亮
                          }
                         else if (m == 3 )
                          {
                            P1OUT |= (BIT3+BIT4+BIT5+BIT6+BIT7);
                        P1OUT &= ~(BIT0+BIT1+BIT2);//LED低电平点亮
                          }
                         else if (m == 4 )
                          {
                              P1OUT |= (BIT4+BIT5+BIT6+BIT7);
                                    P1OUT &= ~(BIT0+BIT1+BIT2+BIT3);//LED低电平点亮
                          }
                         else if (m == 5 )
                          {
                                  P1OUT |= (BIT5+BIT6+BIT7);
                                          P1OUT&= ~(BIT0+BIT1+BIT2+BIT3+BIT4);        //LED低电平点亮
                          }
                         else if (m == 6 )
                            {
                           P1OUT |= (BIT6+BIT7);
                             P1OUT&=~(BIT0+BIT1+BIT2+BIT3+BIT4+BIT5);         //LED低电平点亮
                            }
                         else if (m == 7 )
                            {
                           P1OUT |= (BIT7);
                             P1OUT&=~(BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT6); //LED低电平点亮
                            }
                         else if (m == 8 )
                          {
                                  P1OUT &= ~(BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT6+BIT7);//LED低电平点亮
                           }
                 }



求助啊各位大神

回帖(2)

xiaopeng666666

2015-12-4 21:25:26
给自己顶一下吧。求助求助求助
举报

xiaopeng666666

2015-12-5 16:54:25
引用: xiaopeng666666 发表于 2015-12-4 21:25
给自己顶一下吧。求助求助求助

昨晚上解决了这个问题,我在初始化ADC时候,把ADC_Init这个函数放到了while(1)中。
注意,初始化ADC时候只需要初始化一次即可。除非要换ADC采样方式,否则就不用重新初始化
举报

更多回帖

发帖
×
20
完善资料,
赚取积分