《定时器计数器》课件.ppt
第8讲 定时器/计数器 n8.1 定时器/计数器概述n8.2 定时器/计数器的构成n 定时器/计数器的用法n 定时器/计数器的控制n8.5 定时器/计数器的应用(1)n8.6 定时器/计数器的应用(2)8.1 定时器/计数器概述n定时器/计数器是MCS-51单片机的重要功能模块之一。n在检测、控制及智能仪器等应用中,常用定时器作实时时钟来实现定时检测、定时控制。还可用定时器产生毫秒宽的脉冲驱动步进电机。n计数器主要用于外部事件的计数。nMCS-51单片机内部有两个16位定时/计数器T0和T1,它们既可用作定时器,也可用作计数器,应用哪种,可以通过编程来设定。n定时器/计数器在MCS-51单片机中的引脚位置:T0:返回本节P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7RST/VPDRXD/P3.0TXD/P3.1INT0/P3.2INT1/P3.3T0/P3.4T1/P3.5WR/P3.6RD/P3.7XTAL2XTAL1VSS12345678910111213141516171819208031805187514039383736353433323130292827262521222324VCCP0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7EA/VppALE/PROGPSENP2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.08.2 定时器/计数器的构成n两个定时器两个定时器/计数器(计数器(T0和和T1)。每个定时器/计数器都是由两个8位计数器构成的16位计数器,分别由特殊功能寄存器TH0、TL0和TH1、TL1组成,最大计数值216=65536。n寄存器寄存器TCON。TCON为控制寄存器,用来控制两个定时器/计数器的启动/停止。n寄存器寄存器TMOD。TMOD为工作方式控制寄存器,用来设置定时器/计数器的工作方式。返回本节TCONTH1TL1TH0TL0TMODT0T1P3.4P3.5CPU定时/计数器结构示意图 定时器/计数器的用法返回本节时钟振荡器12分频1MHz12MHz定时/计数器T0中断系统 1、定时器的用法 定时器的功用是用来定时器的功用是用来确定时间确定时间。如果要求单片机在一定的时间后产生某种控制,可将定时器/计数器设为定时器。如下图,将定时/计数器T0设为定时器,实际上就是将定时/计数器与外部中断断开,而与内部信号接通,对内部信号进行计数。时钟振荡器12分频1MHz12MHz定时/计数器T0中断系统T0单片机定时器用法示意图+5V 定时器/计数器的用法返回本节单片机的时钟振荡器可产生12MHz的时钟脉冲信号,它经过12分频后得到1MHz的脉冲信号,1MHz信号每个脉冲的持续时间为1s。如果定时器T0对1MHz的信号进行计数,当计到65536时,将需要65536s,也即。后定时器计数达到最大值,会溢出而输出一个中断请求信号去中断系统,中断系统接受中断请求后,执行中断子程序,子程序的运行结果将端口置“0”,发光二极管发光。定时器/计数器的用法返回本节任意定时的方法在上例中,定时器只有在后计数达到最大值时才会溢出,如果需要不到定时器就产生溢出,如1ms,可以对定时器预先进行置数。将定时器初始值置为64536,这样定时器就会从64536开始计数,当计到65536时,定时器定时就为1ms而产生一个溢出信号。定时器/计数器的用法返回本节2、计数器的用法 计数器的功能是用来计数。计数器的功能是用来计数。在单片机内有一个定时/计数器T0,可以用编程的方法将它设为计数器,当作计数器用时,它有16位,最大计数值216=65536。当脉冲信号输入时,计数器对脉冲进行计数,计数达到最大值65536时,计数器溢出,会输出一个中断请求信号到中断系统,中断系统接受中断请求后,执行中断子程序。任意计数的方法与任意定时的方法类似,也是先进行预先置数,然后才开始计数。定时器/计数器的控制返回本节1、定时器/计数器控制寄存器TCON寄存器寄存器TCON的功能主要是接收各种中断源送来的中断请求信号,的功能主要是接收各种中断源送来的中断请求信号,同时也对定时器同时也对定时器/计数器进行启动计数器进行启动/停止控制。寄存器停止控制。寄存器TCON的字的字节节地址是地址是88H,它有,它有8位,每位均位,每位均可进行位寻址可进行位寻址。各位的地址和名称如下:TCON位地址D0D1D2D3D4D5D6D7IT0IE0IT1IE1TR0TF0TR1TF188H89H8AH8BH8CH8DH8EH8FH外部中断请求标志及信号方式定时器/计数器启动及中断请求标志 定时器/计数器的控制返回本节TF0和和TF1:分别是定时器:分别是定时器/计数器计数器0和和1的中断请求标志位。的中断请求标志位。当定时器/计数器工作产生溢出时,会将TF0或TF1位置“1”,表示定时器/计数器有中断请求。TR0和和TR1:分别是定时器:分别是定时器/计数器计数器0和和1的启动的启动/停止位。停止位。在编程时,若将TR0或TR1设置为“1”,那么相应的定时器/计数器就开始工作,若设置为“0”,相应的定时器/计数器则会停止工作。IE0、IE1、IT0、IT1:用作中断的控制,在中断将再详细讲述。在单片机复位时,寄存器在单片机复位时,寄存器TCON的各位均为的各位均为“0”TCON位地址D0D1D2D3D4D5D6D7IT0IE0IT1IE1TR0TF0TR1TF188H89H8AH8BH8CH8DH8EH8FH外部中断请求标志及信号方式定时器/计数器启动及中断请求标志 定时器/计数器的控制返回本节2、工作方式控制寄存器TMOD寄存器寄存器TMOD的功能是控制定时器的功能是控制定时器/计数器计数器T0、T1 的工作方式和的工作方式和操作模式。寄存器操作模式。寄存器TMOD的的字节地址是字节地址是89H,高,高4位用来控制位用来控制定时器定时器/计数器计数器T1,低,低4位用来控制定时器位用来控制定时器/计数器计数器T0,它们,它们对定时器对定时器/计数器计数器T1、T0的控制功能一样。在上电(给电路加的控制功能一样。在上电(给电路加电源)和复位时,寄存器电源)和复位时,寄存器TMOD中的数据为中的数据为00H。不可以对它不可以对它进行位操作进行位操作。寄存器TMOD各位的名称如下:定时器/计数器的控制返回本节下面以高下面以高4位控制定时器位控制定时器/计数器计数器T1为例来说明各位的具体功能:为例来说明各位的具体功能:GATE:门控位,用来控制计数器的启动是否受外部中断请求信号的影响。门控位,用来控制计数器的启动是否受外部中断请求信号的影响。GATE=1,计数器的启动受芯片引脚(P3.3)的控制,即除了需要将寄存器TCON的TR1位置“1”外,还要使 引脚为高电平;GATE=0,只要寄存器TCON的TR1位置“1”,就可以启动T1开始工作。:定时、计数功能设置位。定时、计数功能设置位。=0,将定时器/计数器设置为定时器工作方式;=1,将定时器/计数器设置为计数器工作方式。M1、M0位:定时器位:定时器/计数器工作方式选择位。计数器工作方式选择位。M1、M0位取不同值得组合,可以将定时器/计数器设置位不同的工作方式。M1、M0位不同取值与定时器/计数器工作方式的关系见下表:定时器/计数器的控制返回本节M1M0 工作工作方式方式功功 能能 0 0方式013位计数器,T0用TH0(8位)和TL0的低5位,T1用TH1(8位)和TL1的低5位,最大计数值为213=8192 0 1方式116位计数器,T0由TH0和TL0构成,T1由TH1和TL1构成。最大计数值为216=6553610方式2带自动重装功能的8位计数器,TL0和TL1为8位计数器,TH0和TH1存储自动重装载的初值。10方式3只用于T0。把T0分为两个独立的8位定时器TH0和TL0。TL0占用T0的全部控制位,TH0占用T1的部分控制位,此时T1用作波特率发生器。8.5 定时器/计数器的应用(1)返回本节设晶振为12MHz,使用定时/计数器作为延时控制时,要求在两灯和之间按1s互相闪烁。8.5 定时器/计数器的应用(1)返回本节设晶振为12MHz,使用定时/计数器作为延时控制时,要求在两灯和之间按1s互相闪烁。设计步骤:1、系统分析2、硬件设计3、软件设计4、流程图设计5、ASM程序设计6、C程序设计8.5 定时器/计数器的应用(1)返回本节单片机单片机AT89C51瓷片电容瓷片电容CAP 30pF电阻电阻RES晶振晶振CRYSTAL 12MHz按钮BUTTON点解电容CAP-ELEC发光二极管BIGY发光二极管BIBY8.5 定时器/计数器的应用(1)返回本节程序设计由于定时器直接延时的最大时间Tmax=65536,为延时1s,必须采用循环计数方式实现。方法为:定时器设延时50ms(初始值应为:15536s),单片机内部寄存器加1,然后定时器重新延时,当内部寄存器计数达20次时,表示延时1s。使用定时器T0工作在方式1,延时50ms,初始值TMOD为01H,TH0为3CH,TL0为B0H。15536=0011 1100 1011 0000B=3CB0H8.5 定时器/计数器的应用(1)返回本节程序流程图8.5 定时器/计数器的应用(1)返回本节汇编程序 ORG 0000H LJMP MAIN ORG 0100H MAIN:MOV SP,#60H ;初始化堆栈,给定时器0赋初值 MOV TMOD,#01H ;使用16位模式方式1 M1=0 M0=1 MOV TH0,#3CH ;初始化定时器0的溢出间隔时间为50ms MOV TL0,#B0H ;TH为高位,TL为低位 SETB TR0 ;启用定时器0 SETB P0.0 CLR P0.1 MOV R7,#00H ;用R7计数LOOP:JNB TF0,LOOP ;TF0不是1,无溢出,继续循环,是1,向下执行 MOV TH0,#3CH ;初始化定时器0的溢出时间 MOV TL0,#B0H INC R7 CLR TF0 CJNE R7,#14H,LOOP ACALL LOOP1 ;20次循环闪烁一次 AJMP LOOPLOOP1:MOV R7,#00H CPL P0.0 ;让接的发光二极管按50ms闪烁 CPL P0.1 RET END8.5 定时器/计数器的应用(1)返回本节#includereg51.h#define uint unsigned int#define uchar unsigned charsbit P0_0=P00;sbit P0_1=P01;uint t=0;void time0_server_(void)interrupt1 TH0=0 x3C;/定时时间为50ms,12MHz的晶振 TL0=0 xB0;t+;void Init_t0(void)/定时器初始化 TMOD=0X01;/选择方式1 TH0=0 x3C;TL0=0 xB0;EA=1;/开放中断ET0=1;/定时器中断允许TR0=1;/启动TR08.5 定时器/计数器的应用(1)返回本节void main(void)P0_0=1;P0_1=0;Init_t0();while(1)time0_server_(void)interrupt1 if(t=20)t=0;P0_0=P0_0;P0_1=P0_1;8.5 定时器/计数器的应用(1)返回本节定时/计数器的应用1的运行结果8.5 定时器/计数器的应用(2)返回本节设单片机的晶振频率为12MHz,使用定时器1,在方式0下由输出周期为1ms的等宽正方波,以查询方式完成。8.5 定时器/计数器的应用(2)返回本节设单片机的晶振频率为12MHz,使用定时器1,在方式0下由输出周期为1ms的等宽正方波,以查询方式完成。8.5 定时器/计数器的应用(2)返回本节设单片机的晶振频率为12MHz,使用定时器1,在方式0下由输出周期为1ms的等宽正方波,以查询方式完成。分析如下:方式0(M1=0,M0=0):13位计数器,T0用TH0(8位)和TL0的低5位,T1用TH1(8位)和TL1的低5位,最大计数值为213=8192要产生1ms的等宽正方波脉冲,只需在端每隔500s交替输出高、低电平即可实现。使用12MHz的晶振频率,则1个机器周期为1s。定时器起始值应为:位)TH1(前8位)=11110000B=F0H,TL1(后5位)=00001100B=0CH8.5 定时器/计数器的应用(2)返回本节开始定时/计数器初始值设置启动定时/计数器计数器是否产生溢出?定时/计数器重新赋值取反产生脉冲计数器计数YN程序流程图设计8.5 定时器/计数器的应用(2)返回本节汇编源程序ORG 0100HMOV TMOD,#00H ;设置T1为工作方式0MOV TH1,#0F0H ;设置T1的计数初值XMOV TL1,#0CHMOV IE,#00H ;禁止中断SETB TR1 ;启动T1LP1:JBC TF1,LP2 ;查询计数是否溢出 AJMP LP1 ;没有溢出继续 LP2:MOV TH1,#0F0H ;溢出,重新设置计数初始值X MOV TL1,#0CHCPL P1.0 ;输出取反SJMP LP1 ;重复循环END8.5 定时器/计数器的应用(2)返回本节单片机C程序#includesbit P1_0=P10;void main()TMOD=0 x00;TR1=1;for(;)TH1=0 xf0;TL1=0 x0c;do while(TF1=0);P1_0=P1_0;TF1=0;8.5 定时器/计数器的应用(2)返回本节