我在定时器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 编辑 ]
|