[求助] stm8s 在中断里采集AD问题

eeacc   2011-10-12 11:01 楼主

我在定时器1中断里用定时器4来计时,在定时器4中断中采集一次AD 通道6,当程序跑到定时器1中断中时再采一次AD 通道5,这时程序就会卡死在while(!EOC);一直在等待转换完成,这是什么样的情况,请大虾帮忙看看啊

 

//定时器1中断子程序


@far @interrupt void interrupt_AD(void)
{
 
 uchar i;
 PEO5=1; 
 UIF=0;    //中断标志清零  
 i=TIM1_CCR1L;    //取得当前占空比的值 
 if(i)
 {
  if(i<28)
  {
///* 
   ADC_CSR=0X06;   //选择ADC6通道,采集电流值
   ADON=1;     //开始转换
   while(!EOC);  //等待采样结束
   AD_E=ADC_DRH;  //取得电流AD值
   EOC=0;     //转换完成标志清零   
//*/
  }
  else
  {
   i>>=1;       //取一半的值
   if(i>15)
   {
    TIM4_CNTR=(270-i); //将值赋予计数器4
   }
   else
   {
    TIM4_CNTR=255;
   }
   CEN4=1;       //开始计数
  }
 }
 
 if(AD_T_TEMP>TIM1_CCR1L)  //判断转把值的大小进行渐进赋值
 {
  TIM1_CCR1L++;
  TIM1_CCR2L++;
  TIM1_CCR3L++;
 }
 if(AD_T_TEMP<TIM1_CCR1L)
 {
  TIM1_CCR1L--;
  TIM1_CCR2L--;
  TIM1_CCR3L--;
 }
 
 
 F1++;
 if(F1==10)  //若采集十次电流值后采集转把值
 {
  F1=0;
  ADC_CSR=0X05;   //选择ADC5通道,采集转把值
  ADON=1;     //开始转换
  while(!EOC);  //等待转换结束          (程序就停在这)
  AD_T=ADC_DRH;  //取得转把AD值
  EOC=0;     //转换完成标志清零
 }
 
 PEO5=0; 
 return;
}

//定时器4中断采集电流子程序


@far @interrupt void interrupt_T4(void)
{
 UIF4=0;    //清中断标志位 
 PEO6=~PEO6;
///* 
 ADC_CSR=0X06;   //选择ADC6通道,采集电流值
 ADON=1;     //开始转换
 while(!EOC);  //等待采样结束
 AD_E=ADC_DRH;  //取得电流AD值
 EOC=0;     //转换完成标志清零
//*/
 CEN4=0;    //关闭定时器
 return;
}

[ 本帖最后由 eeacc 于 2011-10-12 11:03 编辑 ]

回复评论 (1)

已经解决了,原来在采通道5的时候进入定时器4中断,返回时就会一直在while循环语句中,无法采集自然标志位无法置1
点赞  2011-10-12 11:45
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复