ADC 负责模拟信号到相应 12 位的数字信号的转换,支持 VDD 和外接 VREF 两种基准电
压,可通过软件启动 AD 转换,也可通过触发源触发 AD 转换,另外可配置为多通道,实现
序列转换。
测试程序介绍
Demo 程序中配置了单次转换和 8 通道的序列转换。单次转换使用 AN0 为输入口。序列
转换的顺序为 AN7~AN0,转换完成后,结果按照 AN7~AN0 的顺序存放在 ADC_res[8]数组中。
单次转换需要把 Adc.c 文件中的 define ADC_ONE 打开。
序列转换需要把 Adc.c 文件中的 define ADC_ARRAY 打开。
选择“Adc”工程,编译、加载
1) AN0~AN7 通道外接不同的电压源;
2) 在 ADC_Test 最后设置断点,可读出 ADC_res 中的转换结果。
注:本项测试只完成一次 AD 转换,要想再进行一次 AD 转换,软件需再次启动 AD 转
换。
2.10.2 寄存器简要介绍
void init_adc()
{
UINT16 ADC_res[8];
UCHAR i;
ADCON1 = 0x80; //ADON, VDD as vref, no trigger
/***************************************************************************************
24M SYSCLK, 500ksps
****************************************************************************************/
ADT=0x21;
#ifdef ADC_ONE
ADCON2 = 0x0; //1-channel
ADCH1 = 0x01; //AN0
/*******************************************************************************************
启动AD转换
********************************************************************************************/
ADCON1 |= 0x01; //ADC GO
while(ADCON1 & 0x01); //check go/done
ADC_res = ((ADDxH << 4) + (ADDxL >> 4));
#endif
#ifdef ADC_ARRAY
ADCON2 = 0x72; //8-channels,time of gap:4Tad
ADCH1 = 0xff; //P3.7~P3.4, P4.3~P4.0,AN7~AN0channel as adc input
//configure order of channals transaction: AN7,AN6, AN5, AN4, AN3, AN2, AN1, AN0
SEQCON = 0x0; //configure SEQCH0
SEQCHx = 0x7;
SEQCON = 0x01; //configure SEQCH1
SEQCHx = 0x06;
SEQCON = 0x02; //configure SEQCH2
SEQCHx = 0x05;
SEQCON = 0x03; //configure SEQCH3
SEQCHx = 0x04;
SEQCON = 0x04; //configure SEQCH4
SEQCHx = 0x03;
SEQCON = 0x05; //configure SEQCH5
SEQCHx = 0x02;
SEQCON = 0x06; //configure SEQCH6
SEQCHx = 0x01;
SEQCON = 0x07; //configure SEQCH7
SEQCHx = 0x0;
SEQCON &= 0x7f; //result left-align
/*******************************************************************************************
启动AD转换
********************************************************************************************/
ADCON1 |= 0x01; //ADC GO
while(ADCON1 & 0x01); //check go/done
//get result.
for(i = 0; i < 8; i++)
{
SEQCON = i;
ADC_res = ((ADDxH << 4) + (ADDxL >> 4));
}
#endif
}
|