本帖最后由 henangongda123 于 2020-11-26 20:34 编辑
参考代码如下:/********* ADC模数转换操作 **********/
/***********************************************************
函数名:ADC_Get()
功 能:获取不同通道ADC转换结果
参 数:ADC_Channel --- 需要转换的ADC通道
返回值:无
/**********************************************************/
void ADC_Get(uchar ADC_Channel)
{
uchar a,b; //定义两个变量,用于数据运算
//初始化ADC
ADC_CR1 |= 0x20; //ADC时钟为16/4=4MHz,单次转换模式
ADC_CSR = 0x00; /*先清零通道选择状态寄存器(此步非常重要,否则会出现通道选择不对BUG)*/
if(ADC_Channel==6)
{
ADC_CSR |= 0x06; //选择通道6(AIN6)
}
if(ADC_Channel==5)
{
ADC_CSR |= 0x05; //选择通道5(AIN5)
}
ADC_CR2 |= 0x08; //ADC转换结果右对齐
_asm("nop");
ADC_CR1 |= 0x01; //使能ADC,唤醒并触发一次ADC转换
delay_us(10); //延时等待ADC转换完毕
//开始转换ADC,结果保存在ADC_Data内
ADC_CR1 |= 0x01; //再次启动一次AD转换
while(!(ADC_CSR&0x80)); //等待转换完成
ADC_CSR &= 0x7F; //清除转换完毕中断标志
b = ADC_DRL; //先读取ADC转换低8位值
a = ADC_DRH; //再读取ADC转换高8位值
a &= 0x03; //取最高2位
ADC_Data = a*256+b; //获取最终ADC值
}
|
好帖,看了有收获