51单片机学习
一、先知先会
1、CPU时序的有关知识
- 振荡周期:为单片机
提供定时信号
的振荡源的周期(晶振
周期或外加
振荡周期) - 状态周期:
2个振荡
周期为1个状态
周期,用S表示。振荡周期又称S周期
或时钟周期
。 - 机器周期:
1个机器
周期=6个状态
周期=12个振荡
周期。 - 指令周期:完成
1条指令
所占用的全部时间,它以机器周期
为单位。
1.1、周期换算
![](https://img-blog.csdnimg.cn/2f63e8fcebf8494fb4e11861eeb54b9a.png)
2、在学习定时器之前需要明白的
(1)51单片机有两组
定时器/计数器;
因为既可以
定时
,也可以计数
,所以称为定时/计数器。
(2)定时/计数器和单片机的CPU是相互独立
的。
定时/计数器工作过程是
自动完成的
,不需要CPU的参与。
(3)51单片机中的定时/计数器是根据机器内部的时钟
或者是外部脉冲信号
对寄存器中的数据加1
;
(4)有了定时/计数器之后,可以增加单片机的效率。
一些
简单的重复加1的工作
可以交给定时/计数器处理,CPU转而处理一些复杂的事情。同时可以实现精确定时
。
3、定时/计数器的工作原理
![](https://img-blog.csdnimg.cn/9f75411c16364e6ba7cbd40722281274.png#pic_center)
4、51单片机定时器结构
定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器THx和TLx组成。TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。
![](https://img-blog.csdnimg.cn/2839703a786445bc8004366fbc0eccd8.png#pic_center)
二、定时/计数器的控制
51单片机定时/计数器的工作由
两个特殊功能寄存器
控制。TMOD
用于设置其工作方式
;TCON
用于控制其启动和中断申请
。
1、工作方式寄存器TMOD
工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。
其格式如下:
![](https://img-blog.csdnimg.cn/a9ffda8cc28645029521ae4fc8f7189d.png#pic_center)
-
GATE
是门控位,GATE=0
时,用于控制定时器的启动是否受外部中断源信号的影响。只要用软件使TCON
中的TR0
或TR1
为1,就可以启动定时/计数器工作。GATE=1
时,需要用软件使TCON
中的TR0
或TR1
为1,同时外部中断引脚INTO/1
也为高电平
时,才可以启动定时/计数器工作。【相较于上面的方式,该方式多一个外加高电平(所以常用上面的方式)】 -
C/T
:定时/计数模式选择位。C/T =0为定时模式;C/T =1为计数模式。 -
M1M0
:工作方式设置位。定时/计数器有四种工作方式。
![](https://img-blog.csdnimg.cn/06024b56c7374f978c8643ba196ba605.png#pic_center)
2、控制寄存器TCON
TCON的低4位用于控制
外部中断
,已在【中断部分】介绍。TCON的高4位用于控制定时/计数器
的启动和中断申请。
其格式如下:
![](https://img-blog.csdnimg.cn/f756d7b3f0d7411d9f724440b39b5211.png#pic_center)
TF1
(TCON.7):T1溢出中断请求标志位。T1计数溢出时由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清0。T1工作时,CPU可随时查询TF1的状态。所以,TF1可用作查询测试的标志。TF1也可以用软件置1或清0,同硬件置1或清0的效果一样。TR1
(TCON.6):T1运行控制位。TR1置1时,T1开始工作;TR1置0时,T1停止工作。TR1由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。TF0
(TCON.5):T0溢出中断请求标志位,其功能与TF1类同。TR0
(TCON.4):T0运行控制位,其功能与TR1类同。
3、定时/计数器的工作方式
方式0:13位计数器(TR0
控制型)
![](https://img-blog.csdnimg.cn/47333c7be41c4da9ba3ae70c8d468e7c.png)
当
GATE=0
经过反相器
,为1,经过或门
还是为1(此时不用管INT0引脚
,因为或
门嘛),再经过与门
(此时等于多少就由TR0
来控制),当TR0=1
时导通,开始计数,否则不导通。【由TR0
控制】
当
GATE=1
经过反相器
,为0,此时还得看INT0引脚
,若为1,经过或门
为1(否则为0,计时器就开启不了),再经过与门
(此时结果为多少就由TR0
来控制),当TR0=1
时导通,开始计数。【由TR0
控制】
![](https://img-blog.csdnimg.cn/d6d94e5df1484369b9dc90a203c5745f.png)
方式1:16位加1计数器
![](https://img-blog.csdnimg.cn/b4b620ba4fbe4ee1ac3e5a60e857a5f8.png)
方式2:8位自动重装(重装初值)
![](https://img-blog.csdnimg.cn/343e676d0d4844769e7d8c24cdf53aca.png)
方式3:只适用于定时/计数器T0
![](https://img-blog.csdnimg.cn/63f5224598ef4ff0990cd1814c7bffe3.png)
通常使用
方式1
和方式2
使用定时器,该做哪些工作
初始化程序应完成如下工作:【编写程序也是按如下步骤进行】
- 对
TMOD
赋值,以确定T0
和T1
的工作方式; - 计算初值,并将其写入
TH0
、TL0
或TH1
、TL1
; - 打开计时器0 中断 开关
ET0
; - 中断方式,则对
EA
(总中断开关)赋值,打开
定时器中断; - 使
TR0
或TR1
置位,启动
定时/计数器定时
或计数
。
![](https://img-blog.csdnimg.cn/7e96c2fb1c1940cbb924876256405cb9.png)