找回密码
 立即注册
查看: 1245|回复: 5

ADC采集电压为0,求答疑解惑。

[复制链接]

4

主题

6

回帖

46

积分

新手上路

积分
46
发表于 2023-6-6 19:35:17 | 显示全部楼层 |阅读模式
微信截图_20230606192451.png


     按照STC8H手册里19.6范例程序,把ADC采集通道改了下。电压测量显示结果传到串口助手,一直是0?
附代码:

#include <STC8H.h>
#include <intrins.h>
#include <stdio.h>

void Delay1000ms()                //@11.0592MHz
{
        unsigned char data i, j, k;

        i = 57;
        j = 27;
        k = 112;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}



void UartInit(void)//9600bps  @11.0592MHz
{
                 SCON = 0x50;//8位数据,可变波特率
          AUXR |= 0x40;//定时器1时钟为FOSC,就是1T
          AUXR &= 0xFE;//串口1选择定时器1为波特率发生器
                TMOD &= 0x0F;//设定定时器1为16位重装载方式
                  TL1 = 0xE0;//设定定时器低位值
                  TH1 = 0xFE ;//设定定时器高位值
             ET1 = 0;//禁止定时器1中断
                  TR1 = 1;//启动定时器1
}

void Uart1_SendChar(unsigned char Udat)
{
    SBUF = Udat;//串口1数据寄存器
    while(!TI);//串口1中断发送请求标志
    TI = 0;   
}

char putchar(char c)
{
    Uart1_SendChar(c);
                  return c;
}       

void main()
{
                                                P_SW2 |= 0x80; //使能访问XFR
                                                P0M0 = 0x00;
                                                P0M1 = 0x00;
                                                P1M0 = 0x00;
                                                P1M1 = 0x00;
                                                P2M0 = 0x00;
                                                P2M1 = 0x00;
                                                P3M0 = 0x00;
                                                P3M1 = 0x00;
                                                P4M0 = 0x00;
                                                P4M1 = 0x00;
                                                P5M0 = 0x00;
                                                P5M1 = 0x00;
       
                                    P0M0 = 0x00; P0M1 = 0x10; //设置P0.4(47引脚)ADC测量的引脚为高阻输入模式
                                               
       
                                                ADCTIM = 0x3f; //设置ADC 内部时序
                                                ADCCFG = 0x2f; //设置ADC 时钟为系统时钟/2/16
                                                ADC_CONTR = 0x8c; //开启ADC测量功能,设置第12通道为ADC测量作用
                  UartInit();
                                                while (1)
                                                {
                                                       
                                                                ADC_CONTR = 0xcc; //启动AD 转换
                                                                _nop_();
                                                                _nop_();
                                                                while (!(ADC_CONTR & 0x20)); //查询ADC 完成标志
                                                       
                                                                ADC_CONTR &= ~0x20; //清完成标志
                                                                printf("测得外部ADC电压为%u",ADC_RES); //读取ADC 测量结果显示至串口助手
                                                        Delay1000ms();
                                                }
}

微信截图_20230606193358.png
回复

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:95
  • 最近打卡:2025-06-17 10:15:05

74

主题

6094

回帖

1万

积分

超级版主

积分
12735
发表于 2023-6-6 23:24:39 | 显示全部楼层
请下载“07-8H8K64U-15路12位ADC转换-串口1(P3.1)返回结果-C语言”里的HEX文件测试,STC8H4K64TLCD与STC8H8K64U的ADC完全兼容。MCU将ADC结果转成十进制文本上传,串口助手可以看到结果。

STC8A8K64D4-ADC相关程序.rar (139.83 KB, 下载次数: 127)
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:523
  • 最近打卡:2025-06-17 09:55:53
已绑定手机

23

主题

593

回帖

2989

积分

金牌会员

积分
2989
发表于 2023-6-7 07:57:54 | 显示全部楼层
你实物测试时是否和图中一样没有接VCC吧?
不停地学习
回复 支持 反对

使用道具 举报 送花

4

主题

6

回帖

46

积分

新手上路

积分
46
发表于 2023-6-7 08:35:12 | 显示全部楼层
wenhuixuan 发表于 2023-6-7 07:57
你实物测试时是否和图中一样没有接VCC吧?

VCC引脚接的,实验LED全部都能点亮。
回复 支持 反对

使用道具 举报 送花

4

主题

6

回帖

46

积分

新手上路

积分
46
发表于 2023-6-7 09:18:27 | 显示全部楼层
梁*** 发表于 2023-6-6 23:24
请下载“07-8H8K64U-15路12位ADC转换-串口1(P3.1)返回结果-C语言”里的HEX文件测试,STC8H4K64TLCD与STC8H8 ...

       谢谢,梁工。电路中的R2电阻坏掉了,可能是焊接时温度过高时间过长,给烧坏了吧。换了个电阻就好了,有数值了。

点评

这种情况,万用表量一下ADC输入电压马上就知道了,量到0V,ADC是0是正常的,然后就查为什么是0V,立刻就知道电阻坏了。  详情 回复 发表于 2023-6-7 09:44
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:95
  • 最近打卡:2025-06-17 10:15:05

74

主题

6094

回帖

1万

积分

超级版主

积分
12735
发表于 2023-6-7 09:44:31 | 显示全部楼层
lim*** 发表于 2023-6-7 09:18
谢谢,梁工。电路中的R2电阻坏掉了,可能是焊接时温度过高时间过长,给烧坏了吧。换了个电阻就好 ...

这种情况,万用表量一下ADC输入电压马上就知道了,量到0V,ADC是0是正常的,然后就查为什么是0V,立刻就知道电阻坏了。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-18 00:14 , Processed in 0.185454 second(s), 81 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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