本帖最后由 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值
- }
|