我在定时器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 编辑 ]
此帖出自
小平头技术问答
一周热门 更多>