51单片机笔记:定时器/计数器

单片机笔记

定时器/计数器

定时器/计数器的结构

AT89S51内部两个16位定时器/计数器:T0(P3.4),T1(P3.5),定时器/计数器T0由特殊寄存器TH0,TL0构成,T1由特殊功能寄存器TH1,TL1构成

T0,T1都有定时器和计数器两种工作模式,两种模式实质都是对脉冲信号进行计数,只不过技术信号来源不同。

  • 计数器模式 是对T0(P3.4)和T1(P3.5)两个引脚上的外部脉冲进行计数

  • 定时器模式是对系统时钟信号(fosc)经12分频后的内部脉冲信号(机器周期Tcy)计数.由于系统时钟频率fosc是定值,可根据数值计算出定时时间T(定时时间T = n * Tcy).

振荡周期Tosc = 1/fosc, 机器周期Tcy = 12Tosc = 12/fosc)

例如:fosc = 12Hz, Tcy = 1us

T0,T1属于加1计数器,即每记一个脉冲,计数器加1.(51单片机)

T0,T1具有4种工作方式(方式0,1,2,3)

特殊功能寄存器TMOD用于选择定时器/计数器T0,T1的工作模式和工作方式.

特殊功能寄存器TCON用于控制T0,T1的启动和停止计数,同时包含了T0,T1状态.

计数器起始计数从初值开始,单片机复位时计数器初值为0,也可给计数器装入一个新的初值(0 ~ 2^16 - 1).

若计数器溢出会产生中断,称溢出中断,最大计数值2^16 = 65536, 此时刻发生溢出中断, 最大初值2^16 - 1 = 65535

工作方式控制寄存器TMOD

寄存器地址89H, 不可按位操作, 高4位控制T1, 低4位控制T0.

D7 D6 D5 D4 D3 D2 D1 D0
GATE C/T’ M1 M0 GATE C/T’ M1 M0

D7-D4 : T1方式字段, D3-D0 : T0方式字段

M1, M0工作方式选择位
M1 M0 工作方式
0 0 方式0, 13位定时器/计数器
0 1 方式1, 16位定时器/计数器
1 0 方式2, 8位的常数自动重新装载的定时器/计数器
1 1 方式3, 仅适用于T0, 此时T0分成2个8位计数器, T1停止计数

方式0为兼容早期8048的13位定时器/计数器

GATE - 门控位
  • GATE = 0, 定时器是否计数, 由启动控制位TRx(x = 0, 1)来控制. (TRx = 1 时启动)
  • GATE = 1, 定时器是否计数, 由外部中断引脚INTx’上的电平与运行控制位TRx共同控制.(1 == INTx’ & 1 == TRx 为真时启动)
C/T’ - 计数器模式和定时器模式选择位

**C : Counter, T : Timer **

  • C/T’ = 0, 定时器模式, 对系统时钟12分频后的脉冲(fosc/12)进行计数.
  • C/T’ = 1, 计数器模式, 对计数器外部输入引脚T0(P3.4)或T1(P3.5)的外部脉冲(负跳变, 即对下降沿计数)计数.
定时器/计数器控制寄存器TCON

TCON字节地址88H, 位地址为88H~8FH.

D7 D6 D5 D4 D3 D2 D1 D0
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
TF1, TF0 - 计数溢出标志位

当计数器计数溢出时, 该位置1. 使用查询方式时, 此位可提供CPU查询, 但应注意查询后, 用软件及时该位清0. 使用中断方式时, 作为中断请求标志位, 进入终端服务程序后由硬件自动清0.

TR1, TR0 - 计数运行控制位
  • TR1/TR0位 = 1, 启动计数器计数的必要条件.
  • TR1/TR0位 = 0, 停止计数器计数.

该位可由软件置1和清0

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

方式1(M1 = 0, M0 = 1)

定时器计数器方式1的逻辑结构框图

方式1和方式0差别仅存在于计数器的位数不同, 方式1为16位计数器, 由THx高8位和TLx低8位构成(x = 0,1), 方式0为13位计数器, 有关控制状态位含义(GATE, C/T’, TFx, TRx)与方式0相同.

方式0(M1 = 0, M0 = 0)

定时器计数器方式0的逻辑结构框图

该方式为13位定时/计数器的计数最大值位2^13 = 8196

方式2

方式0和方式1最大特点是计数溢出后, 计数器为全0. 因此在循环定时或循环计数应用时就存在用指令反复装入计数初值的问题, 这会影响定时精度(指令本身执行也需要时间), 方式2就是为解决此问题而设置的.

M1, M0 = 1, 0时, 工作方式2. 8位自动重装载方式

方式2的逻辑结构框图

低8位用来计数/定时, 高8位用来保存初值, 硬件自动完成装入初值的操作

最大计数/定时范围2^8 = 256

方式3

方式3是为增加一个附加的8位定时器/计数器而设置的, 从而使AT89S51具有3个定时器/计数器. 方式3只适用于T0, T1不能工作在方式3
T0在方式3下, 分为了两个8位定时器/计数器

方式3的逻辑结构框图

对外部输入的计数信号的要求

计数器模式时, 计数脉冲来自外部输入引脚T0或T1. 当输入信号产生负跳变时, 计数值增1.

由于确认一次负跳变要花2个机器周期, 即24个振荡周期, 因此外部输入的计数脉冲的最高频率为系统振荡器频率的1/24

对外输入信号占空比没有限制, 但为确保某一给定电平在变化前能被采样1次, 该电平至少保持1个机器周期.

方式1应用 : P1口控制8只LED每0.5s闪亮一次
分析

设置晶振频率12MHz, 则机器周期为1us, 一次溢出中断时间的总耗时计算65536 * 1us = 65…ms

题目要求0.5s即500ms, 500ms > 65ms,故需软件计数, 500ms约溢出中断次数为100次

可用软件编写计时器对中断次数进行计数

设置TMOD寄存器
  1. TMOD寄存器的M1 = 0, M0 = 1则T0工作在方式1
  2. 设置C/T’ = 0, 为定时器模式
  3. GATE为0, 对T0的运行控制仅由TR0来控制
  4. 定时器T1不使用, 各相关位均设为0
D7 D6 D5 D4 D3 D2 D1 D0
GATE C/T’ M1 M0 GATE C/T’ M1 M0
0 0 0 0 0 0 0 1

TMOD初始化值则为0x01

计算定时器T0的计数初值

设定时时间5ms(即5,000us), 设T0计数初值为X, 假设晶振频率为11.0592MHz, 则定时时间为:

定时时间 = (2^16 - X) * Tcy = (2^16 - X) * 12/晶振频率

则 5000 = (2^16 - X) * 12 / 11.0592, 得X = 60,928

转换成16进制为0xee00, 其中0xee装入TH0, 0x00装入TL0.

X --> 65536(产生溢出)

个数n = 65536 - X

定时时间T = n * Tcy == 5ms == 5,000us

机器周期Tcy =  12 / 11.0592 us
设置IE寄存器

本例采用定时器T0中断, 因此需将IE寄存器中的EA,ET0位置1

启动T0

将定时器控制寄存器TCON中的TR0置1, 则启动定时器T0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值