adc.c

来自「STC89LE516AD的ADC驱动源代码,包含了引起错误的注意事项」· C语言 代码 · 共 38 行

C
38
字号
#define ADC_GLOBALS 
#include "INCLUDES.H"
#if 0
void ADCPwrOn(void)
{
	ADC_CONTR|=(1<<ADC_CONTR_POWER_B);
	Delay100us(10);
}
#endif

/*STC89LE516AD 17个机器周期可完成一次转换*/
Uchar ADCGetResult(Uchar ch)
{
	Uchar i;
	#if 0
	if(ADCIsAlreadyPwrOn() ==0){
		ADCPwrOn();	
	}
	#endif
	P1_ADC_EN=0xf0;	//1=enable ADC,OPEN DRAIN.不能采用动态 P1_ADC_EN=(1<<ch);这样会出问题(同时读到两个通道的值,其它一个读取不到值)
	ADC_CONTR=0X00;	//CLR ADC_FLAG,CLR ADC_START.
	ADC_CONTR|=ch;	//select CH(CHS2,1,0)
	ADC_DATA=0X00; 	//CLR ADC_DATA
	Delay100us(100); //使输入电压稳定
	//ADC_CONTR&=(~(1<<ADC_CONTR_FLAG_B));//CLR ADC_FLAG
	ADC_CONTR|=(1<<ADC_CONTR_START_B);	 //ADC START.

	for(i=100;i>0;i--){
		if(ADCIsAlreadyFinish() )break;
		Delay100us(0);
		if(i<=1){ //ERR
			ADC_CONTR&=(~(1<<ADC_CONTR_START_B));	 //close(stop) ADC.
			return(0xff);
		}
	}
	ADC_CONTR&=(~(1<<ADC_CONTR_START_B));	 //close(stop) ADC.
	return(ADC_DATA);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?