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