本帖最后由 gaoyang9992006 于 2012-6-19 20:15 编辑
unsigned int ADC(unsigned char AD_FOSC,unsigned char ADC_Channel,unsigned char Alignment,unsigned char ADC_Select);
void ADC_Close(void);
unsigned int ADC(unsigned char AD_FOSC,unsigned char ADC_Channel,unsigned char Alignment,unsigned char ADC_Select)
{
unsigned int result=0;
ADCON0 &= 0x3F; //x先把高两位清零,其他位置不变
AD_FOSC<<=0x06; //把数据左移六位到达高两位。
ADCON0 |=AD_FOSC;//完成转换时钟选择。
ADCON0 &= 0xC7;//(把BIT5~BIT3清零)
ADC_Channel<<=0x03;// 左移三位对应位置。
ADCON0 |=ADC_Channel;//完成通道选择
ADCON1 &=0x7F;
ADCON1|=( Alignment<<7);
ADCON1&=0xF0;
ADCON1|=ADC_Select;//完成端口功能选择
ADCON0|=0x01;//ADON=1;启用AD转换。
ADCON0|=0x04;//GO/DONE=1;启动转换过程。
while(ADCON0&0x04);//等待转换完成
if(Alignment)
result=(unsigned char)(ADRESH<<8)|ADRESL;
else result=ADRESH;//如果选择左对齐,也就是选择8位精度,舍弃ADRESL中的低两位。
return result;
}
void ADC_Close()
{
ADCON0&=0xFE;
} |