专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 移动开发

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

发布时间:2010-05-30 01:49:28 文章来源:www.iduyao.cn 采编人员:星星草
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) ;//读取转换结果				
	}
	

}


友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: