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