PIC16F690 ADC模块初始化设置及应用

//-AD模块时钟输入分频值-
#define		ADCS_DIV2		(0<<4)
#define		ADCS_DIV8		(1<<4)
#define		ADCS_DIV32		(2<<4)	
#define		ADCS_RC			(3<<4)
#define		ADCS_DIV4		(4<<4)
#define		ADCS_DIV16		(5<<4)
#define		ADCS_DIV64		(6<<4)



//--AD通道选择------
#define		ADC_Chanel0			(0x00<<2)
#define		ADC_Chanel1			(0x01<<2)
#define		ADC_Chanel2			(0x02<<2)
#define		ADC_Chanel3			(0x03<<2)
#define		ADC_Chanel4			(0x04<<2)
#define		ADC_Chanel5			(0x05<<2)
#define		ADC_Chanel6			(0x06<<2)
#define		ADC_Chanel7			(0x07<<2)
#define		ADC_Chanel8			(0x08<<2)
#define		ADC_Chanel9			(0x09<<2)
#define		ADC_Chanel10			(0x0A<<2)
#define		ADC_Chanel11			(0x0B<<2)





//*************************************
// 函数名称:PicAd_Init
// 函数功能:ad初始化
// 入口参数:AD模块时钟输入分频值
// 出口参数:无
// 
//***************************************
void PicAd_Init(uint8 Prsc)
{
	ADCON0 = 0X31 ;//启动AD电路 不接任何通道
	ADCON1 = Prsc ;//转换结果左对齐 
	
}
//*************************************
// 函数名称:AdcSwitch
// 函数功能:转换某一通道的AD值
// 入口参数:AD通道选择
// 出口参数:无
//***************************************
void AdcSwitch(uint8 Chanal)
{
	ADCON0 = (ADCON0 & 0xc3) | Chanal ;
	asm("nop");asm("nop");asm("nop");asm("nop");
	asm("nop");asm("nop");asm("nop");asm("nop");
	GO_nDONE = 1 ; //启动转换
	while((ADCON0 & 0x02) != 0) ;
}



//------实例应用-------

void main(void)
{
	//ADC 初始化设置
	PicAd_Init(ADCS_DIV32) ;//AD模块时钟输入频率 OK

	while(1)
	{
		while(!F_10MS);
		F_10MS = 0 ;

		AdcSwitch(ADC_Chanel4) ;//AN4 通道转换
		g_u8Tmp1 = ADRESH ; //读取转换结果

	}
}


 

 

posted on 2013-08-22 17:56  bbsno  阅读(632)  评论(0编辑  收藏  举报

导航