1 / 49

第五章 中断系统

第五章 中断系统. 中断的基本概念 MCS-51 的中断系统 中断源和中断标志 中断的允许和优先权 中断的处理过程 外部中断源的扩展 中断的应用. 5. 1 微机的输入 / 输出方式. 无条件传送 (显示器) 查询传送 (打印机、 A/D 转换器) 直接数据存取( DMA )方式 Direct Memory Access (需 DMA 控制器) 中断传送. 5. 2 中断的基本概念. 日常中断的例子.

renee-roth
Download Presentation

第五章 中断系统

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第五章 中断系统 中断的基本概念 MCS-51的中断系统 中断源和中断标志 中断的允许和优先权 中断的处理过程 外部中断源的扩展 中断的应用

  2. 5. 1 微机的输入/输出方式 • 无条件传送 (显示器) • 查询传送 (打印机、A/D转换器) • 直接数据存取(DMA)方式 Direct Memory Access (需DMA控制器) • 中断传送

  3. 5. 2 中断的基本概念 日常中断的例子 你正在专心看书,突然电话铃响,于是你记下正在看的书的页数,去接电话,接完电话后再回来接着看书。 返回

  4. 计算机中的中断概念 • CPU挂起正在执行的程序而转去处理特殊的事件的操作。 • 将能引起中断的事件称为中断源。 • CPU现行运行的程序称为主程序。 • 处理随机事件的程序称为中断服务子程序。 返回

  5. 中断技术的优点 • 分时操作 ——CPU可以同多个外设“同时”工作 • 实时处理 ——CPU及时处理随机事件 • 故障处理 ——电源掉电、存储出错、运算溢出

  6. 5.3 89C51中断系统结构 • 中断源 • 中断标志 • 中断允许 • 中断优先级 • MCS-51中断系统结构 • 中断寄存器

  7. 外部输入中断源INT0(P3.2) INT0 或 或 T0 • 外部输入中断源INT1(P3.3) INT1 T1 • 定时器T0的溢出 • 定时器T1的溢出 串行口 • 串行口发送或接收中断源 MCS-51的中断系统——中断源 89C51单片机有5个中断请求源: 单片机

  8. TI RI MCS-51的中断系统——中断标志 CPU 中断源 中断标志位 IE0 INT0 TF0 T0 主程序 IE1 INT1 TF1 T1 串口 • 每一个中断源都有相应的中断标志位; • 某一个中断源申请中断,相应中断标志位置1。

  9. TI RI MCS-51的中断系统——中断允许 CPU 中断源 中断标志位 中断允许 IE0 INT0 EX0 TF0 ET0 T0 主程序 IE1 INT1 EX1 TF1 T1 ET1 串口 ES EA • EA——总中断允许位,EA=1开放所有中断,EA=0,禁止所有中断; • 某一个中断源还有相应的中断允许位,1允许相应中断源的中断,0禁止相应中断源的中断。

  10. TI 低 SI MCS-51的中断系统——中断优先级 CPU 自然优先级 中断源 中断标志位 中断允许 优先控制 IE0 INT0 PX0 EX0 TF0 PT0 ET0 T0 主程序 IE1 PX1 INT1 EX1 TF1 T1 PT1 ET1 串口 PS ES EA • 单片机中有两个中断优先级,即高优先级中断和低优先级中断,前者优先权高于后者(在程序中设置,相应位=1,为高优先级); • 同一优先级别的中断源按照自然优先级顺序确定优先级别(硬件形成,无法改变)。

  11. IT0=0 INT0 INT1 IT0=1 IT1=0 IT1=1 MCS-51的中断系统结构图 TCON IE IP 自然优先级 高级中断请求 PX0 IE0 EX0 PT0 TF0 T0 ET0 矢量地址 PX1 IE1 EX1 PT1 TF1 T1 自然优先级 ET1 低级中断请求 TI TXD PS RI RXD ES EA SCON 中断标志位 中断优先级 中断源允许 总允许 矢量地址

  12. 四个中断控制寄存器(都是SFR) 作用: 控制中断类型、中断的开关、中断的优先级 • TCON(6位) • SCON(2位) • IE • IP 均可位寻址或字节寻址

  13. TF1 TF0 IE1 IT1 IE0 IT0 7 6 5 4 3 2 1 0 TCON寄存器——T0和T1控制寄存器 TCON T1溢出中断标志(TCON.7): T1启动计数后,计满溢出由硬件置位TF1=1,向CPU请求中断,此标志一直保持到CPU响应中断后,才由硬件自动清0。也可用软件查询该标志,并由软件清0。

  14. TF1 TF0 IE1 IT1 IE0 IT0 7 6 5 4 3 2 1 0 TCON寄存器——T0和T1控制寄存器 TCON 88H • 外部中断INT1触发方式控制位(TCON.2): • IT1=0,电平触发方式 • IT1=1, 下降沿触发方式 外部中断INT1中断标志位(TCON.3) : IE1=1,外部中断1向CPU申请中断 • 注意:该寄存器可以位寻址。

  15. TI RI 7 6 5 4 3 2 1 0 SCON寄存器——串行口控制寄存器 SCON 98H • TI (SCON.1)——串行发送中断标志。 • RI (SCON.0)——串行接收中断标志。 • 注意:该寄存器可以位寻址。 返回

  16. EA ES ET1 EX1 ET0 EX0 7 6 5 4 3 2 1 0 IE寄存器——中断允许寄存器 IE A8H 例:允许定时器T0中断: SETB EA SETB ET0 或 MOV IE,#82H • 注意:该寄存器可以位寻址。 

  17. PS PT1 PX1 PT0 PX0 7 6 5 4 3 2 1 0 IP寄存器——中断优先级寄存器 IP B8H • 51单片机有两个中断优先级——高级和低级 • 专用寄存器IP为中断优先级寄存器,用户可用软件设定 • 相应位为1,对应的中断源被设置为高优先级,相应位为0,对应的中断源被设置为低优先级 • 系统复位时,均为低优先级 • 该寄存器可以位寻址

  18. 响 断 中 中 断 返 回 5. 4 中断处理过程 在89C51内部,中断表现为CPU的微查询操作,89C51的CPU在每个机器周期的S5P2期间顺序采样每个中断源,在下一个机器周期的S6期间按优先级查询中断标记,若查询到某个标记位为1,则在下一个机器周期的S1期间响应相对的中断,并进行中断处理。(CPU的自主操作) • 中断处理过程分为三个阶段: • 中断响应 • 中断处理(又称中断服务) • 中断返回

  19. 中断响应条件 • 中断响应:在满足CPU的中断响应条件之后,CPU对中断源中断请求予以处理。 • CPU响应中断的条件: • 有中断源发出中断请求; • 中断总允许EA=1,即CPU开中断; • 申请中断的中断源对应的中断允许位为1,即中断没有被屏蔽; • 无同级或更高级中断正在被服务; • 当前的指令周期已经结束; • 若现行指令为RETI或者访问IE或IP指令,则该指令以及紧接着的另一条指令已执行完。

  20. 89C51单片机的中断优先级有三条原则: • CPU同时接收到几个中断时,首先响应优先级别最高的中断请求。 • 正在进行的中断过程不能被新的同级或低优先级的中断请求所中断。 • 正在进行的低优先级中断服务,能被高优先级中断请求所中断。 为了实现上述后两条原则,中断系统内部设有两个用户不能寻址的优先级状态触发器。其中一个置1,表示正在响应高优先级的中断,它将阻断后来所有的中断请求;另一个置1,表示正在响应低优先级中断,它将阻断后来所有的低优先级中断请求。

  21. 0003 响 断 中 外部中断0入口地址 中断响应(以外部中断0为例) 中断服务子程序的入口地址 ZD0 AJMP ORG 0003H AJMP ZD0 • 中断响应过程: • 保护断点地址; ZD0 • 把程序转向中断服务程序的入口地址(通常称矢量地址)。 断点地址 • 特别注意:这些工作是硬件自动完成的! 

  22. 响 断 中 中断响应 中断服务子程序的入口地址 • 中断服务子程序入口地址又称为中断矢量或中断向量。 • 单片机中5个中断源的矢量地址是固定的,不能改动。 断点地址 

  23. 使用时,通常在这些入口地址处存放一条跳转指令,使程序跳转到用户安排的中断服务程序起始地址上去!使用时,通常在这些入口地址处存放一条跳转指令,使程序跳转到用户安排的中断服务程序起始地址上去! 程序存储器ROM 002AH 0023H:串行口中断入口  001BH:定时器1溢出中断入口  0013H:外部中断1入口  000BH:定时器0溢出中断入口  0003H:外部中断0入口 0000H:复位后,程序的入口地址(PC=0000H)

  24. 包含T0中断服务子程序的程序结构: ORG 0000H AJMP MAIN ORG 000BH AJMP INTT0 ORG 0100H MAIN: . . . INTT0:. . . RETI END 程序存储器ROM 002AH 0023H:串行口中断入口  001BH:定时器1溢出中断入口  0013H:外部中断1入口 AJMP INTT0  000BH:定时器0溢出中断入口  0003H:外部中断0入口 AJMP MAIN 0000H:复位后,程序的入口地址(PC=0000H)

  25. 中断响应时间 响应时间--从查询中断请求标志位到转向中断服务入口地址所需的机器周期数。 (1)最快响应时间 以外部中断为例,说明中断响应最短时间。 从查询中断请求信号到中断服务程序需要三个机器周期: 1个周期(查询)+2个周期(长调用LCALL) (2)最长时间 若当前指令是RET、RETI和访问IP、IE指令,紧接着下一条是乘除指令发生,则最长为8个周期: 2个周期执行当前指令(其中含有1个周期查询)+4个周期乘除指令+2个周期长调用=8个周期。

  26. 响 断 中 中断处理 入口地址 • 中断服务程序从中断子程序入口地址开始执行,直到返回指令RETI为止,这个过程称为中断处理(或中断服务)。 • 中断服务子程序一般包括两部分内容,一是保护和恢复现场,二是处理中断源的请求。 RETI

  27. 中断处理 INTT0: PUSH ACC PUSH DPH PUSH DPL PUSH PSW 中断源服务 POP PSW POP DPL POP DPH POP ACC RETI 所谓现场是指中断发生时单片微机中存储单元、寄存器、特殊功能寄存器中的数据或标志位等。在89C51中,现场一般包括累加器 A、工作寄存器 R0~R7以及程序状态字PSW、DPTR等。 现场保护一定要位于中断服务程序的前面。 保护现场 在结束中断服务程序返回断点处之前要恢复现场,与保护现场的方法相对应。而恢复断点也是由硬件电路自动实现的,中断服务程序的最后一条指令必须是RETI指令。 恢复现场

  28. 响 断 中 中 断 返 回 中断返回 • 中断返回是指中断服务完后,计算机返回到原来暂停的位置(即断点),继续执行原来的程序。 • 中断返回由专门的中断返回指令RETI来实现。

  29. 响 断 中 中 断 返 回 中断返回 • RETI指令功能:把断点地址取出,送回到程序计数器PC中去。另外,它还通知中断系统已完成中断处理,将清除优先级状态触发器。 • 特别注意:不能用RET指令代替RETI指令!

  30. 中断处理过程示意图 中断源发中断请求 N 中断响应条件 是否满足? Y Y 由硬件 自动完成 中断是否受阻? N 把PC断点地址压入堆栈 相应中断源的中断入口地址送入PC,转向中断服务程序

  31. 保护现场和恢复现场的过程中不允许中断,以免现场遭到破坏。保护现场和恢复现场的过程中不允许中断,以免现场遭到破坏。 保护和恢复现场之后的开中断是为了允许有更高级中断打断此中断服务程序。 硬件自动完成 关中断 保护现场 中断服务程序 开中断 中断服务 关中断 恢复现场 开中断 中断返回 断点地址由堆栈弹入PC

  32. 中断请求的撤除 CPU响应某中断请求后,在中断返回前,应该撤除该中断请求,否则会引起另一次中断。 定时器0或1溢出:CPU在响应中断后,硬件清除了有关的中断请求标志TFO或TF1,即中断请求是自动撤除的。 边沿激活的外部中断:CPU在响应中断后,也是用硬件自动清除有关的中断请求标志IE0或IE1。 串行口中断:CPU响应中断后,没有用硬件清除T1、R1,故这些中断不能自动撤除,而要靠软件来清除相应的标志。

  33. 电平激活的外部中断源中断标志的撤除 电平触发外部中断撤除方法较复杂。 因为在电平触发方式中,CPU响应中断时不会自动清除IE1或IE0标志,所以在响应中断后应立即撤除INT0或INT1引脚上的低电平。 CPU对INT0和INT1引脚的信号不能控制,需在引脚外加硬件(如D触发器)使其自动撤销外部中断请求。

  34. 外部中断源的中断触发方式适用范围 电平触发方式适合于外部中断输入以低电平输入且中断服务程序能清除外部中断请求源的情况。例如,并行接口芯片8255的中断请求线在接受读或写操作后即被复位,因此,以其去请求电平触发方式的中断比较方便。 边沿触发方式适合于以负脉冲形式输入的外部中断请求,如ADC0809的转换结束标志信号EOC为正脉冲,经反相后就可以作为80C51的中断输入。

  35. 编写中断服务程序的技巧 • 在中断服务程序入口处置一条无条件转移指令 • 软件保护现场,以免现场信息丢失 • CPU响应完中断后,硬件自动清0中断请求标志,但串行口中断除外 • 程序中可以禁止高级中断 • PUSH和POP应成对使用 • 以RETI结尾

  36. 中断系统初始化 对IE、IP、TCON、SCON中的控制位进行赋值 • 开相应中断源的中断允许位 • 设定所有中断源的优先级 • 若为外部中断,应规定中断触发方式

  37. 练习: 请写出外部中断1为低电平的中断系统初始化程序。

  38. 解: 采用位操作指令: SETB EA SETB EX1;开外部中断1 SETB PX1;令外部中断1高优先级 CLR IT1 ;令外部中断1为电平触发 采用字节操作指令: MOV IE,#84H;开外部中断1 ORL IP,#04H;令外部中断1高优先级 ANL TCON ,#0FBH;令外部中断1为电平触发

  39. 5. 5 外部中断扩展方法 89C51的外部中断源仅有两个,需要时可以扩展。 扩展方法: • 利用定时器扩展 • 中断加软件查询

  40. 1、利用定时器扩展外部中断源 方法: (1)把89C51的T0/T1做计数器使用; (2)计数初值设为FFFFH; (3)外部中断请求信号从P3.4或P3.5输入。 当外部中断请求信号有效时,使计数器加1而溢出,向CPU发出中断请求。

  41. 设某用户系统中已使用了两个外部中断源,并置定时器T1工作在模式2,作串行口波特率发生器用。现要求再增加一个外部中断源,并由P1.0输出一个5KHz的方波。Fosc = 12MHz。

  42. 分析: 目的:1) 增加一个外部中断; 2) 使P1.0输出一个方波。 条件:1)两个外部中断源已被使用 2)定时器T1已用于串行口波特率发生器 因此:可利用定时/计数器T0,使之工作在模式3, 1)利用TL0扩展外部中断源 2)利用TH0作定时器使用,输出方波

  43. 设置初值: 1) TL0 = 0FFH 2) 因为输出方波f = 5kHz,故方波周期为200us,用TH0产生100us的定时,故TH0的初值X = 256 – (定时时间/机器周期) = 256 - (100us*晶振频率/12) = 156 • 设定T0工作方式,TMOD,TCON.

  44. 程序: MOV TMOD,#27H ;T0:模式3,计数方式 ;T1:模式2,定时方式 MOV TL0,#0FFH ;一旦加1,马上溢出,申请中断 MOV TH0,#156 ;TH0初值 MOV TH1,#data ;根据波特率要求而定 MOV TL1, #data MOV TCON,#55H ;01010101 MOV IE,#9FH ;开放全部中断 TL0INT: MOV TL0,#0FFH ;TL0重新赋值 ….. RETI TH0INT: MOV TH0,#156 ;TH0重新赋值 CPL P1.0 RETI

  45. 2、中断加查询扩展外部中断源 • 各个外中断经过“线或”接入到INT0或INT1上,高产生中断请求。 • P1.0~P1.3用于查询。

  46. 例如右图所示的中断电路可实现系统的故障显示。当系统的各部分正常工作时,4个故障源的输入均为低电平,显示灯全不亮。当有某个部分出故障时,则相应的输入线由低电平变为高电平,相应的发光二极管点亮。例如右图所示的中断电路可实现系统的故障显示。当系统的各部分正常工作时,4个故障源的输入均为低电平,显示灯全不亮。当有某个部分出故障时,则相应的输入线由低电平变为高电平,相应的发光二极管点亮。

  47. 中断服务子程序: ORG 0100H INTER:JNB P1.0, L1 SETB P1.1 L1: JNB P1.2, L2 SETB P1.3 L2: JNB P1.4, L3 SETB P1.5 L3: JNB P1.6, L4 SETB P1.7 L4: RETI END 程序如下: ORG 0000H SJMP MAIN ORG 0003H SJMP INTER ORG 0030H MAIN: ANL P1, #55H SETB EX0 SETB IT0 SETB EA HERE:SJMP HERE

  48. 中断系统的应用 例 单步操作的中断实现。 把一个外部中断(设为INT0)设置为电平激活方式。其中断服务程序的末尾写上如下几条指令:  JNB P3.2, $ ; 在INT0变高前原地等待(死循环) JB P3.2, $; 在 INT0变低前原地等待(死循环) RETI ; 返回并执行一条指令

  49. 现在,若INT0保持低电平, 且允许INT0中断, 则CPU就进入外部中断 0 服务程序, 由于有上述几条指令, 它就会停在 JNB处, 原地等待。当INT0 端出现一个正脉冲(由低到高, 再到低)时, 程序就会往下执行, 执行RETI后, 将返回主程序, 往下执行一条指令, 然后又立即响应中断,以等待INT0端出现的下一个正脉冲。 这样在INT0端每出现一个正脉冲, 主程序就执行一条指令, 实现了单步执行的目的, 要注意的是, 这个正脉冲的高电平持续时间不小于 3个周期, 以确保 CPU能采集到高电平值。

More Related