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

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

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-08-28 14:45:51
已绑定手机

4

主题

11

回帖

80

积分

注册会员

积分
80
发表于 2025-8-17 21:21:17 | 显示全部楼层 |阅读模式
#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

主题

2001

回帖

850

积分

等待验证会员

积分
850
发表于 2025-8-17 21:23:00 | 显示全部楼层
您在使用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
  • 打卡总天数:86
  • 最近打卡:2025-08-28 09:11:31

30

主题

1167

回帖

4362

积分

超级版主

积分
4362
发表于 2025-8-18 09:23:47 | 显示全部楼层
打开ADC电源语句不正确
ADC电源打开需要设置ADC_CONTR的BIT7,不是ADCCFG的BIT7
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-08-28 14:45:51
已绑定手机

4

主题

11

回帖

80

积分

注册会员

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

是的,感谢指正
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:168
  • 最近打卡:2025-09-02 10:14:23

76

主题

6682

回帖

1万

积分

超级版主

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-9-3 08:53 , Processed in 0.125882 second(s), 75 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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