我用ADC功能时 使用了两个ad通道分别转换热敏电阻的模拟信号 (AN0,AN1) 在显示的过程中发现,随着AN0数据的变化,AN1数据也在改变。而实际上AN1采集温度的环境是没有变化,理论上转换出来的数据是没有很大浮动的。 另外我做了另外几个测试
1 AN0通道温度环境不变情况下,改变AN1温度环境,AN0不受影响
2 不使用AN1通道转换,用AN3代替AN1,做以上的实验,改变AN0采集的温度环境,随着AN0数据变化,AN3数据也在改变。
3 不使用AN0通道转换,用AN3代替AN0,做以上的实验,通道之间没有影响
以下是我ADC的配置程序
void init_a2d(void){
ADCON0=0x80; // select Fosc/32
ADCON1=0x84; // select right justify result. A/D port configuration 1
ADON=1; // turn on the A2D conversion module
}
unsigned int read_a2d(unsigned char channel){
unsigned int result;
channel&=0x07; // truncate channel to 3 bits
NOP();
NOP();
ADCON0&=0xC5; // clear current channel select
NOP();
NOP();
ADCON0|=(channel<<3); // apply the new channel select
NOP();
NOP();
NOP();
NOP();
ADGO=1; // initiate conversion on the selected channel
while(ADGO)continue;
NOP();
NOP();
result = ADRESH;
result <<= 8;
result |= ADRESL;
return(result); // return 8 MSB of the result
}
我用了32时钟分频 右对齐数字值,通道转换用了几个空操作来缓冲,转换用了查询标志位的方式
请教各位,ADC通道 AN0是否会影响其他通道的转换。是不是跟程序的配置有关。谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
result <<= 8;
result |= ADRESL;
这样的语句比较让人心疼
result <<= 8;
result |= ADRESL;
result=(ADRESH<<8)|ADRESL;
说不定编译器优化了.结果都一样.第一种写法保险点不是好事?
一周热门 更多>