dsPIC33EP ADC模块初始化及应用实例
//文件名 p33adc.h#ifndef _P33ADC_H_#define _P33ADC_H_//#include "p33adc.h"//--AD1CON1#defineADON(1<<15)#defineMAUTO (7<<5)//采样后 自动转换模式#defineSAMP(1<<1)#defineDONE(1<<0)//ADC时钟选择--时钟分频#defineADC_DIV1(1-1)#defineADC_DIV5(5-1)#defineADC_DIV10(10-1)#defineADC_DIV25(25-1)#defineADC_DIV50(50-1)#defineADC_DIV100(100-1)#defineADC_DIV250(250-1)//--AD通道选择------#defineADC_Chanel0(0x00<<0)#defineADC_Chanel1(0x01<<0)#defineADC_Chanel2(0x02<<0)#defineADC_Chanel3(0x03<<0)#defineADC_Chanel4(0x04<<0)#defineADC_Chanel5(0x05<<0)#defineADC_Chanel6(0x06<<0)#defineADC_Chanel7(0x07<<0)#defineADC_Chanel8(0x08<<0)#defineADC_Chanel9(0x09<<0)#defineADC_Chanel10(0x0A<<0)#defineADC_Chanel11(0x0B<<0)#defineADC_Chanel12(0x0C<<0)#defineADC_Chanel13(0x0D<<0)#defineADC_Chanel14(0x0E<<0)#defineADC_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 ;//初始化ADCInit_Adc(ADC_DIV25) ;//AD模块时钟输入频率 10BIT ADwhile(1){g_wTmp1 = AdcSwitch(ADC_Chanel0) ;//读取转换结果}}