#include <avr/interrupt.h>
#include <avr/io.h>
#include <avr/signal.h>
#include <stdlib.h>
void uart_init(void);
void timer2_init(void);
unsigned int dtime=0;
void delay_l(int time);//单位是100us
void puts(char *s,unsigned char i);
void adc_init()
{
DIDR0=(1<<ADC0D);//选择ADC0脚为AD输入脚
ADMUX=0x40;//0通道,AVcc作为参考
ADCSRA=(1<<ADEN)|(0<<ADSC)|(1<<ADIF)|0x07;//开启AD
}
void main()
{
unsigned int a;
char buffer[8];
CLKPR=(1<<CLKPCE);
CLKPR=0;
uart_init();
adc_init();
timer2_init();
sei();
itoa(3654,buffer,10);
while(1)
{
PRR&=~(1<<PRADC);
ADMUX=0x40;
ADCSRA|=(1<<ADSC);
while(!(ADCSRA&(1<<ADIF)));
ADCSRA|=(1<<ADIF);
a=ADC;
itoa(a,buffer,10);
puts(buffer,4);
delay_l(1000);
}
}
void timer2_init(void)
{
TIMSK2 = 0x00;
ASSR = 0; //同步时钟
TCNT2 = 5; //定时时间100us,20M晶振
TCCR2B = (0<<CS22)|(1<<CS21)|(0<<CS20); //分频比8,0x07
}
SIGNAL(SIG_OVERFLOW2)
{
TCNT2 = 5;
dtime++;
}
void delay_l(int time)//单位是100us
{
dtime=0;
TCNT2=5;
TIMSK2=0x01;//开启中断100us
while(dtime<time);
TIMSK2=0;
return;
}