当前位置:编程学习 > C/C++ >>

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

 
//文件名 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 ;  
  
    AD1CSSH = 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) ;//读取转换结果                
    }  
      
  
}  

 
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,