ADC驱动:
//****************************************************************/
//函 数 名: Ai_Init
//函数功能: Ai端口初始化
//输入参数: void
//输出参数: void
//返 回 值: void
//参考文档: void
//创 件 人: 程强刚
//创建日期: 2016/02/09
//修改历史:
//****************************************************************/
void Ai_Init(void)
{
// 外部引脚
DDRC = 0X00;
PORTC = 0X00;
//基准设置(外部AVCC)
ADMUX &= ~(1 << REFS1);
ADMUX |= 1 << REFS0;
DIDR0 = 0X3F;
//转换数据对齐(右对齐)
ADMUX &= ~(1 << ADLAR);
ADMUX |= 0X01;
//转换设置
ADCSRA |= 1 << ADEN; //开启ADC功能
ADCSRA |= (1 << ADSC); //转换开始
ADCSRA |= 1 << ADATE; //自动触发使能
ADCSRA |= 1 << ADIF; //清零完成标记
ADCSRA &= ~(1 << ADPS2); //ADC时钟分频系数 2
ADCSRA &= ~(1 << ADPS1);
ADCSRA |= 1 << ADPS0;
//连续触发模式
ADCSRB &= ~(1 << ADTS2);
ADCSRB &= ~(1 << ADTS1);
ADCSRB &= ~(1 << ADTS0);
ADCSRA |= 1 << ADSC; //转换开始
}
//****************************************************************/
//函 数 名: Read_Ad
//函数功能: 读AD转换值
//输入参数: ucEn (bit0-bit7:通道0-通道7)
//输出参数: void
//返 回 值: AD结果
//参考文档: void
//创 件 人: 程强刚
//创建日期: 2016/02/09
//修改历史:
//****************************************************************/
UINT16 Read_Ad(UCHAR ucEn)
{
UCHAR ucCh;
ucCh = ucEn & 0x07;
//转换通道
ADMUX &= ~0x07;
ADMUX |= ucCh;
ADCSRA |= 1 << ADSC; //转换开始
while (!(ADCSRA & (1 << ADIF)))
{//等待转换完成
vTaskDelay(1);
}
ADCSRA |= 1 << ADIF; //清零完成标记
return (ADC & 0x3ff);
}
//****************************************************************/
//函 数 名: Get_Vol
//函数功能: 取电压值
//输入参数: ucEn
//输出参数: void
//返 回 值: AD结果
//参考文档: void
//创 件 人: 程强刚
//创建日期: 2016/02/09
//修改历史:
//****************************************************************/
float Get_Vol(UCHAR ucEn)
{
UCHAR ucCh;
UINT16 ui16Val;
float fVal;
ucCh = ucEn & 0x07;
ui16Val = Read_Ad(ucCh);
fVal = ui16Val * AI_REF / AI_FULL;
return (fVal);
}
/*************************************************************