天天看點

C語言程式>>ADC

#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

繼續閱讀