c8051f120的片子,ADC中断问题。
主函数中的相关程序:
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;
}
}
[解决办法]
可以利用定时器实现AD采集频率的控制,即每隔多少时间开启一次AD转换,并在AD中断中关闭AD转换