目录
MCS-51中断来源:
MCS-51中断系统如下:
1。外部中断源
8051具有两个外部中断源,即外部中断0和外部中断1。它们的中断请求信号分别用销钉INT0(P3.2)和INT1(P3.3)引入。
有两种触发外部中断请求的方法:级别触发和边缘触发。具体而言,可以选择寄存器TCON的控制位IT0和IT1的设置。
•级别触发模式为低。这样,只要微控制器在中断请求输入(INT0和INTI)上采样有效的低级信号,就会激活外部中断。
•边缘触发方法是脉冲的负跳跃是有效的。这样,在两个相邻的机器周期对的请求输入终端(INT0和INTI)的采样中,如果先前检测到高级别,而下一个检测到低水平,则是有效的中断请求。
2。计时器中断源
计时器中断是一个内部中断,以满足计时或计数的需求。 8051中有两个16
位的时间/计数器可以实现时间和计数功能。当这两个定时/计数器溢出(从所有“ 1”更改为所有“ 0”)或从T0/T1引脚的计数脉冲输入下,向CPU提出了溢出的中断请求,以指示时间安排时间已经到来或计数已满。计时器溢出中断通常在需要定时控制的情况下使用。
3。串行端口中断源
串行端口中断也是一个内部中断,它是针对串行数据传输的需求设置的。串行端口中断分为串行端口传输中断和串行端口接收中断。每当串行端口发送或接收序列数据框架时,串行端口中断请求将自动发送到CPU。
当CPU响应某个中断源的中断请求时,CPU将将中断源的输入地址加载到程序计数器PC中,并且中断服务程序从此地址开始执行。该地址称为中断条目地址,也称为中断向量对应于8051微控制器中的中断条目。请参阅表:
中断控件:1。定时控制寄存器(TCON)
寄存器单位地址为88h,位地址为88h〜8fh,格式如下:
该寄存器具有定时/计数器和中断控制功能的控制函数,并且与中断有关的控制位有六个位:
•TF1:计时器/计数器T1溢出中断标志。
当计时器T1生成溢流中断时,位会由硬件自动设置(即,TFI = 1)。当计时器溢出中断由CPU做出响应时,位置会由硬件自动重置(即,TF = 0)。有两种情况用于使用计时器溢出中断标志位:使用中断方法时,该位用作中断请求标志位。在查询方法之后,将自动清除南部序列;使用查询方法时,该位用作查询状态位,此时需要清除标志位。
•TF0:计时器/计数器溢出中断标志。它的功能类似于TF1
•IE1:外部中断1中断请求标志。
当CPU检测到INT1上的中断请求是否有效时,IE1会由硬件自动设置:当CPU输入相应的中断服务程序执行到中断请求时,该位会由硬件自动重置。
•IT1:外部中断1触发模式控制位。
如果IT1 = 1,将外部中断1设置为边缘触发模式(负跳跃有效):IT1 = 0,将外部中断1设置为级别触发模式(低级别是有效的)。可以通过软件设置或重置此位。
•IE0:外部中断0中断请求标志。它的功能类似于EI
•IT0:外部中断0触发模式控制位。它的功能类似于ITI
2。串行端口控制寄存器(SCON)
寄存器单位地址为98h,位地址为98h〜9fh。它的内容和位地址表示如下:
有两个与中断有关的控制位:
•T1:串行端口发送中断标志。
串行端口发送顺序数据后,该位会由硬件自动设置,但是当CPU转向中断服务程序以响应中断服务程序而执行时,该位不能由硬件自动重置。用户应通过串行端口的中断服务程序中的说明将其重置。
•R1:串行端口接收中断标志。
在串行端口接收序列数据框架之后,位是由硬件自动设置的。同样,硬件不能自动重置位。用户应通过中断服务程序中的说明将其重置。
3。中断启用寄存器(IE)
寄存器单位地址为A8H,位地址为A8H〜AFH,其内容和位地址如下:
•EA:CPU中断总计允许位
用户可以通过程序设置此位状态:EA = 0,CPU禁止来自所有中断源的中断请求,也称为Off Intrupts; EA = 1,CPU从所有中断源打开中断请求,但是这些中断请求最终是否可以是CPU响应取决于中断的状态允许IE中相应的中断源的位。
•ES:串行端口中断启用位
ES = 0,禁止串行端口中断:如果ES = 1,则允许串行端口中断。
•ET1:计时器/计数器T1中断启用位
如果ET1 = 0,则禁用时间/计数器T1;如果ET1 = 1,则允许中断时间/计数器T1中断。
•ex1:外部中断1中断启用位
如果EX1 = 0,则禁用外部中断1;如果ex1 = 1,则允许外部中断1
•ET0:计时器/计数器T0中断启用位
如果ET0 = 0,则禁用了中断的时间/计数。如果ET0 = 1,则允许时间/计数器T0中断。
•ex0:外部中断0中断启用位
如果Ex0 = 0,则禁止外部中断0;如果ex = 1,则允许外部中断0。
重置MCS-51微控制器后,E中断E寄存器中的允许位被清除为“ 0”,并且禁止所有中断。
4。中断优先控制寄存器(IP)
MCS-51微控制器的中断优先级控制相对简单,系统仅定义了两个优先级级别:高和低。用户可以使用软件将每个中断源设置为高优先级中断或低优先级中断,并且可以实现两级中断嵌套。高优先级中断源可以中断执行低优先级中断服务程序,除非在执行低优先级中断服务程序时禁止某些高优先级中断源设置或被某些高优先级中断源设置或中断。
兄弟姐妹或低优先级中断源无法中断执行中断服务程序。
IP寄存器单位地址为B8H,位地址为B8H〜BFH。内容和位地址表示如下:
•PS:串行端口中断优先控制位。
如果PS = 0,将串行端口中断设置为低优先级中断;如果PS = 1,将串行端口中断设置为高优先级中断。
•PT1:正时计数器T1中断优先控制位。
如果PT1 = 0,将Timing/Counter T1设置为低优先级中断;如果pt1 = 1,将计时/计数器T1设置为高优先级中断。
•PX1:外部中断1中断优先控制位。
如果PX1 = 0,将外部中断1设置为低优先级中断,如果PX1 = 1,将外部中断1设置为高优先级中断。
•PT0:计时器/计数器T0中断优先控制位。
如果PT0 = 0,将计时/计数器设置为低优先级中断;如果pt0 = 1,将计时/计数器设置为高优先级中断。
•PX0:外部中断0中断优先控制位。
如果PX0 = 0,将外部中断0设置为低优先级中断,如果PX0 = 1,将外部中断0设置为高优先级中断。
重置系统后,IP寄存器中的所有优先控制位均已清除“ 0”,也就是说,所有中断源都设置为低级中断。
由于MCS-51微控制器仅具有两个中断优先级,因此,如果在操作过程中遇到了具有相同优先级的中断源,则CPU将如何响应中断?目前,CPU将使用内部硬件查询逻辑来确定应按照自然优先顺序响应哪种中断请求。自然优先顺序由硬件电路形成,请参阅表
中断处理:
中断处理过程可以分为四个阶段:中断抽样,中断查询,中断响应和中断返回。
中断抽样:
采样是中断处理的第一步,主要针对外部中断请求信号。由于此类中断发生在微控制器之外,因此采样是知道是否发生过中断请求的唯一可行方法。
所谓的采样意味着在每个机器周期的S5P2期间检测INT0和INT1引脚,并根据检测结果设置相应的中断标志位IE0或IE1的状态。
对于级别触发模式下的外部中断请求,如果样本较高,则意味着没有中断请求,并且相应的IE0或I1保持在0状态;如果较低,则意味着有一个中断请求,设置了相应的IE0或IE1。由于采样针对中断请求信号,因此对中断请求信号有一定的要求,并且必须将其有效水平的持续时间至少维持一个机器周期,然后才能进行采样。
对于脉冲触发模式下的外部中断请求,如果在两个相邻的机器周期中首先升级信号,然后在两个相邻机器周期中采样低,则中断请求是有效的,并且设置了相应的标志位IE0或E1;否则,IE0或E1保持在0状态。对于脉冲触发模式下的外部中断请求,必须至少维持高和低级别的机器周期,然后才能正确采样。
中断查询:
MCS-51系列和MCU必须在每个机器周期的最后一个状态(S6)中按顺序查询每个中断标志位,以确定是否发生了中断请求。如果发现中断标志为1,则将根据下一个机器周期S1的优先级进行中断处理。中断系统将通过硬件自动将相应的中断向量地址加载到PC中,以输入相应的中断服务子例程。
中断查询是由硬件自动完成的,其查询序列为:IE0(外部中断0) – > tf0(timed/counter 0) – > ie1(外部中断1) – > tf1(timeD/counter 1) – > r1> r1和t1(序列端口发送和接收中断和接收中断)。
中断响应:
中断响应是对中断源提出的中断请求的接受。当CPU查询有效的中断请求时,将立即执行中断响应。
1。中断响应的条件
CPU不会随时响应中断请求,但在满足中断响应条件后不会响应。 CPU响应中断的条件是:
•中断源会发出中断请求。
•CPU中断中断,即EA = 1。
•中断源中断启用用于中断,即相应的中断允许标志为1。
当满足上述条件时,CPU通常会响应中断。但是,如果发生以下任何情况,则中断响应将暂时搁置:
•CPU正在执行同级或高优先级中断服务程序。
•当前的机器周期不是执行指令的最后一个周期,也就是说,只有在执行当前指令后才能执行中断响应。
•当前执行的指令是返回指令(RET,ERI)或访问IE,IP的指令。根据MCS-51微控制器中断系统的特征,在执行这些指令后,应在响应中断之前执行另一项指令。
如果存在上述任何情况,将取消中断查询结果,并且CPU不会响应中断请求,并继续在下一个机器周期中查询。否则,CPU将在下一个机器周期中响应中断。
2。中断响应
中断响应过程包括保护断点并将程序转换为终端服务程序的输入地址(通常称为向量地址)。首先,中断系统会通过硬件自动生成长的呼叫指令(LACLL),该硬件将自动将断点地址推入堆栈保护(不保护累加器A,状态寄存器PSW和其他寄存器)。然后,将相应的中断条目地址加载到程序计数器PC(由硬件自动执行)中,以便将程序转到中断条目地址并执行中断服务程序。硬件提前设置了MCS-51系列微控制器的每个中断源的输入地址,表向量地址的分配显示在表中。例如,对于定时/计数器T0的中断响应,自动生成的长呼叫指令为:lcall 000BH
由于每个中断源只有8个单元,因此通常很难安排一个完整的中断服务程序。因此,通常将无条件转移指令放置在每个中断区域的入口地址,以将程序转换为存储在其他地址的中断服务程序。
3。中断处理
中断处理是执行中断服务程序。中断服务程序从中断条目地址开始,最终返回到指令“ reti”,该指令通常包括两个部分:一个是保护站点,另一个是完成Intrupt Source要求的服务。通常,主计划和中断服务程序将使用累加器A,状态寄存器PSW和其他一些寄存器。当CPU进入中断服务程序并使用上述寄存器时,它将销毁存储在寄存器中的内容。一旦中断返回,它将导致主要程序中的混乱。因此,在输入中断服务程序后,必须先保护站点,然后必须执行中断处理程序,并且必须在中断返回之前还原站点。
编写中断服务程序时,您还应注意以下几点:
•每个中断源的中断入口地址相距仅8个字节,无法适应普通的中断服务程序。因此,通常将无条件传输指令存储在中断的入口地址单元中,该单元可以将中断服务程序传输到内存中的任何其他空间。
•如果要在执行当前中断程序时禁止其他较高的优先级中断,则必须首先使用软件关闭CPU中断,或使用软件禁止相应的较高优先级中断,然后在中断返回之前打开中断。
•在保护和恢复站点时,为了不损坏现场数据或引起混乱,通常规定CPU此时将不再响应新的中断请求。因此,在编写中断服务程序时,您应该在保护网站之前注意关闭中断。如果保护场地后允许高优先级中断,则应打开中断。同样,应在恢复站点之前关闭中断,然后在恢复后打开中断。
4。中断的响应时间
中断响应时间是指从中断请求标志位置到CPU的时间开始执行中断服务程序的第一个指令。 CPU始终不响应中断请求。此外,不同中断请求的响应时间也不同。因此,形成中断响应时间的过程相对复杂。以外部中断为例,每个机器周期的S5P2期间的CPU样品及其输入引脚INT0或INT1。如果中断请求有效,则设置了中断请求标志位IE0或IE1,然后在下一个机器周期中查询这些标志位。这意味着至少要保持一个机器周期的中断请求信号的低水平。
目前,如果满足中断响应条件,CPU将响应中断请求,并在下一个机器周期中执行硬件长呼叫指令“ lacll”,从而导致程序输入中断向量矢量条目。呼叫指令的执行时间是两个机器周期,因此外部中断响应时间至少需要3个机器周期,这是最短的中断响应时间。
如果中断请求无法满足上述三个条件并滞留,则中断响应时间将延长。例如,正在进行兄弟姐妹或更高的中断,额外的等待时间取决于正在进行的中断服务程序的长度。如果执行指令尚未到达最后一个机器周期,则额外的等待时间为1至3个机器周期(因为指令的最大执行时间是4个机器周期)。
5。中断返回
中断返回意味着中断服务完成后,计算机返回到原始断开位置(即断点)并继续执行原始程序。中断返回由中断返回指令“ reti”实现。该指令的功能是从堆栈中弹出断点地址,然后将其发送回程序计数器PC。此外,通知中断系统的中断处理已完成,并且同时清除了优先状态触发器。特别是,请注意不要使用“ RET”指令而不是“ reti”指令。
中断请求撤销:
在CPU响应中断请求后,应在中断返回之前删除中断请求,否则将导致新的中断。
1。删除计时/反中断请求
对于定时/计数器溢出中断,CPU在响应中断后会自动删除硬件电路的中断请求,并且用户不必考虑这一点。
2。删除串行端口中断请求
对于串行端口中断,CPU在响应中断后不能自动删除硬件电路中断。用户应使用软件删除中断请求,例如:
3。删除外部中断请求
外部中断请求有两种情况:
当外部中断请求的触发方法是边缘触发时,CPU将在响应中断后自动删除硬件电路的中断请求,并且用户不必考虑它。
当外部中断请求处于级别模式时,通过检测INT0(P3.2)或Inti(P3.3)引脚上的低级别来设置外部中断标志IE0或IE1。尽管相应的中断标志IE0或IE1也可以自动通过硬件将CPU中断时,如果外部中断源无法迅速删除其在INT0(P3.2)或INT1(P3.3)PIN上的低级别,则在CPU中中断时,Intruck Intruct Flag IE0或IEE0或IE1中的IE1或IE1的低级别,该稳定性已被允许。因此,删除级别触发的外部中断请求需要硬件和软件才能实现。
如图所示,可以使用级别的触发型外部中断请求删除电路。
在图中,外部中断请求用D flip-flop锁定,并通过触发器的Q端发送到INT0引脚,因此添加的D flip-flop不会影响中断请求。中断响应后,为了删除中断请求,可以使用D触发器的异步断言端。
实现它。将要
连接到微控制器端口之一(P1.0),只要P10输出负脉冲,D触发器就可以设置为1,从而删除低级外部请求信号。可以通过在中断服务程序中添加以下2个说明来获得所需的负脉冲: