#include "pic.h"
#include "pic16f689.h"
#include "adc.h"
#include "init.h"
void AD_init(void) //ADRESH,ADRESL为AD结果存储器
{
ADCON0 = 0Xa7; //选择通道9,左对齐参考电压为VDD,使能ADC
ADCON1 = 0X00; //选择时钟为Fosc/2
ANSELH |= 0X02; //将AN9,也就是RC7配置为模拟输入
INTCON |= 0XC0; //使能全局非屏蔽中断,允许外设中断
PIE1 |= 0X80; //运行ADC中断
PIR1 |= 0X80; //AD转换器中断标志,AD转换完成,(必须用软件清零)
}
uint ADC_Value_ONE(void) //ADC采集1次结果
{
uint value=0;
ADCON0 |=0X02; //将GO/DONE置1,启动AD转换
while (ADCON0&0X02); //查询GO/DONE位,如果为1等待转换完成,ADC转换完成,将GO/DONE置位0
value = ADRESH; //读取ADC转换结果的高2位
value = value<<8; //将高2位左移8位
value +=ADRESL; //低8位数据加入ADRESL值
return value;
}
uint ADC_Value_more (void) //AD多次采集取平均值
{
uchar i=0;
uint ADC_VALUE_ALL=0,mean_adc=0;
for (i=0;i<ADC_NUM;i++)
{
ADC_VALUE_ALL+=ADC_Value_ONE();
}
mean_adc=ADC_VALUE_ALL/ADC_NUM;
return mean_adc;
} |