文章目录
Chapter 7 : 单片机的定时/计数器
7.1 概述
-
本章的主要内容
定时/计数器结构和工作原理
定时/计数器的控制寄存器
定时/计数器的工作方式
定时/计数器的应用程序设计 -
定时/计数的应用:
在测量控制系统中,常常要求有一些实时时钟,以实现定时控制、定时测量或延时动作;也往往要求有计数功能对外部事件计数,如测电机转速、 频率、工件个数等。单片机内部定时/计数器是用得非常多的一个功能部件。
-
实现定时/计数有3种主要方法:
-
软件定时:
即让机器执行一个程序段,这段程序本身没有具体的执行目的,只是为了延时一段时间。这种方法定时占用CPU执行时间,降低了CPU利用率。
-
数字电路硬件定时:
采用小规模集成电路器件如555,外接定时部件(电阻和电容)构成。这样的定时电路简单,但要改变定时范围,必须改变电阻和电容;这种定时电路在硬件连接好以后,修改不方便。
-
可编程定时/计数器【本章介绍就是此法】:
它是硬件定时,又很容易地通过软件来确定和改变它的定时值,通过编程,能够满足各种不同的定时和计数要求,即软硬件相结合。本章介绍的内容就属于这一种。
-
7.2 定时/计数器结构和工作原理
7.2.1 工作原理:
51系列单片机片内有二个16位定时/计数器:定时器0(T0)和定时器1(T1)。【2个定时/计数器】
两个定时器都有定时或计数的功能,可通过软件的设置来选择是定时还是计数工作方式。【选择工作方式】
定时/计数器的核心部件是16位加1计数器。满了之后就溢出了。【核心部件】
T0由2个8位持殊功能寄存器TH0和TL0构成,T1由2个8位持殊功能寄存器TH1和TL1构成。【High & Low】
T0和T1受特殊功能寄存器TMOD和TCON控制.【受控制于】
7.2.2 定时工作方式 和 计数工作方式的区别:
-
定时:
定时器计数的脉冲是由51单片机片内振荡器经12分频后产生的,即:每经过一个机器周期,定时器(T0或T1)的数值加1直至计数满产生溢出。如:当采用12MHz晶体时,每个机器周期为1μs,计5 个机器周期即为5 μs,即定时5 μs 。
晶振确定后,机器周期就确定了,每个机器周期,定时器数值+1。
-
计数:
主要通过两类引脚:P3.4(T0)和 P3.5(T1)输入的外部脉冲信号计数。
当输入脉冲信号产生由1至0的下降沿时,定时/计数器的值加 1
测量过程是: CPU前一个机器周期采样脉冲值为高,下一个机器周期采样脉冲值为低,则计数器加 1
由于检测一个1至0的跳变需要二个机器周期,故最高计数频率为振荡频率的二十四分之一
例如:当采用12MHz晶体时,每个机器周期为1μs。计数器要2μs才能检测到一个1至0的跳变。
计数的频率不能超过0.5MHz,否则计算机就来不及检测了。
-
不占用cpu时间
无论是定时还是计数,当软件设定了定时/计数器的工作方式,启动以后,定时/计数器就按规定的方式工作,不占用CPU的操作时间,此时CPU可执行其他程序,到了计满规定的时间或规定的个数(定时/计数器溢出),定时/计数器会给出溢出标志,你可以通过查询或中断方式了解是否溢出。
7.3 定时/计数器的控制寄存器
-
两个控制寄存器:
-
工作模式寄存器 TMOD (89H)【不可位寻址】
-
控制寄存器 TCON(88H)【可位寻址】
-
-
工作模式寄存器 TMOD (89H)
-
控制寄存器 TCON(88H)
-
定时/计数器0的内部逻辑电路结构
7.4 定时/计数器的工作方式
-
对TMOD寄存器的M1、M0位的设置,可选择4种工作方式:方式0/1/2/3
-
方式0:
-
方式1:
-
方式2:
-
方式3:
-
总结:
各个方式的最大计数值?用作定时的定时时间?方式自身的特点?4种方式适用范围?
是否存在进位?何时产生溢出?是否有中断?
7.5 定时/计数器的应用程序设计
7.5.1 定时/计数器的计数初值C的计算和装入
例子:要计100个脉冲的计数初值
7.5.2 定时计数器的初始化编程
7.5.3 应用编程举例
*见ppt
7.6 总结
-
定时/计数器应用非常广泛,如定时采样、时间测量、产生音响、测量波形的频率、检测电机转速、测量汽车速度等。因此应很好掌握。
-
通常,计数值>256时用方式1,计数值<=256时用方式2,这样比较方便。
-
51系列单片机有两个16位的定时/计数器,有四种不同的工作方式,归纳于下表:
-
定时和计数实质都是对脉冲的计数,只是被计脉冲的来源不同,
定时方式的被计脉冲来源于时钟,计数方式的被计脉冲来源于外部,
定时方式的计数初值和被计脉冲周期有关,计数方式的计数初值和被计脉冲的个数有关。
-
无论定时还是计数,当计满规定的脉冲个数,就产生溢出(计数初值寄存器回零),置位TFx , 可以通过程序查询,如果允许中断,会产生中断。
-
利用T0和T1的方式2计数功能(初值为0FFH),可以扩展为外部中断INTx的功能。