单片机中断系统 (1)中断源请求
只有外部中断需要软件设置。 (2)中断使能(允许) 表 6-1 IE——中断使能(允许)寄存器的位分配(地址 0xA8、可位寻址)
表 6-1 IE——中断使能(允许)寄存器的位分配(地址 0xA8、可位寻址) 置1时,为开中断,不同单片机不同,需要参考数据手册。 中断使能寄存器 IE 的位 0~5 控制了 6 个中断使能,而第6 位没有用到,第 7 位EA是总开 关。总开关就相当于我们家里或者学生宿舍里的那个电源总闸门,而0~5 位这 6 个位相当 于每个分开关。那么也就是说,我们只要用到中断,就要写 EA = 1 这一句,打开中断总开关, 然后用到哪个分中断,再打开相对应的控制位就可以了。 中断函数不返回任何值,函数名是 InterruptTimer0(),这个函数名在符合 函数命名规则的前提下可以随便取,我们取这个名字是为了方便区分和记忆,而后是 interrupt 这个关键字,一定不能错,这是中断特有的关键字,另外后边还有个数字 1,这个数字 1 怎 么来的呢?我们先来看表6-3。 表 6-3中断查询序列 这个表格同样不需要大家记住,需要的时候过来查就可以了。我们现在看第二行的 T0 中断,要使能这个中断那么就要把它的中断使能位 ET0 置 1,当它的中断标志位 TF0 变为 1 时,就会触发 T0 中断了,那么这时就应该来执行中断函数了,单片机又怎样找到这个中断 函数呢?靠的就是中断向量地址,所以 interrupt后面中断函数编号的数字 x 就是根据中断向 量得出的,它的计算方法是 x*8+3=向量地址。当然表中都已经给算好放在第一栏了,我们可 以直接查出来用就行了。到此为止,中断函数的命名规则我们就都搞清楚了。 (3)中断的优先级 中断优先级有两种,一种是抢占优先级,一种是固有优先级,先介绍抢占优先级。来看 表 6-4 和表 6-5。 表 6-4 IP——中断优先级寄存器的位分配(地址 0xB8、可位寻址) 表 6-5 IP——中断优先级寄存器的位描述 IP 这个寄存器的每一位,表示对应中断的抢占优先级,每一位的复位值都是 0,当我们 把某一位设置为 1 的时候,这一位的优先级就比其它位的优先级高了。比如我们设置了 PT0 位为 1 后,当单片机在主循环或者任何其它中断程序中执行时,一旦定时器 T0 发生中断, 作为更高的优先级,程序马上就会跑到 T0 的中断程序中来执行。反过来,当单片机正在 T0 中断程序中执行时,如果有其它中断发生了,还是会继续执行 T0 中断程序,直到把 T0 中的 中断程序执行完毕以后,才会去执行其它中断程序。 当进入低优先级中断中执行时,如又发了高优先级的中断,则立刻进入高优先级中断执行,处理完高优先级级中断后,再返回处理低优先级中断,这个过程就叫做中断嵌套,也 称为抢占。所以抢占优先级的概念就是,优先级高的中断可以打断优先级低的中断的执行,从而形成嵌套。当然反过来,优先级低的中断是不能打断优先级高的中断的。 那么既然有抢占优先级,自然就也有非抢占优先级了,也称为固有优先级。 在表 6-3 中 的最后一列给出的就是固有优先级,请注意,在中断优先级的编号中,一般都是数字越小优 先级越高。从表中可以看到一共有 1~6 共 6 级的优先级,这里的优先级与抢占优先级的一 个不同点就是,它不具有抢占的特性,也就是说即使在低优先级中断执行过程中又发生了高 优先级的中断,那么这个高优先级的中断也只能等到低优先级中断执行完后才能得到响应。 其他的优先级需要查看数据手册IP/IP2/IPH/HP2H。
最后加一句,学习单片机机,其实就是学习数据手册
|