为什么我的程序进不了中断呢,运行到while(ATD0CTL2_ASCIF==1);处就不动了也不循环了,麻烦各位给指点一下 我的程序如下: #include /* common defines and macros */ #include /* derivative information */ #pragma LINK_INFO DERIVATIVE "mc9s12dp256b"
#define N 4 #define unsigned char uchar //#define unsigned int uint uchar ad_result[N],i;
void delay(int num) { int i; for(i=0;i<num;i++); }
/* unchar AD_GetValue(void) { return ATD0DR0; } */
void main(void) {
uchar j,max,min; uint temp;
DDRB=0XFF; PORTB=0X55;
for(i=0;i<N;i++)ad_result=0;
EnableInterrupts;
ATD0CTL2=(ATD0CTL2_ADPU_MASK|!ATD0CTL2_AFFC_MASK|ATD0CTL2_ASCIE_MASK);
ATD0CTL3=ATD0CTL3_S4C_MASK;//队列长度4,单通道 ATD0CTL4=(ATD0CTL4_SRES8_MASK|ATD0CTL4_PRS2_MASK|ATD0CTL4_PRS0_MASK);
ATD0CTL5=(ATD0CTL5_DJM_MASK|ATD0CTL5_SCAN_MASK|!ATD0CTL5_MULT_MASK);
ATD0DIEN=0X00; i =0; for(;;) { while(ATD0CTL2_ASCIF==1); // 4次采样求均值,实现滤波 if(i>=N) {
i=0; temp=0; for(j=0;j { max=ad_result[0]; min=ad_result[0]; if(max if(min>ad_result[j])min=ad_result[j];
temp+=ad_result[j]; } temp=(temp-max-min)/(N-2);
PORTB=(uchar)temp;
/*delay(5000); delay(5000); delay(5000); delay(5000); delay(5000); delay(5000); //delay(5000); //delay(5000); //delay(5000); //delay(5000); //delay(5000); //delay(5000); PORTB=0xff;
delay(5000); delay(5000); delay(5000); delay(5000); delay(5000); delay(5000); */ } }
}
#pragma CODE_SEG NON_BANKED interrupt 41 void _ADC_int(void) { ATD0CTL2=!ATD0CTL2_ASCIE_MASK; //禁止中断 ad_result=ATD0DR0L; //读取结果寄存器 i++;
ATD0CTL2=ATD0CTL2_ASCIE_MASK;; //开中断 } #pragma CODE_SEG DEFAULT
[此贴子已经被作者于2007-2-8 18:51:56编辑过]
[此贴子已经被作者于2007-2-8 18:54:58编辑过] |