askhua520 发表于 2025-9-16 11:34:48

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

8C2K32S2 如何使用T1实现ADC功能,
定时器1的P3.5(T1)接RC,接到P3.6比较器-,
P3.7比较器+接外分压电阻,测量P3.7的分压值,
有可以提供的例程吗?

国芯人工智能 发表于 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

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

神农鼎 发表于 2025-9-16 11:58:48

换 STC8H8K64U, 自带 12位 ADC



askhua520 发表于 2025-9-16 12:15:41

神农鼎 发表于 2025-9-16 11:58
换 STC8H8K64U, 自带 12位 ADC

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

神农鼎 发表于 2025-9-16 12:33:28


神农鼎 发表于 2025-9-16 12:35:24

https://www.stcaimcu.com/data/download/Datasheet/STC15H2K64S4.pdf

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





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







DebugLab 发表于 2025-9-16 14:21:49

要用PWM做DAC,P3.5(T1)并不能输出PWM

askhua520 发表于 2025-9-19 09:48:22

已经在论坛找到了例程,使用定时器和比较器实现的ADC功能,效果还是可以的。
https://www.stcaimcu.com/forum.p ... e=1&extra=#pid14609
页: [1]
查看完整版本: 8C2K32S2 如何使用T1实现ADC功能