打印
[Atmel]

转:AVR atmega 328P在Atmel Studio6下的ADC转换代码

[复制链接]
936|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ddllxxrr|  楼主 | 2015-1-15 22:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ddllxxrr 于 2015-1-16 08:13 编辑

Atmega328p
笔者才疏学浅,只会用as6,所以为帮助后来者学习使用as6 ,在本机调试成功avr328p的AD代码发出来供大家参考,如有不足,欢迎指正
# define F_CPU 16000000UL//定义CPU频率,本人用5v arduino pro mini的最小系统版,所以频率16M
#include //使用统一的头文件  这是与ICC AVR编译器  不同的地方
#include //这个头文件可以使用系统自己带的 _delay_us();_delay_ms();两个延时函数
#include //含有中断的宏定义 有些中断声明发生变化
#define uchar unsigned char
#define uint unsigned int

void AD_Init(void)
{
//参考电压AVCC  要加电容稳压,左对齐,ADC5单端输入
ADMUX |= (0<<REFS1)|(1<<REFS0)|(1 << ADLAR) ;//(1 << MUX0)
//AD使能, 连续转换,中断使能,32分频, 6M / 32 = 187.5khz
ADCSRA |= (1 << ADEN) | (1 << ADATE) | (1 << ADIE) | (1 << ADPS2) | (1 << ADPS0);
//AD开始转换
ADCSRA |= (1 << ADSC);
}
int main(void)
{

DDRC=(0<<PC0);
PORTC=(0<<PC0);//注意adc输入口的设置  输入0

//AD初始化
AD_Init();

//开总中断
sei();

while(1);


return 0;
}
int result = 0;

ISR(ADC_vect)//中断函数命名方式的变化
{
result = ADCH;
//result = result * 500 / 255;
if(result>=128)
{
  DDRB=(1<<PB5);
  PORTB=(1<<PB5);//检测led的变化  因为pb5  接有led
}
else
{DDRB=(0<<PB5);
  PORTB=(0<<PB5);//微亮
  
}
}


#include


void AD_Init(void)
{
//参考电压AREF,左对齐,ADC5单端输入
ADMUX |= (0<<REFS1)|(1<<REFS0)|(1 << ADLAR) ;//(1 << MUX0)
//AD使能, 连续转换,中断使能,32分频, 6M / 32 = 187.5khz
ADCSRA |= (1 << ADEN) | (1 << ADATE) | (1 << ADIE) | (1 << ADPS2) | (1 << ADPS0);
//AD开始转换
ADCSRA |= (1 << ADSC);
}
int main(void)
{

DDRC=(0<<PC0);
PORTC=(0<<PC0);
//LCD初始化
//AD初始化
AD_Init();

//开总中断
sei();

while(1);


return 0;
}
int result = 0;

ISR(ADC_vect)
{
result = ADCH;
//result = result * 500 / 255;
if(result>=128)
{
  DDRB=(1<<PB5);
  PORTB=(1<<PB5);
}
else
{DDRB=(0<<PB5);
  PORTB=(0<<PB5);//微亮
  
}
}


相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2398

主题

6950

帖子

67

粉丝