第4章AT89S52单片机 的 中断系统
1 第4章 AT89S52单片机 的 中断系统 1
4.8中断服务子程序的设计 中断系统的运行必须与中断服务子程序配合才能正确使 用。设计中断服务子程序需要首先明确以下几个问题。 1.中断服务子程序设计的任务 任务有下列4条: (1)设置中断允许控制寄存器IE,允许相应的中断请求源 中断。 (2)设置中断优先级寄存器IP,确定所使用的中断源的优 先级。 (3)若是外部中断源,还要设置中断请求的触发方式决定 采用电平触发方式还是跳沿触发方式。 (4)编写中断服务子程序,处理中断请求。 2
2 4.8 中断服务子程序的设计 中断系统的运行必须与中断服务子程序配合才能正确使 用。设计中断服务子程序需要首先明确以下几个问题。 1.中断服务子程序设计的任务 任务有下列4条: (1)设置中断允许控制寄存器IE,允许相应的中断请求源 中断。 (2)设置中断优先级寄存器IP,确定所使用的中断源的优 先级。 (3)若是外部中断源,还要设置中断请求的触发方式决定 采用电平触发方式还是跳沿触发方式。 (4)编写中断服务子程序,处理中断请求
前3条一般放在主程序的初始化程序段中。 【例5-3】假设允许外部中断0中断,设定为高级中断,采 用跳沿触发方式,其他中断源为低级中断。初始化程序如下: SETB EA;EA位置1,总中断开关位开放 SETB EX0;EX0位置1,允许外部中断0产生中断 SETB PXO ;PX0位置1,外部中断0为高优先级中断 SETB ITO ;T0位置1,外部中断0为跳沿触发方式 3
3 前3条一般放在主程序的初始化程序段中。 【例5-3】 假设允许外部中断0中断,设定为高级中断,采 用跳沿触发方式,其他中断源为低级中断。初始化程序如下: SETB EA ;EA 位置1,总中断开关位开放 SETB EX0 ;EX0位置1,允许外部中断0产生中断 SETB PX0 ;PX0位置1,外部中断0为高优先级中断 SETB IT0 ;IT0位置1,外部中断0为跳沿触发方式 3
2.采用中断时的主程序结构 程序必须先从主程序起始地址0000H执行。所以,在 0000H起始地址的几个字节中,用无条件转移指令,跳向主 程序。 另外,各中断入口地址之间依次相差8字节,中断服务子 程序稍长就超过8字节,这样中断服务子程序就占用了其他 的中断入口地址,影响其他中断源的中断处理。为此,一般 在进入中断后,用一条无条件转移指令,把中断服务子程序 跳转到远离其他中断入口的入口地址处。 常用的主程序结构如下: 4
4 2.采用中断时的主程序结构 程序必须先从主程序起始地址0000H执行。所以,在 0000H起始地址的几个字节中,用无条件转移指令,跳向主 程序。 另外,各中断入口地址之间依次相差8字节,中断服务子 程序稍长就超过8字节,这样中断服务子程序就占用了其他 的中断入口地址,影响其他中断源的中断处理。为此,一般 在进入中断后,用一条无条件转移指令,把中断服务子程序 跳转到远离其他中断入口的入口地址处。 常用的主程序结构如下: 4
0RG0000H LJMP MAIN ORG X:X2XaX.H :X:XXXH为某中断源的中断入口 LJMP INT ;INT为某中断源的中断入口标号 。eeae0 ORG Y:Y2YaY.H :Y:YYY4H为主程序入口 MAIN: 主程序 INT: 中断服务子程序 注意:如果有多个中断源,就有多个“ORG XX2X3X4H” 的入口地址,多个“中断入口地址”必须依次由小到大排列。 主程序MAN的起始地址YY2Y3Y4H,根据具体情况来安排。 5
5 注意:如果有多个中断源,就有多个“ORG X1X2X3X4H” 的入口地址,多个“中断入口地址”必须依次由小到大排列。 主程序MAIN的起始地址Y1Y2Y3Y4H,根据具体情况来安排。 5