深圳市英锐恩科技有限公司:台湾麦肯单片机(Micon MDT单片机)亚太地区A级代理商
DSPIC33F例程之ADC例程
//母体为DSPIC33FJ64GP206,编译器为C30测试版,
#include
unsigned int adc_buf[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //存放AD转换结果的数组
//====================ADC初始化函数==========================
void adc_init(void)
{
TRISB = 0XFFFF; //SET PORTB INPUT
AD1PCFGL = 0x0000; //选择端口的模式,模拟/数字,0表示选中模拟采样
AD1CON1bits.ADSIDL= 0; //AD模块一直工作,即使在空闲模式
AD1CON1bits.AD12B = 0; //ADC工作在10BIT模式
AD1CON1bits.ASAM = 0; //选择了手动采样模式,当SAMP位置1后才开始采样
AD1CON2bits.VCFG = 0; //参考电压选择,bit15:13,000选择电源参考,001表示Vref+
AD1CON3bits.ADRC = 1; //1表示使用内部RC时钟,0表示使用系统FOSC时钟
AD1CON3bits.ADCS = 8; //调节Tcy与Tad的关系,范围0~63,63是最慢的
AD1CON2bits.CSCNA = 0; //不自动扫描输入
AD1CON2bits.CHPS = 0; //同时扫描的通道数,现在只选择了一个CH0
AD1CON1bits.SSRC = 7; //转换触发源选择位,111表示采样结束自动转换
AD1CON3bits.SAMC = 4; //自动采样时间为31个Tad,范围0~31
AD1CON1bits.FORM = 0; //数据格式,整数格式,右对齐
AD1CON2bits.ALTS = 0; //总是使用多路开关A来作为通道选择位
AD1CHS0bits.CH0NA = 0; //通道0的反向输入端为-Vref,这里为地。
AD1CON1bits.ADON = 1; //打开ADC模块
}
//=========================读取一个通道的值==============================
void read_adc(unsigned char ch)
{ AD1CHS0bits.CH0SA = ch; //0~15分别表示选中16个通道之一
AD1CON1bits.SAMP = 1; //开始采样,采样结束后自动开始转换
while(!AD1CON1bits.DONE) //此位为0表示正在采样中
;
AD1CON1bits.DONE = 0; //也可以不清零,在新的转换开始时,硬件自动清零
adc_buf[ch]=ADC1BUF0&0x03ff;
}