【51单片机】定时/计数器

本文介绍了51单片机的定时/计数器结构,包括两个定时器的区别,TCON和TMOD寄存器的功能,四种工作方式的初值计算,以及时钟周期与机器周期的关系。此外,还概述了编程流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 定时/计数器结构

在这里插入图片描述

简介

  • 用途:定时器和计数器
  • 核心:加1计数器
  • 原理:每来一个脉冲,加1计数器加1,当加到全1时再来一个脉冲使加1计数器归零,同时加1计数器的溢出使TCON寄存器中的TF0(或TF1)置1,向CPU发出中断请求
  • 脉冲来源
    定时器:由单片机内部时钟晶振器输出脉冲源提供
    计数器:由T0或T1引脚输入的外部脉冲源提供(8051的是P3.4或P3.5引脚)
  • 注意:T0或T1都不能同时既做定时器也做计数器

补充:

  • 计数的工作原理
    通过引脚P3.2(T0)或P3.5(T1)对外部脉冲信号进行计数。
    当输入脉冲信号产生由 1 到 0 的下降沿时,定时器的值加 1,在每个机器周期,CPU采样引脚 P3.4 和 P3.5 的输入电平。若前一个机器周期采样值为高,下一个机器周期采样值为低,则计数器加 1
    由于检测一个 1 到 0 的跳变需要2个机器周期,故最高计数频率为振荡频率的二十四分之一
    虽然对输入信号的占空比无特殊要求,但为了确保某个电平在变化之前至少被采样一次,要求电平保持时间至少是一个完整的机器周期

T1可作为串口的波特率发生器,而T0不能


2.相关寄存器

  • TCON( TCON 能位寻址

在这里插入图片描述

项目                                                                                                 说明
  TF1T1计数溢出时,硬件自动置TF1 = 1。故只编写溢出判断和TF1 = 0即可。在中断允许下,该位发出中断请求并进入中断后,其由硬件自动置零。在中断屏蔽下,该位可用作查询方式,此时由编程置零。
  TR1GATE = 1,INT1=1时,软件置TR1=1,启动T1。GATE = 0,软件置TR1 = 1,启动T1
  • TMOD( TMOD不能位寻址 ,复位值0x00)

在这里插入图片描述

  • GATE = 0  不受外部控制
    GATE = 1  计数器T0和T1分别受P3.2和P3.3引脚上的电平控制。当P3.2(或P3.3)为高电平,同时TR0(或TR1)为1,计数器T0(或T1)开始计数;当P3.2(或P3.3)为低电平,计数器T0(或T1)停止计数。

在这里插入图片描述

3.几种工作方式的初值计算

方式0

  • 工作原理:13位计数器,使用TL0的低5位和TH0的高8位组成,TL0的低5位溢出时向TH0进位。TH0溢出时发出中断请求。
    在这里插入图片描述
  • 初值计算公式:
    在这里插入图片描述

方式1

  • 工作原理:16位计数器,TL0作为低8位,TH0作为高8位
    在这里插入图片描述
  • 初值计算公式:
    在这里插入图片描述

方式2

  • 工作原理:计数器溢出后,计数器自动将上次设置的初值重装。
    在这里插入图片描述

  • 初值计算公式:
    注意:晶振频率必须选择12的整数倍,因为定时器的频率是晶振频率的1/12。
    在这里插入图片描述

  • 优点:
    适合做比较精准的脉冲信号发生器

  • 缺点:
    只有8位计数器,当定时较长时间时会带来麻烦和影响精度。最多经过256个机器周期,该计数器就会溢出,若使用12MHz晶振也只有256us的时间。

方式3

  • 工作原理:
    将T0分成两个独立的8位定时/计数器TL0和TH0。
    TL0为正常的8位定时/计数器,计数器溢出后置位TF0,申请中断,之后重装初值。
    TH0也是8位定时/计数器,但由于TL0占用了TF0和TR0,因此TH0占用定时器TF1和TR1(所以T1不能用)

注意:只能用于定时/计数器T0,T0工作在方式3时,T1不要使用在有中断的场合。通常该种情况下T1用作串口波特率发生器。

在这里插入图片描述


4.时钟周期与机器周期的相关计算

在这里插入图片描述


5.编程流程

在这里插入图片描述

参考文章

https://blog.youkuaiyun.com/weixin_42625444/article/details/93471117


定时器初值的计算

理论依据:
1、时钟周期 = 1 ÷ 晶振频率(Hz)
2、机器周期 = n × 时钟周期 (单片机是几 T 的,n 就是几)
3、1Hz = 1秒
4、传统的51单片机是 12T的。

用计数思维去计算(因为每经过一个机器周期,计数值加1 的时间是固定)。例子:
假设晶振频率 12MHz,51单片机是12T单片机,使用定时器T0实现50ms的定时。那么
(1)在模式 1 下,定时器T0是 16 位的,其数值范围是0 - 65535(但总的计数个数是 65536,因为在0时,计数个数就算一个了)
(2)机器周期 = 12 × (1 ÷ 12000000) = 1us
(3)因为 50ms = 50000us,而机器周期是1us,用计数思维理解就是需要计数50000次,即定时器要计数的次数为 50000us ÷ 1us = 50000次
(4)因为定时器是从初值开始向上计数到溢出的,所以定时器初值为 65536 - 50000 = 15536

定时器初值的几种写法

方式 1 :

TH0 = (65536 - 50000) / 256;  // 初始化定时器初值,50ms溢出一次
TL0 = (65536 - 50000) % 256;

方式 2 :

TH0 = (65536 - 50000) >> 8;  // 初始化定时器初值,50ms溢出一次
TL0 = (65536 - 50000) & 0xFF;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值