51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机技术文章 > AVR单片机 > 详细内容
AVR单片机ADC转换程序
发布时间:2009/8/6  阅读次数:3969  字体大小: 【】 【】【
//基准定义
#defineAD_ref_vref0x00//基准Vref
#defineAD_ref_avcc0x40//基准AVCC
#defineAD_ref_vref_in0xc0//基准内部Vref
#defineAD_refAD_ref_vref

//常量定义
//单端通道,不放大
#define AD_SE_ADC0 0x00//ADC0
#define AD_SE_ADC1 0x01//ADC1
#define AD_SE_ADC2 0x02//ADC2
#define AD_SE_ADC3 0x03//ADC3
#define AD_SE_ADC4 0x04//ADC4
#define AD_SE_ADC5 0x05//ADC5
#define AD_SE_ADC6 0x06//ADC6
#define AD_SE_ADC7 0x07//ADC7

//定义AD端口变量
#define AD_TEMPAD_SE_ADC0//ADC0
#define AD_VOUTAD_SE_ADC1//ADC1
#define AD_KEYINAD_SE_ADC2//ADC2
#defineAD_VINAD_SE_ADC3//ADC3
#define AD_IOUTAD_SE_ADC4//ADC4
#define AD_6BATAD_SE_ADC5//ADC5

#defineBAT_SE_PORTPORTB
#defineBAT_EN_PORTPORTB
#defineBAT_EN_PIN0X03


void adc_init(void)
{
DDRA=0x00;
ADCSRA=(1<<ADEN)|(1<<ADPS2)|(0<<ADPS1)|(1<<ADPS0);//32分频
//ADMUX=(1<<REFS0);
//DIDR0=(1<<ADC5D)|(1<<ADC4D)|(1<<ADC3D)|(1<<ADC2D)|(1<<ADC1D)|(1<<ADC0D);//数据端口禁止
}
unsigned int read_adc(unsigned char adc_input,unsigned char i)//查询方式读取ADC单端通道
{
unsigned charx;
unsigned inty=0;
ADC=0;
        ADMUX=(AD_ref|adc_input);//adc_input:单端通道 0x00~0x07,0x1E,0x1F
        //0xc0:选择内部2.56V参考电压
delay_nus(100);
for(x=0;x<i;x++)
{
        ADCSRA|=(1<<ADSC);//启动AD转换
        loop_until_bit_is_set(ADCSRA,ADIF);//方法1 等待AD转换结束
//    while ((ADCSRA&(1<<ADIF))==0);//写法2 这种写法优化不好
//    loop_until_bit_is_clear(ADCSRA,ADSC);//方法2 检测ADSC=0也行
        ADCSRA|=(1<<ADIF);//写1清除标志位
y += ADC;//ADC=ADCH:ADCL
}
        return y;
}  
我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号