#include "main.h"
//模数转换中断
#define Def_Vref (1<<REFS1)+(1<<REFS0) //参考电压源 内部1.1V电压基准 AREF引脚外加滤波电容 参考电压源Vref
#define Def_F (1<<ADPS2)+(1<<ADPS1)+(1<<ADPS0) //ADC 64预分频 8兆hz
unsigned int ADC_Result[8]; //ADC结果
//ADC初始化
void ADCStart(void)
{
if(ADCSRA&(1<<ADSC)) return; //正在转换,返回
SREG_Bit7=0x01;
ADMUX = Def_Vref+7; //定义通道号7 使用内部电压基准 转换结果右对齐
ADCSRA = (1<<ADEN)+(1 << ADIE)+(0 << ADIF)+Def_F+(1<<ADATE)+(1<<ADSC); //ADC允许 启动单次ADC 设置预分频 ADC中断允许(1<<ADIE) 自动触发ADC(1<<ADATE)
ADCSRB = 0; //连续转换模式
// (1<<ADTS2)+(0<<ADTS2)+(0<<ADTS2) 连续转换模式; //定时器0溢出 启动ADC
// DIDR0 = BIT2+BIT3+BIT4; //ADC脚禁止数字输入
}
#pragma vector=ADC_vect // /* ADC Conversion Complete */
__interrupt void InterruptADC(void)
{
//1.1/1023*1*1000=1.07526882 测量结果的单位:毫伏
//ADC/1023 * 1.1 / ( 510 / (510+5100) ) * 1000 =11.81640625 测量结果的单位:毫伏
unsigned char ADC_CH; //当前正在进行转换的通道号
float V;
V=ADC; //读ADC结果
|