AT89C51定时器/计数器的使用

  AT89C51单片机内有定时器/计数器 T0、T1 共2个定时/计数器,有4种工作方式。
  每个定时器/计数器( T0 和 T1),在特殊功能寄存器 TMOD 中都有一个控制位,它选择 T0 和 T1 为定时器还是计数器。

TMOD 用于控制 T0 和 T1 的工作方式

AT89C51定时器/计数器的使用_第1张图片

定时器/计数器 4 种工作方式

AT89C51定时器/计数器的使用_第2张图片

C/ T :计数工作方式/定时工作方式选择位

C/ T =0,设置为定时工作方式。
C/ T =1,设置为计数工作方式。

GATE:选通控制位

GATE=0,只要用软件对 TR0(或 TR1)置 1 就可启动定时器。
GATE=1,只有 INT0 (或 INT1)引脚为 1,且用软件对 TR0(或 TR1)置 1 才可启动定时器工作。

TMOD 的所有位在系统复位后清 0, TMOD 的地址为 89H,不能位寻址,只能用字节方式设置工作方式。

控制寄存 TCON

TCON 用于控制定时器的启动、停止以及标明定时器的溢出和中断情况。 TCON 的字节地址为 88H,
位地址为 88H~8FH, TCON 的低 4 位与外部中断有关

AT89C51定时器/计数器的使用_第3张图片
            TCON 寄存器的定义

TR0 为定时器 T0 的运行控制位

  该位由软件置位和复位。当 GATE( TMOD 的 D3 位)为 0 时, TR0 为 1 时允许 T0 计数。 TR0 为 0时禁止 T0 计数。当 GATE( TMOD 的 D3 位)为 1 时,仅当 TR0 等于 1 且 INT0( P3.2)输入为高电平时才允许 T0 计数。 TR0 为 0 或 INT0 输入低时都禁止 T0 计数。

TF0 为定时器 T0 的溢出标志位

  当 T0 被允许计数以后, T0 从初值开始加 1 计数,最高位产生溢出时置“ 1” TF0,并向 CPU 请求中断,当 CPU 响应时,由硬件清“ 0” TF0; TF0 也可以由程序查询或清“ 0”。

TR1 为定时器 T1 的运行控制位

  该位由软件置位和复位。当 GATE( TMOD 的 D7 位)为 0 时, TR1 为 1 时允许 T1 计数, TR1 为 0时禁止 T1 计数。当 GATE( TMOD 的 D7 位)为 1 时,仅当 TR1 为 1 而且 INT1( P3.3)输入为高电平时才允许 T1 计数。 TR1 为 0 且 INT1 输入低电平时禁止 T1 计数。

TF1 为 T1 的溢出标志位

  当 T1 被允许计数以后, T1 从初值开始加 1 计数,最高位产生溢出时置“ 1” TF1,并向 CPU 请求中断,当 CPU 响应时,由硬件清“ 0” TF1; TF1 也可以由程序查询或清“ 0”。

IE1:外部中断 1 请求标志。

  当 IT1=0 时,为电平触发方式,每个机器周期 采样 INT1 引脚,若 INT1 引脚为低电平,则置 1,否则 IE1 清 0。
  当 IT1=1 时, INT1 为跳变沿触发方式,当第一个机器周期采样到 INT1 为低电平时,则 IE1 置1.IE1=1,表示外部中断 1 正在向 CPU 申请中断,当 CPU 响应中断,转向中断服务程序时,应该由硬件清 0。

IT1:外部中断 1 触发方式选择位

IT1=0,为电平触发方式,引脚 INT1 上低电平有效。
IT1=1,为跳变沿触发方式,引脚 INT1 上低电平从高到低负跳变有效。

IE0:外部中断 0 请求标志。
IT0:外部中断 0 触发方式选择位。

定时器/计数器的工作方式

工作方式 0

T0 工作方式 0 逻辑结构图
AT89C51定时器/计数器的使用_第4张图片
  在这种工作方式下, 16 位的计数器( TH0 和 TL0)只用了 13 位构成 13 位定时器/计数器。 TL0 的高 3 位未用,当 TL0 的低 5 位计满时,向 TH0 进位,而 TH0溢出后对中断标志位 TF0 置 1,并申请中断。 T0 是否溢出可用软件查询 TF0 是否为 1。

定时时间为:

  t = ( 2^13- T0 初值 ) × 机器周期
  定时器启动后,定时或计数脉冲加到 TL0 的低 5 位,从预先设置的初值(时间常数)开始不断增 1,TL0 计满后,向 TH0 进位。当 TL0 和 TH0 都计满后,置位 T0 的定时器计数满标志 TF1,以此表明定时时间或计数次数已到,以供查询或在开中断的条件下,可向 CPU 请求中断。如需再次定时或计数,需要用指令重置时间常数。

工作方式 1

T0 工作方式 1 逻辑结构图
AT89C51定时器/计数器的使用_第5张图片
  它与工作方式 0 的差别仅在于工作方式 1 是以 16 位计数器参加计数,工作方式 0 之所以用 13 位计数方式是为了和 MCS-51 单片机的前一个 MCS-48 系列单片机相兼容,所以定时器的工作方式 0 以很少使用。

定时时间与初值的关系为:

  t = ( 2^16- T0 初值 ) × 机器周期
  方式 1 下计数寄存器为 16 位,若晶振频率为 12MHz,则方式 1 下的最大定时时间为 65.536 ms。即计数器初值设置为 0000H,经过 2^16=65536 个机器周期后定时器将产生溢出,故定时时间为 1μs× 65536= 65.536 ms。

工作方式 2

T0 工作方式 2 逻辑结构图
AT89C51定时器/计数器的使用_第6张图片
  定时器/计数器构成一个能重复装初值的 8 位计数器。在工作方式 0、工作方式 1,若用于重复定时或计数,则每次计满溢出后,计数器变为全“ 0”,故需要用软件重新装入初值。而方式 2 可在计数器计满时自动装入初值。工作方式 2 把 16 位的计数器拆成两个 8 位计数器。 TL0 用作 8 位计数器。 TH0 用来保存初值,每当 TL0 计满溢出时,可自动将 TH0 的初值再装入 TL0 中,继续计数,循环重复。工作方式 2 的定时时间为 TF0 溢出周期.

定时时间与初值的关系为:

  t = ( 2^8 - T0 初值)×机器周期
  这种工作方式可省去用户软件中重装初值的程序,并可产生相当精度的定时时间,特别适合于产生周期性脉冲以及作为串行口波特率发生器,缺点是计数长度太小。

工作方式 3

T0 工作方式 3 逻辑结构图
AT89C51定时器/计数器的使用_第7张图片
  该工作方式只适用于定时器/计数器 T0。 T0 在工作方式 3时被拆成两个相互独立的计数器。

实例:

  T1 运行于定时工作方式,振荡器频率为 12MHz,要求定时 100µs。求不同工作方式时的定时初值。

  机器周期= 12/振荡器频率 = 12/12MHz = 1µs。所以要计数的机器周期个数为 100。各方式下的初值分别为:
  方式 0:( 13 位方式): Y = 8192-100=8092 =1F9CH
  方式 1:( 16 位方式): Y = 65536-100=65436 =0FF9CH
  方式 2、 3( 8 位方式): Y = 256-100=156 =9CH

你可能感兴趣的:(51单片机)