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



	}

}


 

 

你可能感兴趣的:(初始化)