STM8S ADC初始化设置及应用

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




//*************************************
// 函数名称:Init_AD
// 函数功能:对AD初始化,开启或关闭ADC电路 
// 入口参数:ADC电路使能参数
// 出口参数:无
/***************************************/
void Init_AD(uint8 Mode)
{
		uint16 i  ;
		
		if(Mode == ENB)	//启动ADC电路
		{							
			// F/4 转换时间分频  Fadc = Fmaster/ADC_CR1[4..6]
			// [000 F/2]  [001 F/3]  [010 F/4]			
			ADC_CR1 = (ADC_CR1 & 0X8F) | 0X00 ;  	//f/2
			// 数据左对齐
			ADC_CR2 &=  ~0X08 ;		
			// 启动ADC
			ADC_CR1 |= 0X01 ;
			// 等待AD电路稳定
			for(i=0;i<500;i++) ;
			
			ADC_CSR &= ~0X80 ;		//转换结束标志清0
			
			return ;
		}
		else
		{
			ADC_CR1 &= ~0X01;	//关闭ADC电路
			return ;						
		}
}


//*************************************
// 函数名称:AdcSwitch
// 函数功能: 在单通道模式下转换某一通道的AD值
//					 在(扫描模式下)连续转化1-Chanel的AD值
// 入口参数:要转换的AD通道号
// 出口参数:无
/***************************************/
void AdcSwitch(uint8 Chanel)
{
		//选择转换通道
		ADC_CSR = (ADC_CSR & 0XF0) | Chanel;		
		// 启动ADC
		ADC_CR1 |= 0X01 ;
		//等待转换
		while(!(ADC_CSR & 0X80));
		ADC_CSR &= ~0X80 ;				

		return ;
}

//*************************************
// 函数名称:Adc_Mode_Scan
// 函数功能: ADC扫描模式设置函数				 
// 入口参数:扫描模式开启参数
// 出口参数:无
/***************************************/
void Adc_Mode_Scan(uint8 Value)
{
	if(Value == ENB)
	{
		ADC_CR2 |=  0X02 ;
	}
	else
	{
		ADC_CR2 &=  ~0X02 ;
	}
}


//---应用实例-----
	//ADC初始化设置	
	Init_AD(ENB);	//初始化ADC电路并开启电路
//		Adc_Mode_Scan(OFF) ;//ADC扫描模式使能
	
	//ADC 转换	
	AdcSwitch(ADC_Chanel3) ;//转换通道3
	TmpH = ADC_DRH ;	//取转换结果
	TmpL = ADC_DRL ;	


posted @ 2013-07-25 17:59  坚固66  阅读(1266)  评论(0编辑  收藏  举报