使用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;
- }
- }
|