这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 合作大赛 » 关于ADC的使用中的疑惑!!!

共2条 1/1 1 跳转至

关于ADC的使用中的疑惑!!!

助工
2010-01-29 19:52:16     打赏

我现在做的东西需要液晶显示。在程序中没有加入ADC中断时,液晶正常显示,一旦加上ADC中断就不能显示了!!我不知道是怎么回事!!请高手指教!!
高手赐教,万分感谢!!!!


ADC初始化配置程序如下:
//-------------------------------------------------------------------------
                                      //ADC初始化程序
//-------------------------------------------------------------------------

void ADC_int()
{
EAD=0;;        //禁止ADC中断 EAD=0
 ADCON=0x80;     // 开启所有模拟电路 
 ADMR=0x82;    // 11.0592MHz/2560/2=10.8KHz  通道2
 ENDATA=0x80;        // 使能内部ref和禁止ADC转换和LVR检测
 EAD=1;                  //允许ADC中断
}


其中采集函数:

//-------------------------------------------------------------------------
                                     //ADC采样程序,返回采样值
//-------------------------------------------------------------------------
uint ad_sample()
{
 uchar i;
 uint sum=0,adc_data,max_data,min_data,temp;
 ADMR=0x82;                 // 11.0592MHz/2560/2=10.8KHz  通道2
 ENDATA=0xC0;            // 使能内部ref和开启ADC转换
 ADRES=ADRESH|ADRESL;
 ADRES>>=6;       //ADRES是自己定义的变量
 for(i=0;i<AD_CNT;i++)   //采样10次,并取出10次中的最大值和最小值
 {
  if(i==0)             //如果是第一次采样
  {
   max_data=(0x3FF&ADRES);//将第一次采样的值赋给最大值变量max_data
  }
  else if(i==1)//如果是第二次采样
  {
   temp=(0x3FF&ADRES);//获取第二次采样值
   if(temp>max_data)//第二次采样值是否大于第一次采样的值
   {
    min_data=max_data;//将最大值变量max_data的值给最小值变量min_data
    max_data=temp;//将第二次采样值给最大值变量max_data
   }
   else//第二次采样的值不大于第一次采样的值
   min_data=temp;//将第二次采样值给最小值变量min_data
  }
  else//第三次及以后的采样(包括第三次)
  {
   temp=(0x3FF&ADRES);//获取第三次及以后采样值
   if(temp>max_data)//采样值大于最大值变量max_data的值
   {
    max_data=temp;//将采样值赋给最大值变量max_data
   }
   else//采样值不大于最大值变量max_data的值
   {
    if(temp<min_data)//采样值小于最小值变量min_data的值
    {
     min_data=temp;//采样值赋给最小值变量min_data
    }
   }
   
  }
  sum+=(0x3FF&ADRES);
 }
 adc_data=(sum-max_data-min_data)/(AD_CNT-2); //10次采样去掉最大值和最小值,然后求平均值
 return adc_data; //返回采样值
}
低电压检测:
while(1)
{
      ENDATA=0x90;  // Enable LVR检测 
      ADMR=0x84;  // 11.0592MHz/2560/2=10.8KHz and channel 0 ,选择通道4LVR
   if(flag==1)
   {  LVI=0;
      TR0=0;//关PWM定时器
    Character_display(0x90,"电池电压过低stop ");
        Key5_Function();
    flag=0;
   }
}
---------------------------------------------------------------------------------------------------------------------------
                                                                   中断函数:
--------------------------------------------------------------------------------------------------------------------------
void LVR_int() interrupt 5 using 0 /* LVR interrupt */
{  
    flag=1;
}
void AD_int() interrupt 6 using 0 // AD completion interrupt
{
 if(ADC_flag==0)
 {
  Yali=Yali_calculate(Yali);
 }
 
}




关键词: 关于     使用     中的     疑惑     采样     变量    

助工
2010-02-08 17:09:35     打赏
2楼

注意低压检测中断。


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]