1、第7章 定时器/计数器单片机原理及应用系统设计主要内容定时器定时器/计数器计数器T0T0和和T1T1定时器定时器/计数器计数器T2T2定时器定时器/计数器计数器T3T3和和T T4 47.1 定时器T0和T17.1.1 7.1.1 定时器定时器/计数器计数器T0/T1T0/T1的结构和工作原理的结构和工作原理定时器定时器T0T0、T1T1结构框图如图结构框图如图7-17-1所示:所示:图图7-1 T07-1 T0、T1T1结构框图结构框图 TL0TL0、TH0TH0是定时是定时/计数器计数器T0T0的低的低8 8位、高位、高8 8位状态值,位状态值,TL1TL1、TH1TH1是定时是定时/计数
2、器计数器T1T1的低的低8 8位、高位、高8 8位状态值。位状态值。TMODTMOD是定时是定时/计数器的工作方式寄存器,由它确定定时计数器的工作方式寄存器,由它确定定时/计数器的工作方式和功能;计数器的工作方式和功能;TCONTCON是定时是定时/计数器的控计数器的控制寄存器,用于控制制寄存器,用于控制T0T0、T1T1的启动与停止以及记录计的启动与停止以及记录计数计满溢出标志;数计满溢出标志;AUXRAUXR称为辅助寄存器,其中称为辅助寄存器,其中T0 x12T0 x12、T1x12T1x12用于设定用于设定T0T0、T1T1内部计数脉冲的分频系数。内部计数脉冲的分频系数。P3.4P3.4
3、、P3.5P3.5分别为定时分别为定时/计数器计数器T0T0、T1T1的外部计数脉冲输入端的外部计数脉冲输入端。定时计数器的核心电路是一个加定时计数器的核心电路是一个加1 1计数器,如图计数器,如图7-27-2所示。加所示。加1 1计数器的脉冲有两个来源:一个是外部脉冲计数器的脉冲有两个来源:一个是外部脉冲源源T0T0(P3.4P3.4)、)、T1T1(P3.5P3.5),另一个是系统的时钟信),另一个是系统的时钟信号。号。计数器对两个脉冲源之一进行输入计数,每输入一个计数器对两个脉冲源之一进行输入计数,每输入一个脉冲,计数值加脉冲,计数值加1 1。当计数到计数器为全。当计数到计数器为全1 1
4、时,再输入时,再输入一个脉冲就使计数值回零,同时使计数器计满溢出标一个脉冲就使计数值回零,同时使计数器计满溢出标志位志位TF0TF0或或TF1TF1置置1 1,并向,并向CPUCPU发出中断请求。发出中断请求。定时功能:当脉冲源为系统时钟(等间隔脉冲序列)定时功能:当脉冲源为系统时钟(等间隔脉冲序列)时,由于计数脉冲为一时间基准,脉冲数乘以计数脉时,由于计数脉冲为一时间基准,脉冲数乘以计数脉冲周期(系统周期或冲周期(系统周期或1212倍系统周期)就是定时时间。倍系统周期)就是定时时间。计数功能:当脉冲源为间隔不等的外部输入脉冲(由计数功能:当脉冲源为间隔不等的外部输入脉冲(由T0T0或或T1T
5、1引脚输入)时,就是外部事件的计数器。计数引脚输入)时,就是外部事件的计数器。计数器在其对应的外输入端器在其对应的外输入端T0T0或或T1T1有一个负跳变时计数器有一个负跳变时计数器的状态值加的状态值加1 1。外部输入信号的速率是不受限制的,但。外部输入信号的速率是不受限制的,但必须保证给出的电平在变化前至少被采样一次。必须保证给出的电平在变化前至少被采样一次。图图7-2 IAP15W4K58S47-2 IAP15W4K58S4单片机计数器电路框图单片机计数器电路框图7.1.27.1.2单片机定时单片机定时/计数器(计数器(T0/T1T0/T1)的控制)的控制 单片机内部定时单片机内部定时/计
6、数器(计数器(T0/T1T0/T1)的工作方式和控制)的工作方式和控制由由TMODTMOD、TCONTCON和和AUXRAUXR三个特殊功能寄存器进行管理。三个特殊功能寄存器进行管理。TMODTMOD:设定定时:设定定时/计数器(计数器(T0/T1T0/T1)的工作方式与功能。)的工作方式与功能。TCONTCON:控制定时:控制定时/计数器(计数器(T0/T1T0/T1)的启动与停止,并)的启动与停止,并包含定时包含定时/计数器(计数器(T0/T1T0/T1)的溢出标志位。)的溢出标志位。AUXRAUXR:设定定时计数脉冲的分频系数。:设定定时计数脉冲的分频系数。1 1工作方式寄存器工作方式寄
7、存器TMODTMOD TMOD TMOD为为T0T0、T1T1的工作方式寄存器,地址位的工作方式寄存器,地址位89H89H,复位,复位值为值为00H00H。其格式如表。其格式如表7-17-1所示:所示:表表7-1 TMOD7-1 TMOD控制字控制字 其中低其中低4 4位为位为T0T0的方式字段,高的方式字段,高4 4位为位为T1T1的方式字段,的方式字段,它们的含义完全相同它们的含义完全相同。定时和计数功能由特殊功能寄存定时和计数功能由特殊功能寄存器器TMODTMOD的控制位的控制位C/TC/T进行选择,进行选择,TMODTMOD寄存器的各位信息如寄存器的各位信息如下表所列。下表所列。位号位
8、号B7B6B5B4B3B2B1B0位名称GATEC/M1M0GATEC/M1M0TT 可以看出,可以看出,2 2个定时个定时/计数器有计数器有4 4种操作模式,通过种操作模式,通过TMODTMOD的的M1M1和和M0M0选择选择.M1M1和和M0M0:T0T0和和T1T1的工作方式选择位,其定义如下所示:的工作方式选择位,其定义如下所示:M1 M0工作方式工作方式功能说明功能说明0 0方式0自动重装初始值的16位定时/计数器(推荐)0 1方式1不可自动重装的16位定时/计数器1 0方式2自动重装初始值的8位定时/计数器1 1方式3定时器0:不可屏蔽中断的16位自动重装定时器定时器1:停止计数2
9、.2.定时器定时器/计数器计数器0/10/1控制寄存器控制寄存器TCONTCON TCON TCON为定时器为定时器/计数器计数器T0T0、T1T1的控制寄存器,同时也的控制寄存器,同时也锁存锁存T0T0、T1T1溢出中断源和外部请求中断源等,地址为溢出中断源和外部请求中断源等,地址为88H88H,可位寻址,复位值为可位寻址,复位值为00H00H。TCON TCON格式如格式如下表下表所示所示:位号位号B7B6B5B4B3B2B1B0位名称TF1TR1TF0TR0IE1IT1IE0IT0 TF1TF1:T1T1溢出中断标志。溢出中断标志。T1T1被允许计数以后,从初值开被允许计数以后,从初值开
10、始加始加1 1计数。当产生溢出时由硬件对计数。当产生溢出时由硬件对TF1TF1置置“1”“1”,向,向CPUCPU请求中断,一直保持到请求中断,一直保持到CPUCPU响应中断时,才由硬件响应中断时,才由硬件清清“0”“0”(也可由查询软件清(也可由查询软件清“0”“0”)。)。TR1TR1:定时器:定时器T1T1的运行控制位。该位由软件置位和清零。的运行控制位。该位由软件置位和清零。当当GATEGATE(TMOD.7TMOD.7)=0=0,TR1=1TR1=1时就允许时就允许T1T1开始计数,开始计数,TR1=0TR1=0时禁止时禁止T1T1计数。当计数。当GATEGATE(TMOD.7TMO
11、D.7)=1=1,TR1=1TR1=1且且INT1INT1输入高电平时,才允许输入高电平时,才允许T1T1计数。计数。TF0TF0:T0T0溢出中断标志。溢出中断标志。T0T0被允许计数以后,从初值开被允许计数以后,从初值开始加始加1 1计数,当产生溢出时,由硬件对计数,当产生溢出时,由硬件对TF0TF0置置“1”“1”,向向CPUCPU请求中断,一直保持请求中断,一直保持CPUCPU响应该中断时,才由硬响应该中断时,才由硬件清件清“0”“0”(也可由查询软件清(也可由查询软件清“0”“0”)。)。TR0TR0:定时器:定时器T0T0的运行控制位。该位由软件置位和清零。的运行控制位。该位由软件
12、置位和清零。当当GATEGATE(TMOD.3TMOD.3)=0=0,TR0=1TR0=1时就允许时就允许T0T0开始计数,开始计数,TR0=0TR0=0时禁止时禁止T0T0计数。当计数。当GATEGATE(TMOD.3TMOD.3)=1=1,TR0=1TR0=1且且INT0INT0输入高电平时,才允许输入高电平时,才允许T0T0计数,计数,TR0=0TR0=0时禁止时禁止T0T0计计数。数。3 3辅助寄存器辅助寄存器AUXRAUXR 辅助寄存器AUXR的T0 x12、T1x12用于设置T0、T1定时计数脉冲的分频系数,地址为8EH,复位值为00H。格式如下表所示:位号位号B7B6B5B4B3
13、B2B1B0位名称T0 x12T1x12UART_M0 x6T2RT2_C/T2x12EXTRAMS1ST2T T0 x12T0 x12:用于设置定时:用于设置定时/计数器计数器0 0定时计数脉冲的分频系定时计数脉冲的分频系数。当数。当T0 x12=0T0 x12=0,定时计数脉冲完全与传,定时计数脉冲完全与传80518051单片机的单片机的计数脉冲一样,计数脉冲周期为系统时钟周期的计数脉冲一样,计数脉冲周期为系统时钟周期的1212倍,倍,即即1212分频;当分频;当T0 x12=1T0 x12=1,定时计数脉冲为系统时钟脉冲,定时计数脉冲为系统时钟脉冲,计数脉冲周期等于系统时钟周期,即无分频
14、。计数脉冲周期等于系统时钟周期,即无分频。T1x12T1x12:用于设置定时:用于设置定时/计数器计数器1 1定时计数脉冲的分频系定时计数脉冲的分频系数。当数。当T1x12=0T1x12=0,定时计数脉冲完全与传,定时计数脉冲完全与传80518051单片机的单片机的计数脉冲一样,计数脉冲周期为系统时钟周期的计数脉冲一样,计数脉冲周期为系统时钟周期的1212倍,倍,即即1212分频;当分频;当T1x12=1T1x12=1,定时计数脉冲为系统时钟脉冲,定时计数脉冲为系统时钟脉冲,计数脉冲周期等于系统时钟周期,即无分频。计数脉冲周期等于系统时钟周期,即无分频。7.1.37.1.3单片机定时单片机定时
15、/计数器(计数器(T0/T1T0/T1)的工作方式的工作方式 定时定时/计数器计数器T0T0、T1T1有有4 4种工作方式,通过种工作方式,通过TMODTMOD的的M1M1和和M0M0选择。选择。2 2个定时个定时/计数器的方式计数器的方式0 0、1 1和和2 2都相同,方式都相同,方式3 3不同。下面以定时器不同。下面以定时器/计数器计数器T0T0为例,介绍定时为例,介绍定时/计数计数器的器的4 4种工作方式。种工作方式。1 1方式方式0 0 方式方式0 0是一个是一个1616位可自动重装初始值的定时位可自动重装初始值的定时/计数器,计数器,其结构如图其结构如图7-37-3所示,所示,T0
16、T0定时定时/计数器有两个隐含的寄计数器有两个隐含的寄存器存器RL_TH0RL_TH0,RL_TL0RL_TL0,用于保存,用于保存1616位定时位定时/计数器的重,计数器的重,当当TH0TH0、TL0TL0构成的构成的1616位计数器计满溢出时,位计数器计满溢出时,RL_TH0RL_TH0,RL_TL0RL_TL0的值自动装入的值自动装入TH0TH0、TL0TL0中。中。RL_TH0RL_TH0与与TH0TH0共用同共用同一个地址,一个地址,RL_TL0RL_TL0与与TL0TL0共用同一个地址。共用同一个地址。当当TR0=0TR0=0时,对时,对TH0TH0、TL0TL0寄存器写入数据时,
17、也会同时寄存器写入数据时,也会同时写入写入RL_TH0RL_TH0、RL_TL0RL_TL0寄存器中;当寄存器中;当TR0=1TR0=1时,对对时,对对TH0TH0、TL0TL0寄存器写入数据时,只写入寄存器写入数据时,只写入RL_TH0RL_TH0、RL_TL0RL_TL0寄存器寄存器中,而不会写入中,而不会写入TH0TH0、TL0TL0寄存器中,这样不会影响寄存器中,这样不会影响T0T0的正常计数。对的正常计数。对TH0TH0、TL0TL0寄存器读取数据时,读取的寄存器读取数据时,读取的是是TH0TH0、TL0TL0的状态值。的状态值。定时定时/计数器的工作方式计数器的工作方式0 0 当当
18、GATE=0GATE=0(TMOD.3TMOD.3)时,如)时,如TR0=1TR0=1,则定时器计数。,则定时器计数。GATE=1GATE=1时,时,TR0TR0为为1 1且且INT0INT0引脚输入高电平时,定时引脚输入高电平时,定时/计计数器数器0 0才能启动计数,这样可实现脉宽测量。才能启动计数,这样可实现脉宽测量。当当C/C/=0=0时,多路开关连接到系统时钟的分频输出,时,多路开关连接到系统时钟的分频输出,T0T0对内部系统时钟计数,对内部系统时钟计数,T0T0工作在定时方式。由工作在定时方式。由T0 x12T0 x12决定分频系数,当决定分频系数,当T0 x12=0T0 x12=0
19、时,使用时,使用1212分频(与分频(与80518051单单片机兼容),片机兼容),T0 x12=1T0 x12=1时,直接使用系统时钟(即不分时,直接使用系统时钟(即不分频)。频)。T 当当C/=1C/=1时,多路开关连接到外部脉冲输入时,多路开关连接到外部脉冲输入P3.4/T0P3.4/T0,即即T0T0工作在计数方式。工作在计数方式。当当T0T0工作在定时方式时,定时时间的计算公式如下:工作在定时方式时,定时时间的计算公式如下:定时时间定时时间=(2216-T016-T0定时器的初始值)系统时钟周定时器的初始值)系统时钟周期期1212(1-T0 x121-T0 x12)。)。2 2方式方
20、式1 1 定时定时/计数器计数器0 0方式方式1 1下的电路框图如下的电路框图如下图下图所示:所示:T定时定时/计数器的工作方式计数器的工作方式1 1 方式方式1 1和方式和方式0 0都是都是1616位的定时位的定时/计数器,由计数器,由TH0TH0作为高作为高8 8位,位,TL0TL0作为低作为低8 8位,方式位,方式1 1定时时间的计算公式与方式定时时间的计算公式与方式0 0相同。不同点:方式相同。不同点:方式0 0是可重装初始值的是可重装初始值的1616位的定时位的定时/计数器,而方式计数器,而方式1 1是不可重装初始值的是不可重装初始值的1616位的定时位的定时/计计数器,因此,有了方
21、式数器,因此,有了方式0 0,方式,方式1 1的意义不大。的意义不大。3 3方式方式2 2 方式方式2 2是是8 8位可自动重装初始值的定时位可自动重装初始值的定时/计数器,其电路计数器,其电路框图如下图所示:框图如下图所示:定时定时/计数器计数器T0T0的工作方式的工作方式2 2 在这种工作方式中,在这种工作方式中,1616位计数器被分成两部分,即以位计数器被分成两部分,即以TL0TL0为计数器,以为计数器,以TH0TH0作为预置寄存器,定时作为预置寄存器,定时/计数器初计数器初始化时把计数初值分别装载至始化时把计数初值分别装载至TL0TL0和和TH0TH0中,当计数溢中,当计数溢出时,不再
22、像方式出时,不再像方式0 0那样由软件重新赋值,而是由预置那样由软件重新赋值,而是由预置寄存器寄存器THTH通过硬件自动给计数器通过硬件自动给计数器TL0TL0重新装载初值。重新装载初值。在程序初始化时,给在程序初始化时,给TL0TL0和和TH0TH0同时赋以初值,当同时赋以初值,当TL0TL0计计数溢出时,在将数溢出时,在将TF0TF0置置1 1的同时把预置寄存器的同时把预置寄存器TH0TH0中的初中的初值重新装载到值重新装载到TL0TL0,TL0TL0重新计数,如此反复。重新计数,如此反复。4方式3 对定时器对定时器/计数器计数器1 1,在模式,在模式3 3时,定时器时,定时器1 1停止计
23、数,停止计数,效果与将效果与将TR1TR1设置为设置为0 0相同。相同。对定时器对定时器/计数器计数器0 0,其工作模式,其工作模式3 3与工作模式与工作模式0 0是一是一样的,如图样的,如图7-67-6。唯一不同的是:当定时器。唯一不同的是:当定时器/计数器计数器0 0工作工作在模式在模式3 3时,只需允许时,只需允许ET0/IE.1ET0/IE.1(定时器(定时器/计数器计数器0 0中断允中断允许位)不需要允许许位)不需要允许EA/IE.7EA/IE.7(总中断使能位)就能打开定(总中断使能位)就能打开定时器时器/计数器计数器0 0的中断,此模式下的定时器的中断,此模式下的定时器/计数器计
24、数器0 0中断中断与总中断使能位与总中断使能位EAEA无关。无关。定时定时/计数器计数器T0T0工作方式工作方式3 3 那么当定时器那么当定时器/计数器计数器0 0工作在模式工作在模式3 3时,如何打开定时时,如何打开定时器器/计数器计数器0 0的中断呢?的中断呢?下面的语句可以令定时器下面的语句可以令定时器/计数器计数器0 0工作在模式工作在模式3 3(不可(不可屏蔽中断的屏蔽中断的1616位自动重装在模式)并打开定时器位自动重装在模式)并打开定时器/计数计数器器0 0的中断(此时该中断是最高优先级,任何中断都不的中断(此时该中断是最高优先级,任何中断都不能屏蔽它)。能屏蔽它)。C C语言设
25、置:语言设置:TMOD=0 x11;TMOD=0 x11;/设置定时器为模式设置定时器为模式3 3(不可屏蔽中断的(不可屏蔽中断的1616位自动重装载)位自动重装载)TR0=1;TR0=1;/定时器定时器0 0开始计时开始计时/EA=1;/EA=1;/定时器定时器0 0工作在模式工作在模式3 3(不可屏蔽中断的(不可屏蔽中断的1616位自动重装载模式)位自动重装载模式)/时,不需要使能总中断时,不需要使能总中断允许位允许位EAEAET0=1;/ET0=1;/使能定时器使能定时器0 0工作在模式工作在模式3 3(不可屏蔽中断的(不可屏蔽中断的1616位自动重装载模式)位自动重装载模式)/时的中断
26、时的中断汇编语言设置:汇编语言设置:MOV TMOD,#00HMOV TMOD,#00H /设置定时器为模式设置定时器为模式0 0(1616位自动重装载)位自动重装载)SETB TR0SETB TR0 /定时器定时器0 0开始计时开始计时/SETB EA/SETB EA /定时器定时器0 0工作在模式工作在模式3 3(不可屏蔽中断的(不可屏蔽中断的1616位自动位自动/重装载模式)时,不需要使能总中断允许位重装载模式)时,不需要使能总中断允许位EAEA SETB ET0 SETB ET0 /使能定时器使能定时器0 0工作在模式工作在模式3 3(不可屏蔽中断的(不可屏蔽中断的1616位自位自 /
27、动重装载模式动重装载模式)时的中断时的中断 7.2单片机的定时器/计数器T2 7.2.17.2.1单片机的定时单片机的定时/计数器计数器T2T2电路结构电路结构 IAP15W4K58S4 IAP15W4K58S4单片机的定时单片机的定时/计数器计数器T2T2电路结构如图电路结构如图7-77-7所示,所示,T2T2的电路结构与的电路结构与T0T0、T1T1基本一致,但基本一致,但T2T2的工作的工作模式固定为模式固定为1616位自动重装初始模式。位自动重装初始模式。T2T2可以当做定时器、可以当做定时器、计数器用,也可以当做串行口的波特率发生器和可编程计数器用,也可以当做串行口的波特率发生器和可
28、编程时钟输出源。时钟输出源。定时定时/计数器计数器T2T2电路结构图电路结构图7.27.2.2.2 定时器定时器/计数器计数器T2T2的控制寄存器的控制寄存器 与与T2T2有关的特殊寄存器是有关的特殊寄存器是T2HT2H、T2LT2L、AUXRAUXR、INT_CLKOINT_CLKO、IE2IE2,其中,其中T2HT2H、T2LT2L是状态寄存器,是状态寄存器,T2T2的控制与管理由的控制与管理由AUXRAUXR、INT_CLKOINT_CLKO、IE2IE2承担。承担。1 1.辅助寄存器辅助寄存器AUXRAUXR 地址为地址为8EH8EH,复位值为,复位值为00H00H,AUXRAUXR格
29、式如表格式如表7-57-5所示:所示:表7-5 AUXR控制位 T2RT2R:定时器:定时器2 2允许控制位。允许控制位。T2R=0T2R=0,不允许定时器,不允许定时器2 2运行;运行;T2R=1T2R=1,允许定时器,允许定时器2 2运行。运行。T2_C/T2_C/:控制定时器:控制定时器2 2用作定时器或计数器。用作定时器或计数器。T2_C/=0T2_C/=0,用,用作定时器(对内部系统时钟进行计数);作定时器(对内部系统时钟进行计数);T2_C/=1T2_C/=1,用作计,用作计数器(对引脚数器(对引脚T2/P3.1T2/P3.1的外部脉冲进行计数)。的外部脉冲进行计数)。T2x12T
30、2x12:定时器:定时器2 2速度控制位速度控制位。T2x12=0T2x12=0,定时器,定时器2 2是传统是传统80518051速度,速度,1212分频;分频;T2x12=1T2x12=1,定时器,定时器2 2的速度是传统的速度是传统80518051的的1212倍,倍,不分频。如果串口不分频。如果串口1 1或串口或串口2 2用用T2T2作为波特率发生器,则由作为波特率发生器,则由T2x12T2x12决定串口决定串口1 1或串口或串口2 2是是12T12T还是还是1T1T。T S1ST2S1ST2:串口:串口1 1(UART1UART1)选择波特率发生器的控制位。)选择波特率发生器的控制位。S
31、1ST2=0S1ST2=0时,选择定时器时,选择定时器1 1作为串口作为串口1 1(UART1UART1)的波特率发)的波特率发生器;生器;S1ST2=1S1ST2=1时,选择定时器时,选择定时器2 2作为串口作为串口1 1(UART1UART1)的波特率发)的波特率发生器,此时定时器生器,此时定时器1 1得到释放,可以作为独立定时器使用。得到释放,可以作为独立定时器使用。2外部中断允许和时钟输出寄存器INT_CLKO 地址为地址为8FH8FH,复位值为,复位值为00H00H,格式如表,格式如表7-67-6所示:所示:T2CLKOT2CLKO:是否允许将是否允许将P3.0P3.0脚配置为定时器
32、脚配置为定时器2 2(T2T2)的时钟输)的时钟输出口。出口。T2CLKO=1T2CLKO=1时,允许将时,允许将P3.0P3.0脚配置为定时器脚配置为定时器T2T2的时钟的时钟输出口,输出时钟频率输出口,输出时钟频率=T2=T2溢出率溢出率/2/2。如果如果T2_C/=0T2_C/=0,定时器,定时器/计数器计数器T2T2是对内部系统时钟计数,是对内部系统时钟计数,则:则:T2T2工作在工作在 1T 1T 模式模式(AUXR.2/T2x12=1AUXR.2/T2x12=1)时的输出频率)时的输出频率=(SYSclkSYSclk)/(65536-RL_TH2,RL_TL265536-RL_TH
33、2,RL_TL2)/2/2 T2T2工作在工作在12T 12T 模式模式(AUXR.2/T2x12=0AUXR.2/T2x12=0)时的输出频率)时的输出频率=(SYSclkSYSclk)/12/12/(65536-RL_TH2,RL_TL265536-RL_TH2,RL_TL2)/2/2T 如果如果T2_C/=1T2_C/=1,定时器,定时器/计数器计数器T2T2是对外部脉冲输入是对外部脉冲输入(P3.1/T2P3.1/T2)计数,则)计数,则 输出时钟频率输出时钟频率=(T2_Pin_CLKT2_Pin_CLK)/(65536-RL_TH2,65536-RL_TH2,RL_TL2RL_TL
34、2)/2T2CLKO=0/2T2CLKO=0时,不允许将时,不允许将P3.0P3.0脚配置为定时器脚配置为定时器2 2(T2T2)的时钟输出口。)的时钟输出口。T3 3.中断允许寄存器中断允许寄存器IE2IE2地址为地址为AFHAFH,复位值为,复位值为00H00H,不可位寻址,格式如表,不可位寻址,格式如表7-77-7所示:所示:ET2ET2:定时器:定时器2 2的中断允许位。的中断允许位。ET2=0ET2=0时,禁止定时器时,禁止定时器2 2产生中断;产生中断;ET2=1ET2=1时,允许定时器时,允许定时器2 2产生中断。产生中断。表7-7 IE2控制字7.4 定时器定时器/计数器计数器
35、T3/T4 IAP15W58S4 IAP15W58S4单片机还新增了两个单片机还新增了两个1616位的定时位的定时/计数器:计数器:T3T3和和T4T4。T3T3、T4T4和和T2T2一样,它们的工作模式固定为一样,它们的工作模式固定为1616位自动位自动重装载模式。重装载模式。T3T3和和T4T4既可以当定时器既可以当定时器/计数器使用,也可以当编程时钟输计数器使用,也可以当编程时钟输出和串口的出和串口的波特率发生器波特率发生器。计算初值的计算可以用下面的语句完成:计算初值的计算可以用下面的语句完成:TH0=(65536-N)/256 TH0=(65536-N)/256 ;商为计数初值的高字
36、节;商为计数初值的高字节 TL0=(65536-N)%256 TL0=(65536-N)%256 ;余数为计数初值的低字节;余数为计数初值的低字节【例【例7.17.1】请用】请用T1T1方式方式0 0实现定时,在实现定时,在P1.0P1.0引脚输出周期为引脚输出周期为10ms10ms的的方波。方波。解:根据题意,采用解:根据题意,采用T1T1方式方式0 0进行定时,(进行定时,(TMODTMOD)=00H=00H。因为方波周期是因为方波周期是10ms10ms,因此,因此T1T1的定时时间应为的定时时间应为5ms5ms,每,每5ms5ms时间到就对时间到就对P1.0P1.0取反,就可实现在取反,
37、就可实现在P1.0P1.0引脚输出周期为引脚输出周期为10ms10ms的的方波。系统采用方波。系统采用12M12M晶振,分频系数为晶振,分频系数为1212,即定时脉钟周期,即定时脉钟周期为为1s1s,则,则T1T1的初值为:的初值为:X=M X=M 计数值计数值=65536=65536-5000 5000=60536=EC78H=60536=EC78H即:即:TH1=ECHTH1=ECH,TL1=78HTL1=78H。#include iap15w4k58s4.h /IAP15W4K58S4#include iap15w4k58s4.h /IAP15W4K58S4头文件头文件sbit Wave
38、_out=P10;sbit Wave_out=P10;void main()void main()/主函数主函数 P1M1=0X00;P1M1=0X00;P1M0=0X00;P1M0=0X00;AUXR&=0 xBF;/AUXR&=0 xBF;/定时器时钟定时器时钟12T12T模式模式 TMOD&=0 x00;/TMOD&=0 x00;/设置定时器模式设置定时器模式 TL1=0 x78;TL1=0 x78;/设置定时初值设置定时初值 TH1=0 xEC;TH1=0 xEC;/设置定时初值设置定时初值 TF1=0;TF1=0;/清除清除TF1TF1标志标志 TR1=1;TR1=1;/定时器定时器
39、1 1开始计开始计 while(1)/while(1)/主循环主循环 while while(TF1=0TF1=0);TF1=0;TF1=0;Wave_out=Wave_out;/Wave_out=Wave_out;/指示灯取反指示灯取反 【例【例7.27.2】实际应用中常常需要产生】实际应用中常常需要产生1s1s周期的定时信号,试用周期的定时信号,试用晶振频率为晶振频率为12MHZ12MHZ的单片机系统产生的单片机系统产生1s1s的定时信号。的定时信号。解:在晶振频率为解:在晶振频率为12MHZ12MHZ时,单片机的定时时,单片机的定时/计数器所能产生计数器所能产生的最大定时时间如下:的最大
40、定时时间如下:工作方式工作方式0 0、1 1:工作方式工作方式2 2:工作方式工作方式3 3:ms536.6510121226168621225612 10us16621265.53612 10ms可以看出,直接用定时器哪种工作方式都不能满足要求,故可以看出,直接用定时器哪种工作方式都不能满足要求,故采用累积计数的方式来实现采用累积计数的方式来实现1s1s定时。采用定时。采用T0T0的定时时间为的定时时间为50ms50ms,累计,累计2020次,即为次,即为1s1s。系统采用系统采用12M12M晶振,分频系数为晶振,分频系数为1212,即定时脉钟周期为,即定时脉钟周期为1s1s,则则T0T0的
41、初值为:的初值为:X=M X=M 计数值计数值=65536=65536-50000-50000=3CB0=3CB0即:即:TH0=0X3CTH0=0X3C,TL0=0XB0TL0=0XB0C C语言参考程序如下语言参考程序如下:#include iap15w4k58s4.h /#include iap15w4k58s4.h /单片机单片机IAP15W4K58S4IAP15W4K58S4头文件头文件#define unsigned char#define unsigned char ucharucharsbit Wave_out=P10;sbit Wave_out=P10;uchar count
42、=20;/uchar count=20;/软件计数器赋初值软件计数器赋初值void main()void main()/主函数主函数 P1M1=0X00;P1M1=0X00;P1M0=0X00;P1M0=0X00;AUXR&=0 x7F;/AUXR&=0 x7F;/定时器时钟定时器时钟12T12T模式模式TMOD&=0 xF0;TMOD&=0 xF0;/设置定时器模式设置定时器模式TL0=0XB0;TL0=0XB0;/设置定时初值设置定时初值TH0=0X3C;TH0=0X3C;/设置定时初值设置定时初值 TF0=0;TF0=0;/清除清除TF0TF0标志标志 TR0=1;TR0=1;/定时器定
43、时器0 0开始计开始计 ET0=1;/ET0=1;/允许允许T0T0中断中断 EA=1 EA=1;/总中断打开总中断打开while(1)while(1);/主循环主循环 void Timer0_ISRvoid Timer0_ISR()()interrupt 1interrupt 1 TL0=0XB0;TL0=0XB0;/设置定时初值设置定时初值 TH0=0X3C;TH0=0X3C;/设置定时初值设置定时初值 count-;count-;if if(count=0count=0)Wave_out=Wave_out;Wave_out=Wave_out;count=20;count=20;【例【例7
44、.37.3】应用】应用IAP15W4K58S4IAP15W4K58S4单片机设计一个简单的秒表,要单片机设计一个简单的秒表,要求计时范围为求计时范围为60s60s,精度为,精度为1s1s,秒表具有计时显示。同时设置,秒表具有计时显示。同时设置两个按键,具有启动、暂停、继续、清零的功能。其原理图如两个按键,具有启动、暂停、继续、清零的功能。其原理图如图图7-107-10所示:所示:图图7-10 7-10 秒表控制电路示意图秒表控制电路示意图/*头文件头文件*#include iap15w4k58s4.hinclude iap15w4k58s4.h /IAP15W4K58S4IAP15W4K58S
45、4头文件头文件/*定义数字定义数字0909字型码表字型码表*/unsigned char tab =unsigned char tab =0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90;0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90;unsigned char count=0;/unsigned char count=0;/全局变量软件计数器赋初值全局变量软件计数器赋初值 unsigned char time=0;/unsigned char time
46、=0;/全局变量秒计数器赋初值全局变量秒计数器赋初值C C语言参考程序如下语言参考程序如下:void initvoid init(voidvoid)TMOD&=0 xF0;/TMOD&=0 xF0;/设置定时器模式设置定时器模式 TL0=0XB0 TL0=0XB0;/设置定时初值设置定时初值 TH0=0X3C;/TH0=0X3C;/设置定时初值设置定时初值 TF0=0;TF0=0;/清除清除TF0TF0标志标志 TR0=1;TR0=1;/定时器定时器0 0开始计开始计 ET0=1;/ET0=1;/允许允许T0T0中断中断 EA=1 EA=1;/总中断打开总中断打开 void display(u
47、nsigned char t)void display(unsigned char t)/显示函数子程序显示函数子程序 P2=tabt/10;/P2=tabt/10;/十位字型码输出十位字型码输出 P1=tabt%10;/P1=tabt%10;/个位个位字字型码输出型码输出 void main()void main()intit();/intit();/调用初始化函数调用初始化函数 while(1)while(1)display display(timetime);/;/调用显示程序调用显示程序 void Timer0_ISR()interrupt 1 /void Timer0_ISR()in
48、terrupt 1 /定时器定时器0 0中断服务程序中断服务程序 TL0=0XB0;TL0=0XB0;/设置定时初值设置定时初值 TH0=0X3C;TH0=0X3C;/设置定时初值设置定时初值 count=count+1;/count=count+1;/软件计数器加软件计数器加1 1 if(count=20)if(count=20)count=0 count=0;time=time+1;/time=time+1;/秒计数加秒计数加1 1 if(time=60)/if(time=60)/判断秒计数器是否到判断秒计数器是否到60s60s TR0=0;/TR0=0;/定时器定时器0 0停止定时停止定
49、时 void INT0()interrupt 0 void INT0()interrupt 0 /外部中断外部中断0 0中断服务程序中断服务程序 PCF=!PCF;/PCF=!PCF;/暂停暂停/继续标志反转继续标志反转 if(PCF=0)/if(PCF=0)/判断是否暂停判断是否暂停 TR0=1;/TR0=1;/启动定时器启动定时器 else else TR0=0;/TR0=0;/停止定时器停止定时器 void INT1()interrupt 2 void INT1()interrupt 2 /外部中断外部中断1 1服务程序服务程序 count=0;/count=0;/软件计数器重新赋值软件
50、计数器重新赋值 time=0;/time=0;/秒计数器重新赋值秒计数器重新赋值 TR0=1;/TR0=1;/启动定时器启动定时器 EA=1;/EA=1;/开中断开中断 【例【例7.47.4】定时器定时器0 0做做1616位自动重装位自动重装,中断频率为中断频率为1000HZ1000HZ,中断,中断函数从函数从P1.7P1.7取反输出取反输出500HZ500HZ方波信号。定时器方波信号。定时器1 1做做1616位自动重位自动重装装,中断频率为中断频率为2000HZ2000HZ,中断函数从,中断函数从P1.6P1.6取反输出取反输出1000HZ1000HZ方方波信号。定时器波信号。定时器2 2做