本帖最后由 Saefra 于 2016-12-12 14:40 编辑
如题,单步走的时候,取值是准确度;全速的时候取出的值一直是 512 自己的想法测试在下面代码后面的注释:(具体是什么问题造成的呢?望指点)
void ADC_Initialize(void) //初始化AD
{
TRISF2 = 1; //Pin:RF2/AN7,设置成输入
ADCON0 = 0x1d; //enable adc 0x1d AN7通道
ADCON1 = 0x00; //参考电压AVss-AVDD (对后4位PCFG不理解不懂)
ADCON2 = 0x21; //0b00100001 0x21left: 左对齐,A/D 采集时间8 个 TAD,A/D 转换时钟FOSC/8;
}
uint16_t Get_ADValue(void)
{
uint16_t temp = 0;
//ADC_Initialize(); //之前看见有帖子说,每次转换之前初始化一次,结果好像有没有都没什么关系,至少于我的这个问题无用
Delay_Nop(200); //等待所要求的采集时间,循环200个Nop,这里可以不要么?也不知道具体要等多久
Nop();
ADCON0|=0x03; // 主要是GO/DONE位置 1,启动转换
while(ADCON0 & 0X02) Nop(); //等待转换完成
temp = ADRESH; //值取出来
temp = (temp<<2);
temp = (temp | (ADRESL&0x03));
return temp;
}
|