1.
简介
C51
中的定时器和计数器是同一个硬件电路支持的,通过寄存器配置不同,就可以将他当做定时器
或者计数器使用。
确切的说,定时器和计数器区别是致使他们背后的计数存储器加
1
的信号不同。当配置为定时器使
用时,每经过
1
个机器周期,计数存储器的值就加
1
。而当配置为计数器时,每来一个
负跳变(高电平转低电平)
信号 (信号从
P3.4
或者
P3.5
引脚输入
)
,就加
1
,以此达到计数的目的。
标准
C51
有
2
个定时器
/
计数器:
T0
和
T1
。他们的使用方法一致。
C52
相比
C51
多了一个
T2
1.1概念解读
- 定时器和计数器,电路一样
- 定时或者计数的本质就是让单片机某个部件数数
- 当定时器用的时候,靠内部震荡电路数数
- 当计数器用的时候,数外面的信号,读取针脚的数据
1.2
定时器怎么定时
定时器的本质原理: 每经过一个机器周期,就加
1 :
寄存器
思考:
晶振
(
晶体震荡器
)
,又称数字电路的
“
心脏
”
,是各种电子产品里面必不可少的频率元器件。数字电
路的所有工作都离不开时钟,晶振的好坏、晶振电路设计的好坏,会影响到整个系统的稳定性。
时钟周期也称为
振荡周期
,定义为
时钟频率
的
倒数
(晶振的倒数)
。时钟周期是计算机中最基本的、最小的
时间单位
。在一个时钟周期内,
CPU
仅完成一个最基本的动作。时钟周期是一个时间的量。更小的时钟周期就意味着更高的工作频率
机器周期也称为
CPU
周期。在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶
段(如取指、译码、执行等),每一阶段完成一个基本操作。完成一个基本操作所需要的时间称为
机器周期。一般情况下,
一个机器周期由若干个时钟周期组成 (n倍的时钟周期)
当晶振频率是
11.0592MHz
的时候(zhao M=),等于
11059.2KHz = 11059200Hz
机器周期
= 12 x
时钟周期
=12 x (1/
时钟频率
)
秒
= 12 /
时钟频率 秒
= 12 / 11059200
秒
= 12 000 000 / 11059200 微秒
= 1.085
微秒
1.3
定时器编程
相关寄存器:
TH0是高八位,TL0是低八位,初值均为00H
在
TH0/1
和
TL0/1
寄存器中加
1
,默认是从
0
开始数数,最多能数
65536
下,累计计时
71ms
就不让他从
0
开始数数,
10ms
需要数
9216
下,你让他从
65536-9126=56320
(
16
进制表示为
0xDC00
)开始数数
这样
TL0=0x00
;
TH0=0xDC.
关于
TCON(定时器控制寄存器)
每个位可以是单独的
TF1: 定时器/计数器T1
溢出标志
。T1被允许计数以后,从初值开始加1计数。当最高位产生溢出时由硬件置“1”TF1,向CPU请求中断,一直保持到CPU响应中断时,才由硬件清“0” TF1(TF1也可由程序查询清“0”)。
TR1:定时器T1的
运行控制位
。该位由软件置位和清零。当GATE(TMOD.7)=0,TR1=1时就允许T1开始计数,TR1=0时禁止T1计数。当GATE(TMOD.7)=1,TR1=1月INTI输入高电平时,才允许T1计数。
TF0: 定时器/计数器T0
溢出中断标志
。TO被允许计数以后,从初值开始加1计数,当最高位产生溢出时,由硬件置“1”TFO,向CPU请求中断,一直保持CPU响应该中断时,才由硬件清“0” TF0( TP0也可由程序查询清“0”)。
TR0: 定时器T0的
运行控制位
。该位由软件置位和清零。当GATE(TMOD.3)=0,TR0=1时就允许T0开始计数,TR0=0时禁止T0计数。当GATE(TMO.3)=1,TR0=1且INT0输入高电平时,才允许T0计数。
IE1: 外部中断1请求源(INT/P3.3)标志。正1-1,外部中断向CPU请求中断,当CPU响应该中新时由硬件清“0” IE1。
IT1: 外部中断1触发方式控制位。IT1=0时,外部中断1为低电平触发方式,当INTI(P3.3)输入低电平时,置位IE1。采用低电平触发方式时,外部中源(输入到INT)必须保持低电平有效,直到该中断被CPU响应,同时在该中断服务程执行完之前,外部中断源必须被清除(P3.3要变高),否则将产生另一次中断。当1T=1时,则外部中断1(INTL)端口由“1”→“0”下降沿跳变,激活中断请求标志位IE1,向主机请求中断处理。
IE0: 外部中断0请求源(INT0/P3.2)标志。0-1外部中断0向CPU请求中断,当CPU响应外部中断时,由硬件清“0”IEO(边沿触发力式》。
TCON寄存器的bit5(TF0)能表示爆表:当爆表的时候,硬件会修改bit5(TF0)位上面的数据,改成 1(置1),如果不用中断,我们代码清零
TCON
寄存器的
bit4 (TR0)
,通过编程让这个位为
1
的时候,开始计时,相当于按下了闹钟
定时器模式寄存器:TMOD来选择定时器模式,选择工作方式1,TMOD的bit0 bit1配置成0 1 :16 的定时器功能
- 四个二进制数表示一位的16进制数
- 8421法进制的转换(方便人类来看,对计算机底层来说,不关心进制010101010)
- 配寄存器推荐用按位操作,清零的时候,对应的需要清零的位与上0,不需要清零的位与上1
- 置1的时候,需要置1的位置或1,不需要置一的位置或0
关于TMOD(定时器模式寄存器)
TMOD模式
位 | 符号 | 功能 |
TMOD.7/ | GATE | TMOD.7控制定时器1,置1时只有在下可脚为高及TR1控制位置1时才可打开定时器/计数器1。 |
TMOD.3/ | GATE | TMOD.3控制定时器0,置1时只有在T0脚为高及TR0控制位置1时才可打开定时器/计数器O。 |
TMOD.6/ | C/T | TMOD.6控制定时器1用作定时器或计数器,清零则用作定时器(从内部系统时钟输入),置1用作计数器(从T1/P3.5脚输入) |
TMOD.2/ | C/T | TMOD.2控制定时器0用作定时器或计数器,清零则用作定时器(从内部系统时钟输入),置1用作计数器(从T0/P3.4脚输入) |
TMOD.5/TMOD.4 | M1、M0 0 0 0 1 1 0 1 1 | 定时器定时器/计数器1模式选择 13位定时器/计数器,兼容8048定时模式,TL1只用低5位参与分频,TH1整个8位全用。 16位定时器/计数器,TL1、TH1全用 8位自动重装载定时器,当溢出时将TH1存放的值自动重装入化1. 定时器/计数器1此时无效(停止计数)。 |
TMOD.1/TMOD.0 | M1、M0 0 0 0 1 1 0 1 1 | 定时器/计数器0模式选择 13位定时器/计数器,兼容8048定时模式,TL0只用低5位参与分频,TH0整个8位全用。 16位定时器/计数器,TLO、THO全用 8位自动重装载定时器,当溢出时将TH0存放的值自动重装入TL0 定时器0此时作为双8位定时器/计数器。TL0作为一个8位定时器/计数器,通过标准定时器0的控制位控制、TH0仅作为一个8位定时器,由定时器1的控制位控制。 |
后面有点乱码,总之用到最多的工作模式是 00 和 01
也就是13位 和16位
每个位不可单独使用,必须整体一起
GATE 是门控位,如果为0,代表软件直接启动
C/T 0:定时 1:计数
M1 M0是工作方式的设置