//EX15AVR ATmega8A ADC//author:QI小米粥//data:2018.3.17//ADCL,ADCH读写顺序?选用外部的才行吗?#include#includeint a,b;
void init_io(void)
{
DDRB |=0X07;
PORTB |=0X07;
}
void init_adc(void)
{
/*
//E
ADMUX &=~BIT(7); //选择内部的AVCC的电压作为参考
ADMUX |=BIT(6);//
*/
ADMUX |=BIT(7); //选择内部的VREF的电压作为参考
ADMUX |=BIT(6);//内部电压需不需要使能1???
ADMUX |=BIT(5);//ADC内部的记录数据是右对齐的
ADMUX &=~0X08;//选择通道7
ADMUX |=0X07;
ADCSRA &=~0X07;//2分频
SREG |=BIT(7);//全局中断打开
ADCSRA |=BIT(3);//adc中断使能
ADCSRA |=BIT(5); //free running 模式实时更新
ADCSRA |=BIT(7);//ADC使能
ADCSRA |=BIT(6); //START ADC
}
#pragma interrupt_handler inter_adc:15
void inter_adc(void)
{
//D显示高三位,左对齐,需要更改ADMUX的bit5
a=ADCH/32;
PORTB=a;
/*
//C显示高三位右对齐
a=ADCH;
b=ADCL;
a=a*2+b/128;
PORTB =a;
*/
/*
//B只显示高两位,ADCL不先读
a=ADCH;
PORTB =a;
*/
/*
//A只显示高两位,ADCL先读出来
b=ADCL;
a=ADCH;
PORTB =a;
*/
}
void main(void)
{
init_io();
init_adc();
while(1);//这个循环可以省略,但是天狼星视频中加上了,一直在这里循环等待中断,
//看着也比较合理。
}
网友评论