中颖电子AD操作

#define		ADC_DIS		0
#define		ADC_ENB		1
 
 
//ADC通道号定义
#define		ADC_Chanel0			(unsigned char)(0x00<<1)
#define		ADC_Chanel1			(unsigned char)(0x01<<1)
#define		ADC_Chanel2			(unsigned char)(0x02<<1)
#define		ADC_Chanel3			(unsigned char)(0x03<<1)
#define		ADC_Chanel4			(unsigned char)(0x04<<1)
#define		ADC_Chanel5			(unsigned char)(0x05<<1)
#define		ADC_Chanel6			(unsigned char)(0x06<<1)
#define		ADC_Chanel7			(unsigned char)(0x07<<1)

//*************************************
// 函数名称:Init_AD
// 函数功能:对AD初始化,开启或关闭ADC电路 
// 入口參数:ADC电路使能參数
// 出口參数:无
/***************************************/
void Init_AD(uint8 Mode)
{
//     0  1  2  3  4  5   6   7 相应转换时钟为
//Fsys/2 /4 /6 /8 /12 /16 /24 /32
	Bank0;
	if(Mode == ADC_ENB)
	{
		ADCON = 0X80 ;	 //打开ADC模块
		ADT = 0 ;
		ADT |= (2<<5) ; //Fsys/6 转换时钟
		ADT |= 5 ; //採样时间设置 0-15
	}
	else 
	{
		ADCON &= ~0x80 ; //关闭ADC模块 
	}	

}


//*************************************
// 函数名称:AdcSwitch
// 函数功能: 在单通道模式下转换某一通道的AD值
//					 在(扫描模式下)连续转化1-Chanel的

AD值
// 入口參数:要转换的AD通道号
// 出口參数:无
/***************************************/
void AdcSwitch(uint8 Chanel)
{	
	uint8 i = 0 ;

	for(i=20;i>0;i--) ;
	Bank0; ;
//	ADCON = 0X80 ;	 //打开ADC模块
	ADCON = (ADCON & ~(7<<1)) | Chanel ; //选择通道
	ADCON |= 0x01 ; //開始转换AD
	while(ADCON & 0x01); //等待转换结束

	return ;
}

//*************************************
// 函数名称:INIT_AD
// 函数功能: AD初始化
// 入口參数:要转换的AD通道号
// 出口參数:无
/***************************************/

void INIT_AD(void)
{
	Init_AD(ADC_ENB) ;
	ADCH = (SETB0) ;	//P4.1作为AD输入
}

//*************************************
// 函数名称:ReadAD
// 函数功能: 读AD
// 入口參数:要转换的AD通道号
// 出口參数:无
/***************************************/
uint16 ReadAD(void)
{
	AdcSwitch(ADC_Chanel0) ;//选择通道0 并进行AD转换
	return (uint16)(ADDH<<8+ADDL);//返回AD值
	
}

版权声明:本文博主原创文章,博客,未经同意不得转载。

原文地址:https://www.cnblogs.com/zfyouxi/p/4843312.html