第四章 定时器、串行口及中断系统.ppt_第1页
第四章 定时器、串行口及中断系统.ppt_第2页
第四章 定时器、串行口及中断系统.ppt_第3页
第四章 定时器、串行口及中断系统.ppt_第4页
第四章 定时器、串行口及中断系统.ppt_第5页
已阅读5页,还剩153页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第4章定时器、串行口及中断系统,4.1 MCS-51单片机的中断系统 4.2 MCS-51单片机片内定时器/计数 4.3 MCS-51单片机片内串行口,4.1 MCS-51单片机的中断系统,4.1.1 中断的概念 4.1.1.1 中断系统的基本概念 中断是指CPU正在处理某任务的过程中, 由于计算机系统内、外的某种原因,发生的某一事件请求CPU及时处理,于是CPU暂时中止当前的工作,自动转去处理所发生的事件。处理完该事件后,再返回到原来被中止的断点处继续工作,这样的过程称为中断。,中断系统是计算机的重要指标之一。可以解决快速CPU与慢速外设之间的矛盾,使之能并行工作。可以及时处理随机参数及故障

2、,提高可靠性。,某人看书 执行主程序 日常事务 电话铃响 中断信号INT=0 中断请求 暂停看书 暂停执行主程序 中断响应 书中作记号 当前PC入栈 保护断点 电话谈话 执行I/O程序 中断服务 继续看书 返回主程序 中断返回,与中断相关的概念: (1)中断系统:实现中断功能的硬件系统和软件系统统称为中断系统。 (2)中断源:产生中断的请求源称为中断源。 (3)中断请求:中断源向CPU提出的处理请求,称为中断请求或中断申请。 (4)中断响应过程:CPU暂时中止自身的事物,转去处理事件的过程,称为CPU的中断响应过程。 (5)中断服务:对事件的整个处理过程,称为中断服务(或中断处理)。 (6)中

3、断返回:中断处理完毕,在返回到原来被中止的地方,称为中断返回。,中断系统的一般功能 中断系统一般应具有如下功能: 1. 实现中断及返回 当某中断源发出中断申请时,若允许响应,CPU必须在现行的指令执行完后,把断点处的PC值压入堆栈保存,称为保护断点。(硬件自动完成) 保护现场响应中断后,将有关的寄存器内容和状态标志位压入堆栈保存。 恢复现场执行中断服务程序后,恢复原保留的寄存器的内容和标志位的状态,并执行返回指令“RETI”(用户编程实现),中断及返回过程如下图所示:,2实现优先权排队 优先权给各中断源规定一个优先级别。 当同时有多个中断请求信号,先响应优先级别高的中断请求。 高优先级中断请求

4、信号可中断低优先级中断服务。 计算机按中断源级别高低逐次响应的过程称优先权排队。 这个过程可以通过硬件电路来实现,也可以通过程序查询来实现。,3、实现中断嵌套 当CPU正在处理一个中断请求的时候,外部又发生了一个优先级比它高的中断事件,请求CPU及时处理。于是,CPU暂时中断当前的中断服务工作,转而处理所发生的事件。处理完毕,再回到原来被中断的地方,继续原来的中断处理工作。这样的过程,称为中断嵌套,这样的中断系统称为多级中断系统。,MCS-51具有2个中断优先级,可以实现2级中断嵌套。,4. 实现中断的撤除 在响应中断后,返回主程序之前,中断请求应该撤除,否则,将影响对其它中断申请的响应。 M

5、CS-51中断系统只能对一部分中断申请,在响应后自动撤除,使用中应注意。 调用中断服务程序与调用子程序的区别: 1、事先安排和随机发生 2、软件调用和硬件自动完成,4.1.2.2中断系统的优势,中断系统是计算机的重要组成部分,中断的使用消除了CPU在查询方式中的等待现象,大大提高了CPU的工作效率,改善了计算机的性能,具体表现在以下几个方面: (1)有效地解决了快速CPU与慢速外设之间的通信矛盾,可使CPU与多个外设并行工作,大大提高了工作效率。 (2) 在实时控制系统中,外设对CPU的服务请求是随机的。中断系统可以及时处理控制系统中许多随机产生的数据与信息,使系统具备实时处理的能力,提高了控

6、制系统的性能。 (3) 系统工作时会出现一些如电源断电之类的突发故障,中断系统可以使故障发生时自动运行处理程序,系统具备了处理故障的能力,提高了系统自身的可靠性。,4.1.2 MCS-51中断系统的结构及中断控制,4.1.2.1 MCS-51中断系统结构 MCS-51中断系统的结构如图所示:,MCS-51的中断系统有5个中断源(MCS-52有 6个),2个优先级。5个中断源分别为: (1)2个外部中断请求:外部中断0 ()、外部中断1(),分别由从P3.2、 P3.2引脚引入,低电平有效、脉冲下降沿有效可选。 (2)2个片内定时器/计数器溢出中断请求:定时器/计数器0溢出中断(T0)、定时器/

7、计数器1溢出中断(T1),分别在定时器T0、T1溢出时发出中断申请。 (3)串行中断(TXD/RXD):一次串行发送/接收完成后,发出中断申请。 5个中断均可由软件设定为允许中断或禁止中断, 也可由软件设定为高级中断和低级中断。,与中断有关的特殊功能寄存器有4个,分别为中断源寄存器(即专用寄存器TCON和SCON的相关位)、中断允许控制IE和中断优先级控制IP。MCS-51单片机有5个中断源,可提供两个中断优先级,即可实现二级中断嵌套。,4.1.2.2 MCS-51中断控制,1、 中断允许控制 CPU对中断系统所有中断,以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。IE字节地址A8H

8、,位地址为AFHA8H,IE位结构如下表所示:,各位的含义如下: EX0(IE.0):外部中断0允许位。EX0=0,禁止外部中断0中断;EX0=1允许外部中断0中断。 ET0(IE.1):定时/计数器T0中断允许位。ET0=0,禁止T0中断;ET0=1,允许T0中断。 EX1(IE.2):外部中断1允许位。EX1=0,禁止外部中断1中断;EX1=1,允许外部中断1中断。 ET1(IE.3):定时/计数器T1中断允许位。ET1=0,禁止T1中断;ET1=1,允许T1中断。 ES(IE.4):串行口中断允许位。ES=0,禁止串行口中断;ES=1允许串行口中断。 EA (IE.7):CPU中断允许(

9、总允许)位。EA=0,屏蔽所有的中断请求;EA=1,开放中断。 通过EA可以使中断允许形成两级控制,即各中断源首先受EA位的控制其次受各中断源各自的中断允许控制位控制(IE低5位)。,2、中断优先级控制 MCS-51单片机有两个中断优先级,即可实现二级中断服务嵌套。每个中断源的中断优先级都是由中断优先级寄存器IP中的相应位的状态来规定的,相应位置“1”,为高优先级。相应位置“0”,为低优先级。中断优先级控制寄存器IP的字节地址B8H,位地址BFHB8H,。IP位结构如下表所示:,各位的含义如下: PX0(IP.0):外部中断0优先级控制位. PT0(IP.1):定时/计数器T0优先级控制位.

10、PX1(IP.2):外部中断1优先级控制位. PT1(IP.3):定时/计数器T1优先级控制位. PS(IP.4):串行口优先级控制位. 对同时发生多个中断申请时CPU按以下原则处理: 不同优先级的中断同时申请先高后低 相同优先级的中断同时申请事先规定 正处理低优先级中断又接到高级别中断停低转高 正处理高优先级中断又接到低级别中断高不理低,同一优先级中的中断申请不止一个时,则有中断优先权排队问题。同一优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,其排列如下表所示:,3、 中断标志与方式控制寄存器 MCS-51单片机的5个中断源的中断请求信号分别锁存在特殊功能寄存器TCON和SCO

11、N中。 1)TCON TCON为定时/计数器控制寄存器,字节地址为88H,其中的中断源请求标志位如下表所示:,各位的含义如下: 定时器/计数器T1的溢出中断请求标志位(TF1): 当启动T1计数后,若T1计数器产生溢出,会由硬件使TF1置1,向CPU发中断请求。若CPU响应中断,会自动由硬件将TF1清零。 定时器/计数器T0的溢出中断请求标志位(TF0):含义与TF1相同。 外部中断1的中断请求标志(IE1): 如果检测到外部中断引脚P3.3上存在有效的中断请求信号,就由硬件将IE1置1。如果CPU响应该中断请求,则自动由硬件将IE1清零。 外部中断0的中断请求标志位(IE0):其含义与IE1

12、类同。,外部中断1的中断触发方式控制位(IT1): IT1为1时,外部中断1为边沿触发方式,若CPU检测到外部中断1的引脚P3.3有由高到低的跳变,就使IE1置1,请求中断。 IT1为0时,外部中断1为电平触发方式,若CPU检测到外部中断1的引脚P3.3为低电平,则使IE1置1,请求中断;如果P3.3为高电平,则使IE1置0。 外部中断0的中断触发方式控制位(IT0):其含义与IT1类同。,2、SCON 两个串行口发送接收中断标志占用了SCON寄存器中的2位(TI和RI)。SCON是串行口控制寄存器,字节地址为98H。SCON寄存器的位格式如下表所示:,各位的含义如下: 串行口内部发送中断请求

13、标志位(TI): 当串行口发送完一个字符后,由内部硬件使发送中断标志TI置位。产生中断请求标志,CPU响应中断时,并不复位TI,TI必须由用户在中断服务程序中用软件清0(如:CLR TI )。 串行口内部接收中断请求标志位(RI): 当串行口接收到一个字符后,由内部硬件使接收中断请求标志位RI置位。产生中断请求标志,同样CPU响应中断时,并不复位RI,RI必须由用户在中断服务程序中用软件清0(如:CLR RI ) 。,4.1.2.3 MCS-51中断响应及中断处理过程 一个完整的中断处理的基本过程应该包括:中断请求、中断响应、中断处理以及中断返回。,一、 中断请求 中断请求是中断源(或者通过接

14、口电路)向CPU发出请求中断的信号。 一般单片机提供有多条中断请求线,当中断源有服务要求时,可通过中断请求线,向CPU发出信号,请求CPU中断。 中断请求信号可以是电平信号,也可以是脉冲信号。应该一直保持到CPU做出反应。,二、 中断响应 中断响应是在满足CPU的中断响应条件之后,CPU对中断源中断请求的回答。 1CPU的中断响应条件 (1) 有中断源发出中断申请; (2) 中断总允许位EA1,即CPU允许所有中断源申请中断; (3) 申请中断的中断源的中断允许位为1,即此中断源可以向CPU申请中断。,有下列任何一种情况存在,中断响应都会受到阻断:,(1) CPU正在执行一个同级或高一级的中断

15、服务程序; (2) 当前的机器周期不是正在执行的指令的最后一个周期,即正在执行的指令完成前,任何中断请求都得不到响应; (3) 正在执行的指令是返回(RETI)指令或者对专用寄存器IE、IP进行读写的指令,此时,在执行RETI或者读写IE或IP之后,不会马上响应中断请求。 由于存在中断阻断的情况而未被及时响应,待上述封锁中断的条件被撤消之后,由于中断标志还存在,仍会响应。,2中断响应过程 单片机响应中断时: 先置位相应的优先级状态触发器(该触发器指示CPU开始处理的中断的优先级别,它为1屏蔽所有同级或低级中断); 然后执行一条硬件子程序调用,使程序转移到相应的入口:清零中断请求标志(RI、TI

16、除外),由硬件将PC当前值压栈(不保护PSW),将中断服务程序入口地址送PC。,MCS-51中断入口地址和中断输入引脚是一一对应的,从哪个中断输入引脚进入的中断请求,它的中断服务程序入口地址一定是某个固定值。 如从INT0(P3.2)引脚进入的中断请求,转向的中断入口地址是0003H单元。,三、中断处理 中断处理(又称中断服务)程序从入口地址开始执行,直到返回指令“RETI”为止,这个过程称为中断处理。 各中断源入口地址间只有几个字节,一般无法放下中断服务程序,常在这几个字节中放一条转移指令转至真正的中断服务程序。 中断服务一般包括三部分内容: 保护现场 处理中断源的请求 恢复现场 一般累加器

17、、PSW寄存器和一些其它寄存器需要保护现场,保护时要注意入栈和出栈的顺序,要保证一一对应,“对称”使用。否则容易造成现场破坏,甚至使程序发生“紊乱”。,四、 中断返回 中断返回是指执行完中断服务程序后,程序返回到断点 ,继续执行原来的程序。 中断返回由专门的中断返回指令“RETI”实现。 注意:不能用子程序返回指令“RET”代替中断返回指令“RETI”。 CPU执行RETI指令后,先清零响应中断时置位的优先级状态触发器,然后从堆栈中弹出两个字节到PC,CPU从原来中断处重新执行被中断的程序。,五、中断响应时间 不同的情况对中断响应的时间不同: (1) 最短的响应时间,需要3个机器周期。 (2)

18、如果遇到中断受阻的情况,响应时间会更长一些。 (3)如果有两个以上中断源同时申请中断,则响应时间将更长。 一般情况下,可不考虑响应时间,但在精确定时控制的场合需要考虑此问题。,六、 中断请求的撤除 CPU响应某中断请求后,在中断返回前,应撤消该中断请求。 (1)定时器0或1溢出中断,CPU在响应中断后,中断请求自动撤除。 (2)边沿激活的外部中断,CPU在响应中断后,硬件自动清除有关的中断请求 。 (3)串行口中断,CPU响应中断后,靠软件来清除相应的标志。 电平激活的外部中断撤除方法较复杂(课本P97图4-4)。,补:外部中断扩展方法,89C51单片机有两个外部中断请求输入端(INT0和IN

19、T1)。实际应用中,若外部中断源有两个以上,则需要扩展外部中断源。 利用定时器扩展外部中断源 中断加查询扩展外部中断源,利用定时器扩展外部中断源,89C51单片机有两个定时器,具有两个内部中断标志和外部计数输入引脚。 当定时器设置为计数方式时,计数初值设置为满量程FFH。一旦外部信号从计数器引脚输入一个负跳变信号,计数器加1产生溢出中断,从而转去处理该外部中断源的请求。 将外部中断源信号接至T0(P3.4)或T1(P3.5)引脚;该定时器的溢出中断标志及中断服务程序作为扩充外部中断源的标志和中断服务程序。,中断加查询扩展外部中断源,每一根中断输入线可以通过“线或”的关系连接多个外部中断源,同时

20、利用输入端口线作为各个中断源的识别线。 中断服务程序为一个中断查询程序。,DV1: 装置1的中断服务程序 AJMP EXIT DV2: 装置2的中断服务程序 AJMP EXIT DV3: 装置3的中断服务程序 AJMP EXIT DV4: 装置4的中断服务程序 AJMP EXIT,ORG 0003H LJMP INTRP;中断服务入口 ORG 1000H INTRP:PUSH PSW PUSH A JBP1.0, DV1 JBP1.1, DV2 JBP1.2, DV3 JBP1.3, DV4 EXIT: POPA POP PSW RETI,【例4.1】若规定外部中断1为边沿触发方式,高优先级,

21、在中断服务程序中将寄存器B的内容进行半字节交换,B的初值设为21H。试编写主程序与中断服务程序。 ORG 0000H LJMP MAIN ORG 0013H ;中断矢量 LJMP INTS ORG 0030H MAIN:SETB EA ;总中断允许“开” SETB EX1 ;外部中断1允许“开” SETB PX1 ;设置为高优先级 SETB IT1 ;边沿触发方式 MOV B,#21H ;给 B 寄存器赋初值 HERE:SJMP HERE ;原地等待中断申请 INTS:MOV A,B ;自B寄存器中取数 SWAP A ;半字节交换 MOV B,A ;存回B RETI ;中断返回 思考:此例中中

22、断服务程序是否可以直接安排在中断服务入口?,【例4.2】电路结构如下图所示,要求每次按动按键,使外接发光二极管LED改变一次亮灭状态, 输入按键信号,P1.0输出改变LED状态,对于外部中断,可以有两种方式:边沿触发方式和电平触发方式。这里分两种情况分别介绍。,(1)边沿触发方式:每次按键K1按下,产生的一次跳变,引起一次外部中断0请求,在外部中断0服务程序中,将P1.0的输出状态反转,为了避免开关抖动引起的多次中断可以考虑利用软件延时或者硬件去抖动法。,ORG 0000H ;复位入口 AJMP MAIN ORG 0003H ;中断入口 AJMP PINT0 ORG 0100H ;主程序 MA

23、IN:MOV SP,#40H ;设栈底 SETB EA ;开总允许开关 SETB EX0 ;开INT0中断 SETB IT0 ;负跳变触发中断 H: SJMP H ;等待(执行其它任务) ORG 0200H ;中断服务程序 PINT0:CPL P1.0 ;改变LED LCALL Delay10ms;软件延时去开关抖动 RETI ;返回主程序,(2) 电平触发: 为了避免一次按键引起多次中断响应,应该在每次按键按下引起的中断服务程序中执行完P1.0的电平反转后先不退出中断服务程序,而是利用软件等待按键释放,按键释放后才结束中断服务程序。,ORG 0000H ;复位入口 AJMP MAIN ORG

24、0003H ;中断入口 AJMP PINT0 ORG0100H ;主程序 MAIN:MOV SP,#40H;设栈底 SETB EA ;开总允许开关 SETB EX0 ;开INT0中断 CLR IT0 ;低电平触发中断 H: SJMP H ;等待(执行其它任务) ORG 0200H ;中断服务程序 PINT0:CPL P1.0 ;改变LED WAIT:JNB P3.2,WAIT;等按键释放 RETI ;返回主程序,有关中断系统的程序包含中断控制程序和中断服务程序两部分。 一、中断初始化程序(中断控制程序) 中断初始化程序实质上就是对TCON、SCON、IE和IP寄存器的管理和控制。 中断初始化程

25、序一般不独立编写,而是包含在主程序中,中断初始化程序需完成以下操作: 1开中断; 2某一中断源中断请求的允许与禁止(屏蔽); 3确定各中断源的优先级别; 4若是外部中断请求,则要设定触发方式是电平触发还是边沿触发。,例1 设规定外部中断0为电平触发方式,高优先级,试写出有关的初始化程序。解:可用两种方法完成。 方法1,用位操作指令完成: SETB EA ;开中断允许总控制位 SETB EX0 ;外中断0开中断 SETB PX0;外中断0高优先级 CLR IT0 ;电平触发 方法2,用其它指令也可完成同样功能: MOV IE,#81H;同时置位EA和EX0 ORL IP,#01H;置位PX0 A

26、NL TCON,#0FEH ;使IT0为0,二、中断服务程序 中断服务程序是一种为中断源的特定情况要求服务的独立程序段,以中断返回指令RETI结束。 中断服务程序的固定入口: 0003H、000BH、0013H、001BH、0023H 中断服务程序和子程序一样,在调用和返回时,也有一个保护断点和现场的问题。 在中断响应过程中,断点的保护主要由硬件电路自动实现。,单片机原理与应用,中断时,现场保护由中断服务程序来完成。因此在编写中断服务程序时必须考虑保护现场的问题。现场一般包括累加器A、工作寄存器R0-R7以及程序状态字PSW等。 在编写中断服务程序时还应注意以下三点: (1) 各中断源入口地址

27、之间只相隔8个字节。 (2) 在执行当前中断程序时,如何禁止更高优先级中断源的中断请求。 (3) 在多级中断情况下,保护现场与中断嵌套的安排。,单片机原理与应用,三、 应用举例 在设计中断服务程序时,是按中断源的要求,根据中断处理所要完成的任务来进行的。 保护现场和恢复现场一般采用 PUSH和POP指令来实现。PUSH和POP指令一般成对出现,以保证寄存器的内容不会改变。 要注意堆栈操作的“先进后出,后进先出”的原则。,单片机原理与应用,例2 设在主程序中用到了寄存器PSW、ACC、B、DPTR,而在执行中断服务程序时需要用到这些寄存器。SERVICE:PUSHPSW;保护程序状态字 PUSH

28、ACC;保护累加器A PUSHB;保护寄存器B PUSHDPL;保护数据指针低字节 PUSHDPH;保护数据指针高字节 ;中断处理 POPDPH;恢复现场 POPDPL POP B POPACC POPPSW RETI,单片机原理与应用,多个故障源进行显示,例3 图为多个故障显示电路,当系统无故障时,4个故障源输入端X1X4全为低电平,显示灯全灭;当某部分出现故障,其对应的输入由低电平变为高电平,从而引起MCS51单片机中断,中断服务程序的任务是判定故障源,并用对应的发光二极管LED1LED4进行显示。,单片机原理与应用,编程如下: ORG 0000H;程序开始 AJMP MAIN;转主程序

29、ORG 0003H;外部中断INT0入口地址 AJMP SERVICE ;转中断服务程序 MAIN:0RL P1,#0FFH;灯全灭,准备读入 SETB IT0 ;选择边沿触发方式 SETB EX0;允许INT0中断 SETB EA;CPU开中断 AJMP $;等待中断,单片机原理与应用,SERVICE:JNB P1.3,N1;若X1无故障转 CLR P1.4;若X1有故障,LED1亮 N1:JNB P1.2,N2;若X2无故障转 CLR P1.5;若X2有故障,LED2亮 N2:JNB P1.1,N3;若X3无故障转 CLR P1.6;若X3有故障,LED3亮 N3:JNB P1.0,N4;

30、若X4无故障转 CLR P1.7;若X4有故障,LED4亮 N4: RETI,单片机原理与应用,这个程序主要分为主程序和中断服务程序两部分。 主程序主要完成初始化的工作 中断服务程序主要检测故障源是否发生,如果某故障源发生,则将相应的指示灯点亮。 在此主程序和中断服务程序中,没有存在使用寄存器之间的干涉问题。因此,在中断服务程序中不用保护现场和恢复现场。,4.2 MCS-51单片机片内定时器/计数器,4.2.1 定时器/计数器的结构及基本原理 4.2.1.1 定时器/计数器的结构及其工作原理 MCS-51单片机的定时/计数器的结构如下图所示。,定时计数器结构示意,MCS-51单片机内部有两个1

31、6位的可编程定时/计数器,称为定时器0(T0)和定时器1(T1)。定时器0由两个8位专用寄存器TH0(作T0的高8位)和TL0(作T0的低8位)组成,定时器1由两个8位专用寄存器TH1和TL1组成。 定时/计数器本质上是加1计数器,加1计数器的初值可以由程序设定,设置的初值不同,定时的时间或计数值就不同。可以通过软件设置定时/计数器为定时工作方式和计数工作方式。 当定时/计数器设置为定时工作方式时,加1计数器对内部机器周期计数,每个机器周期计数器加1,直至计满溢出,发出定时器溢出中断请求信号。这时,定时器的计数频率是片内振荡器频率的十二分之一,计数值N乘以机器周期Tcy就是定时时间t。,当定时

32、/计数器设置为计数工作方式时,加1计数器对来自输入引脚T0(P3.4)和T1(P3.5)的外部脉冲信号计数,在每个机器周期的S5P2期间采样外部脉冲,若前一个机器周期采样到高电平,后一个机器周期采样到低电平,则将触发计数器加1,更新的计数值将在下一个机器周期的S3P1期间装入计数器。因此,单片机检测一个从高电平到低电平的下降沿需要2个机器周期,要使下降沿能被检测到,就得保证被采样高、低电平分别至少维持一个机器周期的时间,即外部输入信号的频率不超过晶振频率的1/24。如:当晶振频率为12MHz时,最高计数频率不超过0.5MHz,即计数脉冲的周期要大于2微秒。,4.2.1.2 定时/计数器的工作方

33、式寄存器和控制寄存器,MCS-51单片机的可编程定时/计数器,除了具有计数寄存器THx和TLx以外,还有两个寄存器TMOD和TCON用来控制其工作模式或者反映其工作状态。 1.工作方式寄存器TMOD TMOD为定时/计数器T0、T1的工作方式控制寄存器,字节地址89H,只能按字节对它寻址。TMOD的位结构如下表所示:,定时器T1,定时器T0,TMOD (89H),D7 D6 D5 D4 D3 D2 D1 D0,工作模式寄存器TMOD的位定义,TMOD各位定义及具体的意义,GATE:门控位,决定定时器/计数器的启动开关信号(图中的K2)是否受外部中断请求信号的影响。 GATE=0,只要用软件使T

34、R0(或TR1)置1就可以启动定时器,而不管INT0(或INT1)的电平是高还是低。 GATE=1,只有INT0(或INT1)引脚为高电平且由软件使TR0(或TR1)置1时,才能启动定时器工作。 门控位对定时计数器启动开关信号的控制作用如下图所示:,C/T :定时或计数功能选择位 当C/T=1时为计数方式; 当C/T=0时为定时方式。 M1、M0:定时器/计数器工作方式选择位,其值与工作方式对应关系如下表所示。 系统复位时,寄存器TMOD的所有位被清零。,2. 控制寄存器TCON TCON是定时/计数器T0、T1的控制寄存器,字节地址88H,可以位寻址,TCON的位结构如下表所示: 各位的含义

35、如下: TF1:定时器1溢出标志位。当定时器1计满数产生溢出时,由硬件自动置TF1为1,(在允许中断的情况下)向CPU发出中断请求信号。如果CPU响应中断则转向中断服务程序,硬件自动将该位清零。在中断屏蔽时,CPU不响应中断无法用硬件将该位清零,可以用软件对其清零。,TR1:定时器1运行控制位。使用软件编程将TR1置1或清0可以控制定时/计数器的启动与关闭。但是当GATE1,需要同时满足 为高电平的条件,将TR1置1才会启动定时器1。 TF0:定时器0溢出标志位。其功能及操作情况同TF1。 TR0:定时器0运行控制位。其功能及操作情况同TR1。 TCON中的低4位IT0、IE0、IT1、IE1

36、与中断有关,已经在上一节介绍过。 在系统复位时,寄存器TCON的所有位被清零。,4.2.2 定时器/计数器的四种工作方式,MCS-51单片机的定时器/计数器有4种工作方式,分别由TMOD寄存器中的M1、M0两位的二进制编码所决定,这里对这4种工作方式进行具体介绍。 4.2.2.1 方式0及其用法 当M1 M0=00时,定时器/计数器设定为工作方式0,这时为13位的定时/计数器。其逻辑结构如下图所示。,在方式0下,T0和T1工作在13位的定时/计数器方式,计数器的这13位由THx的8位作高8位和TLx的低5位作低5位组成。当TLx(x=0或1)的低5位计数溢出时就向高8位THx进位,THx溢出时

37、,置位TCON中的TFx标志,向CPU发出中断请求,当单片机进入中断服务程序时,由内部硬件自动清除该标志。 当 =0时(定时方式),多路开关与片内振荡器的12分频输出相连,工作在定时工作方式。其定时时间为: 定时时间=(213定时器初值)机器周期 根据上面的公式可以在已知定时时间的情况下求出所要设定的定时器初值。,当 =时(计数方式),多路开关与T0(P3.4)或T1(P3.5)相连,外部计数脉冲由引脚输入,工作在计数工作方式。当检测到外部信号电平发生从到跳变时,计数器加1。 设x为计数器初值,则外部脉冲计数值为 N = 213x = 8192x x=8191时为最小计数值1,x=0时为最大计

38、数值8192,即计数范围为18192。,非门控方式: 当GATE0 控制权由 TRx 决定 TRx1 定时/计数开始 TRx 0 定时/计数停止,门控方式: 当GATE1、TRx1 控制权由 INTx 决定 INTx1 定时/计数开始 INTx 0 定时/计数停止,启动定时/计数方式:,定时器0模式0结构,应用举例 使用定时/计数器进行定时或计数之前,首先要通过软件对它进行初始化。初始化包括下述步骤: 1.确定工作方式:对TMOD寄存器赋值; 2.置定时/计数器初值:对TH0、TL0或TH1、TL1寄存器赋初值,初值X的计算方法如下: 计数方式时:X = 213 N, N为计数值 定时方式时:

39、X = 213 - (t/T), t为定时值;T为机器周期 3.根据需要,开放定时器中断:对IE寄存器赋值; 4.启动定时/计数器:使TCON寄存器的TR0或TR1置位,或由加到引脚INTX上的外部信号电平启动。,例:利用T0方式0产生宽度为2s,周期为2ms的定时负脉冲,由P1.7送出,系统采用12MHz的晶振。 解: 由于晶振为12MHz,机器周期为1s,这样利用T0方式0产生周期为2ms定时的初值X为: X =213-t/T =213-210-3/(110-6) =8192-2000 =6192 =1830H =1100000110000B 则TH0=11000001B=0C1H,TL0

40、=00010000B=10H,初始化程序: MOV TMOD , #00H MOV TH0 , #0C1H MOV TL0 , #10H;初始化T0 MOV IE , #82H;开T0中断 SETB TR0 ;启动T0 T0溢出中断服务程序:T0INT:CLR P1.7NOPSETBP1.7MOVTH0,#0C1H ;T0重置初值MOVTL0,#10HRETI,例:利用T0的工作模式0产生1ms定时,在P1.0引脚输出周期为2ms的方波。设单片机晶振频率fosc=12MHz。编程实现其功能。 解:要在P1.0引脚输出周期为2ms的方波,只要使P1.0每隔1ms取反一次即可。 (1)选择工作模式

41、: TMOD = 00H 即:M1M0=00,C/T=0,GATE=0,其余位为0,(2)计算1ms定时时T0的初值 (213X)1/12 10-612=110-3 s X=7193D=11100000 11000B T0的低5位:11000B=18H即 (TL0)=18H T0的高8位:11100000B=E0H即 (TH0)=E0H,(3)采用查询方式的程序 程序清单: MOV TMOD,#00H ;设置T0为模式0 MOV TL0,#18H ;送初值 MOV TH0,#0E0H SETB TR0 ;启动定时 LOOP:JBC TF0,NEXT ;查询定时时间到否 SJMP LOOP NE

42、XT:MOV TL0,#18H ;重装计数初值 MOV TH0,#0E0H CPL P1.0 ;取反 SJMP LOOP ;重复循环,(4)采用定时器溢出中断方式的程序 程序清单: 主程序 ORG 0000H RESET: AJMP MAIN ; 跳过中断服务程序区 ORG 000BH AJMP CTC0 ;中断服务程序入口 ORG 0030H MAIN: MOV TMOD,#00H ;设置T0为模式0 MOV TL0,#18H ;送初值 MOV TH0,#0E0H SETB EA ;CPU开中断 SETB ET0 ;T0中断允许 SETB TR0 ;启动定时 HERE:SJMP HERE ;

43、等待中断,虚拟主程序,中断服务程序 ORG 0120H CTC0: MOV TL0,#18H ;重新装如初值 MOV TH0,#0E0H CPL P1.0 ;P1.0取反 RETI,【例4.3】定时器T0工作在方式0下最大的定时时间是多少?利用定时器T0的方式0产生定时脉冲,要求每隔5ms产生宽度为2 s的正脉冲,由P1.0输出此定时序列脉冲信号(设时钟频率为12MHZ)。 解:由于时钟频率为12MHZ,机器周期为1s。 T0工作在方式0下最大的定时时间是: tmax = (8192 - T0初值) 机器周期 = (8192 - 0) 1s = 8.192ms,为了产生5ms的定时周期,先计算

44、出定时器T0初值。 因为:t = (8192 - T0初值) 机器周期 所以,当t = 5ms时,则:(8192 - T0初值) 1s=5ms 解得:T0初值 = 3192 = 0 1100 0111 1000B (注意,这里一定要将其转化为二进制数) 其中将 低5位 1 1000B=18H 赋给TL0 , 高8位 0110 0011B=63H 赋给TH0 。,定时时间到,要由P1.0送出宽度为2s的正脉冲,由 SETB P1.0指令的执行时间为1个机器周期,当晶振为12MHz时,这条指令的执行时间为1s,需要补上一个单周期指令NOP,凑够2s 。 这样,每当定时时间到时,利用T0产生中断,在

45、中断服务程序中,先执行 SETB P1.0和NOP两条指令,然后执行CLR P1.0,最后重装TH0和TL0的初值,就可以产生题目所要求的定时脉冲。 置T0为定时方式0,GATE=0,C/T=0, M1M0=00H, T1不用,可任意,一般取0,故TMOD=00H,并由TR0启停T0。,参考程序如下: 方法一:采用查询工作方式,编程如下: ORG 0000H AJMP MAIN ORG 0100H MAIN: CLR P1.0 MOV TMOD , #00H ;设定T0的工作方式 MOV TH0 , #63H ;给定时器T0送初值 MOV TL0 , #18H SETB TR0 ;启动T0工作

46、 LOOP: JNB TF0 , $ ;$为当前指令指针地址 CLR TF0 SETB P1.0 ;产生2个机器周期的正脉冲 NOP CLR P1.0 MOV TH0 , #63H ;重装载TH0和TL0 MOV TL0 , #18H SJMP LOOP END,方法二:采用中断工作方式,编程如下: ORG 0000H AJMP MAIN ORG 000BH AJMP T0INT ORG 0100H MAIN: CLR P1.0 MOV TH0 , #63H ;给定时器T0送初值 MOV TL0 , #18H MOV IE , #82H;开放T0中断与中断总开关 SETB TR0;启动T0 S

47、JMP $ ORG 0300H ;中断服务程序 T0INT: SETB P1.0;产生2个机器周期的正脉冲 NOP CLR P1.0 MOV TH0 , #63H ;重装载TH0和TL0 MOV TL0 , #18H RETI,4.2.2.2 方式1及其用法,当M1M0=01时,定时器/计数器设定为工作方式1,这时由THx作为高8位、TLx作为低8位,组成了16位定时器/计数器。方式1除了计数位数与方式0不同外,其它均与工作方式0相同。 方式1逻辑结构如图所示,定时器0模式1结构,在定时模式下定时时间为: t =(216定时器初值)机器周期 计数模式请读者结合方式0,自己分析,这里不再重复。

48、【例4.4】定时器T0工作在方式1下最大的计数周期是多少?用定时器T0的方式1产生50HZ的方波,由P1.0输出此方波(设时钟频率为12MHZ)。 解:由于时钟频率为12MHZ,则机器周期为1s。 T0工作在方式1下最大的定时周期是: tmax=(216-T0初值)机器周期=(65536-0) 1s=65.536ms,由于周期为1/50Hz=20ms,则这种方波的正负脉冲宽度都为10ms。 由于晶振为12MHz,机器周期为1s,这样利用T0方式1产生10ms定时的初值X为: X = 216 - t/T = 216 - 1010-3/(110-6) = 65536-10000 = 55536 =

49、 D8F0H =1101100011110000B 则TH0=11011000B=0D8H,TL0=11110000B=0F0H,采用中断工作方式,编程如下: ORG 0000H AJMP MAIN ORG 000BH AJMP T0INT ORG 0100H MAIN: MOV TMOD , #01H MOV TH0 , #0D8H MOV TL0 , #0F0H MOV IE , #82H ;开放T0中断与中断总开关 SETB TR0 SJMP $ ORG 0300H ;中断服务程序 T0INT: CPL P1.0 MOV TH0 , #0D8H MOV TL0 , #0F0H RETI,

50、例:门控方式测量正脉冲宽度 解:INT1引脚输入被检测信号,记录在正脉冲的时间内包含机器脉冲个数。 1)设脉宽小于65.5ms 等待查询INT1,正脉冲过后,读出TH1、TL1。,START:MOV TMOD,#90H MOV TL1,#0H MOV TH1,#0H WAIT1:JBP3.3,WAIT1 SETB TR1 WAIT2 :JNBP3.3,WAIT2 WAIT3 : JBP3.3,WAIT3 CLRTR1 MOVR2,TL1 MOVR3,TH1 ,GATE=1门控,只有INT1=1才计数,2)设脉宽大于65.5ms,中断方式记录TH1、TL1溢出中断次数。,ORG 0000H AJ

51、MP START ORG 001BH INCR4;记录溢出次数 RETI ORG 0030H START:MOV TMOD,#90H MOV TL1,#0H MOV TH1,#0H WAIT1: JB P3.3,WAIT1 SETBTR1 SETBET1;开T1中断 SETBEA,WAIT2: JNBP3.3,WAIT2 ;等待正脉冲到来 WAIT3: JBP3.3,WAIT3 ;等待正脉冲结束 CLRTR1;关闭T1 MOVIE,#00;关闭中断 MOVR2,TL1;读出T1 MOVR3,TH1 LCALL PPS;计算脉宽 HERE:SJMPHERE;其他任务 PPS:;计算脉宽子程序,计

52、算脉宽的子程序的计算式如下: 脉宽t = (R4 216 + R3 R2 ) T(T为机器周期),4.2.2.3 方式2及其用法,当M1M0=10时,定时器/计数器设定为工作方式2。其逻辑结构如图所示。,定时器0模式2结构,定时/计数器工作方式2具有自动重装载功能。工作方式0和工作方式1的最大缺点就是计数溢出后,计数器为0,因而在循环定时或循环计数应用时就存在需反复用软件向THx和TLx预置计数初值的问题,给程序设计带来不便,同时也会影响计时精度,工作方式2就针对这个问题而设置的。 在工作方式2中,16位计数器分为两部分: TLx作为8位计数器进行计数 THx保存8位初值并保持不变,作为预置寄

53、存器。,初始化时把相同的计数初值分别加载至TLx和THx中,当计数溢出时,不需再像方式0和方式1那样需要由软件重新赋值,而是由硬件自动将预置寄存器THx的8位计数初值重新加载给TLx,继续计数,不断循环。 除能自动加载计数初值之外,方式2的其他控制方法同方式0类似。 方式2的定时时间为: t =(28定时器初值)机器周期 计数模式请读者结合方式0,自己分析,这里不再重复。,【例4.5】定时器T1工作在方式2下最大的定时时间是多少?用定时器T1的方式2从P1.0 脚输出频率=1KHz方波(设时钟频率为6MHZ)。 T1工作在方式1下最大的定时时间(晶振频率为6MHZ)是: tmax=(28-T0

54、初值)机器周期=(256-0) 2s=512s 分析:fosc= 6MHz ,机器周期 = 2s 1KHz方波周期 =1ms, 半个方波周期 = 500s (28定时器初值)机器周期 = 定时时间 (256X) 2s= 500s 计算初值:X=6,采用中断工作方式,编程如下: ORG 0000H AJMP MAIN ORG 001BH ;T1的中断矢量 CPL P1.0 ;中断服务:P1.0取反 RETI ORG 0030H ;中断返回 MAIN: MOV TMOD,#20H ;选T1方式2 MOV TH1, #6 ;赋重装值 MOV TL1, #6 ;赋初值 SETB ET1 ;开T1中断

55、SETB EA ;开总中断 SETB TR1 ;启动T1 HERE: AJMP HERE ;原地等待中断 END,【例4.6】 利用T0的工作方式2扩展一个外部中断源。 分析: 将T0设置为计数器方式,每计数一次产生一次溢出中断。 按方式2工作,TH0、TL0的初值均为0FFH。 T0允许中断,CPU开放中断。这样每来一个脉冲,都将产生一次定时器溢出中断,类似于外部中断。在定时计数器中断服务程序中编写该外部中断的服务内容即可。,参考程序如下: ORG 0000H AJMP MAIN ORG 000BH AJMP T0INT ORG 0100H MAIN: MOV TMOD,#06H ;置T0为

56、计数器方式2 MOV TL0,#0FFH ;置计数初值 MOV TH0,#0FFH SETB TR0 ;启动T0工作 SETB EA ;CPU开中断 SETB ET0 ;允许T0中断 SJMP $ ;等待中断 T0INT: ;编写该中断的服务程序 RETI,例: 利用定时器T1的模式2对外部信号计数。要求每计满100次,将 P1.0端取反。 解:(1)选择模式 外部信号由T1(P3.5)引脚输入,每发生一次负跳变计数器加1,每输入100个脉冲,计数器发生溢出中断,中断服务程序将P1.0取反一次。 T1计数工作方式模式2的模式字为 (TMOD)= 0110 0000B = 60H。 T0不用时,

57、TMOD的低4位可任取,但不能进入模式3,一般取0。,(2)计算T1的计数初值 X= 256 100 = 156 = 9CH 因此:TL1的初值为9CH, 重装初值寄存器TH1=9CH。,(3)程序清单 ORG 0000H AJMP MAIN ORG 001BH ;中断服务程序入口 CPL P1.0 RETI MAIN: MOV TMOD, #60H ;设置T1为模式2, 计数方式 MOV TL1, #9CH ;T1计数器初值 MOV TH1, #9CH MOV IE,#88H ; 定时器开中断 SETB TR1 ;启动T1计数 HERE:SJMP HERE ;等待中断,4.2.2.4 方式3及其用法,当M1M0=11时,定时器/计数器设定为工作方式3。 工作方式3只适用于定时器T0。当T0工作在方式3时,TH0和TL0被拆成2个独立的8位计数器。 其中,TL0既可作为定时器,也可作为计数器使用,它占用定时器T0所使用的控制位:GATE,C/T,TR0,INT0和TF0;除了它的位数为8位外,其功能和操作与方式0或1完全相同。 TH0只能作定时器用,并且占据了定时器T1的控制位TR1和中断标志位TF1,TH0计数溢出置位TF1,且TH0的启动和关闭仅受TR1的控制。,T0模式3结构,T0模式3时T1结构,定时器T1无工作模式3,当将定时器T0设定为方式3时,定时计数器

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论