找回密码
 立即注册
查看: 167|回复: 7

8C2K32S2 如何使用T1实现ADC功能

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-09-28 08:39:25

9

主题

16

回帖

95

积分

注册会员

积分
95
发表于 2025-9-16 11:34:48 | 显示全部楼层 |阅读模式
8C2K32S2 如何使用T1实现ADC功能,
定时器1的P3.5(T1)接RC,接到P3.6比较器-,
P3.7比较器+接外分压电阻,测量P3.7的分压值,
有可以提供的例程吗?

截图202509161130528471.jpg
截图202509161135313239.jpg
回复

使用道具 举报 送花

3

主题

1880

回帖

608

积分

等待验证会员

积分
608
发表于 2025-9-16 11:38:00 | 显示全部楼层
STC8C2K32S2 是一款基于增强型 8051 内核的高性能 8 位单片机,具备丰富的外设资源,包括定时器、ADC、比较器等模块。关于用户提出的问题:“如何使用 T1 实现 ADC 功能”,我们首先需要明确一点:定时器(T1)本身并不具备 ADC 转换功能。ADC(模数转换)功能通常由专门的 ADC 模块或比较器配合定时器实现某种形式的“时间积分”或“斜坡比较”方式的 ADC 转换。

根据用户的描述,其使用场景如下:
使用定时器 T1(P3.5)输出 PWM 波形;
经 RC 滤波后获得一个模拟电压;
该电压接入比较器负端(P3.6);
比较器正端(P3.7)接外部分压电阻,用于测量该分压值;
希望通过比较器与定时器配合,实现类似 ADC 的测量功能。

这是一种典型的“比较器 + 定时器”实现“时间-电压”转换的方案,常用于无 ADC 模块的单片机中实现模拟量测量。下面将详细说明实现原理与参考代码。

一、原理说明

1.1 基本思路
利用定时器 T1 输出 PWM 波形,经 RC 滤波后形成一个稳定的模拟电压;
该电压作为比较器的参考电压;
比较器正端接入待测电压(如外部分压电阻);
比较器输出连接到定时器的外部输入(如 T1 或 INT0);
通过测量比较器翻转的时间点,结合 PWM 频率与 RC 时间常数,计算出待测电压值;
该方法可实现“时间积分”型 ADC,精度取决于定时器精度与 RC 稳定性。

1.2 关键模块说明
定时器 T1:用于产生 PWM 波形,也可用于测量比较器翻转时间;
比较器:用于比较两个模拟电压;
RC 滤波电路:将 PWM 转换为模拟电压;
外部分压电阻:用于待测电压输入;
软件控制:通过中断或查询方式检测比较器输出变化。

二、硬件连接建议
P3.5(T1)输出 PWM;
RC 滤波电路连接在 P3.5 与地之间,输出接比较器负端(P3.6);
P3.7 接外部分压电阻,作为比较器正端;
比较器输出可通过中断或 GPIO 查询方式检测。

三、软件实现步骤

3.1 初始化 PWM 输出(T1)

配置定时器 T1 为 PWM 模式,输出固定频率的方波。

3.2 配置比较器

使能比较器模块,设置正端为 P3.7,负端为 P3.6。

3.3 配置定时器测量比较器翻转时间

可使用 T0 或 T2 作为计时器,记录比较器翻转时间。

3.4 测量并计算电压

通过测量比较器输出翻转的时间点,结合已知的 PWM 占空比与 RC 时间常数,反推待测电压值。

四、参考代码(Keil C51)

```c
include

define COMPPIN    P36    // 比较器输出引脚(可配置为中断输入)

unsigned long adcvalue = 0;

void Timer0Init(void) {
    TMOD |= 0x01;           // T0 定时器模式,16位
    TH0 = 0;
    TL0 = 0;
}

void Timer1PWMInit(void) {
    TMOD |= 0x20;           // T1 定时器模式,8位自动重载
    TH1 = 0xFF - 50;        // 占空比 50%
    TL1 = 0xFF - 50;
    TR1 = 1;
    ET1 = 1;
    EA = 1;
}

void ComparatorInit(void) {
    CMPCR1 |= (1

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:209
  • 最近打卡:2025-10-16 08:03:21

787

主题

1万

回帖

1万

积分

管理员

积分
19774
发表于 2025-9-16 11:58:48 | 显示全部楼层
换 STC8H8K64U, 自带 12位 ADC
截图202509161157466940.jpg

截图202509161158417586.jpg
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-09-28 08:39:25

9

主题

16

回帖

95

积分

注册会员

积分
95
发表于 2025-9-16 12:15:41 | 显示全部楼层
神*** 发表于 2025-9-16 11:58
换 STC8H8K64U, 自带 12位 ADC

就是不能换才这样搞的,STC有官方例程提供一下吗?
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:209
  • 最近打卡:2025-10-16 08:03:21

787

主题

1万

回帖

1万

积分

管理员

积分
19774
发表于 2025-9-16 12:33:28 | 显示全部楼层

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:209
  • 最近打卡:2025-10-16 08:03:21

787

主题

1万

回帖

1万

积分

管理员

积分
19774
发表于 2025-9-16 12:35:24 | 显示全部楼层
https://www.stcaimcu.com/data/download/Datasheet/STC15H2K64S4.pdf

STC15H2K64S4-LQFP44, LQFP32, P1/P0口有 10位ADC, 管脚兼容

截图202509161233397914.jpg

截图202509161236487537.jpg

=========================================


截图202509161234188276.jpg


截图202509161237329303.jpg

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:585
  • 最近打卡:2025-10-16 07:20:54
已绑定手机

86

主题

6274

回帖

1万

积分

超级版主

积分
11738
发表于 2025-9-16 14:21:49 | 显示全部楼层
要用PWM做DAC,P3.5(T1)并不能输出PWM
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-09-28 08:39:25

9

主题

16

回帖

95

积分

注册会员

积分
95
发表于 2025-9-19 09:48:22 | 显示全部楼层
已经在论坛找到了例程,使用定时器和比较器实现的ADC功能,效果还是可以的。
https://www.stcaimcu.com/forum.p ... e=1&extra=#pid14609
截图202509190948594958.jpg
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-10-16 08:09 , Processed in 0.121652 second(s), 85 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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