234彩票代理

  • <tt class='tlJykMlA'></tt>
  • <thead class='94K7Lauipx'><option class='9cNvbSu7LJ'></option></thead>

    <em class='jepytdnyfeW3'><b class='oR1Ys12nk'><td class='6rzzLTN'></td></b></em>

  • <dl class='Td0EmkF'><b class='qoWhaibfJ9'></b></dl>

  • <span class='lS1G'></span>

    (玩电子) 电子技术学习与研究
    当前位置:单片机教程网 >> 基础教程 >> 浏览文章

    18课:单片机的一中断系统

    作者:佚名   来源:本站原创   点击数:x  更新时间:2007年08月14日   【字体:

         有关单片机中断系统的一概念:什么是中断,我们从一个生活中的一例程引入 。你正在家中看书,突然电话铃响了,你放下书本,去接电话,№和来电话的一人交谈,然后放下电话,回来继续看你的一书 。这就是生活中的一“中断”的一现象,就是正常的一工作过程被外部的一事件打断了 。仔细研究一下生活中的一中断,对于我们学习单片机的一中断也很有好处 。

    第一、什么可经引起中断,生活中很多事件能引起中断:有人按了门铃了,电话铃响了,你的一闹钟闹响了,你烧的一水开了….等等诸如此类的一事件,我们把能引起中断的一称之为中断源,单片机中也有一些能引起中断的一事件,8031中一共有5个:两个外部中断,两个计数/定时器中断,一个串行口中断 。

    第二、中断的一嵌套与优先级处理:设想一下,我们正在看书,电话铃响了,同时又●有人按了门铃,你该先做那样呢?如果你正是在等一个很重要的一电话,你一般不 会去理会门铃的一,而反之,你正在等一个重要的一客人,则可能就不 会去理会电话了 。如果不 是这两者(即不 等电话,也不 是等人上    门),你可能会按你常常的一习惯去处理 。总之这里存在一个优先级的一问题,单片机中也是如此,也有优先级的一问题 。优先级的一问题不 仅仅发生在两个中断同时产生的一情况,也发生在一个中断已产生,又●有一个中断产生的一情况,比如你正接电话,有人按门铃的一情况,或你正开门与人交谈,又●有电话响了情况 。考虑一下我们会怎么办吧 。

    第三、中断的一响应过程:当有事件产生,进入中断之前我们必须先记住现在看书的一第几页了,或拿一个书签放在当前页的一位置,然后去处理不 一样的一事情(因 为处理完了,我们还要回来继续看书):电话铃响我们要到放电话的一地方去,门铃响我们要到门那边去,也说是不 一样的一中断,我们要在不 一样的一地点处理,而这个地点常常还是固定的一 。计算︻机中也是采用的一这种办法,五个中断源,每个中断产生后都到一个固定的一地方去找处理这个中断的一程序,当然在去之前首先要保存下面将执行的一指令的一地址,以便处理完中断后回到原来的一地方继续往下执行程序 。具体地说,中断响应能分为以下几个步骤:1、保护断点,即保存下一将要执行的一指令的一地址,就是把这个地址送入堆栈 。2、寻找中断入口,根据5个不 一样的一中断源所产生的一中断,查找5个不 一样的一入口地址 。以上    工作是由计算︻机自动完成的一,与编程者无关 。在这5个入口地址处存放有中断处理程序(这是程序编写时放在那儿的一,如果没把中断程序放在那儿,就错了,中断程序就不 能被执行到) 。3、执行中断处理程序 。4、中断返回:执行完中断指令后,就从中断处返回到主程序,继续执行 。究竟单片机是怎么样找到中断程序所在位置,又●怎么返回的一呢?我们稍后再谈 。

    MCS-51单片机中断系统的一结构:
    5个中断源的一符号、名称及产生的一条件如下 。
    INT0:外部中断0,由P3.2端口线引入,低电平或下跳沿引起 。
    INT1:外部中断1,由P3.3端口线引入,低电平或下跳沿引起 。
    T0:定时器/计数器0中断,由T0计满回零引起 。
    T1:定时器/计数器l中断,由T1计满回零引起 。
    TI/RI:串行I/O中断,串行端口完成一帧字符发送/接收后引起 。
    整个中断系统的一结构框图见下图一所示 。


    <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来控制的一 。见下表EAX

    其中EA是总开关,如果它等于0,则所有中断都不 允许 。ES-串行口中断允许ET1-定时器1中断允许EX1-外中断1中断允许 。ET0-定时器0中断允许EX0-外中断0中断允许 。如果我们要设置允许外中断1,定时器1中断允许,其它不 允许,则IE能是EAX

    即8CH,当然,我们也能用位操作指令SETB EA

    SETB ET1SETB EX1

    来实现它 。3、五个中断源的一自然优先级与中断服务入口地址外中断0:0003H定时器0:000BH外中断1:0013H定时器1:001BH串行口:0023H它们的一自然优先级由高到低排列 。写到这里,大家应当明白,为什么前面有一些程序一始我们这样写:

    ORG 0000HLJMP START

    ORG 0030H

    START: 。

    这样写的一目的一,就是为了让出中断源所占用的一向量地址 。当然,在程序中没用中断时,直接从0000H开始写程序,在原理上    并没有错,但在实际工作中最好不 这样做 。优先级:单片机采用了自然优先级№和人工设置高、低优先级的一策略,即能由程序员设定那些中断是高优先级、哪些中断是低优先级,由于只有两级,必有一些中断处于同一级别,处于同一级别的一,就由自然优先级确定 。

    开机时,每个中断都处于低优先级,我们能用指令对优先级进行设置 。看表2中断优先级中由中断优先级寄存器IP来高置的一,IP中某位设为1,对应的一中断就是高优先级,不 然就是低优先级 。

    XX

    X

    PS

    PT1

    PX1

    PT0

    PX0

    例:设有如下要求,将T0、外中断1设为高优先级,其它为低优先级,求IP的一值 。IP的一首3位没用,可任意取▓值,设为000,后面根据要求写就能了XX

    因 此,最终,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 0000HLJMP START

    ORG 0003H

    LJMP INT0 ;转外中断0ORG 000BH

    RETI ;没有用定时器0中断,在此放一条RETI,万一 “不 小心“产生了中断,也不 会有太大的一后果 。 。

    中断程序完成后,一定要执行一条RETI指令,执行这条指令后,CPU将会把堆栈中保存着的一地址取▓出,送回PC,那么程序就会从主程序的一中断处继续往下执行了 。注意:CPU所做的一保护工作是很有限的一,只保护了一个地址,而其它的一所有东西都不 保护,所以如果你在主程序中用到了如A、PSW等,在中断程序中又●要用它们,还要保证回到主程序后这里面的一数据还是没执行中断以前的一数据,就得自己保护起来 。

    中断系统的一控制寄存器:
    中断系统有两个控制寄存器IE№和IP,它们分别用来设定各个中断源的一打开/关闭№和中断优先级 。此外,在TCON中另有4位用于选择引起外部中断的一条件并作为标志位 。

    1.中断允许寄存器--IE
    IE在特殊功能寄存器中,字节地址为A8H,位地址(由低位到高位)分别是A8H-AFH 。
    IE用来打开或关断各中断源的一中断请求,基本格式如下图二所示:
     

    EA:全局中断允许位 。EA=0,关闭全部中断;EA=1,打开全局中断控制,在此条件下,由各个中断控制位确定相应中断的一打开或关闭 。
    ×:无效位 。
    ES:串行I/O中断允许位 。ES=1,打开串行I/O中断;ES=0,关闭串行I/O中断 。
    ETl;定时器/计数器1中断允许位 。ETl=1,打开T1中断;ETl=O,关闭T1中断 。
    EXl:外部中断l中断允许位 。EXl=1,打开INT1;EXl=0,关闭INT1 。
    ET0:定时器/计数器0中断允许位 。ET0=1,打开T0中断;ET0=0,关闭TO中断 。
    EXO:外部中断0中断允许位 。Ex0=1,打开INT0;EX0=0,关闭INT0.


    中断优先寄存器--IP:
    IP在特殊功能寄存器中,字节地址为B8H,位地址(由低位到高位)分别是B8H一BFH,IP用来设定各个中断源属于两级中断中的一哪一级,IP的一基本格式如下图三所示:

    ×:无效位 。
    PS:串行I/O中断优先级控制位 。PS=1,高优先级;PS=0,低优先级 。
    PTl:定时器/计数器1中断优先级控制位 。PTl=1,高优先级;PTl=0,低优先级 。
    Pxl:外部中断1中断优先级控制位 。Pxl=1,高优先级;PXl=O,低优先级 。
    PT0:定时器/计数器o中断优先级控制位 。PT0=1,高优先级;PTO=0,低优先级 。
    Px0:外部中断0中断优先级控制位 。Px0=1,高优先级;Px0=0,伤优先级 。
    在MCS-51单片机系列中,高级中断能够打断低级中断以形成中断嵌套;同级中断之间,或低级对高级中断则不 能形成中断嵌套 。若几个同级中断同时向CPU请求中断响应,则CPU按如下顺序确定响应的一先后顺序:

    INT0一T0---INT1一T1一RI/T1.

    中断的一响应过程

    若某个中断源通过编程设置,处于被打开的一状态,并满足中断响应的一条件,而且①当前正在执行的一那条指令已被执行完
    1、当前末响应同级或高级中断
    2、不 是在操作IE,IP中断控制寄存器或执行REH指令则单片机响应此中断 。
    在正常的一情况下,从中断请求信号有效开始,到中断得到响应,通常需要3个机器周期到8个机器周期 。中断得到响应后,自动清除中断请求标志(对串行I/O端口的一中断标志,要用软件清除),将断点即程序计数器之值(PC)压入堆栈(以备恢复用);然后把相应的一中断入口地址装入PC,使程序转入到相应的一中断服务程序中去执行 。
    各个中断源在程序存储器中的一中断入口地址如下:
    中断源 入口地址
    INT0(外部中断0) 0003H
    TF0(TO中断) 000BH
    INT1(外部中断1) 0013H
    TFl(T1中断) 001BH
    RI/TI(串行口中断) 0023H
    由于各个中断入口地址相隔甚近,不 便于存放各个较长的一中断服务程序,故通常在中断入口地址开始的一二三个单元中,安排一条转移类指令,以转入到安排在那儿的一中断服务程序 。以T1中断为例,其过程下如图四所示 。
    由于5个中断源各有其中断请求标志0,TF0,IEl,TFl以及RI/TI,在中断源满足中断请求的一条件下,各标志自动置1,以向CPU请求中断 。如果某一中断源提出中断请求后,CPU不 能立即响应,只要该中断请求标志不 被软件人为清除,中断请求的一状态就将一直保持,直到CPU响应了中断为止,对串行口中断而言,这一过程与其它4个中断的一不 同之处在于;即使CPU响应了中断,其中断标志RI/TI也不 会自动清零,必须在中断服务程序中设置清除RI/TI的一指令后,才会再一次地提出中断请求 。
    CPU的一现场保护№和恢复必须由被响应的一相应中断服务程序去完成,当执行RETI中断返回指令后,断点值自动从栈顶2字节弹出,并装入PC寄存器,使CPU继续执行被打断了的一程序 。
    下面给出一个应用定时器中断的一实例 。
    现要求编制一段程序,使P1.0端口线上    输出周期为2ms的一方波脉冲 。设单片机晶振频率
    Fosc=6MHZ.
    1、方法:利用定时器T0作1ms定时,达到定时值后引起中断,在中断服务程序中,使P1.0的一状态取▓一次反,并再次定时1ms 。
    2、定时初值:机器周期MC=12/fosc=2us 。所以定时lms所需的一机器周期个数为500D,亦即0lF4H 。设T0为工作方式1(16位方式),则定时初值是(01F4H)求补=FEOCH

    START: MOV TMOD,#01H ;T0为定时器状态,工作方式1
      MOV TL0,#0CH ;T0的一低位定时初值
      MOV TH0,#0FEH ;T0的一高位定时初值
      MOV TCON,#10H ;打开T0
      SETB ET0 ;1ET0,即允许T0中断
      SETB EA ;1EA,即充许全局中断
      AJMP $ ;动态暂存
    000BH: AJMP IST0 ;转入T0中断服务程序入口地址IST0
    IST0: MOV TL0,#0CH ;重置定时器初值
      MOV TH0,#0FEH ;重置定时器初值
      CPL P1.0 ;P1.0取▓反
      RET1 ;中断返回

    串行端口的一控制寄存器:

    串行端口共有2个控制寄存器SCON№和PCON,用以设置串行端口的一工作方式、接收/发送的一运行状态、接收/发送数据的一特征、波特率的一大小,以及作为运行的一中断标志等 。
    ①串行口控制寄存器SCON
    SCON的一字节地址是98H,位地址(由低位到高位)分别是98H一9FH 。SCON的一格式如图五所示 。

    SMo,SMl:
    串行口工作方式控制位 。
    00--方式0;01--方式1;
    10--方式2;11--方式3 。
    SM2:
    仅用于方式2№和方式3的一多机通讯控制位
    发送机SM2=1(要求程控设置) 。
    当为方式2或方式3时:
    接收机 SM2=1时,若RB8=1,可引起串行接收中断;若RB8=0,不 
    引起串行接收中断 。SM2=0时,若RB8=1,可引起串行接收中断;若
    RB8=0,亦可引起串行接收中断 。
    REN:
    串行接收允许位 。
    0--禁止接收;1--允许接收 。
    TB8:
    在方式2,3中,TB8是发送机要发送的一第9位数据 。
    RB8:
    在方式2,3中,RB8是接收机接收到的一第9位数据,该数据正好来自发
    送机的一TB8 。
    TI:
    发送中断标志位 。发送前必须用软件清零,发送过程中TI保持零电平,
    发送完一帧数据后,由硬件自动置1 。如要再发送,必须用软件再清零 。
    RI:
    接收中断标志位 。接收前,必须用软件清零,接收过程中RI保持零电
    平,接收完一帧数据后,由片内硬件自动置1 。如要再接收,必须用软件
    再清零 。

    电源控制寄存器PCON

    PCON的一字节地址为87H,无位地址,PCON的一格式如图六所示 。需指出的一是,对80C31单片机而言,PCON还有几位有效控制位 。

    SMOD:波特率加倍位 。在计算︻串行方式1,2,3的一波特率时;0---不 加倍;1---加倍 。

    串行中断的一应用特点:

    8031单片机的一串行I/O端口是一个中断源,有两个中断标志RI№和TI,RI用于接收,TI用于发送 。
    串行端口无论在何种工作方式下,发送/接收前都必须对TI/RI清零 。当一帧数据发送/接收完后,TI/RI自动置1,如要再发送/接收,必须先用软件将其清除 。
    在串行中断被打开的一条件下,对方式0№和方式1来说,一帧数据发送/接收完后,除置位TI/RI外,还会引起串行中断请求,并执行串行中侧目务程序 。但对方式2№和方式3的一接收机而言,还要视SM2№和RB8的一状态,才可确定RI是否被置位以及串行中断的一开放:
    SM2 RB8 接收机中断标志与中断状态
    0 1 激活RI,引起中断
    1 0 不 激活RI,不 引起中断
    1 1 激活RI,引起中断
    单片机正是利用方式2,3的一这一特点,实现多机间的一通信 。串行端口的一常用应用方法见相关章节 。

    波特率的一确定:

    对方式0来说,波特率已固定成fosc/12,随着外部晶振的一频率不 同,波特率亦不 相同 。常用的一fosc有12MHz№和6MHz,所以波特率相应为1000×103№和500×103位/s 。在此方式下,数据将自动地按固定的一波特率发送/接收,完全不 用设置 。
    对方式2而言,波特率的一计算︻式为2SMOD·fosc/64 。当SMOD=0时,波特率为fm/64;当SMOD=1时,波特率为fosc/32 。在此方式下,程控设置SMOD位的一状态后,波特率就确定了,不 需要再作其它设置 。
    对方式1№和方式3来说,波特率的一计算︻式为2SMOD/32×T1溢出率,根据SMOD状态位的一不 同,波特率有Tl/32溢出率№和T1/16溢出率两种 。由于T1溢出率的一设置是方便的一,因 而波特率的一选择将十分灵活 。
    前已叙及,定时器Tl有4种工作方式,为了得到其溢出率,而又●不 必进入中断服务程序,往往使T1设置在工作方式2的一运行状态,也就是8位自动加入时间常数的一方式 。由于在这种方式下,T1的一溢出率(次/秒)计算︻式可表达成:

    下面一段主程序№和中断服务程序,是利用串行方式l从数据00H开始连续不 断增大地串行发送一片数据的一程序例 。设单片机晶振的一频率为6MHZ,波特率为1200位/秒 。

    ORG 2000H ;1200位/秒的一定时器初值
    MOV TL1,#0F3H  
    MOV TH1,#0F3H ;使SMOD=0
    MOV PCON,#00H ;T1方式2
    MOV TMOD,#20H  
    SETB EA  
    CLR ET1 ;关闭T1中断
    SETB ES ;开串行中断
    SETB TR1 ;开T1定时
    MOV SCON,#40H ;串行方式1
    CLR A  
    MOV SBUF,A ;串行发送
    JNB T1,$ ;等待发送完
    CLR T1, ;清标志
    SJMP $  
    ORG 0023H ;串行中断入口地址
    MOV SBUF,A ;连续发送
    JNB T1,$  
    INC A  
    CLR T1  
    RET1 ;中断返回

    发表评论】【告诉好友】【收藏此文】【关闭窗口

    文章评论