PIC24hj128gp510 ad采样之后转换不了 DONE 不能被硬件置1

2019-03-25 19:25发布

写了一个AD采样程序,显示用数码管;但是无论自动手动都不能转换,DONE位不能被硬件置1,采样1次1次中断,不能进入中断,

晶振是6M,
#include<p24HJ128GP510.h>
unsigned char const   Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};  //段码控制
unsigned char const   dispbit[]={0X1D,0X1A,0X16,0X0E };
//{0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};
static unsigned int LedNumVal=1234 ;
void lcddelay(unsigned char ms)   //ms
{
unsigned char i,j;
for(i=ms;i>0;i--)
     for(j=166;j>0;j--)
   {;}
  
}
void initacd(void)
{
AD1PCFGL=0Xfffb; //AN2
AD1CON1=0X0000;  //SHOU采样  采样结束后SHOU转换
AD1CON2=0X0000;  //Vadd  Vss  1个采样产生一个中断
AD1CON3=0X1fff;     //32Tad ;256*Tcy=256*1/3us ;Fosc=6M
AD1CHS0=0X0002;  //AN2
AD1CON4=0;
AD1CSSL=0;
ADC1BUF0=0;
_ADON=1;      //开启AD模块
}

void intadcin(void)      //中断初始化
{

_AD1IP=111;   //中断优先级7
_AD1IF=0;  
_AD1IE=1;   //开启中断
}
main(void)
{

unsigned int i ;
   unsigned int LedOut[4];
   TRISC=0X0000;
   TRISE=0X0000;
   TRISBbits.TRISB2=1;
   PORTE=0X0000;
   
   intadcin();
   initacd();
   lcddelay(10);
  
   
  while(1)  //进入循环状态
  {   
    _SAMP = 1;
   lcddelay(10);
    _SAMP = 0;
    lcddelay(1);
  // AD1CON1bits.DONE=1;
   //lcddelay(10);
  
     if(LedNumVal<=2000)
  {
  LedOut[0]=Disp_Tab[LedNumVal%10000/1000];
     LedOut[1]=Disp_Tab[LedNumVal%1000/100]|0x80;
     LedOut[2]=Disp_Tab[LedNumVal%100/10];
     LedOut[3]=Disp_Tab[LedNumVal%10];
  }
  else
  {
    LedOut[0]=Disp_Tab[2];
     LedOut[1]=Disp_Tab[0];
     LedOut[2]=Disp_Tab[0];
     LedOut[3]=Disp_Tab[0];
  }

  for( i=0; i<4; i++)  //实现4位动态扫描循环
  {  
   PORTE= LedOut;  //将字模送到数码管显示
  
   PORTC=dispbit;
   
  lcddelay(10);
   }
  PORTE=LedNumVal;
  }   
}
void __attribute__((__interrupt__)) _ADCInterrupt(void)
{
LedNumVal=ADC1BUF0;
_AD1IF=0;
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。