/*--------------头文件应定义的信息----------------------- sfr P1M0 = 0x91; //P1口模式设置寄存器 sfr P1M1 = 0x92; sfr ADC_CONTR = 0xC5;//AD转换控制寄存器 sfr ADC_DATA = 0xC6;//AD转换结果寄存器,高8位 sfr ADC_LOW2 = 0xBE;//AD转换结果寄存器,低2位 --------------------------------------------------------*/ /************************************************************************************* 功能:A/D转换 入口:channel = 通道号 .0~7:0通道;1:1通道。。。。。。。 出口:AD_result: 10位的数据,无符号整型。 说明:1、P1M0、P1M1为P1口模式设置寄存器,如作为A/D转换,则应设置为开漏模式,即相应为 置1,eg:把P1.2设为AD,则应设置P1M0=#0000 0100B; P1M1=#0000 0100B; 2、DelayNms();软件延时 *************************************************************************************/ INT16U Ad_Change(INT8U channel) { INT16U AD_Result_Temp = 0 ;
ADC_CONTR=ADC_CONTR|0x80; //1000,0000打开A/D转换电源 P1M0=0xc0; //1100 0000,P1.6--P1.7先设为开漏。断开内部上拉电阻 P1M1=0xc0; DelayNms(1); //延时1ms使电源稳定 ADC_CONTR=ADC_CONTR&0xE0; //1110,0000 清ADC_FLAG,ADC_START位和低3位 ADC_CONTR=ADC_CONTR|channel&0x07;//设置当前通道号 delayNms(2); //延时2ms使输入电压达到稳定 ADC_DATA=0; //清A/D转换结果寄存器 ADC_LOW2=0; ADC_CONTR=ADC_CONTR|0x08; //0000_1000启动A/D转换(ADC_START=1) while((ADC_CONTR & 0x10)==0); //0001,0000等待A/D转换结束(ADC_FLAG=1) ADC_CONTR=ADC_CONTR&0xE7; //1110,0111清ADC_FLAG位,停止A/D转换 AD_Result_Temp=((AD_Result_Temp|ADC_DATA)<<2)|(ADC_LOW2&0x03);//整合10位数据 return(AD_Result_Temp); }
|