使用PIC16F1933单片机编写4通道AD转换程序。通道编号AN0,AN1,AN3,AN4。单片机FOSC位32MHZ。由于单片机的转换结果寄存器只有ADRESH和ADRESL,转换结果会被其他的通道覆盖。如何在程序中做到AD转换结果相互隔离。有啥好方**搞了好几天了。大家帮忙看看。使用以下的代码只能做到AN0,AN1不影响,AN3,AN4还是不行。/*-------- 多通道ADC采样函数 --------*/
void ADC_ScanChannels(void) {
for(unsigned char i=0; i<ADC_CHANNELS; i++) {
// 切换ADC通道
ADCON0bits.CHS = adc_channels[i]; // 选择当前通道
__delay_us(5); // 等待通道切换稳定(至少2.4us@32MHz)
// 启动转换并等待完成
ADCON0bits.GO = 1; // 启动AD转换
while(ADCON0bits.GO); // 等待转换完成
// 读取并存储结果(右对齐处理)
adc_results[i] = ((ADRESH << 8) | ADRESL);
// 清除旧结果寄存器
ADRESH = 0x00;
ADRESL = 0x00;
}
}
|