单片机原理及接口技术(C51编程)第7章-定时器计数器课件.ppt

上传人(卖家):晟晟文业 文档编号:4091573 上传时间:2022-11-10 格式:PPT 页数:91 大小:1.46MB
下载 相关 举报
单片机原理及接口技术(C51编程)第7章-定时器计数器课件.ppt_第1页
第1页 / 共91页
单片机原理及接口技术(C51编程)第7章-定时器计数器课件.ppt_第2页
第2页 / 共91页
单片机原理及接口技术(C51编程)第7章-定时器计数器课件.ppt_第3页
第3页 / 共91页
单片机原理及接口技术(C51编程)第7章-定时器计数器课件.ppt_第4页
第4页 / 共91页
单片机原理及接口技术(C51编程)第7章-定时器计数器课件.ppt_第5页
第5页 / 共91页
点击查看更多>>
资源描述

1、 第第7章章 定时器定时器/计数器的工计数器的工 作原理及应用作原理及应用 17.1 定时器定时器/计数器的结构计数器的结构 AT89S51定时器定时器/计数器结构计数器结构见见图图 7-1,定时器,定时器/计数器计数器T0由特殊功能由特殊功能寄存器寄存器TH0、TL0构成,构成,T1由特殊功能寄存器由特殊功能寄存器TH1、TL1构成。构成。2图图7-1 定时器定时器/计数器结构框图计数器结构框图 T0、T1都有都有定时器定时器和和计数器计数器两种工作模式两种工作模式,两种两种模式实质都是对脉冲信模式实质都是对脉冲信号进行计数,只不过计数信号来源不同。号进行计数,只不过计数信号来源不同。计数器

2、模式计数器模式是对加在是对加在T0(P3.4)和)和T1(P3.5)两个引脚上的外部脉冲进)两个引脚上的外部脉冲进行计数(见图行计数(见图7-1););定时器模式定时器模式是对系统时钟信号经是对系统时钟信号经12分频后的内部脉冲信号(机器周期)分频后的内部脉冲信号(机器周期)计数。由于系统时钟频率是定值,可根据计数值计算出定时时间。两个定计数。由于系统时钟频率是定值,可根据计数值计算出定时时间。两个定时器时器/计数器属于计数器属于增增1计数器计数器,即每计一个脉冲,计数器增,即每计一个脉冲,计数器增1。T0、T1具有具有4种工作方式种工作方式(方式(方式0、1、2和和3)。)。GATE=1,定

3、时器是否计数,由外中断引脚,定时器是否计数,由外中断引脚INTx*上的电平与运行控上的电平与运行控制位制位TRx共同控制。共同控制。(2)M1、M0工作方式选择位工作方式选择位 M1、M0 4种编码,对应于种编码,对应于4种工作方式的选择,种工作方式的选择,见见表表7-1。表表7-1M1、M0工作方式选择工作方式选择6(3)C/T*计数器模式和定时器计数器模式和定时器模式选择位模式选择位 C/T*=0,定时器模式,对系统时钟,定时器模式,对系统时钟12分频后的脉冲进行计数。分频后的脉冲进行计数。C/T*=1,计数器模式,计数器对外部输入引脚,计数器模式,计数器对外部输入引脚T0(P3.4)或)

4、或T1(P3.5)的外部脉冲(负跳变)计数。)的外部脉冲(负跳变)计数。7.1.2 定时器定时器/计数器控制寄存器计数器控制寄存器TCON TCON字节地址字节地址88H,位地址为,位地址为88H8FH。格式。格式见见图图7-3。7图图7-3 TCON格式格式第第6章已介绍与外中断有关的低章已介绍与外中断有关的低4位。这里仅介绍高位。这里仅介绍高4位功能。位功能。(1)TF1、TF0计数溢出标志位计数溢出标志位 当计数器计数溢出时,该位置当计数器计数溢出时,该位置“1”。使用查询方式时,此位可供。使用查询方式时,此位可供CPU查询,但应注意查询后,用软件及时将该位清查询,但应注意查询后,用软件

5、及时将该位清“0”。使用中断方式。使用中断方式时,作为中断请求标志位,进入中断服务程序后由硬件自动清时,作为中断请求标志位,进入中断服务程序后由硬件自动清“0”。(2)TR1、TR0计数运行控制位计数运行控制位 TR1位(或位(或TR0)=1,启动计数器计数的必要条件。,启动计数器计数的必要条件。TR1位(或位(或TR0)=0,停止计数器计数。,停止计数器计数。该位可由软件置该位可由软件置“1”或清或清“0”。7.2 定时器定时器/计数器的计数器的4种工作方式种工作方式 4种工作方式,分别介绍如下。种工作方式,分别介绍如下。87.2.1 方式方式0 当当M1、M0=00,设置为方式,设置为方式

6、0,定时器,定时器/计数器等效逻辑结构计数器等效逻辑结构见见图图7-4(以(以T1为例,为例,TMOD.5、TMOD.4=00)。)。9图图7-4 定时器定时器/计数器方式计数器方式0的逻辑结构框图的逻辑结构框图 方式方式0为为1313位计数器位计数器,由,由TLx(x=0,1)的低)的低5位和位和THx的高的高8位构成位构成。TLx低低5位溢出则向位溢出则向THx进位,进位,THx计数溢出则把计数溢出则把TCON中的溢出标志位中的溢出标志位TFx置置“1”。图图7-2中,中,C/T*位控制电子开关决定位控制电子开关决定2种工作模式。种工作模式。(1)C/T*=0,电子开关打在上面,电子开关打

7、在上面,T1(或(或T0)为定时器工作模式,系)为定时器工作模式,系统时钟统时钟12分频后的脉冲作为计数信号。分频后的脉冲作为计数信号。(2)C/T*=1,电子开关打在下面,电子开关打在下面,T1(或(或T0)为计数器工作模式,对)为计数器工作模式,对P3.5(或(或P3.4)引脚上的外部输入脉冲计数,当引脚上发生负跳变时,计)引脚上的外部输入脉冲计数,当引脚上发生负跳变时,计数器加数器加1。GATE位状态决定定时器位状态决定定时器/计数器运行控制取决于计数器运行控制取决于TRx一个条件,还是一个条件,还是取决于取决于TRx和和INTx*引脚状态两个条件。引脚状态两个条件。10(1)GATE=

8、0时,时,A点(见图点(见图7-4)电位恒为)电位恒为1,B点电位仅取决于点电位仅取决于TRx状态。状态。TRx=1,B点为高电平,控制端控制电子开关闭合,允许点为高电平,控制端控制电子开关闭合,允许T1(或(或T0)对脉冲计数。)对脉冲计数。TRx=0,B点为低电平,电子开关断开,禁止点为低电平,电子开关断开,禁止T1(或(或T0)计数。)计数。(2)GATE=1时,时,B点电位由点电位由INTx*(x=0,1)的电平和)的电平和TRx的状的状态两个条件来确定。当态两个条件来确定。当TRx=1,且,且INTx*=1时,时,B点才为点才为1,电子开关闭,电子开关闭合,允许合,允许T1(或(或T

9、0)计数。故这种情况下计数器是否计数是由)计数。故这种情况下计数器是否计数是由TRx和和INTx*两个条件来共同控制的。两个条件来共同控制的。7.2.2 方式方式1 当当M1、M0=01时,工作于方式时,工作于方式1,等效电路逻辑结构,等效电路逻辑结构见见图图7-5。12图图7-5 方式方式1的逻辑结构框图的逻辑结构框图方式方式1和方式和方式0差别仅仅在于计数器的位数不同,方式差别仅仅在于计数器的位数不同,方式1为为16位位计数器,由计数器,由THx高高8位和位和TLx低低8位构成(位构成(x=0,1),方式),方式0则为则为13位计数器,有关控制状态位含义(位计数器,有关控制状态位含义(GA

10、TE、C/T*、TFx、TRx)与方式)与方式0相同。相同。7.2.3 7.2.3 方式方式2 2 方式方式0 0和方式和方式1 1最大特点是计数溢出后,计数器为全最大特点是计数溢出后,计数器为全0 0。因此在循。因此在循环定时或循环计数应用时就存在用指令反复装入计数初值的问题,这会环定时或循环计数应用时就存在用指令反复装入计数初值的问题,这会影响定时精度,方式影响定时精度,方式2 2就是为解决此问题而设置的。就是为解决此问题而设置的。当当M1M1、M0=10M0=10时,工作方式时,工作方式2 2,等效逻辑结构,等效逻辑结构见见图图7-67-6(以(以T1T1为例,为例,x=1x=1)。)。

11、工作方式工作方式2 2为为自动恢复初值(初值自动装入)自动恢复初值(初值自动装入)的的8 8位定时器位定时器/计数计数器,器,TLxTLx(x=0 x=0,1 1)作为常数缓冲器,当)作为常数缓冲器,当TLxTLx计数溢出时,在溢出标志计数溢出时,在溢出标志TFxTFx置置“1 1”的同时,还自动将的同时,还自动将THxTHx中的初值送至中的初值送至TLxTLx,使,使TLxTLx从初值从初值开始重新计数。定时器开始重新计数。定时器/计数器方式计数器方式2 2工作过程工作过程见见图图7-77-7。1314图图7-67-6 方式方式2逻辑结构框图逻辑结构框图15图图7-7 方式方式2工作过程工作

12、过程方式方式2可省去用户软件中重装初值的指令执行时间,简化定时初可省去用户软件中重装初值的指令执行时间,简化定时初值的计算方法,可相当精确地定时。值的计算方法,可相当精确地定时。7.2.4 方式方式3 方式方式3是为增加一个附加的是为增加一个附加的8位定时器位定时器/计数器而设置的,从而使计数器而设置的,从而使AT89S51具有具有3个定时器个定时器/计数器。计数器。方式方式3只适用于只适用于T0,T1不能工作在方不能工作在方式式3。T1方式方式3时相当于时相当于TR1=0,停止计数(此时,停止计数(此时T1可作为串口波特率可作为串口波特率产生器)。产生器)。1工作方式工作方式3下的下的T0

13、当当TMOD的低的低2位为位为11时,时,T0被选为方式被选为方式3,各引脚与,各引脚与T0的逻辑关系的逻辑关系见见图图7-8。T0分为两个独立的分为两个独立的8位计数器位计数器TL0和和TH0,TL0使用使用T0的状态控制位的状态控制位C/T*、GATE、TR0,而,而TH0被固定为一个被固定为一个8位定时器(不能作为外部位定时器(不能作为外部计数模式),并使用定时器计数模式),并使用定时器T1的状态控制位的状态控制位TR1,同时占用定时器,同时占用定时器T1的的中断请求源中断请求源TF1。162T0工作在方式工作在方式3时时T1的各种工作方式的各种工作方式 一般情况下,当一般情况下,当T1

14、用作串口波特率发生器时,用作串口波特率发生器时,T0才工作在方式才工作在方式3。T0方式方式3时,时,T1可为方式可为方式0、1、2,作为串口波特率发生器,或不需要中断,作为串口波特率发生器,或不需要中断的场合。的场合。17 图图7-8 T0方式方式3的逻辑结构框图的逻辑结构框图(1)T1工作在方式工作在方式0 T1的控制字中的控制字中M1、M0=00时,时,T1工作在方式工作在方式0,工作示意图如,工作示意图如图图7-9所示。所示。(2)T1工作在方式工作在方式1 当当T1的控制字中的控制字中M1、M0=01时,时,T1工作在方式工作在方式1,工作示意,工作示意见见图图7-10。19图图7-

15、9 T0方式方式3时时T1为方式为方式0工作示意图工作示意图(3)T1工作在方式工作在方式2 当当T1控制字中控制字中M1、M0=10时,时,T1为方式为方式2,工作示意如,工作示意如图图7-11所示。所示。20图图7-10 T0方式方式3时时T1为方式为方式1工作示意图工作示意图 图图7-11 T0方式方式3时时T1为方式为方式2工作示意图工作示意图(4)T1设置在方式设置在方式3 T0方式方式3时,再把时,再把T1也设置成方式也设置成方式3,此时,此时T1停止计数。停止计数。7.3 对外部输入的计数信号的要求对外部输入的计数信号的要求 计数器模式时,计数脉冲来自外部输入引脚计数器模式时,计

16、数脉冲来自外部输入引脚T0或或T1。当输入信号产。当输入信号产生负跳变时,计数值增生负跳变时,计数值增1。每个机器周期。每个机器周期S5P2期间,都对外部输入引脚期间,都对外部输入引脚T0或或T1进行采样。如在第进行采样。如在第1个机器周期中采得值为个机器周期中采得值为1,而在下一个机器周期中,而在下一个机器周期中采得的值为采得的值为0,则在紧跟着的再下一个机器周期,则在紧跟着的再下一个机器周期S3P1期间,计数器加期间,计数器加1。由。由于确认一次负跳变要花于确认一次负跳变要花2个机器周期,即个机器周期,即24个振荡周期,因此外部输入的计个振荡周期,因此外部输入的计数脉冲的最高频率为系统振荡

17、器频率数脉冲的最高频率为系统振荡器频率1/24。21 如选用如选用6MHz晶体晶体,允许输入脉冲频率最高为,允许输入脉冲频率最高为250kHz。如选用。如选用12MHz频频率晶体,则可输入最高频率率晶体,则可输入最高频率500kHz外部脉冲。对外输入信号占空比没有限外部脉冲。对外输入信号占空比没有限制,但为确保某一给定电平在变化前能被采样制,但为确保某一给定电平在变化前能被采样1次,则次,则该该电平至少保持电平至少保持1个个机器周期机器周期。故对外部输入信号要求。故对外部输入信号要求见见图图7-12,图中,图中Tcy为机器周期。为机器周期。图图7-12 对外部计数输入信号的要求对外部计数输入信

18、号的要求237.4 7.4 定时器定时器/计数器的编程和应用计数器的编程和应用 4 4种工作方式中,方式种工作方式中,方式0 0与方式与方式1 1基本相同,只是计数位数不同。方基本相同,只是计数位数不同。方式式0 0为为1313位,方式位,方式1 1为为1616位。由于方式位。由于方式0 0是为兼容是为兼容MCS-48MCS-48而设,计数初而设,计数初值计算复杂,所以在实际应用中,一般不用方式值计算复杂,所以在实际应用中,一般不用方式0 0,常采用方式,常采用方式1 1。7.4.1 P17.4.1 P1口控制口控制8 8只只LEDLED每每0.5s0.5s闪亮一次闪亮一次 【例【例7-17-

19、1】在在AT89S51AT89S51的的P1P1口上接有口上接有8 8只只LEDLED,原理电路见,原理电路见图图7-7-1313。采用。采用T0T0方式方式1 1的定时中断方式,使的定时中断方式,使P1P1口外接的口外接的8 8只只LEDLED每每0.5s0.5s闪亮闪亮一次一次。24图7-13 方式1定时中断控制LED闪亮(1)设置)设置TMOD寄存器寄存器 T0工作在方式工作在方式1,应使,应使TMOD寄存器的寄存器的M1、M0=01;应设置;应设置C/T*=0,为定,为定时器模式;对时器模式;对T0的的运行控制仅由运行控制仅由TR0来控制来控制,应使相应的,应使相应的GATE位为位为0

20、。定时。定时器器T1不使用,各相关位均设为不使用,各相关位均设为0。所以,。所以,TMOD寄存器应初始化为寄存器应初始化为0 x01。(2)计算定时器)计算定时器T0的计数初值的计数初值 设定时时间设定时时间5ms(即(即5 000s),设),设T0计数计数初值为初值为X,假设晶振的频率为,假设晶振的频率为11.059 2MHz,则定时时间为:,则定时时间为:25 定时时间定时时间=(216X)12/晶振频率晶振频率 则则 5 000=(216 X)12/11.059 2 得得 X=60 928 转换成十六进制转换成十六进制:0 xee00,其中,其中0 xee装入装入TH0,0 x00装入装

21、入TL0。(3)设置)设置IE寄存器寄存器 本例由于采用定时器本例由于采用定时器T0中断,因此需将中断,因此需将IE寄存器中的寄存器中的EA、ET0位置位置1。(4)启动和停止定时器)启动和停止定时器T0 将定时器控制寄存器将定时器控制寄存器TCON中的中的TR0=1,则启动定时器,则启动定时器T0;TR0=0,则,则停止定时器停止定时器T0定时。定时。参考程序:参考程序:#includechar i=100;void main()TMOD=0 x01;/定时器定时器T0为为方式方式1TH0=0 xee;/设置定时器初值设置定时器初值TL0=0 x00;27P1=0 x00;/P1口口8个个L

22、ED点亮点亮EA=1;/总中断开总中断开ET0=1;/开开T0中断中断TR0=1;/启动启动T0while(1);/循环等待循环等待;void timer0()interrupt 1/T0中断程序中断程序TH0=0 xee;/重新赋初值重新赋初值TL0=0 x00;i-;/循环次数减循环次数减1if(i=0)P1=P1;/P1口按位取反口按位取反i=100;/重置循环次数重置循环次数7.4.2 计数器的应用计数器的应用【例【例7-2】如如图图7-14,T1采用计数模式,方式采用计数模式,方式1中断,计数输入引脚中断,计数输入引脚T1(P3.5)上外接按钮开关,作为计数信号输入。)上外接按钮开关

23、,作为计数信号输入。按按4次按钮开关后次按钮开关后,P1口的口的8只只LED闪烁不停闪烁不停。(1)设置)设置TMOD寄存器寄存器29T1工作在工作在方式方式1,应使,应使TMOD的的M1、M0=01;设置;设置C/T*=1,为,为计数器计数器模式模式;对;对T0运行控制仅由运行控制仅由TR0来控制,应使来控制,应使GATE0=0。定时器。定时器T0不使用,不使用,各相关位均设为各相关位均设为0。所以,。所以,TMOD寄存器应初始化为寄存器应初始化为0 x50。(2)计算定时器)计算定时器T1的计数初值的计数初值由于每按由于每按1次按钮开关,计数次按钮开关,计数1次,次,按按4次后,次后,P1

24、口口的的8只只LED闪烁不停闪烁不停。因此。因此计数器初值计数器初值为为65 5364=65 532,将其转换成十六进制后为,将其转换成十六进制后为0 xfffc,所以,所以,TH0=0 xff,TL0=0 xfc。30图图7-14 由外部计数输入信号控制由外部计数输入信号控制LED的闪烁的闪烁(3)设置)设置IE寄存器寄存器 本例由于采用本例由于采用T1中断,因此需将中断,因此需将IE寄存器的寄存器的EA、ET1位置位置1。(4)启动和停止定时器)启动和停止定时器T1 将寄存器将寄存器TCON中中TR1=1,则启动,则启动T1计数;计数;TR1=0,则停止,则停止T1计数。计数。参考程序如下

25、:参考程序如下:#include void Delay(unsigned int i)/定义定义延时函数延时函数Delay(),i是形是形 /式参数,不能赋初值式参数,不能赋初值unsigned int j;for(;i0;i-)/变量变量i由实际参数传入一个值由实际参数传入一个值/因此因此i不能赋初值不能赋初值for(j=0;j125;j+);/空函数空函数 void main()/主函数主函数 TMOD=0 x50;/设置定时器设置定时器T1为方式为方式1计数计数TH1=0 xff;/向向TH1写入写入初值的初值的高高8位位TL1=0 xfc;/向向TL1写入写入初值的初值的低低8位位EA

26、=1;/总中断允许总中断允许3334ET1=1;/定时器定时器T1中断允许中断允许 TR1=1;/启动定时器启动定时器T1 while(1);/无穷循环,等待计数中断无穷循环,等待计数中断 void T1_int(void)interrupt 3 /T1中断函数中断函数for(;)/无限循环无限循环 P1=0 xff;/8位位LED全灭全灭 Delay(500);/延时延时500ms P1=0;/8位位LED全亮全亮 Delay(500);/延时延时500ms 357.4.3 控制控制P1.0产生周期为产生周期为2ms的方波的方波 【例【例7-37-3】假设系统时钟为假设系统时钟为12MHz1

27、2MHz,设计电路并编写程序实现从,设计电路并编写程序实现从P1.0P1.0引脚上输出一个引脚上输出一个周期为周期为2ms2ms的方波的方波,见见图图7-157-15。要在要在P1.0P1.0上产生周期为上产生周期为2ms2ms的方波,的方波,定时器应产生定时器应产生1ms1ms的定时中断的定时中断,定时时间到则在中断服务程序中定时时间到则在中断服务程序中对对P1.0P1.0求求反反。使用定时器。使用定时器T0T0,方式,方式1 1定时定时中断,中断,GATEGATE不起作用。不起作用。本例的原理电路本例的原理电路见见图图7-167-16。其中在其中在P1.0P1.0引脚接有引脚接有虚拟示波器

28、虚拟示波器,用来,用来观察产生的周期观察产生的周期2ms2ms的方波。的方波。图图7-15 定时器控制定时器控制P1.0输出一个周期输出一个周期2ms方波方波37图图7-16 定时器控制定时器控制P1.0输出周期输出周期2ms的方波的原理电路的方波的原理电路38下面来下面来计算计算T0T0初值初值X X :设设T0T0的初值为的初值为X X,有,有 (2(21616X X)1 110106 6=1=110103 3即即 65 65 536536X X=1=1 000000 得得X X=64 536=64 536,化为,化为1616进制数就是进制数就是0 xfc180 xfc18。将。将高高8

29、8位位0 xfc0 xfc装入装入TH0TH0,低低8 8位位0 x180 x18装入装入TL0TL0。参考程序如下:参考程序如下:#include#include /头文件头文件reg51.hreg51.hsbit P1_0=P10;sbit P1_0=P10;/定义特殊功能寄存器定义特殊功能寄存器P1P1的位变量的位变量P1_0P1_0void main(void)void main(void)/主程序主程序 TMOD=0 x01;TMOD=0 x01;/设置设置T0T0为方式为方式1 1TR0=1;TR0=1;/接通接通T0T0while(1)while(1)/无限循环无限循环 39TH

30、0=0 xfc;TH0=0 xfc;/置置T0T0高高8 8位初值位初值TL0=0 x18;TL0=0 x18;/置置T0T0低低8 8位初值位初值dowhile(!TF0);dowhile(!TF0);/TF0TF0为为0 0原地循环原地循环,为为1 1则则T0T0溢出,往下执溢出,往下执行行P1_0=!P1_0;P1_0=!P1_0;/P1.0/P1.0状态求反状态求反TF0=0;TF0=0;/TF0/TF0标志清零标志清零 仿真时,右键单击虚拟数字示波器,出现下拉菜单,点击仿真时,右键单击虚拟数字示波器,出现下拉菜单,点击“Digital Digital oscilloscopeosci

31、lloscope”选项,就会在数字示波器上显示选项,就会在数字示波器上显示P1.0P1.0引脚输出引脚输出周期为周期为2ms2ms方波方波,如如图图7-177-17所示。所示。40图7-17 虚拟数字示波器显示的2ms的方波波形7.4.4 利用利用T1控制发出控制发出1kHz的音频信号的音频信号 【例【例7-4】利用利用T1的中断控制的中断控制P1.7引脚引脚输出频率为输出频率为1kHz方波音频信号方波音频信号,驱动蜂鸣器发声。系统时钟为,驱动蜂鸣器发声。系统时钟为12MHz。方波音频信号周期方波音频信号周期1ms,因此,因此T1的的定时中断时间为定时中断时间为0.5 ms,进入中断服务程序后

32、,对,进入中断服务程序后,对P1.7求反。电路求反。电路见见图图7-18。先计算先计算T1初值,系统时钟为初值,系统时钟为12MHz,则,则机器机器周期周期为为1s。1kHz音频音频信号周期为信号周期为1ms,要定时计数的,要定时计数的脉冲数为脉冲数为a。则。则T1初值初值:TH1=(65 536 a)/256;TL1=(65 536 a)%2564142图图7-18 控制蜂鸣器发出控制蜂鸣器发出1kHz的音频信号的音频信号参考程序如下:参考程序如下:#include#include /包含头文件包含头文件sbit sound=P17;sbit sound=P17;/将将soundsound位

33、定义为位定义为P1.7P1.7脚脚#define#define f1(a)f1(a)(65536-a)/256(65536-a)/256/定义装入定义装入定时器高定时器高8 8位时间常数位时间常数#define#define f2(a)f2(a)(65536-a)%256(65536-a)%256 /定义装入定义装入定时器低定时器低8 8位时间常数位时间常数unsigned int i=500;unsigned int i=500;unsigned int j=0;unsigned int j=0;void main(void)void main(void)EA=1;EA=1;/开总中断开总中

34、断.ET1=1;ET1=1;/允许定时器允许定时器T1T1中断中断 .TMOD=0 x10;TMOD=0 x10;/TMOD=0001 000B/TMOD=0001 000B,使用,使用T1T1的方式的方式1 1定时定时 TH1=f1(i);TH1=f1(i);/给给T1T1高高8 8位赋初值位赋初值.TL1=f2(i);TL1=f2(i);/给给T1T1低低8 8位赋初值位赋初值.TR1=1;TR1=1;/启动启动T1T1 while(1)while(1)44 /循环等待循环等待 i=460;i=460;while(j2000);while(j2000);j=0;j=0;i=360;i=36

35、0;while(j2000);while(j2000);j=0;j=0;void T1(void)interrupt 3 using 0void T1(void)interrupt 3 using 0/定时器定时器T1T1中断函数中断函数 TR1=0;TR1=0;/关闭关闭T1T1 sound=sound=soundsound;/P1.7P1.7输出求反输出求反 TH1TH1=f1(i);=f1(i);/T1/T1的高的高8 8位重新赋初值位重新赋初值.TL1TL1=f2(i);=f2(i);/T1/T1的低的低8 8位重新赋初值位重新赋初值.45j+;j+;TR1=1;TR1=1;/启动定时

36、器启动定时器T1T1 7.4.5 LED数码管秒表的制作数码管秒表的制作 【例【例7-57-5】用用2 2位数码管显示计时时间,最小计时单位为位数码管显示计时时间,最小计时单位为“百毫百毫秒秒”,计时范围计时范围0.10.19.9s9.9s。当。当第第1 1次次按一下计时功能键时,秒表开始按一下计时功能键时,秒表开始计时并显示;计时并显示;第第2 2次次按一下计时功能键时,停止计时,将计时的时间值按一下计时功能键时,停止计时,将计时的时间值送到数码管显示;如果计时到送到数码管显示;如果计时到9.9s9.9s,将重新开始从,将重新开始从0 0计时;第计时;第3 3次按一次按一下计时功能键,秒表清

37、下计时功能键,秒表清0 0。再次按一下计时功能键,则重复上述计时过。再次按一下计时功能键,则重复上述计时过程。程。本秒表应用定时器模式,计时范围本秒表应用定时器模式,计时范围0.10.19.9s9.9s。此外还涉及如。此外还涉及如何编写控制何编写控制LEDLED数码管显示的程序。数码管显示的程序。原理电路原理电路见见图图7-197-19。46图图7-19 LED数码管显示的秒表原理电路及仿真数码管显示的秒表原理电路及仿真47参考程序如下:参考程序如下:#include#include /头文件头文件unsigned char code unsigned char code discode1=d

38、iscode1=0 xbf,0 x86,0 xdb,0 xcf,0 xe6,0 xed,0 xfd,0 x87,0 xff,0 xef;0 xbf,0 x86,0 xdb,0 xcf,0 xe6,0 xed,0 xfd,0 x87,0 xff,0 xef;/数码管显示数码管显示0 09 9的段码表的段码表,带小数点带小数点unsigned char code unsigned char code discode2=discode2=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;0 x3f,0 x06,0 x5b,0 x4

39、f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;/数码管显示数码管显示0 09 9的段码表,不带小数点的段码表,不带小数点unsigned char unsigned char timertimer=0;=0;/timertimer记录中断次数记录中断次数unsigned char unsigned char secondsecond;/secondsecond储存秒储存秒unsigned char unsigned char keykey=0;=0;/keykey记录按键次数记录按键次数main()main()/主函数主函数 TMODTMOD=0 x01;=0 x

40、01;/定时器定时器T0T0方式方式1 1定时定时 ET0ET0=1;=1;/允许定时器允许定时器T0T0中断中断48EA=1;EA=1;/总中断允许总中断允许second=0;second=0;/设初始值设初始值P0=discode1second/10;P0=discode1second/10;/显示显示秒位秒位0 0P2=discode2second%10;P2=discode2second%10;/显示显示0.1s0.1s位位0 0while(1)while(1)/循环循环 if(if(P3&0 x80P3&0 x80)=0 x00)=0 x00)/当按键被按下时当按键被按下时 key+

41、;key+;/按键次数加按键次数加1 1switch(key)switch(key)/根据按键次数分三种情况根据按键次数分三种情况 case case 1 1:/第一次按下第一次按下为启动秒表计时为启动秒表计时TH0=0 xee;TH0=0 xee;/向向TH0TH0写入初值的高写入初值的高8 8位位49TL0=0 x00;TL0=0 x00;/向向TL0TL0写入初值的低写入初值的低8 8位,定时位,定时5ms5msTR0=1;TR0=1;/启动定时器启动定时器T0T0break;break;case case 2 2:/按下两次暂定秒表按下两次暂定秒表TR0=0;TR0=0;/关闭定时器关

42、闭定时器T0T0break;break;case case 3 3:/按下按下3 3次秒表清次秒表清0 0key=0;key=0;/按键次数清按键次数清second=0;second=0;/秒表清秒表清0 0P0=discode1second/10;P0=discode1second/10;/显示秒位显示秒位0 0 P2=discode2second%10;P2=discode2second%10;/显示显示0.1s0.1s位位0 0break;break;while(P3&0 x80)=0 x00);while(P3&0 x80)=0 x00);/如果按键时间过长在此循环如果按键时间过长在此

43、循环 void int_T0()interrupt 1 using 0 void int_T0()interrupt 1 using 0/定时器定时器T0T0中断函数中断函数 TR0=0;TR0=0;/停止计时,执行以下操作(会带来计时误停止计时,执行以下操作(会带来计时误差)差)TH0=0 xeeTH0=0 xee;/向向TH0TH0写入初值的高写入初值的高8 8位位TL0=0 x00TL0=0 x00;/向向TL0TL0写入初值的低写入初值的低8 8位,位,定时定时5ms5mstimer+;timer+;/记录中断次数记录中断次数if(timer=20)if(timer=20)/中断中断2

44、020次次,共计时,共计时2020*5ms=100ms5ms=100ms=0.1s0.1s timer=0;timer=0;/中断次数清中断次数清0 0second+;second+;/加加0.1s0.1sP0P0=discode1=discode1second/10second/10;/根据计时,即时显示秒根据计时,即时显示秒位位P2P2=discode2=discode2secondsecond%1010;/根据计时,即时显示根据计时,即时显示0.1s0.1s位位 5051if(second=99)/当计时到当计时到9.9s时时TR0=0;/停止计时停止计时second=0;/秒数清秒数清

45、0key=2;/按键数置按键数置2,当再次按下按键时,当再次按下按键时,/key+,即即key=3,秒表清,秒表清0复原复原 else/计时不到计时不到9.9s时时TR0=1;/启动定时器继续计时启动定时器继续计时7.4.6 测量脉冲宽度测量脉冲宽度门控位门控位GATEx的应用的应用 介绍门控位介绍门控位GATE应用。应用。利用利用GATE测量测量INT1*脚上脚上正脉冲宽度正脉冲宽度。【例【例7-6】门控位门控位GATE1可使可使T1启动计数受启动计数受INT1*控制,当控制,当GATE1=1,TR1=1时时,只有只有INT1*引脚输入高电平时引脚输入高电平时,T1才被允许计数。利才被允许计

46、数。利用用该该功能,可测量功能,可测量INT1*脚正脉冲宽度,方法脚正脉冲宽度,方法见见图图7-20。原理电路原理电路见见图图7-21,图中省略复位电路和时钟电路。利用门控位,图中省略复位电路和时钟电路。利用门控位GATE1来测量来测量INT1*脚上正脉冲宽度脚上正脉冲宽度,并在并在6位数码管上以机器周期数显位数码管上以机器周期数显示。对被测量脉冲信号宽度示。对被测量脉冲信号宽度,要求能通过旋转信号源旋钮可调。要求能通过旋转信号源旋钮可调。52图图7-20 利用利用GATE位测量正脉冲的宽度位测量正脉冲的宽度54图图7-21 利用利用GATE位测量位测量 INT1*引脚上正脉冲的宽度的原理电路

47、引脚上正脉冲的宽度的原理电路参考程序如下:#include#include#define uint unsigned int#define uint unsigned int#define uchar unsigned char#define uchar unsigned charsbit P3_3=P33;sbit P3_3=P33;/位变量定义位变量定义uchar count_high;uchar count_high;/定义计数变量,用来读取定义计数变量,用来读取TH0TH0uchar count_low;uchar count_low;/定义计数变量,用来读取定义计数变量,用来读取TL

48、0TL0uint num;uint num;uchar shiwan,wan,qian,bai,shi,ge;uchar shiwan,wan,qian,bai,shi,ge;uchar flag;uchar flag;uchar code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;uchar code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;/共阴极数码管段码表共阴极数码管段码表void delay(uint z

49、)void delay(uint z)/延时函数延时函数55uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void display(uint a,uint b,uint c,uint d,uint e,uint f)/数码管显示函数数码管显示函数P2=0 xfe;P0=tablef;delay(2);P2=0 xfd;P0=tablee;delay(2);P2=0 xfb;P0=tabled;56delay(2);P2=0 xf7;P0=tablec;delay(2);P2=0 xef;P0=tableb;delay(2);P2=0 xdf;P0=tablea

50、;delay(2);void read_count()/读取计数寄存器的内容读取计数寄存器的内容5758do count_high=TH1;/读高字节读高字节 count_low=TL1;/读低字节读低字节 while(count_high!=TH1);num=count_high*256+count_low;/*可将两字节的机器周期数进行显示处理可将两字节的机器周期数进行显示处理*/void main()while(1)flag=0;TMOD=0 x90;/设置定时器设置定时器T1T1为方式为方式1 1定时定时TH1=0;/向定时器向定时器T1写入计数初值写入计数初值 TL1=0;while

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(单片机原理及接口技术(C51编程)第7章-定时器计数器课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|