⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad.c

📁 ATMEGA16的内部AD采样单元使用源码
💻 C
字号:
#include <avr/io.h>
#include <stdint.h>

void ad_init(void);
uint16_t ad_sample(uint8_t channel,uint16_t num,uint16_t ad_ref,uint8_t vol);

uint16_t ad_val;
uint32_t ad_tmp;

void ad_init(void)
{
     DDRA=0x00;
     PORTA=0x00;
     ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS0);
     ADMUX=(1<<REFS1)|(1<<REFS0);
     ADCSRA|=(1<<ADSC);
     while(ADCSRA&(1<<ADSC));
     ad_val=ADCL;
     ad_val|=(uint16_t)(ADCH<<8);
}

uint16_t ad_sample(uint8_t channel,uint16_t num,uint16_t ad_ref,uint8_t vol)
{
     uint16_t i;
     ad_val=0;
     ad_tmp=0;
     if(channel<0x20)
        {
          ADMUX&=0xe0;
          ADMUX|=channel;
        }
     for(i=0;i<=num;i++)
        {
          ADCSRA|=(1<<ADSC);
          ad_tmp+=ad_val;
          while(ADCSRA&(1<<ADSC));
          ad_val=ADCL;
          ad_val|=(uint16_t)(ADCH<<8);
        }
	   i=10;
	   if(vol<=4) i=1;
     ad_tmp=(ad_tmp*vol*ad_ref)/(1024*i);
     
     if(num) ad_tmp=ad_tmp/num;
     ad_val=(uint16_t)(ad_tmp);
     return ad_val;
}
     
     
           
     
        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -