中断程序详解(附例题)

中断包含中断控制程序和中断服务程序两部分。

一、中断初始化程序

中断初始化程序实质上就是对TCON、SCON、IE和IP寄存器的管理和控制。

中断初始化程序一般不独立编写,而是包含在主程序中,中断初始化程序需完成以下操作:

  • 开中断;
  • 某一中断源中断请求的允许与禁止(屏蔽);
  • 确定各中断源的优先级别;
  • 若是外部中断请求,则要设定触发方式是电平触发还是边沿触发。

例题 1

假设规定外部中断0为电平触发方式,高优先级,试写出有关的初始化程序。

解:可用两种方法完成。

① 方法1,用位操作指令完成:

SETB   EA    ;开中断允许总控制位 

SETB   EX0   ;外中断0开中断

SETB   PX0   ;外中断0高优先级 

CLR   IT0 ;电平触发

② 方法2,用其它指令也可完成同样功能:

MOV   IE,#81H     ;同时置位EA和EX0 

ORL   IP,#01H     ;置位PX0 

ANL   TCON,#0FEH ;使IT0为0

二、中断服务程序

中断服务程序是一种为中断源的特定情况要求服务的独立程序段,以中断返回指令RETI结束。

中断服务程序的固定入口:

0003H、000BH、0013H、001BH、0023H

中断服务程序和子程序一样,在调用和返回时,也有一个保护断点和现场的问题。

在中断响应过程中,断点的保护主要由硬件电路自动实现

中断时,现场保护由中断服务程序来完成。因此在编写中断服务程序时必须考虑保护现场的问题。现场一般包括累加器A、工作寄存器R0~R7以及程序状态字PSW等。

在编写中断服务程序时还应注意以下三点:

  • 各中断源入口地址之间只相隔8个字节。
  • 在执行当前中断程序时,如何禁止更高优先级中断源的中断请求。
  • 在多级中断情况下,保护现场与中断嵌套的安排。

三、 应用举例

在设计中断服务程序时,是按中断源的要求,根据中断处理所要完成的任务来进行的。

保护现场和恢复现场一般采用 PUSH和POP指令来实现。PUSH和POP指令一般成对出现,以保证寄存器的内容不会改变。

例题2

设在主程序中用到了寄存器PSW、ACC、B、DPTR,而在执行中断服务程序时需要用到这些寄存器。

SERVICE:

PUSH   PSW;保护程序状态字

PUSH   ACC;保护累加器A 

PUSH   B; 保护寄存器B

PUSH   DPL;保护数据指针低字节

PUSH   DPH;保护数据指针高字节

 ┇      ;中断处理 

POP  DPH;恢复现场 

POP  DPL 

POP    B

POP ACC

POP PSW

RETI 

例题3

图为多个故障显示电路,当系统无故障时,4个故障源输入端X1~X4全为低电平,显示灯全灭;当某部分出现故障,其对应的输入由低电平变为高电平,从而引起MCS-51单片机中断,中断服务程序的任务是判定故障源,并用对应的发光二极管LED1~LED4进行显示。

image-20220812165030141

编程如下:

       ORG 0000H     ;程序开始 

       AJMP MAIN    ;转主程序 

       ORG 0003H     ;外部中断INT0入口地址 

         AJMP SERVICE         ;转中断服务程序 

MAIN: 0RL P1,#0FFH     ;灯全灭,准备读入

      SETB IT0       ;选择边沿方式

       SETB EX0       ;允许INT0中断 

       SETB EA        ;CPU开中断

       SJMP $        ;等待中断 



SERVICE:JNB P1.3,N1  ;若X1无故障转 

         CLR P1.4    ;若X1有故障,LED1亮 

N1:   JNB P1.2,N2    ;若X2无故障转 

       CLR P1.5    ;若X2有故障,LED2亮

N2:   JNB P1.1,N3    ;若X3无故障转 

       CLR P1.6    ;若X3有故障,LED3亮

N3:   JNB P1.0,N4    ;若X4无故障转 

       CLR P1.7    ;若X4有故障,LED4亮

N4:        RETI 

       END

这个程序主要分为主程序和中断服务程序两部分。

主程序主要完成初始化的工作,中断服务程序主要检测故障源是否发生,如果某故障源发生,则将相应的指示灯点亮。在此主程序和中断服务程序中,没有存在使用寄存器之间的干涉问题。因此,在中断服务程序中不用保护现场和恢复现场。

例:单步运行控制

这是外中断的特殊应用,外中断0编程为高优先级电平触发方式。工作原理:主程序先对中断系统进行初始化,接着单片机进入中断服务程序(因为INT0总是低),在中断服务程序中等待INT0变高(按键短暂闭合),这是执行RETI返回

回主程序,由于INT0为低,接着又申请中断,这次的中断响应应在执行了这程序中的一条指令后才能进入中断服务程序。重复以上过程,便可实现单步执行用户程序。

    CLR IT0

    SETB    PX0

    SETB    EX0

    SETB    EA

    。。。。

    。。。。;用户  。。。。;程序



HE0:JNB  INT0,HE0

HE1:JB   INT0,HE1  RETI  
#嵌入式##汇编语言#
全部评论
汇编啊,厉害了
点赞 回复 分享
发布于 2022-08-13 11:55

相关推荐

求个公司要我:接好运
点赞 评论 收藏
分享
喜欢吃蛋糕仰泳鲈鱼是我的神:字节可以找个hr 给你挂了,再放池子捞
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-24 20:55
阿里国际 Java工程师 2.7k*16.0
程序员猪皮:没有超过3k的,不太好选。春招再看看
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务