I Love mcu
欢迎光临我爱单片机博客!

新唐 8051 内核单片机定时器完整配置教程

适用型号:N79E814、N79E815、N79E835、W79E4051、W79E632、N89E516新唐 8051 系列,寄存器、逻辑兼容标准 51,新增扩展定时器 / 时钟分频。

一、基础核心寄存器(标准 51 通用)

1. 模式寄存器 TMOD(地址 0x89)

表格
位 7 位 6 位 5 位 4 位 3 位 2 位 1 位 0
GATE1 C/T1 M11 M10 GATE0 C/T0 M01 M00
  • GATE=0:仅 TRx 控制定时器启停(常用)
  • C/T=0:定时器模式(系统时钟分频计数);=1 计数器(外部引脚脉冲)
  • M1 M0 四种工作模式:
    1. 00 模式 0:13 位定时器(TL 低 5 位,TH 高 8 位)极少用
    2. 01 模式 1:16 位定时器(0~65535,最常用)
    3. 10 模式 2:8 位自动重装(0~255,高频短定时)
    4. 11 模式 3:T0 拆两个 8 位定时器,T1 仅作波特率发生器

2. 控制寄存器 TCON(地址 0x88)

  • TR0=1:开启定时器 0;TR0=0 关闭
  • TR1=1:开启定时器 1;TR1=0 关闭
  • TF0/TF1:溢出中断标志,溢出硬件置 1,中断响应后硬件清零

3. 计数寄存器

  • TH0、TL0:定时器 0 高低 8 位
  • TH1、TL1:定时器 1 高低 8 位

4. 中断寄存器 IE(0xA8)

  • ET0=1:使能定时器 0 中断
  • ET1=1:使能定时器 1 中断
  • EA=1:总中断开关(必须打开)

二、时钟分频关键(新唐 8051 重点)

标准 51 默认:机器周期 = 系统晶振 / 12

例:12MHz 晶振 → 1 机器周期 = 1μs

新唐 8051 大多支持6T 模式(6 分频),速度翻倍,由 CKCON 寄存器配置。

定时计算公式:

单次定时时长 = 计数次数 × 机器周期

三、两种最常用模式配置示例

示例 1:模式 2 8 位自动重装(12MHz,100μs 定时)

12T 模式,1 机器周期 1μs,需要计数 100 次溢出

初值 = 256 – 100 = 156 (0x9C)

c
运行
#include <N79E814.H>
void Timer0_Init(void)
{
    TMOD |= 0x02;  // T0模式2,定时器
    TH0 = 0x9C;    // 重装初值
    TL0 = 0x9C;
    ET0 = 1;       // 开T0中断
    EA = 1;        // 总中断
    TR0 = 1;       // 启动定时器0
}

// 定时器0中断服务函数
void Timer0_ISR(void) interrupt 1
{
    // 定时100μs进入一次,TH0硬件自动重装无需手动赋值
}

示例 2:模式 1 16 位定时器(12MHz,5ms 定时)

单次计数 5000 次,16 位最大值 65536

初值 = 65536 – 5000 = 60536 (0xECB8)

TH0=0xEC,TL0=0xB8

c
运行
void Timer0_Init(void)
{
    TMOD |= 0x01;  // T0模式1 16位定时
    TH0 = 0xEC;
    TL0 = 0xB8;
    ET0 = 1;
    EA = 1;
    TR0 = 1;
}

void Timer0_ISR(void) interrupt 1
{
    // 模式1无自动重装,溢出必须手动重载初值
    TH0 = 0xEC;
    TL0 = 0xB8;
    // 用户定时任务
}

四、新唐特有扩展功能

1. 6T/12T 时钟切换 CKCON 寄存器

多数新唐 8051 CKCON.0 = X6
  • X6=0:12T 标准模式
  • X6=1:6T 高速模式,机器周期缩短一半
c
运行
CKCON |= 0x01; // 开启6T

2. 独立看门狗定时器(WDT)

新唐 8051 内置硬件看门狗,独立 RC 时钟,用于程序跑飞复位,通过 WDTCR 配置。

3. 额外 T2 定时器(部分型号 N89E516 等)

T2 自带捕获 / 自动重装,适合高精度定时、串口波特率,寄存器:T2CON、TH2、TL2、RCAP2H、RCAP2L。

五、查询方式(不使用中断)

无需开 IE 中断,循环判断 TF 溢出标志:
c
运行
void Delay100us(void)
{
    TMOD |= 0x02;
    TH0=0x9C; TL0=0x9C;
    TR0=1;
    while(TF0 == 0); // 等待溢出
    TF0 = 0;         // 软件清标志
    TR0 = 0;
}

六、常见踩坑点

  1. 模式 1 溢出忘记手动重装 THx/TLx,定时时长越来越长
  2. 未打开 EA 总中断,中断函数不会进入
  3. GATE 置 1 后,定时器启停受 INT0/INT1 引脚控制,定时器不跑
  4. 6T/12T 切换后未重新计算定时初值,定时误差翻倍
  5. 新唐头文件未包含,寄存器名识别报错,需引入对应型号.h

七、快速配置步骤总结

  1. 配置 TMOD:选择定时器、模式、定时 / 计数
  2. 计算初值,赋值 THx、TLx
  3. 如需中断:ETx=1,EA=1
  4. TRx=1 启动定时器
  5. 中断模式:模式 1 手动重装;模式 2 自动重装
  6. 6T 高速场景修改 CKCON 分频位
赞(6) 打赏
分享到

我爱单片机博客

单片机开发、学习、交流与分享博客!

关于我们联系我们

登录

找回密码

注册