找回密码
 立即注册
查看: 59|回复: 4

ADC转换时,debug一直循环在等待完成标志位,求大佬帮助

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-08-23 11:14:05
已绑定手机

3

主题

13

回帖

67

积分

注册会员

积分
67
发表于 7 天前 | 显示全部楼层 |阅读模式
#include <STC8G.H>
#include <intrins.h>
#include "adc.h"

void AdcSetRate(void)                //100KSPS@12.000MHz
{
        ADCCFG &= ~0x0f;
        ADCCFG |= 0x01;                        //SPEED(1)
        ADCTIM = 0x2e;                        //CSSETUP(0), CSHOLD(1), SMPDUTY(14)
}

void ADC_Init(void)
{
        P3M0 &= ~0x08; P3M1 |= 0x08;        //配置P3.3为高阻输入
        AdcSetRate();        //初始化ADC速度
        ADCCFG |= 0x20;        //对齐模式
        ADCCFG |= 0x80;        //打开ADC电源
}

uint ADC_Read(void)
{
        uint adcvalue = 0;
        ADC_CONTR &= 0xf0;        //清除低四位
        ADC_CONTR |= 0x03;        //配置ADC3,即P3.3
        ADC_CONTR |= 0x40;        //启动ADC转换
        _nop_();
        _nop_();
        while(!(ADC_CONTR & 0x20));        //等待标志位
        ADC_CONTR &= ~0x20;        //清除标准位
        adcvalue = ((uint)ADC_RES << 8) | ADC_RESL; //读取ADC的值
        return adcvalue;
}
芯片为stc8g1k08a,debug时一直卡在while(!(ADC_CONTR & 0x20));

回复

使用道具 举报 送花

3

主题

2031

回帖

910

积分

等待验证会员

积分
910
发表于 7 天前 | 显示全部楼层
您在使用ADC进行数据采集时,遇到“debug一直循环在等待完成标志位”的问题,可能是由于以下几个原因导致的:

1. ADC配置不正确:ADC的初始化参数可能未设置正确,导致无法正常启动转换或无法产生完成标志位。
2. ADC电源未开启:虽然代码中设置了ADCCFG |= 0x80;,但需确认该位是否真正生效,确保ADC模块已供电。
3. ADC转换通道未正确选择:检查ADCCONTR |= 0x03;是否对应正确的通道(如P33)。
4. ADC转换模式设置错误:例如,是否启用了单次转换模式或连续转换模式,影响标志位的触发。
5. 中断或标志位处理不当:若存在中断配置,可能导致标志位被误清除或未被正确读取。
6. 硬件连接问题:ADC输入引脚未接信号或接地不良,导致无法正常采样。

建议您逐步排查以下几点:
检查ADC模块的电源和时钟是否已正确使能。
使用示波器或逻辑分析仪观察ADC的控制信号和转换结果寄存器。
确认ADC转换完成后标志位是否确实被置位。
在等待标志位之前添加延时,确保ADC有足够时间完成转换。
若使用中断方式,检查中断服务程序是否正确处理了ADC完成事件。

通过以上步骤,应能定位并解决ADC转换时等待完成标志位的问题。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:84
  • 最近打卡:2025-08-21 09:25:58

29

主题

1166

回帖

4341

积分

超级版主

积分
4341
发表于 6 天前 | 显示全部楼层
打开ADC电源语句不正确
ADC电源打开需要设置ADC_CONTR的BIT7,不是ADCCFG的BIT7
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-08-23 11:14:05
已绑定手机

3

主题

13

回帖

67

积分

注册会员

积分
67
发表于 6 天前 | 显示全部楼层
zh*** 发表于 2025-8-18 09:23
打开ADC电源语句不正确
ADC电源打开需要设置ADC_CONTR的BIT7,不是ADCCFG的BIT7

是的,感谢指正
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2025-08-23 11:06:14

76

主题

6636

回帖

1万

积分

超级版主

积分
13863
发表于 6 天前 | 显示全部楼层
没有打开ADC电源:
ADC_CONTR |= 0x80;   //打开ADC电源
打开电源后,至少要过1ms以上才做ADC转换,模拟电路从打开电源到稳定工作需要点时间的。
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-8-24 05:22 , Processed in 0.109154 second(s), 67 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表