//ADC通道号定义 #define ADC_Chanel0 (unsigned char)0x00 #define ADC_Chanel1 (unsigned char)0x01 #define ADC_Chanel2 (unsigned char)0x02 #define ADC_Chanel3 (unsigned char)0x03 #define ADC_Chanel4 (unsigned char)0x04 #define ADC_Chanel5 (unsigned char)0x05 #define ADC_Chanel6 (unsigned char)0x06 #define ADC_Chanel7 (unsigned char)0x07 //************************************* // 函数名称:Init_AD // 函数功能:对AD初始化,开启或关闭ADC电路 // 入口参数:ADC电路使能参数 // 出口参数:无 /***************************************/ void Init_AD(uint8 Mode) { uint16 i ; if(Mode == ENB) //启动ADC电路 { // F/4 转换时间分频 Fadc = Fmaster/ADC_CR1[4..6] // [000 F/2] [001 F/3] [010 F/4] ADC_CR1 = (ADC_CR1 & 0X8F) | 0X00 ; //f/2 // 数据左对齐 ADC_CR2 &= ~0X08 ; // 启动ADC ADC_CR1 |= 0X01 ; // 等待AD电路稳定 for(i=0;i<500;i++) ; ADC_CSR &= ~0X80 ; //转换结束标志清0 return ; } else { ADC_CR1 &= ~0X01; //关闭ADC电路 return ; } } //************************************* // 函数名称:AdcSwitch // 函数功能: 在单通道模式下转换某一通道的AD值 // 在(扫描模式下)连续转化1-Chanel的AD值 // 入口参数:要转换的AD通道号 // 出口参数:无 /***************************************/ void AdcSwitch(uint8 Chanel) { //选择转换通道 ADC_CSR = (ADC_CSR & 0XF0) | Chanel; // 启动ADC ADC_CR1 |= 0X01 ; //等待转换 while(!(ADC_CSR & 0X80)); ADC_CSR &= ~0X80 ; return ; } //************************************* // 函数名称:Adc_Mode_Scan // 函数功能: ADC扫描模式设置函数 // 入口参数:扫描模式开启参数 // 出口参数:无 /***************************************/ void Adc_Mode_Scan(uint8 Value) { if(Value == ENB) { ADC_CR2 |= 0X02 ; } else { ADC_CR2 &= ~0X02 ; } } //---应用实例----- //ADC初始化设置 Init_AD(ENB); //初始化ADC电路并开启电路 // Adc_Mode_Scan(OFF) ;//ADC扫描模式使能 //ADC 转换 AdcSwitch(ADC_Chanel3) ;//转换通道3 TmpH = ADC_DRH ; //取转换结果 TmpL = ADC_DRL ;