技术热线: 4007-888-234

DSPIC33F例程之ADC例程

更新时间: 2019-03-25
阅读量:809

深圳市英锐恩科技有限公司:台湾麦肯单片机(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;
}