您的位置 首页 应用

普通单片机教育 第十七讲 中止体系

有关中断的概念什么是中断,我们从一个生活中的例子引入。你正在家中看书,突然电话铃响了,你放下书本,去接电话,和来电话的人交谈,然后

有关中止的概念

什么是中止,咱们从一个日子中的比方引进。你正在家中看书,忽然电话铃响了,你放下书本,去接电话,和来电话的人攀谈,然后放下电话,回来持续看你的书。这便是日子中的“中止”的现象,便是正常的作业进程被外部的作业打断了。

细心研究一下日子中的中止,关于咱们学习单片机的中止也很有优点。榜首、什么可经引起中止,日子中许多作业能够引起中止:有人按了门铃了,电话铃响了,你的闹钟闹响了,你烧的水开了….等等诸如此类的作业,咱们把能够引起中止的称之为中止源,单片机中也有一些能够引起中止的作业,8031中一共有5个:两个外部中止,两个计数/定时器中止,一个串行口中止。

第二、中止的嵌套与优先级处理:想象一下,咱们正在看书,电话铃响了,一起又有人按了门铃,你该先做那样呢?假如你正是在等一个很重要的电话,你一般不会去理睬门铃的,而反之,你正在等一个重要的客人,则或许就不会去理睬电话了。假如不是这两者(即不等电话,也不是等人上门),你或许会按你一般的习气去处理。总归这儿存在一个优先级的问题,单片机中也是如此,也有优先级的问题。优先级的问题不仅仅发生在两个中止一起发生的状况,也发生在一个中止已发生,又有一个中止发生的状况,比方你正接电话,有人按门铃的状况,或你正开门与人攀谈,又有电话响了状况。考虑一下咱们会怎样办吧。

第三、中止的呼应进程:当有作业发生,进入中止之前咱们必须先记住现在看书的第几页了,或拿一个书签放在当时页的方位,然后去处理不同的作业(由于处理完了,咱们还要回来持续看书):电话铃响咱们要到放电话的当地去,门铃响咱们要到门那儿去,也说是不同的中止,咱们要在不同的地址处理,而这个地址一般仍是固定的。计算机中也是选用的这种办法,五个中止源,每个中止发生后都到一个固定的当地去找处理这个中止的程序,当然在去之前首先要保存下面将履行的指令的地址,以便处理完中止后回到原本的当地持续往下履行程序。具体地说,中止呼应能够分为以下几个进程:1、维护断点,即保存下一即将履行的指令的地址,便是把这个地址送入仓库。2、寻觅中止进口,依据5个不同的中止源所发生的中止,查找5个不同的进口地址。以上作业是由计算机主动完结的,与编程者无关。在这5个进口地址处寄存有中止处理程序(这是程序编写时放在那儿的,假如没把中止程序放在那儿,就错了,中止程序就不能被履行到)。3、履行中止处理程序。4、中止回来:履行完中止指令后,就从中止处回来到主程序,持续履行。

终究单片机是怎样样找到中止程序所在方位,又怎样回来的呢?咱们稍后再谈。

1.MCS-51中止体系的结构:

如图(抱愧,本图请找本51书看一下)所示,由与中止有关的特别功用寄存器、中止进口、次第查询逻辑电路等组成,包含5个中止请求源,4个用于中止操控的寄存器IE、IP、ECON和SCON来操控中止类弄、中止的开、关和各种中止源的优先级确认。

中止请求源:

(1)外部中止请求源:即外中止0和1,经由外部引脚引进的,在单片机上有两个引脚,名称为INT0、INT1,也便是P3.2、P3.3这两个引脚。在内部的TCON中有四位是与外中止有关的。

IT0:INT0触发方法操控位,可由软件进和置位和复位,IT0=0,INT0为低电平触发方法,IT0=1,INT0为负跳变触发方法。这两种方法的差异将在今后再谈。

IE0:INT0中止请求标志位。当有外部的中止请求时,这位就会置1(这由硬件来完结),在CPU呼应中止后,由硬件将IE0清0。

IT1、IE1的用处和IT0、IE0相同。

(2)内部中止请求源

TF0:定时器T0的溢出中止符号,当T0计数发生溢出时,由硬件置位TF0。当CPU呼应中止后,再由硬件将TF0清0。

TF1:与TF0相似。

TI、RI:串行口发送、接纳中止,在串口中再解说。

2、中止答应寄存器IE

在MCS-51中止体系中,中止的答应或制止是由片内可进行位寻址的8位中止答应寄存器IE来操控的。见下表

EA X X ES ET1 EX1 ET0 EX0

其间EA是总开关,假如它等于0,则一切中止都不答应。

ES-串行口中止答应

ET1-定时器1中止答应

EX1-外中止1中止答应。

ET0-定时器0中止答应

EX0-外中止0中止答应。

假如咱们要设置答应外中止1,定时器1中止答应,其它不答应,则IE能够是

EA X X ES ET1 EX1 ET0 EX0

1 0 0 0 1 1 0 0

即8CH,当然,咱们也能够用位操作指令

SETB EA

SETB ET1

SETB EX1

来完结它。

3、五个中止源的天然优先级与中止服务进口地址

外中止0:0003H

定时器0:000BH

外中止1:0013H

定时器1:001BH

串口 :0023H

它们的天然优先级由高到低摆放。

写到这儿,咱们应当理解,为什么前面有一些程序一始咱们这样写:

ORG 0000H

LJMP START

ORG 0030H

START:

这样写的意图,便是为了让出中止源所占用的向量地址。当然,在程序中没用中止时,直接从0000H开端写程序,在原理上并没有错,但在实际作业中最好不这样做。

优先级:单片机选用了天然优先级和人工设置高、低优先级的战略,即能够由程序员设定那些中止是高优先级、哪些中止是低优先级,由于只要两级,必有一些中止处于同一等级,处于同一等级的,就由天然优先级确认。

开机时,每个中止都处于低优先级,咱们能够用指令对优先级进行设置。看表2

中止优先级中由中止优先级寄存器IP来高置的,IP中某位设为1,相应的中止便是高优先级,不然便是低优先级。

X X X PS PT1 PX1 PT0 PX0

例:设有如下要求,将T0、外中止1设为高优先级,其它为低优先级,求IP的值。

IP的首3位没用,可任意取值,设为000,后边依据要求写就能够了

X X X PS PT1 PX1 PT0 PX0

0 0 0 0 0 1 1 0

因而,终究,IP的值便是06H。

例:在上例中,假如5个中止请求一起发生,求中止呼应的次第。

呼应次第为:定时器0->外中止1->外中止0->实时器1->串行中止。

MCS-51的中止呼应进程:

1、中止呼应的条件:讲到这儿,咱们仍然关于计算机呼应中止感到奇特,咱们人能够呼应外界的作业,是由于咱们有多种“传感器“――眼、耳能够承受不同的信息,计算机是怎么做到这点的呢?其实说穿了,一点都不希奇,MCS51作业时,在每个机器周期中都会去查询一下各个中止符号,看他们是否是“1“,假如是1,就阐明有中止请求了,所以所谓中止,其实也是查询,不过是每个周期都查一下罢了。这要换成人来说,就相当于你在看书的时分,每一秒钟都会抬起头来看一看,查询一下,是不是有人按门铃,是否有电话。。。。很蠢,不是吗?可计算机原本便是这样,它底子没人聪明。

了解了上述中止的进程,就不难解中止呼应的条件了。在下列三种状况之一时,CPU将封闭对中止的呼应:

CPU正在处理一个同级或更高等级的中止请求。

现行的机器周期不是当时正履行指令的最终一个周期。咱们知道,单片机有单周期、双周期、三周期指令,当时履行指令是单字节没有关系,假如是双字节或四字节的,就要等整条指令都履行完了,才干呼应中止(由于中止查询是在每个机器周期都或许查到的)。

当时正履行的指令是回来批令(RETI)或拜访IP、IE寄存器的指令,则CPU至少再履行一条指令才应中止。这些都是与中止有关的,假如正拜访IP、IE则或许会开、关中止或改动中止的优先级,而中止回来指令则阐明本次中止还没有处理完,所以都要等本指令处理完毕,再履行一条指令才干够呼应中止。

2、中止呼应进程

CPU呼应中止时,首先把当时指令的下一条指令(便是中止回来后即将履行的指令)的地址送入仓库,然后依据中止符号,将相应的中止进口地址送入PC,PC是程序指针,CPU取指令就依据PC中的值,PC中是什么值,就会到什么当地去取指令,所以程序就会转到中止进口处持续履行。这些作业都是由硬件来完结的,不用咱们去考虑。这儿还有个问题,咱们是否留意到,每个中止向量地址只间隔了8个单元,如0003-000B,在如此少的空间中怎么完结中止程序呢?很简单,你在中止处组织一个LJMP指令,不就能够把中止程序跳转到任何当地了吗?

一个完好的主程序看起来应该是这样的:

ORG 0000H

LJMP START

ORG 0003H

LJMP INT0 ;转外中止0

ORG 000BH

RETI ;没有用定时器0中止,在此放一条RETI,假如 “不小心“发生了中止,也不会有太大的结果。

中止程序完结后,一定要履行一条RETI指令,履行这条指令后,CPU将会把仓库中保存着的地址取出,送回PC,那么程序就会从主程序的中止处持续往下履行了。留意:CPU所做的维护作业是很有限的,只维护了一个地址,而其它的一切东西都不维护,所以假如你在主程序顶用到了如A、PSW等,在中止程序中又要用它们,还要确保回到主程序后这儿面的数据仍是没履行中止曾经的数据,就得自己维护起来。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/261784.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部