《单片机原理与接口技术教学课件 PPT 作者 于斌 单片机原理与接口技术(第8章)》由会员分享,可在线阅读,更多相关《单片机原理与接口技术教学课件 PPT 作者 于斌 单片机原理与接口技术(第8章)(59页珍藏版)》请在金锄头文库上搜索。
1、第8章 定时器/计数器及实验,MCS-51单片机可提供2个16位的定时器/计数器:T0和T1。它们均可以用作定时器和事件计数器,为单片机系统提供精确定时和计数功能。,8.1 定时器/计数器的硬件结构及工作原理 图8-1为定时器/计数器的硬件结构框图。图中可见,T0和T1的核心均为一个加1计数器。加1计数器的脉冲来源有两个:一个是外部脉冲源,另一个是单片机系统的时钟源。计数器对输入脉冲进行加1计数,每输入一个脉冲,计数值加1。,图8-1 定时器/计数器硬件结构框图,计数到计数值为全1,当计数到计数值为全1时,再有一个脉冲信号输入将使得计数器溢出。这时,加1计数器从最高位溢出一个脉冲使TCON(定
2、时器控制寄存器)的溢出标志位TF0或TF1置1,同时将计数值清零。如果定时器/计数器工作于定时状态,则表示定时时间到;,工作于计数状态,如果工作于计数状态,则表示计数值回零。因此,加1计数器的基本功能是对输入脉冲进行计数,至于其工作于定时状态还是计数状态,则取决于外接脉冲源。当脉冲源为单片机系统时钟源时,计数脉冲为一等间隔脉冲序列,脉冲数乘以间隔时间就是定时时间,此时加1计数器工作于定时状态。当脉冲源为间隔不等的外部脉冲信号时,加1计数器就相当于外部事件计数器,工作于计数状态。,用作定时器,用作定时器时,在每个机器周期加1计数器都加1,因此也可以看作对机器周期的累计。因为1个机器周期包括12个
3、振荡周期,因此加1计数器的计数频率是振荡频率的1/12。如果单片机采用12MHz的晶体振荡器,则加1计数器的计数频率为1MHz,即每微秒加1计数器加1。这样就可以按定时时间的要求计算出加1计数器的预置计数值。,用作计数器,用作计数器时,加1计数器在其对应的外部输入端T0(P3.4)或T1(P3.5)检测到一个负跳变时加1。其最快的计数频率是振荡频率的1/24。,2个8位特殊功能寄存器,定时器/计数器T0由2个8位特殊功能寄存器TH0和TL0构成,TH0用于存放高8位的二进制计数值,TL0用于存放低8位的二进制计数值。定时器/计数器T1由2个8位特殊功能寄存器TH1和TL1构成,TH1用于存放高
4、8位的二进制计数值,TL1用于存放低8位的二进制计数值。工作方式寄存器TMOD用于设置定时器/计数器的工作方式。控制寄存器TCON用于启动和停止定时器/计数器的计数,并控制定时器/计数器的工作状态。,8.2 定时器的工作方式寄存器和控制寄存器,8.2.1 定时器/计数器工作方式寄存器TMOD 如图8.2所示,TMOD的高4位控制T1的工作方式,低4位控制T0的工作方式。,工作方式选择位,M1、M0:工作方式选择位。定时器/计数器有4种工作方式,由M1和M0来进行选择,如表8-1所示。 表8-1 定时器/计数器工作方式选择,定时器/计数器选择位,C/ T:定时器/计数器选择位。C/ T1工作为计
5、数器功能,C/ T0工作为定时器功能。 GATE:选通控制位。GATE0,由软件控制TR0或TR1启动定时器;GATE1,由外部中断引脚INT0(P3.2)和 INT1(P3.3)输入电平分别控制T0和T1的运行。,8.2.2 定时器控制寄存器TCON,图8.3 定时器/计数器控制字段,定时器T1溢出中断标志,TF1:定时器T1溢出中断标志。当定时器T1溢出时由内部硬件置位,申请中断。当转向中断服务程序时,由内部硬件将TF1标志清零。,定时器T1运行控制位,TR1:定时器T1运行控制位,由软件置位/清零来控制定时器T1的计数启动/停止。当选通控制位GATE为0而TR1为1时,T1启动计数;当T
6、R1为0时,T1停止计数。当选通控制位为1时,仅当TR1为1且P3.3引脚输入为高电平时才启动T1计数,TR1为0或P3.3引脚输入为低电平都使T1停止计数。,溢出中断标志和运行控制位,TF0:定时器T0溢出中断标志,其含义与TF1类似。 TR0:定时器T0运行控制位,其含义与TR1类似。 TCON的低4位与外部中断有关,其意义在前一章已介绍过。,8.3 定时器/计数器的工作方式,2个16位定时器/计数器具有定时和计数两种功能,每种功能都包括了四种工作方式。用户通过指令把方式字写入定时器/计数器工作方式寄存器TMOD来选择T0或T1的功能和工作方式;,启动计数或停止计数,通过写入计数初值来控制
7、计数长度(定时时间);通过对定时器/计数器控制寄存器TCON的相应位进行置位或清零来实现定时器的启动计数或停止计数。,8.3.1 工作方式0 当M1M0为00时,定时器/计数器被选为工作方式0,其等效框图如图8-4所示。,图8-4 定时器T0工作方式0结构图,一个13位的定时器/计数器,T0(或T1)在工作在方式0时,是一个13位的定时器/计数器。在这种方式下,16位寄存器(TH0和TL0)只用13位。其中TL0的高3位未使用,其余位占了13位的低5位,TH0占了高8位。计数时,TL0的低5位溢出向TH0进位,TH0溢出时向溢出中断标志TF0进位(由硬件置位),并申请中断。,对机器周期进行计数
8、,当C/ T0时,图中的开关连接晶体振荡器的12分频输出,T0对机器周期进行计数,这就是定时工作方式。 当C/ T1时,图中的开关连接引脚P3.4(T0),外部计数脉冲由引脚T0输入。当外接信号发生从1到0的跳变时,计数器进行加1计数,T0成为外部事件计数器,这就是计数工作方式。,GATE0时,当GATE0时,关闭逻辑“或”门,使P3.2引脚输入信号无效。这时,逻辑“与”门被打开,由TR0控制T0的启动计数和停止计数。若TR01,接通控制开关,启动T0开始加1计数,直至溢出。溢出时,计数寄存器值为0,TF01,并申请中断,T0从0开始计数。因此,若T0工作于定时状态,在溢出后应给计数器(TH0
9、和TL0)重新赋计数初值。若TR00,T0停止计数。,GATE1,当GATE1,且TR01时,逻辑“或”门和逻辑“与”门都被打开,外接信号通过P3.2引脚直接启动或停止定时器计数。输入高电平时,启动计数;输入低电平时,停止计数。通常用这种方式来测量外接信号的脉冲宽度。,定时时间的计算公式,为计数工作方式时,计数值的范围为18192(213)。 为定时工作方式时,定时时间的计算公式为: T(213计数初值)晶体振荡器周期12 (式 8-1),8.3.2 工作方式1 当M1M0为01时,定时器/计数器被选为工作方式1,其等效框图如图8-5所示。,图8-5 定时器T0工作方式1结构图,工作在方式1时
10、,T0(或T1)在工作在方式1时,是一个16位的定时器/计数器。由图8-5可见,其逻辑电路和工作情况与工作方式0完全相同,所不同的只是组成计数器的位数。,计数值范围,为计数工作方式时,计数值的范围为165536 (216)。 为定时工作方式时,定时时间的计算公式为: T(216计数初值)晶体振荡器周期12 (式 8-2),8.3.3 工作方式2 当M1M0为10时,定时器/计数器被选为工作方式2,其等效框图如图8-6所示。,图8-6 定时器T0工作方式2结构图,工作方式0和工作方式1的最大特点,工作方式0和工作方式1的最大特点是计数溢出后,计数寄存器的值全为0。因此循环定时或计数应用时就存在重
11、新设置计数初值的问题,这不但影响定时精度,而且给程序编写带来不便。,自动重新加载功能,工作方式2就是针对此问题而设置的,它具有自动重新加载功能,计数溢出后计数初值可由硬件自动重新装载。在这种工作方式下,16位计数器被分为两部分,即以TL0作计数器,以TH0作预置数寄存器,初始化时把计数初值分别装入TL0和TH0中。当计数溢出后,由预置数寄存器以硬件方式自动加载。,置位TF0,初始化时,8位计数初值被同时装入TL0和TH0中。当TL0计数溢出时,置位TF0,同时将保存在TH0中的计数初值自动装载到TL0中,之后TL0重新计数,循环不止。这样的话,不但省去了用户程序中的重新装载计数初值的指令,还有
12、利于提高定时精度。但这种方式下计数值有限,最大只能到256。这种工作方式较适用于连续定时或计数的应用场合。,定时时间的计算公式,为计数工作方式时,计数值的范围为1256(28)。 为定时工作方式时,定时时间的计算公式为: T(28计数初值)晶体振荡器周期12 (式 8-3),8.3.4 工作方式3 当M1M0为11时,定时器/计数器被选为工作方式3,其等效框图如图8-7所示。,图8-7 定时器T0工作方式3结构图,前三种工作方式下,T0和T1的使用是完全相同的。但是在工作方式3下,T0和T1的工作是不同的。 在工作方式3下,因T1的控制位和引脚信号已被TH0借用,所以T1是不能使用的。,前三种
13、工作方式下,在工作方式3下,在工作方式3下,T0被拆成2个独立的8位计数器TL0和TH0。TL0既可以作计数器使用,又可以作定时器使用,T0的各控制位和引脚信号全归它使用。其功能和操作与工作方式0和工作方式1完全相同,电路结构也极其相似,如图8-7所示。但是TH0只能作为定时器使用,控制位和引脚信号均借用T1的。,8.4 定时器/计数器的初始化,由于定时/计数器是可编程的,因此在定时或计数之前要用程序初始化,初始化一般有以下几个步骤: (1)确定工作方式对工作方式寄存器TMOD赋值。,预置定时或计数初值,(2)预置定时或计数初值,直接将计数初值写入TL0、TH0或TL1、TH1中。 (3)根据
14、需要对中断允许寄存器IE赋值,以开放或禁止定时/计数器中断。 (4)启动定时/计数器,使TCON中的TR1或TR0置“1”,计数器即按规定的工作方式和计数初值进行计数或定时。,8.5 定时器实验,使用定时器T1以工作方式1进行50ms精确定时。P1口的P1.0 P1.7分别接八个发光二极管L0 L7。编写程序模拟一个时序控制装置:开机后第一秒钟L0、L2亮,第二秒钟L1、L3亮,第三秒钟L4、L6亮,第四秒钟L5、L7亮,第五秒钟L0、L2、L4、L6亮,第六秒钟L1、L3、L5、L7亮,第七秒钟全亮,第八秒钟全灭,之后又从头开始,一直循环下去。,8.5.1 硬件电路 图8-8 定时器实验硬件
15、电路,8.5.2 软件 在用户文件夹中建立一个timer.uv2工程项目,再输入以下源程序timer.c ,最后将源程序添加到工程项目中。如图8-9所示。 图8-9 KEIL C51工程窗口,以下为time.c 源文件: /-定时器实验- /-头文件引用- #include #include /-宏声明- #define uchar unsigned char uchar idata LED8= 0xfa,0xf5,0xaf,0x5f,0xaa,0x55,0x00,0xff;/显示常数表 uchar times=20; /延时一秒的常数 uchar status=0;,/-定时器- void
16、int1( ) interrupt 3 TR1=0; /关中断 TL1=0x00; /延时50ms常数 TH1=0x4b; TR1=1; /开中断 times=(times-1); if(times=0) times=20; /延时一秒的常数 P1=LEDstatus; /送P1口显示 status=(status+1) ,/-主程序- void main() TMOD=0x10; /置T1为方式1 TL1=0x00; /延时50ms的时间常数 TH1=0x4b; TR1=1; ET1=1; EA=1; /开中断 while(1); ,8.5.3 实验运行结果,由图8-10至图8-13可见,程序已实现了精确定时控制的要求。 图8-10 程序运行结果(0.9525秒时),图8-11 程序运行结果(1.0秒时),图8-12 程序运行结