void ADCInit(void) { // ATD0CTL2=0xC0; //EAD模块上电, 快速清零, 无等待模式, 禁止外部触发
ATD0CTL3=0X38; // 每个序列7次转换, No FIFO, Freeze模式下继续转换 ATD0CTL4=0x81; // 8位精度, 2个时钟,2uS ATDClock=[BusClock*0.5]/[PRS+1]RS=1, divider=4 ATD0CTL5=0xb0; //右对齐无符号,多通道采样,通道0开始至6 ATD0DIEN=0x00; // 禁止数字输入 //start new conversation ATD0CTL2_ASCIE=1; //interrupt enable ATD0CTL5_SCAN=1; ATD0CTL2=0xC0; } void main(void) { unsigned int b=0,c=0,d=100; /* put your own code here */
PLL_INIT(); SciInit(); ADCInit(); DDRB=0XFF; PORTB=0X00; EnableInterrupts;
for(ad_count=0;ad_count<=5;ad_count++) { //第一次输出 printp("AD_Data[%d]=%d \n",ad_count,AD_Data[ad_count]); } for(b=500;b>1;b--) { //第一次等待时间 PORTB=~PORTB; for(c=60000;c>1;c--) PORTB=~PORTB; }
printp("+++++++++++++++++++++++++++++++++\n");
ATD0CTL2_ASCIE=0; for(ad_count=0;ad_count<=5;ad_count++) { // 第二次等待时间 第二次输出 printp("AD_Data[%d]=%d \n",ad_count,AD_Data[ad_count]); } ATD0CTL2_ASCIE=1; for(;;) { for(b=5000;b>1;b--) for(c=2000;c>1;c--) asm("nop"); ATD0CTL2_ASCIE=0; for(ad_count=0;ad_count<=5;ad_count++) { printp("AD_Data[%d]=%d \n",ad_count,AD_Data[ad_count]); //第三次输出 } ATD0CTL2_ASCIE=1;
} /* wait forever */ /* please make sure that you never leave this function */ } void interrupt Int_AD0() { ATD0CTL2_ASCIE=0; //interrupt disable; AD_Data[0]=ATD0DR0L; AD_Data[1]=ATD0DR2L; AD_Data[2]=ATD0DR3L; AD_Data[3]=ATD0DR4L; AD_Data[4]=ATD0DR5L; AD_Data[5]=ATD0DR6L; ATD0CTL2_ASCIE=1; } 问题出现在第一次输出结果为0;说明AD没有工作,但我已经开中断了,也允许AD转换进行,但是第二次还是没有结果我就想不通了,为什么在延时了很长时间,AD还是没有结果,但是在第三次输出就有正常的结果了,请斑主帮忙. |