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条回答
dirtwillfly
1楼-- · 2019-07-31 16:46
你用的哪个芯片?具体型号是什么?
chenyu988
2楼-- · 2019-07-31 20:41
应该跟index的逻辑有关系,代码太乱了。
ar_m_cu
3楼-- · 2019-07-31 22:05
你ADC初始化代码呢,发出来看看。另外你主循环里面,使能采样后马上又清零采样标志,这是什么意思?这样用可以吗?
王七七
4楼-- · 2019-08-01 01:07
 精彩回答 2  元偷偷看……
angerbird
5楼-- · 2019-08-01 02:06
这个是需要再次用软件上重新启动AD的数据采集的吧
comeon201208
6楼-- · 2019-08-01 07:28
下点功夫的检查下程序代码的吧。。

一周热门 更多>