其他分享
首页 > 其他分享> > 合泰单片机AD转换Adc_Init.c

合泰单片机AD转换Adc_Init.c

作者:互联网

/*
A/D 转换步骤
下面概述实现A/D 转换过程的各个步骤。
● 步骤1
通过ADCR1 寄存器中的ADCK2~ADCK0 位,选择所需的A/D 转换时钟。
● 步骤2
清零ADCR0 寄存器中的ADOFF 位使能A/D。
● 步骤3
通过ADCR0 寄存器中的ACS2~ACS0 位和ADCR1 寄存器中的ACS4,选择
连接至内部A/D 转换器的通道。
● 步骤4
通过ACERL 寄存器中的ACE7~ACE0 位,选择哪些引脚规划为A/D 输入引脚。
● 步骤5
如果要使用中断,则中断控制寄存器需要正确地设置,以确保A/D 转换功能
是激活的。总中断控制位EMI 需要置位为“1”, 以及A/D 转换器中断位ADE
也需要置位为“1”。
● 步骤6
现在可以通过设定ADCR0 寄存器中的START 位从“0”到“1”再回到“0”,
开始模数转换的过程。注意,该位需初始化为“0”。
● 步骤7
可以轮询ADCR0 寄存器中的EOCB 位,检查模数转换过程是否完成。当此
位成为逻辑低时,表示转换过程已经完成。转换完成后,可读取A/D 数据寄
存器ADRL 和ADRH 获得转换后的值。另一种方法是,若中断使能且堆栈未
满,则程序等待A/D 中断发生。
*/
#include "global.h"
#define u8 unsigned char
#define u16 unsigned int
void Adc_Init(void)
{
    _adck0 = 0;
    _adck1 = 0;
    _adck2 = 0;//000:fSYS
    
    _adoff = 0;//0:ADC 模块电源开
    
    _acs2 = 1;
    _acs2 = 0;
    _acs2 = 0;//AN4
    
    _ace4 = 1;//1:A/D 输入,AN4
    
    _vrefs = 1;//ADC 数据高字节是ADRH 的bit 3,低字节是ADRL 的bit 0
}

//获取通道
u16 GetAdcValue(u8 ch)
{
    u8 i;
    u16 temp,sum;
    _adcr0&=0xf0;
    _adcr0|=ch;
    temp=0;
    sum=0;
    for(i=0;i<8;i++)
    {
        //start 0 → 1 → 0:启动
        _start=0;
        _start=1;
        _start=0;
        while(_eocb);    
        temp=_adrh;
        temp<<=8;
        temp|=_adrl;
        sum+=temp;
    }
    return sum>>3;
}

标签:转换,AD,temp,start,步骤,合泰,单片机,寄存器,sum
来源: https://blog.csdn.net/anwei20000/article/details/111986362