首页 > 编程知识 正文

单片机原理及接口技术第五版答案([专业课笔记] 单片机 第五章 中断系统)

时间:2023-05-06 07:16:15 阅读:122014 作者:2969

[专业科目笔记]单片机第五章中断系统正文微机的输入输出方式无条件传输查询传输直接存储器访问(DMA )中断系统8951的中断源中断控制中断请求标志TCONSCON中断, 中断优先级控制中断响应和中断处理中断响应条件允许控制中断响应的自主操作过程中断响应时间中断处理中断返回中断编程

正文微机的输入输出方式

微机运行时,CPU不断与外部IO设备交换信息。 其更换方法有以下3种

在控制程序传送、且分为无条件传送和查询传送这两种来中断传送的直接存储器访问无条件传送方式中,CPU始终识别为外部设备处于能够收发数据的状态,如果在代码中执行访问外部设备的命令,则数据的传送完成

在查询转发方式中,以CPU为主体,每次访问外围设备时询问程序是否准备好外围设备的状态,这通常在接口的任一组0、1位中确定。 在CPU执行查询访问的整个过程中不能执行其他指令(

执行查询发送命令的顺序

在直接内存访问(DMA )方式中,CPU将数据总线转让给外部设备和内存之间直接(不通过CPU )传输数据

在这两种情况下大多使用DMA方式

如果需要在外围设备和存储器之间传输大量数据,例如,从磁盘向RAM传输大数据,则外围设备运行速度快,中断的初始计算机没有中断功能,主机和外围设备之间的数据交换通过编程控制传输这种方式会导致cpu在运行时无法执行其他命令,等待很长时间,等待I/o端口就绪,从而浪费时间

现代计算机具有实时处理功能,能够及时处理外部随机(异步)发生的事件,依靠中断技术

中断方式解决了程序控制的等待问题,还实现了现场数据的实时控制,能够应对突发情况

如果发生中断,CPU将中断正在运行的程序(如果允许(=)此处为中断优先级高,低为不可中断高度()=) ),并将当前pc值放入堆栈中。

CPU只是堆栈原始程序地址,用户需要自己保护现场数据,往往是通过按顺序堆栈数据堆栈来实现的

断点程序结束,执行断点恢复指令后,断点的地址自动弹出到pc,中断的程序继续执行

8951的中断系统中断系统结构

851的中断源INT0 :外部中断0、低电平有效、p3.2的INT1 :外部中断1、低电平有效、p3.3的T0 :定时器中断0、定时器0溢出中断请求T1 :定时器中断1、 当RXD :串行端口中断、串行端口完成1帧数据的发送接收时,中断请求==中断请求标志位对应于每个中断源,设置在特殊功能寄存器TCON (定时器控制寄存器)和scon (scon )中

中断源通常包含以下类别

IO设备硬件故障实时时钟调试用中断源中断控制中断系统,只靠中断源没有意义,通过状态控制器,通过程序允许中断源在什么情况下请求中断,然后

8951有以下四个特殊寄存器

定时器控制寄存器tcon(6位)串行端口控制寄存器scon (2位)中断允许寄存器IE中断优先级寄存器IP中断请求标志TCON TCON标志位

每个标志位(从高到低)的含义如下:

tf1:计时器t1的溢出中断请求标志位

当t1启动且计数器溢出时,硬件置位tf1并向CPU发送中断请求

当cpu适当停止时,硬件将自动设置为0

tf0:计时器t0的溢出中断请求标志位

作用于t0,但效果与tf1相同

ie1:外部中断1的溢出中断请求标志位

在外部中断引脚1上检测到有效的(取决于it1设定的中断信号方式)中断请求信号时,通过硬件自动设定为1

当CPU响应时,硬件会自动将其设置为0

it1:外部中断1的中断触发方式控制位

it1决定外部中断1的有效触发方式

it1套1时,外部中断1程序为电平触发方式

此时,CPU在每个机器周期s5p2中对请求引脚输入电平进行采样,如果是低电平则设定ie1,如果是高电平则设定ie0

it1设置为0时,外部中断1程序为边沿触发方式

此时,CPU在每个机器周期s5p2中对请求引脚输入电平进行一次采样,一个周期采样为高电平,在下一个周期为低电平的情况下,ie1被设置为1,ie在CPU对本中断作出响应之前,ie为http://

ie0:外部中断0的溢出中断请求标志位

作用于外部中断0,但效果与ie1相同

it0:外部中断0的中断触发方式控制位

作用于外部中断0,但效果与it0相同

SCON SCON标志位

每个标志位(从高到低

到低)含义如下:

t1:串行口发送中断请求标志
当CPU将一个数据写入发送缓冲器SBUF时, 就启动发送, 发送完成后, 硬件自动将t1置1, 但CPU响应中断时, 硬件不会自动将其置0(响应中断不代表计算机设备再次准备好, 故不自动置0), 需要用户在程序适当的地方执行对t1置0的操作

r1:串行口接收中断请求标志
当串行口允许接收时, 每接收完一个串行口帧, 硬件自动将t1置1, 同样 , CPU响应中断时, 不会自动将其置0(响应中断不代表计算机设备再次准备好, 故不自动置0), 需要用户在程序适当的地方执行对t1置0的操作

中断允许控制

中断允许寄存器ie格式图

ie各标志位的含义如下(从高到低):

ea: 中断允许总控制位
当ea == 0时, 屏蔽所有中断请求; ea == 1时, CPU开放中断. 在这层总控制之下, 各中断源又有自己的允许开关(类比总电源开关和设备开关之间的关系)es:串行口中断允许位
均为高电平有效, 即位置1时允许对应串行口中断et1: 定时器1中断允许位ex1: 外部中断1允许位et0: 定时器0中断允许位ex0: 外部中断0允许位 中断优先级控制

8951有两个中断优先级, 每个中断源都可以编程为高优先级中断或低优先级
中断系统有两个不可寻址的"优先级生效触发器" , 一个指出CPU是否在执行高优先级的中断服务程序, 另一个指出是否在执行低优先级的中断服务程序, 当两者置1时, 分别屏蔽所有的中断请求

另外,8951片内有一个中断优先级寄存器IP

中断优先级寄存器IP格式图

ip各标志位含义如下:

ps:串行口中断优先级控制位pt1:定时器t1中断优先级控制位px1:外部中断1中断优先级控制位pt0:定时器t0中断优先级控制位px0:外部中断1中断优先级控制位

以上均为置1时对应中断源被视为高级中断

有了ip(中断优先级寄存器)的控制, cpu就可以实现如下两个功能

顺序排队实现嵌套中断(高级的中断低级的) 中断响应和中断处理

中断处理过程一般分为三个阶段

中断响应中断处理中断返回

CPU在中断中执行的中断服务程序又被称为中断服务子程序, 但和子程序本身不同, 子程序用调用指令来跳转, 中断子程序是通过中断请求实现跳转的, 因此中断子程序也存在保护现场恢复现场的问题

中断处理流程图

中断响应 响应条件

中断响应的条件(缺一不可):

中断源发出中断请求中断总允许位ea为1(即CPU开中断)申请中断的中断源中断允许位为1(即该中断没有被屏蔽)没有正在执行的同级或高级中断正在被服务当前指令周期已结束(机器周期中用来执行指令的部分)如果现行指令是reti或访问ie或ip指令, 则要到该指令和下一条指令执行完(等待中断返回原程序或相关数据保存) 中断响应的自主操作过程

8951在s5p2期间顺序采样各中断源, 又在下一机器周期s6期间按优先级顺序查询中断标志, 如果顺序查到某标志位为1则在接下来的机器周期s1期间按优先级进行中断处理,
中断系统由硬件自动将对应的中断矢量地址装入pc以进入中断服务(子)程序,
这个过程表现为CPU的自主操作

中断源和对应的指令矢量地址表

中断响应时间 每个周期的s5p2期间采样, 将中断电平锁存到中断标志位下个周期的s6期间检查中断标志位和中断允许位, 符合中断条件, 本周期调用lcall进行矢量跳转到中断程序入口
而lcall指令需要两个机器周期来执行再下一个周期才执行中断程序的第一条指令

因此可得, 从请求中断到中断服务指令执行最短需要三个机器周期

如果正在执行需要中断请求等待的指令如reti, 则需要多等待本指令加下一条指令的时间, 也就是 1 + 指令时间 , 也就是说 从请求中断到中断服务指令执行需要花费三个到八个机器周期

中断处理

CPU响应中断后, 从执行第一条指令开始到返回指令为止, 整个过程叫做 中断处理中断服务

其一般包括两个部分

保护现场中断源服务

编写注意事项:

各中断源入口之间只间隔8个单元, 一般是无法容纳中断服务程序的, 最常见的是在入口处使用一条无条件转移指令跳转到存储器的某处若执行当前中断程序时, 想要禁止更高级的中断, 可以ea置0关闭CPU中断, 或屏蔽其他高级中断源的中断在保护现场和恢复现场时, 为了不使现场信息受到破坏或造成混乱, 往往会在过程中将ea置0, 防止其他中断打断 中断返回

执行完中断服务程序之后, 执行reti, 表示中断服务结束, 要求CPU返回被断程序处, 即出栈被断程序的下一条指令的地址给pc, 也就是中断请求时入栈的pc值(当时运行的程序的下一个指令的地址)

中断程序设计

中断服务流程图

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。