单片机的定时与中断系统_第1页
单片机的定时与中断系统_第2页
单片机的定时与中断系统_第3页
单片机的定时与中断系统_第4页
单片机的定时与中断系统_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1、3.1定时器/计数器3.1.1单片机定时器/计数器的结构1. 定时器/计数器的组成结构mcs-51单片机内部有两个定时器/计数器(to和t1)。它们都是16位的加法计数器,可用 于定时控制和对外部事件的计数。当用于定时操作时,实际上就是通过计数器对单片机内部 时钟电路产生的固定周期脉冲信号进行加法计数;当用于计数操作时,实际上就是对外部事 件产生的脉冲信号进行加法计数。可见,不管是定时操作还是计数操作,都要由16位加法 计数器完成。如果计数器事先设置的初始状态不同,那么从开始计数到计满溢出为止所用的 时间也就不同。因此,使用to或t1时要为其设置初始值,可通过软件完成。定时器/计数器to由两个

2、8位的特殊功能寄存器(th0禾口tl0)组成,t1由th1和tl1 组成。定时、计数功能是通过两个特殊功能寄存器(tmod和tcon)控制的。如果定时器/ 计数器to和t1相当于两台电视机,那么特殊功能寄存器tmod、tcon就相当于电视机 上的控制按钮。因此,掌握tmod、tcon的功能是用好to、t1的关键。图3. 1 mcs-51定时器/计数器逻辑结构图2. 定时器/计数器的方式寄存器和控制寄存器1) 定时器/计数器的方式寄存器定时器/计数器的方式寄存器(tmod)用于控制to和t1的操作方式,其字节地址为89h,是一个8位的特殊功能寄存器。使用时分为高4位和低4位两部分,其中高4位控

3、制t1,低4位控制to。各位的含义如图3.2所示。图3. 2 tmod的各位含义(1) gate:门控位。用于控制to或t1的启动。当gate=0时,计数器的启动不受外 部引脚信号into或int1控制,只受特殊功能寄存器tcon中的启动位tro或tr1控制; 当gate=1时,计数器的启动不仅受tr0或tr1控制,还要受外部引脚信号into或int1 控制。c/t:定时器或计数器功能选择位。当c/t=l时,作为计数器实现对外部脉冲计 数:当c/t=0时,作为定时器实现定时控制。(3) ml和m0:工作方式选择位。定时器/计数器有4种工作方式,可通过ml、m0的 二进制组合取值选择不同的工作方

4、式。对应关系见表3-1。表3t定时器工作方式的选择m1mo工作方式说明0()方式()t()或t1是13位定时器/计数器01方式1t0或t1是16位定时器/计数器10方式2是常数自动重装的8位定时器/计数器1 i方式3被拆为两个8位定时器/计数器,仅适用于t02) 定时器/计数器的控制寄存器定时器/计数器的控制寄存器(tcon)用于控制定时器/计数器to或t1的运行,是一个8位的特殊功能寄存器,其字节地址为88h。低4位与中断有关,这里只介绍高4位。高4 位中的高两位控制t1,低两位控制t0。(1) tf1:定时器/计数器t1的溢岀标志位。当t1计满溢出时,系统自动将此位置1, 并向cpu发出中

5、断申请。当cpu响应中断时,由硬件自动将该位清0。tr1:定时器/计数器t1的运行控制位。用于控制t1的启动和停止.当tmod的 门控位gate=0时,仅通过tr1置1就可以启动t1计数;当门控位gate=1时,需要 tr1置1并且int1为高电平,只有这两个信号同时存在才能启动t1计数°tfo:定时器/计数器to的溢出标志位。其功能与t1相同。tr0:定时器/计数器to的运行控制位。其功能与t1相同。3. 1.2定时器/计数器的工作方式通过对tmod的学习可知,ml、m0的不同取值可以决定定时器/计数器的工作方式。to具有方式0、方式1、方式2和方式3四种工作方式;t1具有方式0、

6、方式1和方式2 三种工作方式。下面对各种工作方式进行说明。1. 方式0当m1mo=()()时,定时器/计数器工作在方式0下。方式0下的定时器/计数器是13位定时 器/计数器。以to为例,th0和tlo本身都是8位寄存器,但当工作在方式()下时,tlo只用 低5位,高3位未用。其逻辑结构如图3.4所示。在图中,tl0的低5位计满溢出时,将向th0 进位,当th0计满溢出时,则将向tcon的tfo位进位,将该中断溢出标志位置i。从图3.4可以看出,t0是作为定时器还是作为计数器由c/t决定。当c/t=o时,多路开关与分频器相连,t0对振荡器12分频后的信号进行加法计数,即对机器周期进行计 数。计一

7、个脉冲需要一个机器周期,则其定时时间为:定时时间=(213-t0初值)x机器周期当c/t=l时,多路开关与t0引脚相连,对来自t0引脚的外部脉冲信号进行加法计数。 门控位gate=0时,或门输出a点恒为1, into无效,此时与门输出b点只受tr0 控制。即tro=1时,控制开关闭合,启动计数器;tr0=0时,控制开关断开,计数器停止 计数。门控位gate= 1时,或门输出a点是1还是0取决于into的值。当into=1且tro=1 时,与门输出b点才为1,控制开关闭合,启动计数器计数。由此可见,当gate=1时, 启动计数器tr0和into必须都为1,两个条件缺一不可。2. 方式当m1m()

8、=()1时,定时器/计数器工作在方式1下。方式1下的t0是16位定时器/计数器。惟一与方式o不同的是,th0和tlo的所有位都参与计数。定时时间=(216-t0初值)x机器周期3. 方式2当m1mo=1()时,定时器/计数器工作在方式2下。方式2下的定时器/计数器是常数自动重装的8位定时器/计数器。以t1为例,在方式2下,tl1作为8位定时器/计数器,th1作为常数缓冲器。当tl1计满溢岀时, 将中断溢出标志位tf1置,同时将th1中备用的计数常数自动送至tl1中,使tl1从初 值开始重新计数。这种工作方式不用重装初值,省去了软件重装常数的程序,可以相当精 确地定时。4. 方式3当m1mo=1

9、1时,定时器/计数器t0工作在方式3下。这种工作方式不适用于t1,因 为它是为附加一个8位定时器/计数器而设计的。此时,t1被拆为两个独立的8位计数器 tlo和tho。tlo使用t0的状态控制位,而th0只能作为8位定时器(不能作为计数器), 且使用t1的状态控制位。3.1.3定时器/计数器的编程和应用1. 定时器/计数器的编程方法和步骤掌握tmod、tcon及定时器/计数器的各种工作方式后,通常可按下列步骤实现定时 和计数控制。(1) 根据要求确定tmod的初始值。通过设置tmod的初始值,确定使用t0还是t1、选择方式0方式3中的哪一种工作方式及启动方式等。(2) 计算不同工作方式下定时或

10、计数的初值。(3) 编写初始化程序,通过软件控制定时器/计数器硬件电路的工作。在编写初始化程序的过程中,要通过指令把tmod的初始值、定时或计数的初值装入相应寄存器中,并通过启动to或t1来计数,同时采用查询方式或中断方式检查计数器是 否溢出,并进行相应处理。2. 定时器/计数器的应用举例【例3.1】设单片机的晶振频率为6mhz,试计算其最小和最大定时时间。定时时间与机器周期有关°当单片机晶振频率为6mhz时,一个机器周期为2ps。计算最小定时时间:定时器的4种工作方式的最小定时时间都是一样的,即定时器初 值为最大值,8位定时器初值为ffh, 13位为1fffh, 16位为ffffh

11、。7'min= 1 xtc= 1 x2|js=2|js计算最大定时时间:在方式1下定时时间最长。tmax=216x2ps= 131072|js0.13s应该注意,定时器的最大定时时间和最小定时时间随单片机的晶振频率变化而变化。【例3.2】设晶振频率为12mhz,用to在方式0下产生1ms的定时,使p1.0脚上产生周 期为2ms的方波(见图3.8)o根据题意,只要使p1.0每隔1ms取反一次即可得到2ms的方波。(1) 按题目要求设置tmod的初值。gate=()(只通过tro 启动to), c/t = 0(定时操作),m1m()=()()(方式(),所以(tmod) =00ho(2)

12、计算1ms方式0定时初始值。单片机的晶振频率为12mhz,则其机器周期为l|js。lmsxlooo =(213-t0 初值)x1 psto 初值=7192=1c18h= 00() 1110000011000btho tlo取其低13位,高8位装入tho,低5位装入tlo。因此(th0)=0e0h, (tlo)=18h0(3) 编写初始化控制程序。org 2000hstart: mov tmod,#ooh ;写入方式控制字mov tl0z#18h ;为丁0装入初始值mov thoz #0e0hsetb tro ;启动toloop:jbc tfoz png ;定时时间到时转向pngajmp loo

13、p ;若未到,则继续查询png: mov tlo, #18h ;为丁0重装初始值mov thoz #0e0hcpl p1.0 ;取反ajmp loop ;循环【例3.3】用t1在方式2下计数,要求每计满10()次,就将p1.0脚取反。(1) 根据要求设置tmod的初值。gate=0(只通过tr1启动tl), c/t=l(计数器功能),mlm0=10(方式2),所以tmod=01100000b=60h。(2) 计算计数初值。计数值=28-tll 初值,因此tl1 初值=28-计数值=28100=156=9ch, (th1)=(tl1)= 9cho(3) 编写初始化控制程序。org 2000hst

14、art: mov tmodf#60h ;写入方式控制字mov tl:l,#9ch ;设置计数初始值mov th1z #9chsetb tri ;启动loop: jbc tf1zdone ;若计满,则转向donesjmp loop ;否则等待done: cpl pl0 ;取反输出sjmp loop【例3. 4】设晶振频率为6mhz, to工作在方式3下,th0和tl0作为两个独立的8位 定时器。要求用tl0定时20()ms,在p1.0脚产生周期为400ps的方波;用th0定时400ps, 在pl1脚产生周期为8()()ps的方波。本例采用中断方式。在方式3下工作,对于th0来说,需要借用t1的控

15、制信号。(1) 根据要求设置tmod的初值。(tmod)=0000 ooh b=03h(2) 计算定时初始值。定时200ps的tl0在方式3下的初始值:200ps=(28-tl0 初值)x2ps(tl0)=28-100=156=9ch定时400|js的th0在方式3下的初始值:400ps=(28-th 0 初值)x2ps(th0)=256-200=56=38h第3章单片机的定时与中断系统6565(3) 编写初始化控制程序。org 0000hbegin: ajmp mainorg 000bh ;tl0的中断服务子程序ajmp intoorg 001bh ;th0的中断服务子程序ajmp inti

16、org 2000hmain: mov tmod,#03h ;写入方式控制字mov tl0,#9ch ;设置计数初值mov th0,#3 8h ;设置计数初值setb ea ;开中断setb et0 ;允许to中断setb et1 ;允许t:中断setb tro ;启动tlosetb tri ;启动tholoop: sjmp loopinto: cpl pl0mov tl0z#9ch ;重装初值reti ;中断返回inti: cpl pl.1mov tho,#38hreti【例3. 5】用to作为外部工件计数器,外部工件信号由to端引入,t1作为定时器,每 隔is检测一次to中的计数值,当检测到

17、200个工件时,使p1.0输出信号变反,程序不断 循环,控制p1.0的输出。设单片机的晶振频率为12mhzo(1) 根据要求设置tmod的初值。根据题意,可设置t0为计数方式,工作在方式2下;ti为定时方式,定时is,工作 在方式1下。(tmod)=16h(2) 计算定时、计数初始值。t0 计数初值:th0=28-200=56=38h,因此(th0)=38h。t1定时初值:由于t1最大定时不足is,因此可设定时50ms,工作在方式1下,再用 软件计数循环20次。t1定时5()ms的在方式1下的初值:50msx 1000ps=(216t 1 初值)xlpst1 初值=216-50000= 155

18、36=3cb0h所以(th0)=3ch, (tl0)=0b0ho(3) 编写初始化控制程序。org 2000hbegin: mov tmodz#16h ;装入方式字mov th1,#3ch ;设置tl的初值mov tl1,#0b0hmov th0,#38h ;设置to的初值单片机原理与应用教程6666mov hl0,#38hmov r7,#20 ;设置软件循环次数clr easetb r1 ;启动tlsetb tro ;启动toal: jbc tflf a2 ;定时时间至lj时转向a2sjmp al ;若未到,则继续查询a2: mov thlf#3ch ;重装初值mov tl1z #0bohd

19、jnz r7, al ;完成is定时mov r7,#20jnb tfo, al ;若丁0未溢出,则转向alclr tfo ;将溢出标志位清0cpl p1.0sjmp al ;循环在上述各种情况下,大都采用查询方式。在定时或计数过程中,cpu 一直连续不断地查询to或t1的溢出标志位(tfo或tf1),这种做法,极大地浪费了cpu的资源。为了提 高cpu的工作效率,可采用中断方式。3.2中断系统中断技术是计算机中的一项很重要的技术,是cpu与外部设备交换信息的一种方式。 计算机引入中断技术以后,解决了cpu和外部设备之间的速度匹配问题,提高了cpu的 效率。中断系统由硬件和软件组成。具有中断系统

20、,可使计算机的功能更强、效率更高、 使用更方便,从而提高计算机的控制能力。3.2. 1中断概述1. 中断问题的提出早期的计算机中没有中断系统,当它与外部设备进行信息交换时,遇到的一个严重问 题就是快速的cpu与慢速的外设不匹配,使cpu不得不花费大量时间去查询等待。为了 提高cpu的工作效率,引入了中断技术。2. 中断的概念当cpu正在处理某件事情时,外部发生了另一件事情(如定时器/计数器溢岀或产生其 他中断请求),要求cpu处理,于是它暂时终止当前的工作,转去处理正发生的事件,处 理完成后,再回到被中断的地方,继续做原来的工作,这一过程称为中断。在中断系统中,引起中断的原因或产生中断申请的来

21、源称为中断源;由中断源向cpu 发岀的请求中断信号称为中断请求信号;cpu接受中断源的中断请求,暂停当前程序的执 行,转而处理请求事物的过程称为中断响应。中断响应后所执行的处理程序称为中断服务子程序,原来正常执行的程序则称为主程 序,主程序被断开的位置(或地址)称为“断点”。调用中断服务程序的过程类似于调用子 程序,其区别在于调用子程序是事先安排好的,知道何时调用;而何时调用中断服务子程 第3章单片机的定时与中断系统 67 67序却是事先无法确定的,因为中断的发生是由外部因素决定的,有时是突发的。程序中无 法事先安排调用指令,因此,中断服务子程序的调用过程是由硬件自动完成的。3. 中断的优点1

22、)实现分时操作采用中断技术后,快速的cpu和慢速的外设可以各做各的事情。通常,cpu只是启动 外设而不干预外设的工作。当外设准备好后,就向cpu发出中断申请,cpu选择适当时机 暂停自己的工作,转而处理中断申请。处理完成后,cpu和外设又继续各做各的工作。这 样,cpu就可以管理多个外设,大大提高了它的效率。2)进行实时处理实时控制是微机系统,特别是单片机控制系统中的一个重要部分。在实时控制的过程 中,要求计算机对现场的各种数据信息进行及时处理。任何数据在任何时间都有可能向cpu 发出中断申请,要求处理,cpu会根据当时的情况及时做出反应,进行实时控制。3)故障处理计算机系统在运行过程中往往会

23、出现一些异常情况,如掉电、存储出错、运算溢出等, 利用中断技术就可以将掉电前的一切有用信息及时送入采用备用电池供电的存储器中保护 起来,正常供电后可继续执行原来的程序。4. 中断系统应具备的功能中断事物的处理依靠中断系统完成。为了满足各种情况下的中断要求,该系统应具备 以下功能。1) 实现中断及返回当某个中断源发出中断申请时,cpu能根据其轻重程度决定是否给予响应。若响应 了中断申请,则要在当前指令执行后,通过堆栈保护断点和现场,然后转到中断服务子 程序入口,执行该程序。中断处理完成后,再恢复现场和断点,cpu返回断点,继续执 行主程序。2) 实现中断优先级排队当多个中断源同时发出中断申请时,

24、cpu能找到中断优先级最高的中断源,响应其中 断。直到高级中断处理完成后,才处理低级中断。3) 实现中断嵌套当cpu正在处理某一中断时,又有级别更高的中断源发出中断申请,则cpu会暂停 当前中断的处理,转而响应级别更高的中断请求。直到高级中断处理完成后,才继续处理 前面的中断。若新的中断请求与正在处理的中断级别相同或更低,则cpu将不立即响应。 3.2.2 mcs-51的中断系统1. mcs-51的中断系统结构对于计算机中断系统,人们最关心的是有哪几个中断请求源、哪些中断源会发出中断申 请、cpu允许哪些中断源中断、多中断源的优先级别如何设定,以及中断的响应过程等。mcs-51单片机有5个中断

25、源,设置两个中断优先级。中断的控制与管理由4个特殊 单片机原理与应用教程6868功能寄存器完成。(dtcon:定时器/计数器控制寄存器。某些位用于锁存中断源的中断标志。scon:串行口控制寄存器。低两位锁存串行口中断标志。(3) ie:中断允许寄存器。用于控制中断的禁止与允许。(4) ip:中断优先级寄存器。设定中断源的中断优先级。牢固掌握上述4个特殊功能寄存器是解决中断问题的关键。8031单片机的中断系统硬 件结构如图3.9所示。图3. 9 mcs-51的中断系统结构图2. mcs-51的中断源计算机的中断源通常有一般的i/o设备、数据通道中断源、实时时钟、故障源和为调试 程序人为设置的中断

26、源。在mcs-51中断系统结构图中,设置35个中断源。 外部中断0( into )o 外部中断1(int1 ):掉电故障、i/o中断请求信号等异常事件的中断请求信号都可 作为外部中断连接到into或int1上o(3) 定时器t0中断:t0计满溢出后可向cpu申请中断。(4) 定时器t1中断:t1计满溢出后可向cpu申请中断。(5) 串行口中断:包括发送中断和接收中断。串行口完成一个字符的发送或接收后可向cpu发出中断申请。3.2.3中断的控制与管理如前所述,mcs-51的中断的控制与管理由tcon、scon、ie和ip四个特殊功能寄 存器完成。cpu响应中断的前提是有中断源发出中断申请。当中断

27、源发岀中断申请时,将由硬件 置位相应的标志位。这些标志分别由tcon和scon锁存。第3章单片机的定时与中断系统69 691. 定时器/计数器控制寄存器tcon是一个8位特殊功能寄存器,其字节地址为88h,用于锁存to、tl、into和inti 四个中断源的中断标志。具体如下。位地址 8fh 8dh 8bh 8ah 89h 88htcon tf1 tri tfo tro ie1 it1 ieo ito(1) ieo: into的中断请求标志位。ie()=1时,外部中断()发出中断申请;ie()=()时,into 的中断请求已被清除。(2) ie1: inti的中断请求标志位o ie1=1时,外

28、部中断1发出中断申请;el=0时,int1 的中断请求已被清除。tfo:定时器to的中断溢出标志位。当to被允许计数后,从初始值开始加1计数。当计满溢岀时,由硬件将tfo置1,并向cpu发出中断申请,该申请一直保持到cpu响 应中断时,才由硬件将该位清0。tf1:定时器t1的中断溢出标志位。与t0类似。(5) it0: into中断触发方式控制位。当it0=0时,为电平触发方式,低电平触发;当it0二1时,为边沿触发方式,下降沿触发。it1: int1中断触发方式控制位。与it0类似。2. 串行口控制寄存器scon是一个8位特殊功能寄存器,其字节地址为98h,用于锁存串行口中断标志。 串行口中

29、断标志分为发送中断标志和接收中断标志。具体如下。位地址99h 98hscon ti ri(1)ti:串行口发送中断标志位。cpu将一个数据写入发送缓冲器sbuf后,就启动发送器工作。此时,串行口若以方式0发送,则每发送完1b数据,就由硬件将t1置1;若以其他工作方式发送数据,则在 发送停止位时将ti置1。ti=1表示串行口正在向cpu发送中断申请°注意:当cpu响应ti中断,转向执行中断服务子程序时并不将ti清(),必须由用户在中断服务子程序中用clrtt等指令将其清0。ri:串行口接收中断标志位。在串行口允许接收时,每接收一串数据,便由硬件将r1置i。同样,cpu响应ti中 断后,

30、必须由软件将ri清0。3. 中断允许寄存器ie是一个8位的特殊功能寄存器,其字节地址为a8h,用于控制中断的禁止与允许。 具体如下。单片机原理与应用教程7070位地址 afh ach abh aah a9h a8hie ea es et1 exi eto exo(1) ea: cpu中断总允许位。ea=1时,cpu允许中断;ea=o时,cpu禁止所有中断 请求。允许into中断;exo=o时,禁允许to中断;eto=o时,禁止允许int1中断;ex()=()时,禁允许t1中断;et1=o时,禁止(2) exo:外部中断0( into)中断允许位。exo=1时, 止into中断。eto:定时器/

31、计数器to中断允许位。eto=1时, to中断。(4) ex1:外部中断1(int1 )中断允许位。ex1 = 1时, 止int1中断。et1:定时器/计数器t1中断允许位。et1=1时,t1中断。es:串行口中断允许位。es=1时,允许串行口中断;es=o时,禁止串行口中断。 单片机复位后,ie被清()。控制中断的禁止与允许由用户程序设置ie的相应位是1或 0,可通过相应的字节指令或位指令实现。4. 中断优先级寄存器ip是一个8位的特殊功能寄存器,其字节地址为b8h0 mcs-51的中断优先级分为高 优先级和低优先级两种,由1p设定中断源的优先级别。具体如下。位地址 bch bbh bah

32、b9h b8hipps pt1 px1 pto pxo(l) pxo:外部中断0( into沖断优先级控制位。pxo=1时,设定into为高优先级; pxo=o时,设定into为低优先级。pto:定时器/计数器to中断优先级控制位。pto=1时,设定to为高优先级;pto=o 时,设定to为低优先级。(3) px1:外部中断1(int1 )中断优先级控制位。px1=1时,设定int1为高优先级;px1=o时,设定inti为低优先级。pt1:定时器/计数器t1中断优先级控制位。pt1 = 1时,设定t1为高优先级;pt1=o时,设定t1为低优先级。(5) ps:串行口中断优先级控制位。ps=1时

33、,设定串行口为高优先级;ps=()时,设定 串行口为低优先级。系统复位后,所有的中断源均设置为低优先级,用户可重新设置其中断优先级别。同一级别的中断也有高低级之分,具体如下。第3章单片机的定时与中断系统71713.2.4中断处理过程1. cpu响应中断的条件(1) 中断源要发出中断申请,中断标志被锁存在tcon和scon中。(2) cpu应允许中断。总允许和源允许全部打开。(3) 根据中断源的中断优先级排队,选出级别最高的准备响应。(4) 若cpu要响应一个中断,应没有同级或级别更高的中断正在处理,否则不能响应 该中断。(5) 只有当前指令处理完成后,即执行的指令到了最后一个机器周期时,才能响

34、应中断。正在执行的指令不能与中断有关,如访问ie、ip或reti的指令。mcs-51单片机的5个中断源的中断服务程序入口地址是固定的,具体见表3-2。表3-2中断服务程序入口地址中断源中断服务程序入口地址外部中断00003h定时器/计数器to ooobh外部中断1 0013h定时器/计数器t1 001bh串行口 oo23h从表3-2中可以看出,相邻两个中断源之间只有8b, 般很难容纳一个中断服务程序。 因此,通常在中断入口处放一条无条件转移指令,以转移到其他中断服务程序的入口。 例如:org 0003hljmp 2000horg ooobhljmp 3000h2. cpu响应中断的过程若满足上

35、述条件,则cpu就会在下一个机器周期响应中断。(1) cpu根据查到的中断源,通过硬件自动生成调用指令(lcall),并转到相应的中断 矢量单元(一组存放中断服务子程序入口地址的单元),进入中断服务子程序,且通过堆栈 保护断点。单片机原理与应用教程7272(2) cpu从中断服务子程序的入口进入,执行该程序,直到遇见中断返回指令retlreti必须安排在中断服务程序的最后,用于返回断点,且开放中断逻辑。至此,中断响应 全部完成。3. 中断处理过程中应注意的问题1)中断申请的撤销当中断源发出中断申请后,相应的中断标志被锁存在tcon和scon中。cpu就是通 过查询这些中断标志判断是哪些中断源发

36、出中断申请的。当cpu响应了某个中断申请后, 应及时清除相应的中断标志位,以免cpu再次查到这些标志,误认为又有中断申请而再次 响应该中断。清除中断标志主要涉及into、int1和串行口中断申请。对于t0和t1中断 申请,在cpu响应中断后,中断系统会自动撤销。into或int1中断申请的撤销对于边沿触发方式下的外部中断申请,系统会自动撤销。但对于电平触发方式下的中 断申请,用户必须通过硬件电路撤销。如图3.10所示为撤销外部中断请求信号的电路。该 电路利用d触发器,既能锁存外部中断信号,又能在cpu响应后及时撤销。anl p1, #1111 1110b ;p1.0 = 0,使直接置1端sd有

37、效,q“,撤销中断orl p1, #0000 0001b ;p1.0 = lz使sd无效,cp脉冲控制q,接受新的中断请求图3. 10外部中断请求信号的撤销当收到外部中断请求信号时,d触发器的cp脉冲有效,d触发器将中断请求信号锁 存,并送到int1端(1nt1为低电平有效)。当cpu响应中断后,应使q端变高,以便及时 撤销中断请求信号。可通过下面的指令实现:串行口中断申请的撤销对于串行口中断标志ri和ti,在cpu响应中断后,也要通过软件撤销中断申请。可通过下面的指令实现:clr ti ;清0,发送中断标志clr ri ;清0,接收中断标志2)中断响应时间单级外部中断源的中断响应时间是指从i

38、nto或int1将中断标志位置1到cpu响应中 断、执行中断服务子程序的第1条指令所需要的时间。外部中断请求信号的低电平至少应 维持一个机器周期才能被cpu查询到。当cpu确认并响应中断时,会执行一条硬件长调 用的指令,其时间是两个机器周期,这样外部中断的响应时间至少需要3个机器周期。 第3章单片机的定时与中断系统7373只有在精确定时控制场合,才考虑中断响应时间。3.2.5外部中断源的扩展mcs-51单片机只提供两个外部中断源into和int1,若服务于多个外设,这显然不够。 可采用一些方法进行扩展。1. 借用定时器扩展外部中断源定时器/计数器to和t1是两个内部中断源,若不作为定时器和计数

39、器使用,可将其扩 展为外部中断源。方法是:将to或t1设置成计数器工作方式,初值最大(ffffh),来一 个脉冲,力hl即产生溢出中断。例如:将定时器/计数器t1设置为方式2计数,th1和tl1的初值均为offh。初始化程序:mov tmod,#6 0h ;设置tmod的初值,t2.以方式2计数mov tl1,#offh ;设置t1的最大初始值ffffhmov th1,#0ffhsetb ea ;cpu开放中断,打开总允许位setb et1 ;允许t1中断setb tr1 ;启动t1计数当接在t1脚(p3.5)上的外部脉冲信号发生负跳变时,tl1加1溢岀,tf1置1,并向 cpu发岀中断申请。

40、同时,由于是方式2,因此th1会自动将初始值ffh送入tl1中。 这样,p3.5脚上每来一个负跳变,都会向cpu发出中断申请。借用t1的中断溢出标志位 tf1和入口地址000bh后,就相当于增加一个边沿触发的外部中断源。2. 中断和查询结合的方法若系统有多个中断请求源,再用定时器to或t1就不够使用,可采用中断和查询结合 的方法扩展中断源。如图3.11所示为一种硬件连接方案。在外部中断1引脚上连接4个外 设的中断源,通过oc门产生中断请求信号int1。无论哪个外设提出中断请求,都会使int1 变低,产生中断申请。可通过查询p1.0p1.3得知是由哪个外设发出的申请。4个中断源 的优先级通过程序

41、设定。中断服务子程序如下。org 0013h ;int1 的入口地址ljmp zdzzdz: push psw ;保护现场push ajb p1.ozaws1 ;外设1有中断申请时转向jb p1.1zaws2 ;外设2有中断申请时转向jb p1.3,aws3 ;外设3有中断申请时转向jb p1.4,aws4 ;外设4有中断申请时转向intr: pop a ;恢复现场pop pswreti ;中断返回aws1:-;外设1的中断服务子程序单片机原理与应用教程7474sjmp intraws2:-;外设2的中断服务子程序sjmp intraws3:;外设3的中断服务子程序sjmp intraws4:

42、;外设4的中断服务子程序sjmp intr由程序可知:4个外设中外设1的中断优先级最高,外设4的最低。图3. 11中断和查询结合的方法3.2.6中断的应用【例3.6】现在规定外部中断0( into )*电平触发方式,高优先级,试写出有关的初始化 程序。几个特殊功能寄存器有关控制位的赋值一般都包含在主程序中,而中断服务程序是一 种具有特定功能的独立程序段,应根据中断源的具体要求进行编写。初始化程序如下: setb ea ;开中断setb ex0 ;允许into中断setb px0 :将川只)设置为高优先级clr it0 ;设置为电平触发方式【例3. 7】规定外部中断1(int1)为边沿触发方式,

43、低优先级。在中断服务程序中将寄存 器b的内容右循环移一位,b的初值为10h。试编写主程序和中断服务子程序。第3章单片机的定时与中断系统7575程序如下。org 0000h ;主程序ljmp main ;主程序转至mainorg 0013h ;中断服务子程序ljmp int ;转至:entmain: setb ea ;中断总允许setb exi ;中断源允许clr px1 ;设置为低优先级setb it1 ;边沿触发mov bz#10hloop: sjmp loopint: mov a,brr a ;循环右移一位mov b,areti ;中断返回【例3. 8】用中断方式实现to采用方式()产生1

44、ms的定时,在p1.0脚上产生周期为2ms 的方波。设晶振频率为12mhzo程序如下。org 000bh ;中断服务程序入口ajmp introrg 2000h ;主程序start: mov tmod,#ooh ;设置tmod的初值mov tl0,#18h ;设置to的定时初值mov tho,#0e0hsetb ea ;开中断setb eto ;允许to中断setb tro ;启动to计数器loop: sjmp loop ;等待中断intr: mov tl0,#18h ;重设初值mov th0,#0e0hcpl p1.0reti ;中断返回【例3. 9】在8031单片机的into引脚外接脉冲信

45、号,要求每送来一个脉冲,就把50h单 元的内容加1,若50h单元计满,则进位51h单元,试利用中断结构编制一个脉冲计数程序。 采用中断方式编制程序,一般包括以下几方面内容。(1) 在主程序中,必须有一个初始化部分,用于设置堆栈位置、定义触发方式、设置中断源的优先级、设置中断允许寄存器等。(2) 给定中断服务程序的入口地址。(3) 编制主程序和中断服务程序。org 0000hajmp mainorg 0003hajmp subgorg 2000hmain: mov az#00h单片机原理与应用教程7676mov 50h,amov 51h,amov spz #70hsetb itosetb eas

46、etb exoajmp $org 3000hsubg: push accinc 50hmov a,50hjnz backinc 51hback: pop accreti3.3单片机中断与定时器/计数器的应用训练3.3.1外部中断的应用训练1. 实训目的(1)通过实训掌握单片机的中断原理及编程方法。 学习外部中断的基本使用方法。2. 实训内容利用中断系统设计一个四人抢答器。要求:任何一个人在第一时间抢答成功,则相应 的指示灯亮,并发出铃声。3. 设计思想使p1.0p1.3脚分别接选手的按钮,并通过与门与外部中断0引脚(p3.2)相连,p3.3 接扬声器,p1.4p1.7接指示灯。只要s1s4中有

47、一个按钮被按下,就都能产生into中 断,其他按钮再被按下属于同级中断,cpu不再响应。当cpu响应中断时,从p3.3发出 铃声信号,并点亮相应的指示灯。4. 电路原理图电路原理如图3.12所示。5. 主程序及中断服务程序实训程序见表3-3。第3章单片机的定时与中断系统7777图3. 12四人抢答器电路表3-3 into中断实训程序表存储地址机器码源程序注释0000 org ooooh0000 020006 ump start0003 org 0003h0003 022000 ump 2000h0006 758170 start: mov sp,#70h0009 d288 setb ito00

48、0b d2b2 setb p3.2 禁止into中断oood d2af setb eaooof d2a8 setb exo 允许into中断0011 80fe sjmps0013 7fff delay: mov r7,#0ffh 延时子程序0015 7fff de2: mov r7.#0ffh0017 dffe dei: djnz r7,de10019 defa djnz r6,de2单片机原理与应用教程7878续表存储地址机器码源程序注释001b 22 ret001c 7d20 ring: mov r5,#20h 响铃子程序001e7e50 r1n0: mov r6,#50h0020 7ff

49、0 rin1: mov r7.#0f0h0022 dffe rin2: djnz r7.rin20024 b2b3 cpl p3.30026 def8 org 2000h 中断子程序200() e590 zdp: mov a,pl读pi 口查询哪个按钮被按下2002 540f anl aj0fh保留低4位,屏蔽高4位20()4 c4 swap a转换位点亮发光二极管信号2005 440f orl a,#0fh2007 f590 mov pl,a2009 12001c lcall ring200c 120013 lcall delay200f 32 reti6. 实训步骤(1) 理解程序,补齐空

50、缺的注释。(2) 按实训原理图连接电路。(3) 将实验程序送入单片机开发系统,并检查其是否正确。(4) 连续执行程序,并按下抢答器按钮,观察发光二极管的变化情况。7. 思考与讨论(1)设单片机的晶振频率为6mhz,计算延时时间。 如何改变响铃的音调?3.3.2定时器/计数器的应用训练1. 实训目的(1) 掌握单片机内部定时器的硬件结构及其用法。(2) 掌握t0和t1的两种用途:作为定时器实现定时,作为计数器进行计数。 牢记tmod和tcon各位表示的意义,学会可编程控制的方法。2. 实训内容(1) 设单片机的晶振频率为6mhz。用单片机内部定时器to按方式0编程,在p1.0脚 产生200ps定

51、时、周期为400ps的方波,用示波器观察波形,并读出其周期。(2) 修改程序,产生方式0和方式1下的最大定时,并观察接在p1.0脚上的发光二极第3章单片机的定时与中断系统7979管的变化。 仍然产生周期为400ps的方波,要求用t1按方式1编程,试修改程序。(4) 若用to以方式0产生is的定时,试编写控制程序。观察发光二极管的变化情况。3. 实训器材mcs-51单片机开发系统、示波器、发光二极管。4. 预备知识mcs-51单片机内部有两个定时器/计数器,即to和tl(8()32有3个),它们都是16位的加法计数器,可用于定时控制或对外部事件产生的脉冲信号进行计数,也可作为串行口 的波特率发生

52、器。(1) 定时:对内部脉冲以机器周期为单位进行加法计数。(2) 计数:对外部事件的脉冲进行加法计数。实现定时和计数控制的关键是掌握tmod和tcon各位的含义,以及编程的方法、 步骤。5. 实训电路如图3.13所示。s3. 13定时点亮led电路6. 实训步骤(1) 产生200ps定时、周期为400ps的方波。 理解实训程序表3-4,并为每条指令加上注释。单片机原理与应用教程8080表3-4周期为400ps的方波在方式0下的实训程序存储地址机器码源程序使用单元注释3000 org 3000h3000 758900 mov tmod,#ooh3003 7fc8 mov r7,#2003005

53、758a18 mov tl0,#18h3008 758c63 mov th0,#63h300b d28c setb tro300d 108d02 a1:jbc tf0,a23010010d ajmp al3012 758a18 a2:mov tl0,#18h3015 758c63 mov th0,#63h3018 dff3 djnz r7,ai 将机器码送入单片机开发系统。 连续执行程序,并在p1.0脚和单片机的“地”之间用示波器观察产生的波形,读 出方波周期。 修改程序,在方式0、方式1下产生最大定时,并观察发光二极管的变化。经过计算:t0的最大定时初值均为0,但两种工作方式的最大定时时间不

54、同。(2) 用t1按方式1编程,仍然产生周期为400ps的方波,试修改程序。 根据题目要求重设tmod的初值° 重新计算t1在方式1下定时400ps的初值。 将修改后的机器码送入单片机开发系统。 连续执行程序,并在p1.0脚和单片机的“地”之间用示波器观察产生的波形,读 出方波周期。(3) 用to按方式0产生is的定时。实训控制程序见表3-5。表3-5定时1s的实训程序存储地址机器码源程序使用单元注释2000 org 2000h2000 758900 mov tmod,#ooh2003 758cfc mov th(),#0fch2006 758a1c mov tlo,#1ch2009

55、 d28c setb tro200b 108d02 al: jbctf0,a2第3章单片机的定时与中断系统8181续表存储地址机器码源程序使用单元注释200e 80fb sjmp a12010 758cfc a2: mov th0,#()fch2013 758a1c mov tlo,#1ch2016 b290 cplp1.02018 80f1 sjmp al因为to在方式0下是13位计数器,最大定时为8192pso可选择定时5ms,然后循环 200 次,定时is。经过计算,定时初值为(th0)=63h, (tl0)=18h, (tmod)=00h<> 理解实训程序见表3-5,并为每条指令加上注释。 将机器码送入单片机开发系统。 连续执行程序,并在p1.0脚接发光二极管,观察发光二极管的变化情况。7. 思考与讨论如何产生定时50片、周期为350ps的矩形脉冲序列?试编写控制程序,并上机调试。3.3.3外部脉宽的测量训练1. 实训目的(1)熟悉定时器/计数器的结构和编程方法。 掌握门控位gate的作用和使用方法。2. 实训内容利用定时器/计数器t1的

温馨提示

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

评论

0/150

提交评论