c8051f120的片子,ADC中断问题。

时间:2022-10-31 14:45:50
主函数中的相关程序:

     Timer2_Init();
 ADC0_Init();
 while(number<65536);
         while(1);

中断和及其初始化如下;就是好像一直有中断?应该是到65536次后停下的。
/**************定时器2初始化**********************/
void Timer2_Init()
{
    SFRPAGE = TMR2_PAGE;
    TMR2CF = 0x08;
TMR2CN = 0x00;                                     //输出4KHz方波
    
TMR2L=0xca;
TMR2H=0xf3;
    RCAP2L = 0xCA;                                     //采样8KHz。
    RCAP2H = 0xf3;
// ET2=1;    
    TR2=1;
}
/***********************ADC初始化*******************/
void ADC0_Init()
{
    SFRPAGE = ADC0_PAGE;
    AMX0CF = 0x60;                                //独立输入
    ADC0CF = 0x00;                                //增益为1,频率25M。
    AMX0SL = 0x03;                                //通道4
    ADC0CN = 0x8d;                                //定时器2溢出启动ADC0,右对齐。
    REF0CN = 0x03;                                // 启用内部基准源
    EIE2 |= 0x02;                                 // 启用 ADC 中断
}

/**********************************************************************************/
void ADC0_ISR (void) interrupt 15
{
    ADC0CN &=0xDF;                                              // 清 ADC 中断标志位
    SFRPAGE = CONFIG_PAGE;
    
    ADCdata= ADC0H;                                           // ADC采样数据,八位。
    number++;
P00=~P00;
   if(number<65536)
{
    Flash_WRITE(dizhi,ADCdata);
dizhi++;
flagAD=1;
    }
else
{
    flaglvbo=1;
dizhi=0;
// number=0;
flagAD=0;
TR2=0;
EIE2 &= ~0x04;   

    }

}

2 个解决方案

#1


可以利用定时器实现AD采集频率的控制,即每隔多少时间开启一次AD转换,并在AD中断中关闭AD转换

#2


嗯,问题已经解决了,就是在AD中到了65536次后加上关中断就可以了。还是要谢谢你。

#1


可以利用定时器实现AD采集频率的控制,即每隔多少时间开启一次AD转换,并在AD中断中关闭AD转换

#2


嗯,问题已经解决了,就是在AD中到了65536次后加上关中断就可以了。还是要谢谢你。