首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

c8051f120的片子,ADC中断有关问题

2012-09-04 
c8051f120的片子,ADC中断问题。主函数中的相关程序:Timer2_Init() ADC0_Init() while(number65536)whil

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转换

热点排行