分享到:
//ADC采样取值
uint ADC_Collect(uchar channel)//AD采集
{
uint ADCMaxValue=0,ADCMinValue=0xFFFF,ADC_Sum=0;
uint ADC_ACC=0,ADC_Dat = 0;
uchar ADCSampleCnt=0;
ADCR0 &= 0x0f;//
ADCR0 |= (channel << 4);//打开所需通道
ADON = 1;//使能AD
for(ADCSampleCnt=0;ADCSampleCnt<12;ADCSampleCnt++)
{
ADEOC = 0;//start ADC
do{
Nop();
}while(ADEOC==0);
ADC_ACC = (ADRH << 4) | ADRL;//
if(ADCSampleCnt > 1)//舍弃前两次的AD值
{
if(ADC_ACC > ADCMaxValue)
{
ADCMaxValue=ADC_ACC;
}
if(ADC_ACC < ADCMinValue)
{
ADCMinValue = ADC_ACC;
}
ADC_Sum += ADC_ACC;
}
}
ADC_Dat = (ADC_Sum-ADCMaxValue-ADCMinValue) >> 3;//除以8
return ADC_Dat; //转换完成返回AD值
}
BAT_ADC = ADC_Collect(0x0a);//读取AD值
(1 )
(0 )
回复
举报
发表回复
版
块
导
航
块
导
航
举报
请选择举报类别
- 广告垃圾
- 违规内容
- 恶意灌水
- 重复发帖

发帖
回复
楼主