第5章定时/计数器与中断系统第5章定时/计数器与中断系统任务六控制信号灯5.1定时/计数器任务七交通灯控制5.2单片机中断系统习题任务六控制信号灯【任务目的】利用单片机的定时器,完成硬件延时设计,实现对信号灯的控制,掌握定时/计数器的编程方式和软硬件调试方法。【任务描述】信号灯循环显示,时间为1s。用定时器方式1编制1s的延时程序,实现信号灯的控制。系统采用12MHz晶振。1.电路原理图控制信号灯电路原理图如图5-1所示。任务六控制信号灯图5-1控制信号灯电路原理图任务六控制信号灯2.流程图与参考程序LED_PORTEQUP1ORG0000HLJMPSTARTORG0100HSTART:CLREAMOVSP,#0DFHMOVR2,#07HMOVA,#0FEHNEXT:MOVLED_PORT,ALCALLDELAYRLADJNZR2,NEXTMOVR2,#07HNEXT1:MOVLED_PORT,ARRALCALLDELAYSJMPSTART任务六控制信号灯DELAY:MOVR3,#14H;置50ms计数循环初值MOVTMOD,#10H;设置定时器1为方式1MOVTH1,#3CHMOVTL1,#0B0H;定时器初值SETBTR1;启动定时器LP1:JBCTF1,LP2SJMPLP1任务六控制信号灯LP2:MOVTH1,#3CH;重置定时器初值MOVTL1,#0B0HDJNZR3,LP1;未到1s继续循环RETEND流程图如图5-2所示。任务六控制信号灯图5-2控制信号灯程图任务六控制信号灯3.程序仿真及下载按硬件图连好电路,利用仿真软件仿真测试后下载。4.程序分析上述任务是利用单片机内部的硬件资源定时/计数器来实现延时控制,在方便程度及精确度等方面优于软件定时。源程序采用查询方式来实现定时器的延时控制。任务六控制信号灯5.1定时/计数器5.1.1定时/计数器的结构5.1.2定时/计数器的工作方式5.1.3定时/计数器的编程和应用5.1定时/计数器在单片机应用系统中,常需要对外部脉冲进行计数或每隔一定时间执行特定操作,因此定时/计数器是单片机控制系统重要的外设部件,几乎所有单片机控制系统都有一个至数个定时/计数器。80C51系列单片机内部的定时/计数器都具有这两种功能。本节将介绍定时/计数器的结构、原理、工作方式及使用方法。80C51单片机内部设有两个16位的可编程定时/计数器。可编程的意思是指其功能(如工作方式、定时时间、量程和启动方式等)均可由指令来确定和改变。在定时/计数器中除了有两个16位的计数器之外,还有两个特殊功能寄存器(方式寄存器和控制寄存器)。5.1定时/计数器5.1.1定时/计数器的结构5.1.1.1定时/计数器的结构从如图5-3所示的定时/计数器结构图中可以看出,16位的定时/计数器分别由两个8位专用寄存器组成(T0由TH0和TL0构成,T1由TH1和TL1构成)。这些寄存器是用于存放定时或计数初值,另外还有两个寄存器TMOD和TCON。TMOD是定时/计数器的工作方式寄存器,由它确定定时/计数器的工作方式和功能;TCON是定时/计数器的控制寄存器,主要是用于控制定时器的启动和停止,此外TCON还可以保存T0、T1的溢出和中断标志。图5-3定时/计数器结构图5.1定时/计数器5.1.1.2定时/计数器的工作原理16位的定时/计数器实质是一个加1计数器,其控制电路受软件控制、切换。其输入的脉冲有两个来源,一个是系统的时钟振荡器输出经12分频后得来,一个是T0或T1引脚输入的外部脉冲源。每来一个脉冲,计数器加1,当加到计数器全为1时,再输入一个脉冲,就使计数器清零,且计数器的溢出将使TCON中TF0或TF1置1,从而向CPU发出中断请求。如果定时计数器工作于定时模式,则表示定时/时间到;如果工作于计数模式,则表示计数值已满。5.1定时/计数器(1)当定时/计数器为定时方式时,计数器对内部机器周期(一个机器周期等于12个振荡周期,则计数频率为振荡频率的1/12)计数,即每过一个机器周期,计数器加1,直至计满溢出为止。因而计数值乘以机器周期就是定时时间。(2)当定时/计数器为计数方式时,通过引脚T0和T1对外部信号计数,计数器在每个机器周期的S5P2期间采样引脚输入电平。当一个机器周期采样值为1,下一个机器周期采样值为0时,则计数器加1。在接下来的一个机器周期S3P1期间,新的计数值装入计数器。5.1定时/计数器由于检测一个由1至0的跳变需要两个机器周期,因此要求被采样的外部脉冲信号的高低电平至少维持一个机器周期,所以最高计数频率为振荡频率的1/24。当晶振频率为12MHz时,最高计数频率不超过500kHz,即外部脉冲的周期要大于2µs。5.1.2定时/计数器的工作方式定时/计数器T0和T1有2个控制寄存器TMOD和TCON,它们分别用来设置各个定时/计数器的工作方式,选择定时或计数功能,控制启动运行,以及作为运行状态的标志等。5.1定时/计数器5.1.2.1定时/计数器方式寄存器TMOD定时器方式控制寄存器TMOD在特殊功能寄存器中,字节地址为89H,无位地址。TMOD的格式如下。TMOD(89H)由图可见,TMOD的高4位用于T1,低4位用于T0。4种符号的定义如下:GATEM1M0GATEM1M05.1定时/计数器GATE:门控制位。当GATE=0时,只要用软件使TR0或TR1置1即可启动相应定时器开始工作。当GATE=1时,除要使TR0或TR1置1外,还要使、引脚为高电平时,才能启动相应定时器工作。:定时器/计数器选择位。=0,为定时器方式;=1,为计数器方式。M1M0:工作方式选择位,定时/计数器的4种工作方式由M1M0设定,见表5-1。5.1定时/计数器M1M0工作方式功能说明00方式013位定时/计数器01方式116位定时/计数器10方式2自动重装初值8位定时/计数器11方式3T0分为两个独立的8位定时/计数器;T1停止计数表5-1定时/计数器工作方式设置表5.1定时/计数器定时/计数器方式控制寄存器TMOD不能进行位寻址,只能用字节传送指令设置定时器工作方式,低半字节定义定时器0,高半字节定义定时器1。复位时,TMOD所有位均为0。下面举例说明方式字的应用。设定时器0为计数方式,由软件直接启动,采用方式2工作;定时器1为定时方式,由软件直接启动,采用方式1工作,则TMOD控制字为00010110B,相应指令为:MOVTMOD#16H5.1定时/计数器5.1.2.2控制寄存器TCONTCON在特殊功能寄存器中,字节地址为88H,TCON的高4位是控制定时/计数器的启动停止及中断申请,低4位用于控制外部中断,将在下一节介绍。TCON的格式如下。TCON(88H)TF1TR1TF0TR0IE1IT1IE0IT05.1定时/计数器各位定义如下。TF1:定时器1溢出标志位。当定时/计数器1计满溢出时,由硬件使TF1置1,并且申请中断。进入中断服务程序后,由硬件自动清0,在查询方式下用软件清0。TR1:定时/计数器1运行控制位。TR1置1启动定时器1工作;TR1置0停止定时器1工作。TR1置1或清0由软件来设置。TF0:定时器0溢出标志。其功能及操作情况同TF1。TR0:定时器0运行控制位。其功能及操作情况同TR1。IE1:外部中断1请求标志。5.1定时/计数器IT1:外部中断1触发方式选择位。IE0:外部中断0请求标志。IT0:外部中断0触发方式选择位。TCON中低4位与中断有关,将在下节中断中详细讲解。由于TCON是可以位寻址的,因而如果只清溢出或启动定时器工作,可以用位操作命令。例如:执行CLRTF0后则清定时器0的溢出;执行SETBTR1后可启动定时器1开始工作。5.1定时/计数器5.1.2.3定时/计数器的工作方式80C51单片机定时计数器有4种工作方式:方式0、方式1、方式2和方式3。除方式3外,T0和T1有完全相同的工作状态。下面以T0为例,分述各种工作方式的特点和用法。(1)工作方式0:13位方式由TL0的低5位和TH0的8位构成13位计数器(TL0的高3位无效)。工作方式0的结构如图5-4所示。5.1定时/计数器图5-4定时/计数器0工作方式0逻辑结构5.1定时/计数器由图5-4中的逻辑电路可知,当GATE=0时,只要TR0=1就可打开控制门,使定时器工作;当GATE=1时,只有TR0=1且为高电平,才可打开控制门。GATE、TR0、C/T的状态选择由定时器的控制寄存器TMOD、TCON中相应位状态确定,则是外部引脚上的信号。在一般的应用中,通常使GATE=0,从而由TR0的状态控制T0的开闭:TR0=1,打开T0;TR0=0,关闭T0。在特殊的应用场合,例如利用定时器测量接于INT0引脚上的外部脉冲高电平的宽度时,可使GATE=1,TR0=1。当外部脉冲出现上升沿,亦即由0变1电平时,启动T0定时,测量开始;一旦外部脉冲出现下降沿,即由l变0时就关闭了T0。5.1定时/计数器定时器启动后,定时或计数脉冲加到TL0的低5位,从预先设置的初值(时间常数)开始不断加1。TL0计满后,向TH0进位。当TL0和TH0都计满之后,置位T0的定时器0标志位TF0,以此表明定时时间或计数次数已到,以供查询或在开中断的条件下,向CPU请求中断。如需进一步定时/计数,需要指令重置时间常数。(2)工作方式1:方式1是16位计数器结构的工作方式,计数器由TH08位和TL08位构成。与工作方式0基本相同,区别仅在于工作方式1的计数器TL0和TH0组成16位计数器,从而比工作方式0有更宽的定时/计数范围,其逻辑结构如图5-5所示。5.1定时/计数器图5-5定时/计数器0工作方式1逻辑结构5.1定时/计数器(3)工作方式2:方式2为8位自动重装初值计数方式。由TL0构成8位计数器,TH0仅用来存放初值。启动T0前,TL0和TH0装入相同的初值,当TL0计满后,将标志位TF0置位,同时TH0中的初值还会自动地装入TL0,并重新开始定时或计数。由于这种方式不需要指令重装初值,因而操作方便,在允许的条件下,应尽量使用这种工作方式。当然,这种方式的定时/计数范围要小于方式0和方式1。工作方式2的逻辑结构如图5-6所示。5.1定时/计数器图5-6定时/计数器0工作方式2逻辑结构5.1定时/计数器初始化时,8位计数初值同时装入TL0和TH0中。当TL0计数溢出时,置位TF0,同时把保存在预置寄存器TH0中的计数初值自动加载TL0,然后TL0重新计数,如此重复不止。这不但省去了用户程序中的重装指令,而且也有利于提高定时精度。但这种工作方式下是8位计数结构,计数值有限,最大只能到255。这种自动重装初值方式非常适用于循环定时或循环计数应用。例如用于产生固定脉宽的脉冲,此外还可以作串行数据通信的波特率发送器使用。5.1定时/计数器(4)工作方式3:方式3只适用于定时/计数器T0。如果使定时器1为工作方式3,则定时器1将处于关闭状态。当T0为工作方式3时,T0分成2个独立的8位计数器TL0和TH0。TL0既可用作定时器,又可用作计数器,并使用T0的所有控制位:GATE、、TR0、TF0和。TH0只能用作定时器,并且占用T1的控制位TR1、TF1。因此TH0的启、停受TR1控制,TH0的溢出将置位TF1,且占用T1的中断源。逻辑结构如图5-7所示。5.1定时/计数器图5-7定时/计数器0工作方式3逻辑结构5.1定时/计数器通常情况下,T0不运行于工作方式3,只有在T1处于工作方式2,并不要求中断的条件下才可能使用。这时,T1往往用作串行口波特率发生器,TH0用作定时器,TL0作为定时器或计数器。所以,方式3是为了使单片机有1个独立的定时器/计数器、1个定时器以及1个串行口波特率发生器的应用场合而特地提供的。这时,可把定时器l用于工作方式2,把定时器0用于工作方式3。5.1定时/计数器5.1.3定时/计数器的编程和应用5.1.3.1初始化前面介绍80C51单片机的定时/计数器是可编程的。因此,在使用之前先要通过软件对其进行初始化。