这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » AD 请大侠帮忙看看这段AD程序有什么问题

共2条 1/1 1 跳转至

AD 请大侠帮忙看看这段AD程序有什么问题

院士
2006-09-17 18:14:16     打赏
AD 请大侠帮忙看看这段AD程序有什么问题



关键词: 大侠     帮忙     看看     这段     程序     什么     问题    

院士
2006-12-22 22:43:00     打赏
2楼
问 #include "config.h"

uint32  ADzhi=0;
    
void __irq IRQ_Time0(void)    //定时器中断
  { uint32 ADC_Data[5];
    char   str[20];
    uint8  t;
    uint8  i;  
    uint32 ADC_SUM;
    uint32 ADC_VAL;
    t=0;                       //计数 采5次退出
    while(t<5)
    { ADCR=ADCR|(1<<24);       //启动AD
    while((ADDR&0x80000000)==0);
    ADC_Data[t]=ADDR;          //读取转换结果
    t++;
    }  
    for(i=0;i<5;i++)           // 对5次的采样值进行处理
    { ADC_Data[i] = (ADC_Data[i]>>6) & 0x3FF;      
      ADC_SUM = ADC_SUM + ADC_Data[i];       
     }
      ADC_VAL = ADC_SUM/ 5;    //求平均值
      ADC_VAL = ADC_VAL * 3300;
      ADC_VAL = ADC_VAL/ 1024;
      ADzhi=ADC_VAL;           //得到AD采样的10进制值
   
      T0IR=0x01;               //清除中断标志
      VICVectAddr=0x00;        //通知VIC中断处理结束
  }

void Time0Init(void)          /*定时器中断初始化*/
   {
    T0PR=99;                   //设置定时器0 分频为100
    T0MCR=0x03;
    T0MR0=110592;              //比较值(1s定时值)
    T0TCR=0x03;
    T0TCR=0x01;
    
    VICIntSelect=0x00;
    VICVectCntl0=0x24;
    VICVectAddr0=(uint32)IRQ_Time0;
    VICIntEnable=0x00000010;
    }

  int main(void)
    { PINSEL0=0x00000005;
      PINSEL1=0x01400000;
      /*进行ADC模块设置*/
      ADCR=(1<<0)                     |
           ((Fpclk/1000000-1)<<8)     |   //设置采样频率为1M
           (0<<16)                    |
           (0<<17)                    |
           (1<<21)                    |
           (0<<22)                    |
           (0<<27);                   
            
            
      Time0Init();                         //初始化定时器中断
      while(1);
      
      return(0);      
     } 1: ADC_SUM没有初始化为0 2: REPINSEL1=0x01400000; 3: rePINSEL1=0x01400000;初始化选择的是AD0.0,0.1吧
ARM板子上,引出的只有AD0.0,0.3
是不是硬件连接错误?检查一下]
4: 程序修改后还是有问题谢谢各位!这两个确实是错误,我把它们改过来了, 其中 PINSEL1=0x00400000;    //AIN0采样   ,硬件连接查过了没错, 可是程序运行后,还是无法得到AD采样的10进制值(单位为mV),不知是何故? 5: 感觉PINSEL的配置最倒塌,强烈希望采用尿童写法~~~http://blog.21ic.com/more.asp?name=hotpower&id=16994 6: IRQ中断位没有打开IRQ中断位没有打开,CPSR的第7位(从0开始).


NoInt       EQU 0x80

IRQEnable
        ;开IRQ中断
        MRS   R0, SPSR
        BIC   R0, R0, #NoInt
        MSR   SPSR_c, R0
        MOVS    PC, LR 7: remain函数中没有开中断允许:
    加上    IRQEnable();//使能IRQ中断
    这句话不能少 8: 转换结束后加个延时看看

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]