#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值 }
版权声明:本文博主原创文章,博客,未经同意不得转载。