打印
[PIC®/AVR®/dsPIC®产品]

PIC16F1933单片机AD4通道采样问题

[复制链接]
133|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
郑朝清|  楼主 | 2025-3-21 20:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用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;
    }
}

使用特权

评论回复
沙发
弓长月月鸟| | 2025-3-21 21:36 | 只看该作者
每次只采集一路AD ,采集下一路时,将之前采集的通道关闭即可

使用特权

评论回复
板凳
xionghaoyun| | 2025-3-22 13:46 | 只看该作者
使能一路关闭一路

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

79

帖子

2

粉丝