//-AD模块时钟输入分频值- #define ADCS_DIV2 (0<<4) #define ADCS_DIV8 (1<<4) #define ADCS_DIV32 (2<<4) #define ADCS_RC (3<<4) #define ADCS_DIV4 (4<<4) #define ADCS_DIV16 (5<<4) #define ADCS_DIV64 (6<<4) //--AD通道选择------ #define ADC_Chanel0 (0x00<<2) #define ADC_Chanel1 (0x01<<2) #define ADC_Chanel2 (0x02<<2) #define ADC_Chanel3 (0x03<<2) #define ADC_Chanel4 (0x04<<2) #define ADC_Chanel5 (0x05<<2) #define ADC_Chanel6 (0x06<<2) #define ADC_Chanel7 (0x07<<2) #define ADC_Chanel8 (0x08<<2) #define ADC_Chanel9 (0x09<<2) #define ADC_Chanel10 (0x0A<<2) #define ADC_Chanel11 (0x0B<<2) //************************************* // 函数名称:PicAd_Init // 函数功能:ad初始化 // 入口参数:AD模块时钟输入分频值 // 出口参数:无 // //*************************************** void PicAd_Init(uint8 Prsc) { ADCON0 = 0X31 ;//启动AD电路 不接任何通道 ADCON1 = Prsc ;//转换结果左对齐 } //************************************* // 函数名称:AdcSwitch // 函数功能:转换某一通道的AD值 // 入口参数:AD通道选择 // 出口参数:无 //*************************************** void AdcSwitch(uint8 Chanal) { ADCON0 = (ADCON0 & 0xc3) | Chanal ; asm("nop");asm("nop");asm("nop");asm("nop"); asm("nop");asm("nop");asm("nop");asm("nop"); GO_nDONE = 1 ; //启动转换 while((ADCON0 & 0x02) != 0) ; } //------实例应用------- void main(void) { //ADC 初始化设置 PicAd_Init(ADCS_DIV32) ;//AD模块时钟输入频率 OK while(1) { while(!F_10MS); F_10MS = 0 ; AdcSwitch(ADC_Chanel4) ;//AN4 通道转换 g_u8Tmp1 = ADRESH ; //读取转换结果 } }