首页 > 其他分享 >第7章 中断系统

第7章 中断系统

时间:2024-04-07 15:00:27浏览次数:23  
标签:优先级 中断 系统 MOV T1 ORG 中断请求

第7章 中断系统

一、中断概述

中断技术是在微机中广泛使用的一种资源共享技术。

  1. 中断
    中断是指当CPU在正常执行程序时,由于外部或内部事件强迫CPU停止当前执行的程序,转去为事件服务(中断服务),服务完毕,又能自动返回到被中断的程序中继续执行。

  2. 中断功能

    • 实现CPU与外设的速度匹配和并行工作;
    • 实现实时控制;
    • 实现故障检测和自动处理。
  3. 中断控制

    • 设置中断源(引起中断的事件),确定它们提出中断请求的方式;
    • 确定中断优先级和中断的嵌套方式;
    • 中断现场的保护与恢复。

中断嵌套示意图

  1. 中断处理过程
    中断处理过程如下:
    • 中断源提出申请,并建立相应的中断标志(由硬件置位标志位);
    • CPU结束当前指令,响应该中断申请,同时把主程序断点处地址(程序计数器PC当前值)压入堆栈,即保护断点;
    • 保护现场。把断点处的有关信息(如工作寄存器、累加器、标志位的内容),压入堆栈;
    • 执行中断服务程序;
    • 恢复现场。把保存的现场内容从堆栈弹出,以恢复寄存器和存储单元的原有内容;
    • 返回主程序(或调用程序),执行中断返回指令,把断点处地址从栈顶弹出,从断点处继续执行主程序(或调用程序)。

二、MCS-51 中断系统

  1. 中断源
    • 5个中断源:2个外部中断INT0、INT1,3个内部中断T0、T1、串行口。
    • 2个优先级:高级中断和低级中断,由用户定义。

MCS-51 中断系统结构图

  1. 中断控制寄存器
    与中断控制有关的寄存器有4个:

    • TCON:定时控制寄存器
    • SCON:串行口控制寄存器
    • IE:中断允许寄存器
    • IP:中断优先级寄存器

    (1) 定时控制寄存器(TCON)

     8F 8E 8D 8C 8B 8A 89 88
    TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 (88H)
                       INT1触发请求标志
                       INT0触发方式 0:电平触发(低) 1:边沿触发(下跳沿)
                       INT0请求标志 0:无请求(硬件置位或清除) 1:有请求
    
    • IT0(IT1):外中断请求信号方式控制位
      • IT0(IT1)=1,脉冲方式(后沿负跳变有效)
      • IT0(IT1)=0,电平方式(低电平有效)
    • IE0(IE1):外部中断请求标志位
      当CPU采样(S5P2)到INT0或INT1端出现有效中断请求时,此位由硬件置1。在中断响应完成后转向中断服务程序时,再由硬件自动清零。
    • TF0(TF1):计数溢出标志位
      当计数器产生计数溢出时,此位由硬件置位。当转向中断服务程序时,再由硬件自动清0。计数溢出标志位的使用有两种情况:
      • 采用中断方式时,做中断请求标志位来使用;
      • 采用查询方式时,作查询状态位来使用。

    (2) 串口控制寄存器(SCON)

     9F 9E 9D 9C 9B 9A 99 98 
    SM0 SM1 SM2 REN TB8 RB8 TI RI (98H)
                            串行口发送中断请求标志
                            串行口接收中断请求标志  
    

    其中与中断有关的控制位共有两位:TI和RI,分别为串口发送和接收中断请求标志位。当串口发送(或接收)完一帧数据后,由硬件置位;在转向中断服务程序后,用软件清零。

    (3) 中断允许寄存器(IE)

    AF AE AD AC AB AA A9 A8
    EA / / ES ET1 EX1 ET0 EX0 (A8H)
    
    • EA:中断允许总控制位
      • EA=0,禁止所有中断;EA=1,开放所有中断。
    • EX0(EX1):外部INT0、INT1中断允许位
      • EX0(EX1)=0,禁止;EX0(EX1)=1,允许。
    • ET0(ET1):定时/计数器T0、T1中断允许位
      • ET0(ET1)=0,禁止;ET0(ET1)=1,允许。
    • ES:串行中断允许位
      • ES=0,禁止; ES=1,允许。

    (4) 中断优先级寄存器(IP)

    BF BE BD BC BB BA B9 B8 
    / / / PS PT1 PX1 PT0 PX0 (B8H)
    
    • PX0:外部中断0(INT0)优先级设定位
    • PT0:定时中断0(T0)优先级设定位
    • PX1:外部中断1(INT1)优先级设定位
    • PT1:定时中断1(T1)优先级设定位
    • PS: 串行中断优先级设定位

    为0的位优先级为低级;为1的位优先级为高级。若5个中断源都定义为相同优先级时,CPU按下列顺序查询执行。

    INT0 -> T0 -> INT1 -> T1 -> TI、RI
    

MCS-51单片机中断优先级的控制原则是:

  1. 低优先级中断请求不能打断高优先级的中断服务;但高优先级中断请求可以打断低优先级的中断服务,从而实现中断嵌套。

  2. 如果一个中断请求已被响应,则同级的其他中断响应将被禁止。

  3. 如果同级的多个请求同时出现,则按CPU查询次序确定哪个中断请求被响应。其查询次序为:外部中断0 -> 定时中断0 -> 外部中断1 -> 定时中断1 -> 串行中断。

  4. 中断请求的撤除
    中断响应后,如果不及时清除中断请求标志,会引起中断的混乱。下面按中断请求的类型说明中断请求的撤除方法。
    (1) 定时中断由硬件自动撤除
    定时中断响应后,硬件自动把标志位(TFx)清零。
    (2) 外部中断的自动与强制撤除
    若外部中断以脉冲方式触发,则由硬件自动地把标志位(IEx)清零。若以电平方式触发,则需由外部电路和软件配合撤除。
    (3) 串行中断软件撤除
    串行中断的标志位是TI和RI,但对这两个中断标志位不进行自动清零。因为在中断响应后,还需测试这两个标志位的状态,以判定是接收操作还是发送操作,然后才能清除。所以串行中断请求的撤除应使用软件方法。
    即:
    CLR TI ; TI <- 0 CLR RI ; RI <- 0

中断管理

ORG 0000H 
LJMP MAIN ; 跳过中断地址表,转主程序
ORG 0003H
LJMP INT0F ; 转INT0中断服务
ORG 000BH  
LJMP T0F ; 转T0中断服务
ORG 0013H
LJMP INT1F ; 转INT1中断服务  
ORG 001BH
LJMP T1F ; 转T1中断服务
ORG 0023H
LJMP SIOF ; 转串口中断服务
ORG 0030H  
MAIN: MOV SP,#5FH ; 主程序

利用定时器扩充中断源

定时器T0设置为方式2(自动重装常数)外部计数方式。TH0、TL0的初值均为0FFH,并允许T0中断,且CPU开放中断。

MOV TMOD,#06H
MOV TL0,#0FFH
MOV TH0,#0FFH
SETB TR0  
SETB ET0
SETB EA

定时器方式0应用举例(第5章)

设单片机晶振频率fosc=6MHz,使用定时器1以方式0产生周期为500us的方波,并由P1.0输出。以查询或中断方式完成。

解:

  • 计算定时初值x
    欲产生500us的方波,只需在P1.0端以250us为周期交替输出高低电平即可实现。为此,定时时间应为250us。晶振为6MHz,则1个机器周期为2us。
    则: (2^13-x)*2uS=250uS
    x=8067=1111110000011B
    即: TH1=0FCH,TL1=03H。

查询方式程序:

MOV TMOD,#00H ; T1工作在方式0
SETB TR1 ; 启动T1工作
LOOP: MOV TL1,#03H  
      MOV TH1,#0FCH ; 置定时初值
WAIT: JNB TF1,WAIT ; 定时未到,循环等待
      CLR TF1 ; 定时到,清TF1
      CPL P1.0 ; 由P1.0输出,信号取反
      SJMP LOOP ; 循环输出方波  

中断方式程序:

ORG 001BH ; T1中断入口
     LJMP SUBT ; 跳至中断服务程序SUBT
ORG 100H  
     MOV TMOD,#00H ; T1工作在方式0
     MOV TL1,#03H
     MOV TH1,#0FCH ; 置定时初值
     SETB EA ; 开中断
     SETB ET1 ; 允许T1中断
LOOP: SETB TR1 ; 启动T1工作
WAIT: SJMP WAIT ; 等待中断
      LJMP LOOP
ORG 200H ; 中断服务程序  
SUBT: CPL P1.0 ; 输出信号取反
      MOV TL1,#03H
      MOV TH1,#0FCH ; 重置定时初值
      RETI ; 中断返回

乙机接收程序(第5章)--串口中断实现

(查询方式)与甲机发送相呼应,接收器把接收到的32个字节数据存放在内部RAM的20H~3FH中,波特率与晶振频率同上。若奇校验出错,则置进位位1。程序如下:

START:MOV TMOD,#20H ; T1方式2
      MOV TL1,#OE8H  
      MOV TH1,#OE8H
      SETB TR1
      MOV R0,#20H
      MOV R7,#32  
LOOP: MOV SCON,#01010000B ; 串行口方式1,能接收
DONE: JNB RI,DONE ; 等待接收一帧
      CLR RI ; 清RI,再接收
      MOV A,SBUF ; 取数据
      JNB P,ERROR ; 校验错,转出错处理
      ANL A,#7FH ; 去掉奇校验位
      MOV @R0,A ; 奇校验,存数据
      INC R0 ; 指向下一数据
      DJNZ R7,LOOP ; 数据块,未接收完,循环
      AJMP START ; 循环接收
ERROR: ... ; 出错处理

(中断方式)程序如下:

START:MOV TMOD,#20H ; T1方式2
      MOV TL1,#OE8H
      MOV TH1,#OE8H
      SETB TR1  
      MOV R0,#20H
      MOV R7,#32
      MOV SCON,#01010000B ; 串口方式1,接收
      SETB EA ; 开总中断
      SETB ES ; 开串口中断
      SJMP $ ; 等待接收或处理其他

ORG 0023H ; 串口中断处理子程序
     LJMP ZDCL  
ORG 100H
ZDCL: CLR RI ; 清RI,再接收
      MOV A,SBUF 
      MOV A,SBUF ; 取数据
      JNB P,ERROR ; 校验错,转出错处理
      ANL A,#7FH ; 去掉奇校验位  
      MOV @R0,A ; 奇校验,存数据
      INC R0 ; 指向下一数据
      DJNZ R7,FH ; 数据块,未接收完,循环
      CLR ES ; 关串口中断
FH:   RETI ; 返回主程序  
ERROR: ... ; 出错处理

包括中断概述、MCS-51中断系统、中断管理、利用定时器扩充中断源、定时器方式0应用举例以及串口中断实现的接收程序。中断技术是单片机系统中非常重要的一部分,合理利用中断可以大大提高系统的实时性和可靠性。在实际应用中,需要根据具体需求合理设置中断源、中断优先级和中断服务程序,以实现高效可靠的系统控制。

标签:优先级,中断,系统,MOV,T1,ORG,中断请求
From: https://www.cnblogs.com/jacx93/p/18119062

相关文章

  • 基于 bindview.js + node + mysql 的简易记账系统
    该项目前端是基于bindview.js和bootcss,后端的基于node.js使用了express框架,数据库使用的mysql8 bindview: bronze-ding/bindview:Bindview.js,是一个使用虚拟DOM来创建真实DOM并提供了数据响应式的Javascript工具库(github.com)功能包括:增加,删除,修改,查询登录......
  • 移植helloworld驱动模块到openwrt系统
    一、OpenWRT中的驱动  Openwrt源码中,所有扩展的软件包都在package目录下,自己添加的应用放在该目录下。  所有扩展的内核驱动都在package/kernel目录下,自己添加的驱动放在该目录下。二、添加驱动步骤在package/kernel目录下添加一个helloworld文件夹在helloworld添加一个Make......
  • 全量知识系统 程序详细设计之“命名法” “正文”的“ 前言“ 之1 “前提”篇
    前言本期(“命名法”系列篇)的主题(“命名法”)将给出全知系统的命名规则,计划将从正文的第三部分起。作为在进入本期“命名法”系列篇主题前的准备,本“前言”中规划了两部分,它们的主题词是“语言游戏”:“序言”部:全知系统中语言游戏 的三种玩法(“三种玩法”)“导言”部: ......
  • 全量知识系统 程序详细设计 “三次演算” 再探(Q&A)之2 (百度搜索)
    说明:以下关于全知系统中程序详细设计的沟通是基于今天正在完成中的全量知识系统程序详细设计之“命名法”“正文”的"前言"之1“前提”篇中提出的所有程序要求的基础上的。(这些相同问题的同时沟通 )Q1.这些规则在程序被设计为λ表达式的三个转换规则,分别适用于三条线......
  • (毕设)基于Java+Vue+Mysql的WMS仓库管理系统
      前言: WMS(WarehouseManagementSystem)仓库管理系统是一个用于优化仓库操作、提高效率和准确性的软件解决方案。以下是针对列出的WMS仓库管理系统的各个部分的简要描述:1.订单管理订单管理是WMS的核心功能之一,涉及处理、跟踪和完成客户订单。这包括:订单录入:手动或自......
  • 基于SpringBoot的“汽车租赁系统”的设计与实现(源码+数据库+文档+PPT)
    基于SpringBoot的“汽车租赁系统”的设计与实现(源码+数据库+文档+PPT)开发语言:Java数据库:MySQL技术:SpringBoot工具:IDEA/Ecilpse、Navicat、Maven系统展示系统功能结构图管理员登录界面图管理员功能界面图用户管理界面图车辆品牌管理界面图车辆颜色管......
  • 手把手教你构建嵌入式Linux根文件系统
    /bin:此目录下存放着系统需要的可执行文件,一般都是一些命令,比如ls、mv等命令/dev:device的缩写,此目录下的文件都是和设备有关的。在Linux下一切皆文件,即使是硬件设备,也是以文件的形式存在的,比如/dev/ttymxc0就表示串口0/etc:此目录下存放着各种配置文件/lib:library的简称,也就是......
  • 基于新版宝塔Docker部署在线客服系统过程小记
    我在业余时间开发维护了一款免费开源的升讯威在线客服系统,也收获了许多用户。对我来说,只要能获得用户的认可,就是我最大的动力。客服系统开发过程中,最让我意外的是对TCP/IP协议的认识。过去一直认为TCP/IP是可靠的连接,加上过去开发的软件网络环境比较稳定,很少在这个问题上纠结......
  • 货币系统—背包问题—python题解
    题目链接:货币系统题目描述:给定V种货币(单位:元),每种货币使用的次数不限。不同种类的货币,面值可能是相同的。现在,要你用这V种货币凑出N元钱,请问共有多少种不同的凑法。输入格式第一行包含两个整数V和N。接下来的若干行,将一共输入V个整数,每个整数表示一种货币的......
  • 记一次 .NET某管理局检测系统 内存暴涨分析
    一:背景1.讲故事前些天有位朋友微信找到我,说他们的WPF程序有内存泄漏的情况,让我帮忙看下怎么回事?并且dump也抓到了,网上关于程序内存泄漏,内存暴涨的文章不计其数,看样子这个dump不是很好分析,不管怎么说,上windbg说话。二:WinDbg分析1.内存真的暴涨吗在.NET调试训练营中我一直......