| /******************************************************************************************* ** 函数名称: Init_AD
 ** 函数描述: AD初始化
 ** 输入参数: 无
 ** 输出参数: 无
 *******************************************************************************************/
 void Init_AD(void)
 {
 ADCH=Bin(00000000);             //AD0 AD1通道选择
 ADT=Bin(10000011);              //AD时钟为12个CLK  采样时间3个AD时钟
 ADCON=Bin(00000000);            //关闭AD模块
 }
 /*******************************************************************************************
 ** 函数名称: Sample_AD
 ** 函数描述: AD初始化
 ** 输入参数: ch  :采样的通道号   P4.0-P4.3 P3.4-P3.7
 **           smdt:采样时间 0为短 1为长
 ** 输出参数: 无
 *******************************************************************************************/
 uint16 Sample_AD(uint8 ch)
 {
 uint16 adval;
 switch(ch)
 {
 case 0:       //AN0
 //    P4CR&=Bin(11111110);   //P40
 ADCH =Bin(00000001);
 ADCON=Bin(10000001);                 //使能AD0 启动转换
 break;
 case 1:       //AN1
 //    P4CR&=Bin(11111101);   //P41
 ADCH =Bin(00000010);
 ADCON=Bin(10000011);                 //使能AD1 启动转换
 break;
 case 2:       //AN2
 //   P4CR&=Bin(11111011);   //P42
 ADCH =Bin(00000100);
 ADCON=Bin(10000101);                 //使能AD2 启动转换
 break;
 case 3:       //AN3
 P4CR&=Bin(11110111);   //P43
 ADCH =Bin(00001000);
 ADCON=Bin(10000111);                 //使能AD3 启动转换
 break;
 case 4:       //AN4
 //    P3CR&=Bin(11101111);   //P34
 ADCH =Bin(00010000);
 ADCON=Bin(10001001);                 //使能AD4 启动转换
 break;
 case 5:     //AN5
 //    P3CR&=Bin(11011111);   //P35
 ADCH =Bin(00100000);
 ADCON=Bin(10001011);                 //使能AD5 启动转换
 break;
 case 6:     //AN6
 //   P3CR&=Bin(10111111);   //P36
 ADCH =Bin(01000000);
 ADCON=Bin(10001101);                 //使能AD6 启动转换
 break;
 case 7:     //AN7
 //    P3CR&=Bin(01111111);   //P37
 ADCH =Bin(10000000);
 ADCON=Bin(10001111);                 //使能AD7 启动转换
 break;
 default:
 break;
 }
 while((ADCON&Bin(01000000))==0)
 {
 _nop_();
 }
 adval=ADDH*4+ADDL;
 ADCON=Bin(00000000);                 //关闭AD
 
 return(adval);
 }
 |