单片机(AT89C51)定时/计数器详解及其实验案例
目录
定时/计数器应用范围
定时/计数器是单片机系统一个重要的部件,其工作方式灵活、编程简单、使用方便,可用来实现定时控制、延时、频率测量、脉宽测量、信号发生、信号检测等。此外,定时/计数器还可作为串行通信中波特率发生器。
定时/计数器概述
- 80C51单片机内部有两个定时/计数器T0和T1,其核心是计数器,基本功能是加1。
- 对外部事件脉冲(下降沿)计数,是计数器;对片内机周脉冲计数,是定时器。
- 计数器由二个8位计数器组成。
- 定时时间和计数值可以编程设定,其方法是在计数器内设置一个初值,然后加1计满后溢出。调整计数器初值,可调整从初值到计满溢出的数值,即调整了定时时间和计数值。
- 定时/计数器作为计数器时,外部事件脉冲必须从规定的引脚(P3.4,P3.5)输入。且外部脉冲的最高频率不能超过时钟频率的1/24
定时/计数器的结构和工作原理
定时/计数器的结构:
8051单片机内部有两个16位的可编程定时/计数器,称为定时器0(T0)和定时器1(T1),可编程选择其作为定时器用或作为计数器用。其逻辑结构如下图所示:
定时/计数器的工作原理:
可用一个简单的框图构造它的模型 :N位计数器构成了电路的核心。定时和计数两种方式的区别在于计数器的脉冲来源.初值寄存器是用来设定“定时/计数的具体参数”
注:
(1) 何时控制启动计数? 启动控制(TR)
(2) 如何控制定时还是计数? 定时/计数控制C/T来控制(后面会介绍)
(3) 如何控制定时/计数的长短? N位初值寄存器(设定初值)
定时/计数器的控制寄存器
参与定时器/计数器管理的SFR有TMOD和TCON
定时/计数器方式寄存器TMOD
高4位控制T1 | 低4位控制T0 | ||||||
---|---|---|---|---|---|---|---|
门控位 | 计数/定时 方式选择 | 工作方式 选择 | 门控位 | 计数/定时 方式选择 | 工作方式 选择 | ||
G | C / T | M1 | M0 | G | C / T | M1 | M0 |
M1-M0:工作方式的选择位
M1M0 | 工作方式 | 功能 |
---|---|---|
00 | 方式0 | 13位计数器 |
01 | 方式1 | 16位计数器 |
10 | 方式2 | 两个8位计数器,初值自动装入 |
11 | 方式3 | 两个8位计数器,仅适用T0 |
C/T:计数/定时方式选择位
- C/T=1,计数工作方式,对外部事件脉冲计数,用作计数器。
- C/T=0,定时工作方式,对片内机周脉冲计数,用作定时器。
GATE:门控位
- GATE=0,运行只受TCON中运行控制位TR0/TR1的控制。
- GATE=1,运行同时受TR0/TR1和外中断输入信号的双重控制。只有当INT0/INT1=1且TR0/TR1=1,T0/T1才能运行。
注:TMOD字节地址89H,不能位操作,设置TMOD须用字节操作指令。
eg:TMOD=0XA6 0XA6 --->1010 0110 说明:高四位(T1双重控制,定时工作方式,并且为方式2)低四位(T0只 受TCON中运行控制位TR0/TR1的控制,计数工作方式,并且方式2)
说明:不管是定时还是计数工作方式,定时器T0或T1在对内部时钟或外部脉冲计数时,不占用CPU时间,除非产生溢出时才可能中断CPU的当前操作。
定时/计数器控制寄存器TCON
TCON | T1 中断标志 | T1 运行标志 | T0 中断标志 | T0 运行 标志 | INT1 中断 标志 | INT1 触发 方式 | INT0 中断 标志 | INT0 触发 方式 |
---|---|---|---|---|---|---|---|---|
位名称 | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
TCON低4位与外中断INT1,INT0有关,已在中断中叙述。不清楚可以查看上一篇blog(单片机(AT89C51)中断系统详解和中断系统应用实验)
高4位与定时/计数器T0、T1有关。
⑴ TF1: 定时/计数器T1溢出(中断)标志。
⑵ TF0: 定时/计数器T0溢出(中断)标志。
⑶ TR1: 定时/计数器T1运行控制位。TR1=1,T1运行; TR1=0,T1停止。
⑷ TR0: 定时/计数器T0运行控制位。TR0=1,T0运行; TR0=0,T0停止。
注:TCON的字节地址为88H,每一位有位地址,均可位操作。
定时/计数器的四种工作方式
在TMOD的M1-M0中已经提到,现在对此进行深入的探讨
方式0
当TMOD中的M0=0,M1=0时,为13位计数或定时方式。其中 TLi 使用低5位。
方式1
当TMOD中的M0=1,M1=0时,为16位计数或定时方式。
方式2
当TMOD中的M0=0,M1=1时,为8位自动重装初值计数或定时方式。
在方式2时,将16位计数器分成两个8位的计数器,THi 用来存放初值,当计数器溢出时,一方面将TFi置1,申请中断,一方面自动将TH的值装入TL。
方式3
T0 在方式3下时,T1作为波特率发生器,T1的控制位TF1、TR1出借给T0使用,而T0则构成两个独立的结构,其中TL0构成一个完整的8位定时器/计数器,而TH0则是一个仅能对晶振频率12分频的定时器。
T1作波特率发生器时,可以设置成方式0、1或2,用在任何不需要中断控制的场合。一般作波特率时常设成方式2的自动重装模式。
总结:
M1M0 | 方式 | 计 数 器 配 置 |
0 0 | 0 | TLx低5位与THx的8位构成13位计数器 |
0 1 | 1 | TLx与THx构成16位计数器 |
1 0 | 2 | 自动重装初值(THx)的8位(TLx溢出时)计数器 |
1 1 | 3 | 仅用于T0,分成两个8位计数器,T1停止计数 |
定时/计数器的应用
计算定时/计数初值
定时/计数初值计算公式:
其中:
N与工作方式有关: 方式0时,N=13; 方式1时,N=16; 方式2、3时,N=8。
机周时间与主振频率有关:机周时间=12/fosc eg:fosc=12MHZ时,1机周=1uS; fosc=6MHZ 时,1机周=2uS
例:定时器工作方式0,晶振频率6MHz,定时1ms,初值为?
T=2^13-1ms/2us= 8192-500=7692=1 1110 0000 1100 所以:TLi(低五位)=01100 THi(高八位)=11110000
工作方式1,频率12MHz,定时25ms,初值为?
T=2^16-25ms/1us=65536-25000=9E58 所以:TLi(低八位)=0101 1000 THi(高八位)=1001 1110
晶振频率12MHz时,工作方式2的最长定时时间为多少毫秒?四种工作方式最长定时时间分别为多少毫秒?
工作方式2,3--->八位 最长时间=1us*2^8=0.256ms
工作方式1 ---->16位 最长时间=1us*2^16=65.536ms
工作方式0 ---->13位 最长时间=1us*2^13=8.192ms
定时/计数器应用步骤
⑴ 合理选择定时/计数器工作方式
⑵ 计算定时/计数器定时初值(按上述公式计算)
⑶ 编制应用程序
①定时/计数器的初始化
包括定义TMOD、写入定时初值、设置中断系统、启动定时/计数器运行等。
②正确编制定时/计数器中断服务程序
注意是否需要重装定时初值,若需要连续反复使用原定时时间,且未工作在方式2,则应在中断服务程序中重装定时初值。
定时/计数器的案例分析(见下一篇,尽请期待!!!https://blog.csdn.net/weixin_45629315/article/details/105657169)
更多推荐
所有评论(0)