dsPIC33EP ADC模块初始化及应用实例

2014-11-24 01:21:24 · 作者: · 浏览: 3
//文件名 p33adc.h  
  
#ifndef _P33ADC_H_  
#define _P33ADC_H_  
//#include "p33adc.h"  
//--AD1CON1  
  
#define     ADON    (1<<15)  
#define     MAUTO   (7<<5)    //采样后 自动转换模式  
#define     SAMP    (1<<1)  
#define     DONE    (1<<0)  
  
//ADC时钟选择--时钟分频  
#define     ADC_DIV1        (1-1)  
#define     ADC_DIV5        (5-1)  
#define     ADC_DIV10       (10-1)  
#define     ADC_DIV25       (25-1)  
#define     ADC_DIV50       (50-1)  
#define     ADC_DIV100      (100-1)  
#define     ADC_DIV250      (250-1)  
  
  
//--AD通道选择------  
#define     ADC_Chanel0         (0x00<<0)  
#define     ADC_Chanel1         (0x01<<0)  
#define     ADC_Chanel2         (0x02<<0)  
#define     ADC_Chanel3         (0x03<<0)  
#define     ADC_Chanel4         (0x04<<0)  
#define     ADC_Chanel5         (0x05<<0)  
#define     ADC_Chanel6         (0x06<<0)  
#define     ADC_Chanel7         (0x07<<0)  
#define     ADC_Chanel8         (0x08<<0)  
#define     ADC_Chanel9         (0x09<<0)  
#define     ADC_Chanel10        (0x0A<<0)  
#define     ADC_Chanel11        (0x0B<<0)  
#define     ADC_Chanel12        (0x0C<<0)  
#define     ADC_Chanel13        (0x0D<<0)  
#define     ADC_Chanel14        (0x0E<<0)  
#define     ADC_Chanel15        (0x0F<<0)  
  
//================================  
extern void Init_Adc(uint16 ClkDiv) ;  
extern uint16 AdcSwitch(uint16 Adc_Ch) ;  
  
#endif  
  
  
  
//文件名 p33adc.c  
  
#include "global.h"   
//#include "p33adc.h"  
  
  
//***************************************  
// 函数名称:Init_Adc  
// 函数功能:初始化ADC模块  
// 入口参数:  
// 出口参数:无  
// 返回值:无  
// ADC时钟来源于Fcpu  
//***************************************  
void Init_Adc(uint16 ClkDiv)  
{  
    AD1CON1 = 0X0000|MAUTO; //设置为自动模式 10位4通道模式 数据右对齐  
    AD1CON2 = 0X0000 ;  
    AD1CON3 = 0X0000 | ClkDiv |0X8000; //ADC时钟分频  
    AD1CON4 = 0X0000 ; //不使能DMA 每个通道分一个字的缓存  
  
    AD1CHS123 = 0X0000 ;  
    AD1CHS0 = 0X0000 ;  
  
    AD1
CSS
H = 0X0000 ; AD1CSSL = 0X0000 ; AD1CON1 |= ADON ; //开启ADC模块工作 asm("nop") ;asm("nop") ;asm("nop") ;asm("nop") ;//延时 asm("nop") ;asm("nop") ;asm("nop") ;asm("nop") ; } //*************************************** // 函数名称:AdcSwitch // 函数功能:选择AD通道转换 // 入口参数: // 出口参数:无 // 返回值:无 //*************************************** uint16 AdcSwitch(uint16 Adc_Ch) // ADRESH ADRESL { uint16 wTmp ; AD1CON1 |= ADON ; //开启ADC模块工作 AD1CHS0 = (AD1CHS0 & 0XFFE0)|Adc_Ch ;//选择通道 asm("nop") ;asm("nop") ;asm("nop") ;asm("nop") ;//延时 asm("nop") ;asm("nop") ;asm("nop") ;asm("nop") ; AD1CON1 &= ~DONE ; //ADC空闲 AD1CON1 |= SAMP ; //开始转换 while(!(AD1CON1 & DONE)) ; //等待转换完成 // AD1CON1 &= ~DONE ; //ADC空闲 wTmp = ADC1BUF0 & 0X03FF ; //读取转换结果 return wTmp ; } //应用实例 void main(void) { uint16 g_wTmp1 ; //初始化ADC Init_Adc(ADC_DIV25) ;//AD模块时钟输入频率 10BIT AD while(1) { g_wTmp1 = AdcSwitch(ADC_Chanel0) ;//读取转换结果 } }