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.

430F169AD采样工作有间断期



主要程序如下

#include <msp430x16x.h>

#define   Num_of_Results   8

 uint ADC_BUF0[Num_of_Results];

 uint ADC_BUF1[Num_of_Results];

uint sumI;            //定义电流采样均值

 uint sumV;            //定义电压采样均值

//***************************主程序*****************************************

 void main(void) {   WDTCTL = WDTPW + WDTHOLD;     // 停止看门狗   I

nit_CLK();                  // 时钟初始化    Init_Port();                  //  端口初始化  

 Init_ADC();                 //采样初始化

  _EINT();                     // 开总中断   

 while(1)                      

 {        

if(sumI>600)           

 P4OUT=0x00;     

else     

 {          

 P4OUT=0xFF;   

   }

 }
#pragma vector=ADC_VECTOR

 __interrupt void ADC12ISR (void)

 {    

 static uchar index = 0;                                   

  static uchar index2 = 0;    

 ADC12CTL0 &= ~ENC;                       // 关闭转换                   

 ADC_BUF0[index++] = ADC12MEM0;            // 读出转换结果    

 ADC_BUF1[index2++] = ADC12MEM1;              

if(index == Num_of_Results)  

   {                     

 uchar i;                                                         

 sumI=0;                

sumV=0;         

 for(i=0;i < Num_of_Results;i++)          

  {            

 sumV += ADC_BUF0;          

 sumI  += ADC_BUF1;        

 }

sumV >>=3; // 求平均值         

  sumI  >>=3;                                                    

 index = 0;index2 = 0;   

 }                 

 ADC12CTL0 |= ENC + ADC12SC;           // 开启转换 

  }

//**********************采样初始化程序***************************************

 void Init_ADC(void)

 {    

 P6SEL |= 0x03;                            // 使能ADC通道     

 ADC12MCTL0 = INCH_0 + SREF_2;         //设置参考电压分别为VeREF和AVCC,输入通道为A0    

  ADC12MCTL1 = INCH_1 + SREF_2 + EOS;   //设置参考电压分别为VeREF和AVCC,输入通道为A1       

  ADC12CTL0 = ADC12ON+SHT0_2+MSC;          // 打开ADC,设置采样时间    

ADC12CTL1 = SHP+CONSEQ_1;                 // 使用采样定时器   

  ADC12IE = 0x01;                           // 使能ADC中断    

 ADC12CTL0 |= ENC;                         // 使能转换    

ADC12CTL0 |= ADC12SC;                     // 开始转换

}

//**********************时钟初始化程序*************************************** 

 void Init_CLK(void)

{    

 unsigned char i; 

    BCSCTL1 &= ~XT2OFF;   

   do        

 {        

  IFG1 &= ~OFIFG; 

                         for(i = 0xff; i > 0; i--);                     

           }    

while ((IFG1 & OFIFG));         

   BCSCTL2 |= (SELM_2 + SELS);   

  return;

}

采样过程中,大概完成8次采样循环计算后,总是有1ms左右时间的间隔期,不知道这段时间用在哪里了。请大家看看是不是程序设置里那里出错了。