#include <avr/io.h>
#include <avr/interrupt.h>
#include "adc.h"
#include "key.h"
#define MaxAdcBufSize 9
#define AdcBufStep 3
static volatile unsigned int ADCBuffer[MaxAdcBufSize];
void InitADC(void)
{
ADMUX |= (1<<REFS1)|(1<<REFS0);
ADCSRA |= (1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
//ADC使能;ADC開始轉換;連續轉換;中斷使能;128分頻
}
unsigned int ReadADC(void)
{
return ADCBuffer[0];
}
SIGNAL(SIG_ADC)
{
unsigned char i;
unsigned int tmp,sum = 0;
tmp = ADC;
for(i=1;i<MaxAdcBufSize - 1;i++)
{
ADCBuffer[i] = ADCBuffer[i+1];
sum += ADCBuffer[i];
}
ADCBuffer[MaxAdcBufSize - 1] = tmp;
sum += ADCBuffer[MaxAdcBufSize - 1];
ADCBuffer[0] = (sum >> AdcBufStep);
}
#ifndef __ADC__
#define __ADC__
void InitADC(void);
void UnInitADC(void);
unsigned int ReadADC(void);
void StartADC(void);
void ADCTest(void);
#endif