msp430电压有效值测量

2019-07-31 16:42发布

敢问各位大侠们我的程序为什么只能采样一个值就不能进入中断了?
///*************************************************************************
//        ADC中断服务程序
//*************************************************************************
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR(void)
{
  while((ADC12CTL1&0x01)==1);           //如果ADC忙,则等待,否则读取ADC转换数值
  Flag = 1 ;
  TEMP= ADC12MEM0;                     //读取ADC转换值
  results[index]=TEMP;
  index++;
}






int main( void )
{
  float squ;
  int  value;
WDT_Init();                        //看门狗设置
  Clock_Init();                      //系统时钟设置
  ADC_Init();                         //初始化ADC配置
  delay_ms(100);                      //延时100ms
  Port_Init();                       //系统初始化,设置IO口属性
  LED_Light();                       //LED点亮一次,如有现象,说明单片机初始化成功   
  Device_code=0x9320;                //TFT控制IC型号
  TFT_Initial();                     //初始化LCD       
  
  
  
  
  
   CLR_Screen(Black);               //用背景 {MOD}清屏                                 
   
  LCD_PutString(0,0,"The effective value : ",White,Black);  //


  _EINT();                            //使能中断
  Flag=1;                             //标志位先置1
  while(1)
  {  
   if(index<6)
    {
    while(Flag==1)
    {
        ADC12CTL0 |= ADC12SC;           //开启转换
        ADC12CTL0 &= ~ADC12SC;          //清零
        Flag=0;                         //清零标志位            
    }
    }
   else
   {
     float sum=0;
      for(int i=0;i<num;i++)
  {
  results[i]= results[i]*2.5/4095;
   squ=fabs(results[i]);
   squ=squ*squ;
   sum+=squ;
  }
  squ=sum/num;
  squ=sqrt(squ);
  value=(int)(squ*1000);
  
  
  uint temp_1,temp_2;
  A1=value/1000;                       //分出千,百,十,和个位
   temp_1=value%1000;
  A2=temp_1/100;
  temp_2=temp_1%100;
  A3=temp_2/10;
  A4=temp_2%10;
   
uchar j;
  uchar key;
   // key=Key_Scan();
  
  if(key==1)
   {  
    for(j=0;j<30;j++)
    {
       LCD_DisplayADC0();                    //显示ADC的电压值
    }
   }
   else if(key==2)
   {  
    for(j=0;j<30;j++)
    {
       LCD_DisplayADC1();                    //显示ADC的电压值
    }
   }
  else
     for(j=0;j<3;j++)
    {
       LCD_DisplayADC();                    //显示ADC的电压值
  }
   
index=0;
   }  
  }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
ar_m_cu
2019-07-31 22:05
你ADC初始化代码呢,发出来看看。另外你主循环里面,使能采样后马上又清零采样标志,这是什么意思?这样用可以吗?

一周热门 更多>