| /*--------------头文件应定义的信息----------------------- 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);
 }
 |