/*******************************************************************************************
** 函数名称: Init_AD
** 函数描述: AD初始化
** 输入参数: 无
** 输出参数: 无
*******************************************************************************************/
void Init_AD(void)
{
ADCH=Bin(00000000); //AD0 AD1通道选择
ADT=Bin(10000011); //AD时钟为12个CLK 采样时间3个AD时钟
ADCON=Bin(00000000); //关闭AD模块
}
/*******************************************************************************************
** 函数名称: Sample_AD
** 函数描述: AD初始化
** 输入参数: ch :采样的通道号 P4.0-P4.3 P3.4-P3.7
** smdt:采样时间 0为短 1为长
** 输出参数: 无
*******************************************************************************************/
uint16 Sample_AD(uint8 ch)
{
uint16 adval;
switch(ch)
{
case 0: //AN0
// P4CR&=Bin(11111110); //P40
ADCH =Bin(00000001);
ADCON=Bin(10000001); //使能AD0 启动转换
break;
case 1: //AN1
// P4CR&=Bin(11111101); //P41
ADCH =Bin(00000010);
ADCON=Bin(10000011); //使能AD1 启动转换
break;
case 2: //AN2
// P4CR&=Bin(11111011); //P42
ADCH =Bin(00000100);
ADCON=Bin(10000101); //使能AD2 启动转换
break;
case 3: //AN3
P4CR&=Bin(11110111); //P43
ADCH =Bin(00001000);
ADCON=Bin(10000111); //使能AD3 启动转换
break;
case 4: //AN4
// P3CR&=Bin(11101111); //P34
ADCH =Bin(00010000);
ADCON=Bin(10001001); //使能AD4 启动转换
break;
case 5: //AN5
// P3CR&=Bin(11011111); //P35
ADCH =Bin(00100000);
ADCON=Bin(10001011); //使能AD5 启动转换
break;
case 6: //AN6
// P3CR&=Bin(10111111); //P36
ADCH =Bin(01000000);
ADCON=Bin(10001101); //使能AD6 启动转换
break;
case 7: //AN7
// P3CR&=Bin(01111111); //P37
ADCH =Bin(10000000);
ADCON=Bin(10001111); //使能AD7 启动转换
break;
default:
break;
}
while((ADCON&Bin(01000000))==0)
{
_nop_();
}
adval=ADDH*4+ADDL;
ADCON=Bin(00000000); //关闭AD
return(adval);
} |