#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值
}
|