微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 单片机学习知识点全攻略(三)

单片机学习知识点全攻略(三)

时间:05-15 来源:本站整理 点击:

在上例中,如果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,低优

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top