




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第6章章 AT89S51单片机的单片机的 定时器定时器/计数器计数器1内容概要内容概要 在工业检测与控制中,许多场合要用到计数或定时功能。在工业检测与控制中,许多场合要用到计数或定时功能。 例如,对外部脉冲进行计数或产生精确的定时时间等。片例如,对外部脉冲进行计数或产生精确的定时时间等。片内两个可编程的定时器内两个可编程的定时器/计数器计数器T1、T0,可满足这方面的需,可满足这方面的需要。本章介绍要。本章介绍AT89S51单片机片内定时器单片机片内定时器/计数器的结构与计数器的结构与功能,两种工作模式和功能,两种工作模式和4种工作方式,以及与其相关的两个种工作方式,以及与其相关的两个特殊功
2、能寄存器特殊功能寄存器TMOD和和TCON各位的定义及其编程,最后各位的定义及其编程,最后介绍定时器介绍定时器/计数器的计数器的C51编程及应用实例。编程及应用实例。 26.1 定时器定时器/计数器的结构计数器的结构 AT89S51的定时器的定时器/计数器结构如计数器结构如图图6-1所示,所示,T0由特殊功由特殊功能寄存器能寄存器TH0、TL0构成,构成,T1由特殊功能寄存器由特殊功能寄存器TH1、TL1构成。构成。 T0 和和T1都具有定时器和计数器两种工作模式,都具有定时器和计数器两种工作模式,4种工作方种工作方式(方式式(方式0 3)。属于增计数器。)。属于增计数器。 特殊功能寄存器特殊
3、功能寄存器TMOD用于选择用于选择T0、T1的工作模式和工的工作模式和工作方式。特殊功能寄存器作方式。特殊功能寄存器TCON用于控制用于控制T0、T1的启动和停的启动和停止计数,同时包含了止计数,同时包含了T0、T1的状态。的状态。T0、 T1不论是工作在不论是工作在定时器模式还是计数器模式,实质是对脉冲信号进行计数,定时器模式还是计数器模式,实质是对脉冲信号进行计数,4图图6-1 AT89S51单片机的定时器单片机的定时器/计数器结构框图计数器结构框图 只不过计数信号的来源不同。只不过计数信号的来源不同。 计数器模式是对加在计数器模式是对加在T0(P3.4)和)和T1(P3.5)两个引脚上)
4、两个引脚上的外部脉冲进行计数(见图的外部脉冲进行计数(见图6-1) 定时器模式是对单片机的系统时钟信号经片内定时器模式是对单片机的系统时钟信号经片内12分频后的分频后的内部脉冲信号(机器周期)计数。由于时钟频率是定值,所内部脉冲信号(机器周期)计数。由于时钟频率是定值,所以可根据对内部脉冲信号的计数值可计算出定时时间。以可根据对内部脉冲信号的计数值可计算出定时时间。 计数器的起始计数是从初值开始。单片机复位时计数器初计数器的起始计数是从初值开始。单片机复位时计数器初值为值为0,也可用指令给计数器装入一个新的初值。,也可用指令给计数器装入一个新的初值。AT89S51的的定时器定时器/计数器属于增
5、计数器。计数器属于增计数器。56.1.1 工作方式控制寄存器工作方式控制寄存器TMOD AT89S51定时器的工作方式寄存器定时器的工作方式寄存器TMOD用于选择工作模式用于选择工作模式和工作方式,字节地址为和工作方式,字节地址为89H,不能位寻址,其格式如,不能位寻址,其格式如图图6-2所所示。示。6图图6-2 寄存器寄存器TMOD格式格式8位分为两组,高位分为两组,高4位控制位控制T1,低,低4位控制位控制T0。下面对下面对TMOD的各位给出说明。的各位给出说明。(1)GATE门控位。门控位。GATE=0时,仅由运行控制位时,仅由运行控制位TRx(x = 0,1)来控制定时器)来控制定时器
6、运行。运行。GATE=1时,用外中断引脚时,用外中断引脚INT0*(或(或INT1* )上的电平与运)上的电平与运行控制位行控制位TRx共同控制定时器运行。共同控制定时器运行。(2)M1、M0工作方式选择位。工作方式选择位。M1、M0的的4种编码,对应于种编码,对应于4种工作方式的选择,如表种工作方式的选择,如表6-1所所示。示。78(3)C/T* 计数器模式和定时器模式选择位。计数器模式和定时器模式选择位。 C/T*=0,为定时器工作模式,对单片机的晶体振荡器,为定时器工作模式,对单片机的晶体振荡器12分频分频后的脉冲进行计数。后的脉冲进行计数。 C/T*=1,为计数器工作模式,计数器对外部
7、输入引脚,为计数器工作模式,计数器对外部输入引脚T0(P3.4)或)或T1(P3.5)的外部脉冲(负跳变)计数。)的外部脉冲(负跳变)计数。6.1.2 定时器定时器/计数器控制寄存器计数器控制寄存器TCON TCON字节地址为字节地址为88H,可位寻址,位地址为,可位寻址,位地址为88H8FH,格,格式如图式如图6-3所示。所示。9图图6-3 TCON格式格式 第第5章介绍了与外部中断有关的低章介绍了与外部中断有关的低4位。这里仅介绍与定时器位。这里仅介绍与定时器相关的高相关的高4位功能。位功能。(1)TF1、TF0计数溢出标志位。计数溢出标志位。 当计数器计数溢出时,该位置当计数器计数溢出时
8、,该位置“1”。使用查询方式时,此位。使用查询方式时,此位作为状态位供作为状态位供CPU查询,但应注意查询有效后,应使用软件及查询,但应注意查询有效后,应使用软件及时将该位清时将该位清“0”。使用中断方式时,此位作为中断请求标志位。使用中断方式时,此位作为中断请求标志位,进入中断服务程序后由硬件自动清,进入中断服务程序后由硬件自动清“0”。(2)TR1、TR0计数运行控制位。计数运行控制位。 TR1位(或位(或TR0位)位)=1,启动定时器工作的必要条件。,启动定时器工作的必要条件。 TR1位(或位(或TR0位)位)=0,停止定时器工作。,停止定时器工作。该位可由软件置该位可由软件置“1”或清
9、或清“0”。106.2 定时器定时器/计数器的计数器的4种工作方式种工作方式 4种工作方式分别介绍如下。种工作方式分别介绍如下。6.2.1 方式方式0 当当M1、M0为为00时,定时器时,定时器/计数器被设置为工作方式计数器被设置为工作方式0,这时定时器这时定时器/计数器的等效逻辑结构框图如计数器的等效逻辑结构框图如图图6-4所示(以定所示(以定时器时器/计数器计数器T1为例,为例,TMOD.5、TMOD.4 = 00)。)。11图6-4 定时器/计数器方式0逻辑结构框图方式方式0时,为时,为13位计数器,由位计数器,由TLx(x = 0,1)的低)的低5位和位和THx的高的高8位构成。位构成
10、。TLx低低5位溢出则向位溢出则向THx进位,进位,THx计数溢出则计数溢出则把把TCON中的溢出标志位中的溢出标志位TFx置置“1”。 图图6-2中,中, C/T*位控制的电子开关决定了定时器位控制的电子开关决定了定时器/计数器的两计数器的两种工作模式。种工作模式。 (1)C/T*=0,电子开关打在上面位置,电子开关打在上面位置,T1(或(或T0)为定时)为定时器工作模式,把时钟振荡器器工作模式,把时钟振荡器12分频后的脉冲作为计数信号。分频后的脉冲作为计数信号。 (2)C/T*=1,电子开关打在下面位置,电子开关打在下面位置,T1(或(或T0)为计数)为计数器工作模式,计数脉冲为器工作模式
11、,计数脉冲为P3.4(或(或P3.5)引脚上的外部输入脉)引脚上的外部输入脉冲,当引脚上发生负跳变时,计数器加冲,当引脚上发生负跳变时,计数器加1。13 GATE位状态决定定时器的运行控制取决于位状态决定定时器的运行控制取决于TRx一个条件,一个条件,还是取决于还是取决于TRx和和INTX* (x = 0,1)引脚状态这两个条件。)引脚状态这两个条件。 (1)GATE=0时,时,A点(见图点(见图6-4)电位恒为)电位恒为1,B点电位仅点电位仅取决于取决于TRx状态。状态。TRx = 1,B点为高电平,控制端控制电子开点为高电平,控制端控制电子开关闭合,允许关闭合,允许T1(或(或T0)对脉冲
12、计数。)对脉冲计数。TRx = 0,B点为低电点为低电平,电子开关断开,禁止平,电子开关断开,禁止T1(或(或T0)计数。)计数。 (2)GATE=1时,时,B点电位由点电位由INTX*(x = 0,1)的输入电)的输入电平和平和TRx的状态两个条件来定。当的状态两个条件来定。当TRx=1,且,且INTX*=1时,时,B点才为点才为1,控制端控制电子开关闭合,允许,控制端控制电子开关闭合,允许T1(或(或T0)计数。)计数。故这种情况下计数器是否计数是由故这种情况下计数器是否计数是由TRx和和INTX*两个条件来共两个条件来共同控制。同控制。146.2.2 方式方式1 当当M1、M0为为01时
13、,工作于方式时,工作于方式1,方式,方式1的等效电路逻辑的等效电路逻辑结构如结构如图图6-5所示。所示。 方式方式1和方式和方式0的差别仅仅在于计数器的位数不同,方式的差别仅仅在于计数器的位数不同,方式1为为16位计数器,由位计数器,由THx高高8位和位和TLx低低8位构成(位构成(x = 0,1),),方式方式0则为则为13位计数器,有关控制状态位的含义(位计数器,有关控制状态位的含义(GATE、C/T*、TFx、TRx)与方式)与方式0相同。相同。 1516图6-5 定时器/计数器方式1逻辑结构框图 6.2.3 方式方式2 方式方式0和方式和方式1的最大特点是计数溢出后,计数器为全的最大特
14、点是计数溢出后,计数器为全0。因。因此在循环定时或循环计数应用时就存在用指令反复装入计数初此在循环定时或循环计数应用时就存在用指令反复装入计数初值的问题。这不仅影响定时精度,也给程序设计带来麻烦。方值的问题。这不仅影响定时精度,也给程序设计带来麻烦。方式式2就是解决此问题而设置的。就是解决此问题而设置的。 当当M1、M0为为10时,定时器时,定时器/计数器处于工作方式计数器处于工作方式2,这时定,这时定时器时器/计数器的等效逻辑结构如计数器的等效逻辑结构如图图6-6所示(以定时器所示(以定时器T1为例,为例,x = 1)。)。 1718图6-6 定时器/计数器方式2逻辑结构框图 定时器定时器/
15、计数器的方式计数器的方式2为自动恢复初值(初值自动装入)的为自动恢复初值(初值自动装入)的8位定时器位定时器/计数器,计数器,TLx(x = 0,1)作为常数缓冲器,当)作为常数缓冲器,当TLx计数溢出时,在溢出标志计数溢出时,在溢出标志TFx置置“1”的同时,还自动将的同时,还自动将THx中中的初值送至的初值送至TLx,使,使TLx从初值开始重新计数。定时器从初值开始重新计数。定时器/计数器计数器的方式的方式2工作过程如工作过程如图图6-7所示。所示。 此工作方式可省去用户软件中重装初值的指令的执行时间,此工作方式可省去用户软件中重装初值的指令的执行时间,简化定时初值的计算方法,可相当精确地
16、确定定时时间。简化定时初值的计算方法,可相当精确地确定定时时间。196.2.4 方式方式3 方式方式3是为了增加一个附加的是为了增加一个附加的8位定时器位定时器/计数器而设置的,计数器而设置的,从而使从而使AT89S51单片机具有单片机具有3个定时器个定时器/计数器。方式计数器。方式3只适用只适用于定时器于定时器/计数器计数器T0,定时器,定时器/计数器计数器T1不能工作在方式不能工作在方式3。T1处于方式处于方式3时相当于时相当于TR1 = 0,停止计数(此时,停止计数(此时T1可用来作为可用来作为20图6-7 方式2工作过程 串行口波特率产生器)。串行口波特率产生器)。1工作方式工作方式3
17、下的下的T0 当当TMOD的低的低2位为位为11时,时,T0的工作方式被选为方式的工作方式被选为方式3,各引脚与各引脚与T0的逻辑关系如的逻辑关系如图图6-8所示。所示。 T0分为两个独立的分为两个独立的8位计数器位计数器TL0和和TH0,TL0使用使用T0的的状态控制位状态控制位C/T*、GATE、TR0,而,而TH0被固定为一个被固定为一个8位定位定时器(不能作为外部计数模式),并使用时器(不能作为外部计数模式),并使用T1的状态控制位的状态控制位TR1和和TF1,同时占用,同时占用T1的中断请求源的中断请求源TF1。2122图图6-8 定时器定时器/计数器计数器T0方式方式3的逻辑结构框
18、图的逻辑结构框图(1)T1工作在方式工作在方式0T1的控制字中的控制字中M1、M0 = 00时,时,T1工作在方式工作在方式0,工作示意图,工作示意图如如图图6-9所示。所示。 23图6-9 T0工作在方式3时T1为方式0的工作示意图(2)T1工作在方式工作在方式1当当T1的控制字中的控制字中M1、M0 = 01时,时,T1工作在方式工作在方式1,工作示意图,工作示意图如如图图6-10所示。所示。24图6-10 T0工作在方式3时T1为方式1的工作示意图(3)T1工作在方式工作在方式2 当当T1的控制字中的控制字中M1、M0 = 10时,时,T1的工作方式为方式的工作方式为方式2,工作示意图如
19、工作示意图如图图6-11所示。所示。 25图图6-11 T0工作在方式工作在方式3时时T1为方式为方式2的工作示意图的工作示意图(4)T1设置在方式设置在方式3。 当当T0设置在方式设置在方式3时,再把时,再把T1也设置成方式也设置成方式3,此时,此时T1停停止计数。止计数。6.3 对外部输入的计数信号的要求对外部输入的计数信号的要求 当定时器当定时器/计数器工作在计数器模式时,计数脉冲来自外计数器工作在计数器模式时,计数脉冲来自外部输入引脚部输入引脚T0或或T1。当输入信号产生由。当输入信号产生由1至至0的跳变(即负的跳变(即负跳变)时,计数器值增跳变)时,计数器值增1。每个机器周期的。每个
20、机器周期的S5P2期间,都对期间,都对外部输入引脚外部输入引脚T0或或T1进行采样。如在第一个机器周期中采进行采样。如在第一个机器周期中采得的值为得的值为1,而在下一个机器周期中采得的值为,而在下一个机器周期中采得的值为0,则在紧跟,则在紧跟着的再下一个机器周期着的再下一个机器周期S3P1期间,计数器加期间,计数器加1。27 由于确认一次负跳变花由于确认一次负跳变花2个机器周期,即个机器周期,即24个振荡周期,因个振荡周期,因此外部输入的计数脉冲的最高频率为系统振荡器频率的此外部输入的计数脉冲的最高频率为系统振荡器频率的1/24。图图6-12 对外部计数输入信号的要求对外部计数输入信号的要求
21、例如,选用例如,选用6MHz频率的晶体,允许输入的脉冲频率最高频率的晶体,允许输入的脉冲频率最高为为250kHz。如果选用。如果选用12MHz频率的晶体,则可输入最高频频率的晶体,则可输入最高频率为率为500kHz的外部脉冲。对于外部输入信号的占空比并没的外部脉冲。对于外部输入信号的占空比并没有什么限制,但为了确保某一给定电平在变化之前能被采样有什么限制,但为了确保某一给定电平在变化之前能被采样一次,则这一电平至少要保持一个机器周期。故对外部输入一次,则这一电平至少要保持一个机器周期。故对外部输入信号的要求如信号的要求如图图6-12所示,图中所示,图中Tcy为机器周期。为机器周期。 286.4
22、 定时器定时器/计数器的编程和应用计数器的编程和应用 在在4种工作方式中,方式种工作方式中,方式0与方式与方式1基本相同,只是计数器的基本相同,只是计数器的计数位数不同。方式计数位数不同。方式0为为13位计数器,方式位计数器,方式1为为16位计数器。位计数器。由于方式由于方式0是为兼容是为兼容MCS-48而设,且其计数初值计算复杂,而设,且其计数初值计算复杂,所以在实际应用中,一般不用方式所以在实际应用中,一般不用方式0,而采用方式,而采用方式1。6.4.1 P1口外接的口外接的8只只LED每每0.5s闪亮一次。闪亮一次。 【例例6-1】在在AT89S51单片机的单片机的P1口上接有口上接有8
23、只只LED。下面。下面采用定时器采用定时器T0的方式的方式1的定时中断方式,使的定时中断方式,使P1口外接的口外接的8只只LED每每0.5s闪亮一次。闪亮一次。 (1)设置)设置TMOD寄存器寄存器 定时器定时器T0工作在方式工作在方式1,应使,应使TMOD寄存器的寄存器的M1、M0=01;应设置;应设置C/=0,为定时器工作模式;对,为定时器工作模式;对T0的运行控制仅由的运行控制仅由TR0来控制,应使来控制,应使GATE0=0。定时器。定时器T1不使用,各相关位均设为不使用,各相关位均设为0。所以,。所以,TMOD寄存器应初始化为寄存器应初始化为0 x01。(2)计算)计算T0计数初值计数
24、初值 设定时时间设定时时间5ms(即(即5000s),设定时器),设定时器T0的计数初值为的计数初值为X,假设晶振的频率为,假设晶振的频率为11.0592MHz,则定时时间为:定时时,则定时时间为:定时时间间=(216X) 12/晶振频率晶振频率30则则5000=(216 X) 12/11.0592得:得:X = 60928,转换成,转换成16进制后为:进制后为:0 xee00,其中,其中0 xee装装入入TH0,0 x00装入装入TL0。(3)设置)设置IE寄存器寄存器 本例由于采用定时器本例由于采用定时器T0中断,因此需将中断,因此需将IE寄存器中的寄存器中的EA、ET0位置位置1。(4)
25、启动和停止定时器)启动和停止定时器T0 将定时器控制寄存器将定时器控制寄存器TCON中的中的TR0=1,则启动定时器,则启动定时器T0;TR0=0,则停止定时器,则停止定时器T0定时。定时。 参考程序如下:参考程序如下:31#includeChar i=100;/*给变量给变量i赋初值赋初值*/void main( )TMOD=0 x01;/*设置定时器设置定时器T0为方式为方式1*/TH0=0 xee;/*向向TH0写入初值的高写入初值的高8位位*/TL0=0 x00;/*向向TL0写入初值的低写入初值的低8位位*/P1=0 x00; /*P1口口8只只LED点亮点亮*/EA=1; /*总中
26、断允许总中断允许*/ET0=1; /*定时器定时器T0中断允许中断允许*/ TR0=1; /*启动定时器启动定时器T0*/while(1) ; /*无穷循环,等待定时中断无穷循环,等待定时中断*/32/*以下为定时器以下为定时器T0的中断服务程序的中断服务程序*/void T0_int(void) interrupt 1 TH0=0 xee;/*给给T0装入装入16位初值,计位初值,计4608个数后,个数后,T0溢出溢出*/TL0=0 x00; i-; /*循环次数减循环次数减1*/if(i=0)P1=P1; /*P1口按位取反口按位取反*/i=100;/*重新设置循环次数重新设置循环次数*/
27、336.4.2 计数器的应用计数器的应用 【例例6-2】 采用定时器采用定时器T1的方式的方式1的中断计数方式,如的中断计数方式,如图图6-13所示,计数输入引脚所示,计数输入引脚T1(P3.5)上外接开关)上外接开关K1,作为,作为计数信号输入。按计数信号输入。按4次次K1后,后,P1口的口的8只只LED闪烁不停。闪烁不停。(1)设置)设置TMOD寄存器寄存器 T1工作在方式工作在方式1,应使,应使TMOD的的M1、M0=01;设置计数器;设置计数器工作模式工作模式C/T*=1;对;对T0的运行控制仅由的运行控制仅由TR0来控制,应使来控制,应使GATE0=0。定时器。定时器T0不使用,各相
28、关位均设为不使用,各相关位均设为0。所以,。所以,TMOD寄存器应初始化为寄存器应初始化为0 x50。3435图图6-13 由外部计数输入信号控制由外部计数输入信号控制LED的闪烁的闪烁(2)计算)计算T1计数初值计数初值 由于每按由于每按4次次K1,计数一次,因此计数器的初值为,计数一次,因此计数器的初值为65536-4=65532,将其转换成,将其转换成16进制后为:进制后为:0 xfffc,因此,因此,TH0=0 xff,TL0=0 xfc。(3)设置)设置IE寄存器寄存器 本例由于采用定时器本例由于采用定时器T1中断,因此需将中断,因此需将IE寄存器中的寄存器中的EA、ET1位置位置1
29、。(4)启动和停止定时器)启动和停止定时器T1 将定时器控制寄存器将定时器控制寄存器TCON中的中的TR1=1,则启动定时器,则启动定时器T1计数;计数;TR1=0,则停止定时器,则停止定时器T1计数。计数。 参考程序如下:参考程序如下:36#include void Delay(unsigned int i)/* 定义延时函数定义延时函数Delay( ),i是形式参数,不是形式参数,不能赋初值能赋初值*/unsigned int j;for(;i0;i-) /* 变量变量i由实际参数传入一个值,因此由实际参数传入一个值,因此i不能赋初值不能赋初值*/for(j=0;j125;j+);/*空函
30、数空函数*/void main( )/*主函数主函数*/TMOD=0 x50;/*设置定时器设置定时器T1为方式为方式1计数计数*/TH0=0 xff;/*向向TH0写入初值的高写入初值的高8位位*/37TL0=0 xfc;/*向向TL0写入初值低写入初值低8位位*/EA=1; /*总中断允许总中断允许*/ET1=1; /*T1中断允许中断允许*/ TR1=1; /*启动启动T1*/while(1) ; /*无穷循环,等待定时中断无穷循环,等待定时中断*/*以下为定时器以下为定时器T1的中断服务程序的中断服务程序*/void T1_int(void) interrupt 3 for(;) /*
31、无限循环无限循环*/P1=0 xff;/*8位位LED全灭全灭*/Delay(500) ;/*延时延时500ms*/P1=0;/*8位位LED全亮全亮*/Delay(500); /*延时延时500ms */386.4.3 扩展一个外部中断源扩展一个外部中断源 方式方式2可自动重新装载初值。此方式可省去用户程序中重新可自动重新装载初值。此方式可省去用户程序中重新装初值的指令。装初值的指令。 当某个定时器当某个定时器/计数器不使用时,可为计数器不使用时,可为AT89S51扩展一个负扩展一个负跳沿触发的外部中断源。跳沿触发的外部中断源。 基本思想是把定时器溢出中断做成外部中断,然后把计数输基本思想是
32、把定时器溢出中断做成外部中断,然后把计数输入信号接到定时器的相应引脚上入信号接到定时器的相应引脚上T0脚(或脚(或T1脚),并把定时脚),并把定时器被设置为方式器被设置为方式2(自动装入常数方式)计数工作模式,计数(自动装入常数方式)计数工作模式,计数器器TH0、TL0初值均为初值均为0FFH,并允许,并允许T0中断,总中断开放。中断,总中断开放。当检测到当检测到T0脚(或脚(或T1脚)引脚电平发生负跳变时,计数器脚)引脚电平发生负跳变时,计数器TF0(或或TF1)溢出,这时将产生一个中断请求。溢出,这时将产生一个中断请求。 39 【例例6-3】扩展一个负跳沿触发的外部中断源,把定时器扩展一个
33、负跳沿触发的外部中断源,把定时器T0计数输入引脚作为外部中断请求信号的输入端。计数输入引脚作为外部中断请求信号的输入端。#includevoid main( ) TMOD=0 x06;/*设置定时器T0为方式2计数*/TH0=0 xff;/*给T0装入初值*/TL0=0 xff; /*给T0装入初值*/ET0=1; /*允许T0中断*/EA=1; /*总中断开*/TF0=0;/*T0中断溢出标志位清0*/TR0=1/*接通T0 计数* /while (1) /*无限循环等待* /40/*以下为定时器T0的中断服务程序*/void T0_int(void) interrupt 1 using 0
34、 /*外中断处理部分*/ 说明:本例所述的使用定时器扩展的外中断源只能是负跳沿说明:本例所述的使用定时器扩展的外中断源只能是负跳沿触发。此外,只有当定时器触发。此外,只有当定时器T0(或(或T1)不用的话,才可使用)不用的话,才可使用本方法来扩充外部中断源,此时定时器本方法来扩充外部中断源,此时定时器T0本身的功能将不能再本身的功能将不能再使用,除非使用软件来对它进行复用控制。使用,除非使用软件来对它进行复用控制。6.4.4 P1.0上产生周期为上产生周期为2ms的方波的方波 【例例6-4】系统时钟为系统时钟为12MHz,编程实现从,编程实现从P1.0引脚上输出引脚上输出一个周期为一个周期为2
35、ms的方波,如的方波,如图图6-14所示所示4142图图6-14 定时器控制定时器控制P1.0输出一个周期为输出一个周期为2ms的方波的方波 基本思想:基本思想:要在要在P1.0上产生周期为上产生周期为2ms的方波,定时器应的方波,定时器应产生产生1ms的周期性的定时,定时对的周期性的定时,定时对P1.0求反。选择定时器求反。选择定时器T0,方式,方式1定时,采用中断方式,定时,采用中断方式,GATE不起作用。不起作用。 计算计算T0的初值计算:的初值计算: 设设T0的初值为的初值为X,则,则(216 X) 1 106 = 1 103= 65536X =1000 则初值为:则初值为:65536
36、1000=64536,因此因此 TH0=(65536 1000) /256 ,TL0=(65536 1000) %256。 参考程序如下:参考程序如下:43#includesbit P1_0=P10;void main(void)TMOD=0 x01;/*设置定时器设置定时器T0为方式为方式2计数计数*/P1_0=0;TH0=(65536 1000) /256;/*给给T0装入初值装入初值*/TL0=(65536 1000) %256; /*给给T0装入初值装入初值*/ET0=1; /* 允许允许T0中断中断 */EA=1; /* 总中断开总中断开 */TR0=1/* 接通接通T0 计数计数
37、* /do while (1); /* 无限循环等待无限循环等待 * /void T0_int(void) interrupt 1 using 1P1_0=! P1_0;TH0=(65536 1000) /256;TL0=(65536 1000) %256;446.4.5 P1.1上产生周期为上产生周期为1s的方波的方波 【例例6-5】假设系统时钟为假设系统时钟为12MHz,编程实现从,编程实现从P1.1引脚引脚上上输出一个周期为输出一个周期为1s的方波。的方波。 基本思想:基本思想:要在要在P1.0上产生周期为上产生周期为1s的方波,定时器应产的方波,定时器应产生生500ms的周期性定时,定
38、时到则对的周期性定时,定时到则对P1.0求反。由于定时时求反。由于定时时间较长,用定时器不能直接实现,直接定时时间最长的就是间较长,用定时器不能直接实现,直接定时时间最长的就是方式方式1,仅为,仅为65ms(系统时钟系统时钟12MHz)多一点。多一点。 实现:实现:T0定为定为10ms定时,每定时,每10ms对对P1.0求反一次,求反一次,P1.0输出的脉冲加到定时器输出的脉冲加到定时器T1的计数输入脚的计数输入脚P3.5(T1脚)脚),作为计数输入,定时,作为计数输入,定时500ms需计数需计数50次。次。T1设为方式设为方式2计计数,初值数,初值X为:为:28X=50,则,则X=206,4
39、5 所以所以TH1= TL1=206。T0设为方式设为方式1定时,则控制字为定时,则控制字为61H。定时器。定时器T0和和T1均采用中断方式工作。均采用中断方式工作。 参考程序如下:参考程序如下:#includesbit P1_0=P10;sbit P1_1=P11;void main(void)TMOD=0 x61;/*设置定时器设置定时器T0为方式为方式1定时,定时,T1为方式为方式2计数计数*/P1_0=0;TH0=(65536 10000) /256;/*给给T0装初值装初值*/TL0=(65536 10000) %256; TH1=206;/*给给T1装初值装初值*/TL1=206;
40、46EA=1; /* 总中断开总中断开 */ET0=1; /* 允许允许T0中断中断 */ET1=1; /* 允许允许T1中断中断 */TR0=1;TR1=1;while (1);void T0_int(void) interrupt 1 TH0=(65536 1000) /256;TL0=(65536 1000) %256;P1_0=! P1_0;void T1_int(void) interrupt 3 P1_1=! P1_1; ;/* P1.1脚产生脚产生1s的方波的方波*/ 。476.4.6 T1控制发出控制发出1KHz的音频信号的音频信号【例例6-6】 利用定时器利用定时器T1的中断
41、来控制蜂鸣器发出的中断来控制蜂鸣器发出1KHz的音频的音频信号,电路图见信号,电路图见图图6-15。假设系统时钟为假设系统时钟为11.0592MHz,则每个脉冲的周期为,则每个脉冲的周期为12/11.0592=1.085s。1KHz的音频信号周期为的音频信号周期为1ms,因此,因此要计数的脉冲数为要计数的脉冲数为1000/1.085=921次。所以次。所以T1的初值:的初值:TH1=(65536 921) /256;TL1=(65536 921) %256 参考程序如下:参考程序如下:4849图6-15 控制蜂鸣器发出1KHz的音频信号 #includesbit P1_0=P10;sbit s
42、ound=P17;void main(void)EA=1; /* 总中断开 */ET1=1; /* 允许T0中断 */TMOD=0 x10;/*设置定时器T1为方式1定时*/P1_0=0;TH1=(65536 921) /256;/*给T1装初值*/TL1=(65536 921) %256; TR1=1;while (1);50void T1_int(void) interrupt 3 using0 sound =sound;TH1=(65536 921) /256;TL1=(65536 921) %256;516.4.7 测量脉冲宽度(门控位测量脉冲宽度(门控位GATEx的应用)的应用) 下
43、面以定时器下面以定时器T1为例,介绍门控制位为例,介绍门控制位GATE的具体应用,的具体应用,即测量即测量INT0*(或(或INT1* )引脚上正脉冲的宽度。)引脚上正脉冲的宽度。 【例例6-7】 门控位门控位GATE1可使可使T1的启动计数受的控制,当的启动计数受的控制,当GATE1=1,TR1=1时,只有引脚时,只有引脚INT1*输入高电平时,输入高电平时,T1才才被允许计数。利用被允许计数。利用GATE1的这一功能,可测量引脚的这一功能,可测量引脚INT1*(P3.3)上正脉冲的宽度(机器周期数),利用门控制位)上正脉冲的宽度(机器周期数),利用门控制位GATE1,测量引脚,测量引脚IN
44、T1*上正脉冲的宽度。方法如上正脉冲的宽度。方法如图图6-16所所示。示。5253图6-16 利用GATE位测量正脉冲的宽度 参考程序如下:#includesbit P3_3=P33;/* 位变量定义位变量定义*/unsigned count_high; /* 定义计数变量,用来读取定义计数变量,用来读取TH0*/unsigned count_low;/* 定义计数变量,用来读取定义计数变量,用来读取TL0*/void read_ count( ) ; /* 读计数器函数读计数器函数*/void main( )TMOD=0 x90;/*设置定时器设置定时器T1为方式为方式1定时定时*/TH1=
45、0;/*向定时器向定时器T1写入计数初值写入计数初值*/TL1=0;TR1=1;while(P3_3=1); /* 等待变低等待变低*/54TR1=1;/* 如果为低,启动如果为低,启动T1(未真正开始计数未真正开始计数)*/while(P3_3=0); /* 等待变高,变高后等待变高,变高后T1真正开始计数真正开始计数*/while(P3_3=1); /* 等待变低,变低后等待变低,变低后T1停止计数停止计数*/TR1=0;read_ count( ) /* 读计数寄存器内容的函数读计数寄存器内容的函数*/void read_ count( ) /* 读取计数寄存器的内容读取计数寄存器的内容
46、*/docount_high=TH1;/* 读高字节读高字节*/count_low =TL1;/* 读低字节读低字节*/* 可将两字节的机器周期数进行显示处理可将两字节的机器周期数进行显示处理*/while(count_high!= TH1); 执行以上程序,使引脚上出现的正脉冲宽度以机器周期数执行以上程序,使引脚上出现的正脉冲宽度以机器周期数的形式读入到的形式读入到count_high 和和count_low两个单元中,如果编两个单元中,如果编写了显示程序,可将其显示在显示器上。写了显示程序,可将其显示在显示器上。6.4.8 实时时钟的设计实时时钟的设计 本节介绍如何使用定时器本节介绍如何使
47、用定时器/计数器来实现实时时钟。实时时计数器来实现实时时钟。实时时钟就是以秒、分、时为单位计时。钟就是以秒、分、时为单位计时。1计时的实现计时的实现 时钟最小计时单位是秒,如何获得时钟最小计时单位是秒,如何获得1s定时?可将定时器定时?可将定时器T0的定时时间定为的定时时间定为50ms,采用中断方式进行溢出次数的累计,采用中断方式进行溢出次数的累计,计满计满20次,则秒计数变量次,则秒计数变量s加加1;若秒计满;若秒计满60,则分计数变量,则分计数变量m加加1,同时将秒计数变量,同时将秒计数变量s清清0;若分钟计满;若分钟计满60,则小时计数,则小时计数变量变量h h加加1 1;若小时计数变量满;若小时计数变量满2424,则将小时计数变量清,则将小时计数变量清0 0。2 2程序设计程序设计 先将定时器以及各计数变量,然后调用时间显示的子程序。先将定时器以及各计数变量,然后调用时间显示的子程序。计时功能由定时器计时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 追求卓越与创新方法2025年国际金融理财师考试试题及答案
- 2024年畜牧师考试经验交流会试题及答案
- 小语种证书考试答题技巧及试题与答案
- 2025年银行从业资格证考试认识与试题答案
- 2025银行从业资格证考试个人提升路径探索及试题答案
- 实战小语种考试攻略试题及答案
- 深入解析2024小语种试题及答案
- 特许金融分析师考试评估方法试题及答案
- 回顾2025年特许金融分析师考试新变化试题及答案
- 2024年广东省深圳市南山区南山外国语教育集团、南山第二外国语教育集团中考二模语文试题(含答案)
- 2024-2030年中国个人形象包装及设计服务行业竞争状况及投资战略研究报告
- 苏教版数学六年级下册期中考试试卷及答案
- 2024年电工(高级技师)考前必刷必练题库500题(含真题、必会题)
- 生日宴会祝福快闪演示模板
- 2024年青海省中考英语试卷真题(含答案解析)
- 2020中等职业学校英语课程标准
- 高标准农田设计实施方案(技术标)
- 创伤失血性休克中国急诊专家共识2023解读课件
- 云计算白皮书(2024年)解读
- 电力电子技术智慧树知到期末考试答案章节答案2024年中国石油大学(华东)
- 2024年四川省乐山市中考地理·生物合卷试卷真题(含答案)
评论
0/150
提交评论