合泰单片机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;
}

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流动的星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值