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) ;//读取转换结果				
	}
	

}


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值