1、第 九 章中断系统与 8259A 中断控制器,.1 中断的基本概念,复习CPU与外设信息交换的控制方式种类 以查询方式输入为例,当外设数据未准备好时, CPU需要不断查询外设是否准备好的状态,效率低,1.中断方式示意 (以输入中断为例),中断基本概念,2. 什么是中断?,CPU暂停执行现行程序,转而处理随机事件,处理完毕后再返回被中断的程序,这一全过程称为中断。,3. 中断源 能够引发CPU中断的信息源,(1)外部中断源(硬件中断源)I/O设备 如键盘、显示器、打印机数据通道 如磁带、磁盘时钟 如8254 0#,由此引发的中断故障源 如掉电、存贮器奇偶校验错 (2)内部中断源(软件中断源)执行
2、INT软件中断指令 如执行指令INT 21HCPU指令执行产生的异常 如被0除、单步执行,中断基本概念,选通信号,4. 具有中断请求功能的输入接口示意图,输 入 设 备,锁 存 器 (8),三态 缓冲 器 (8),CPU 数据线,RD Q,+5 V,中断请求 触发器,QD,中断允许触发器,数据线D0位,地址译码器,INTR,地址总线,IOW,IOR,控制口选中,数据口选中,中断基本概念,5. 中断系统 为实现中断而采取的硬件和软件的确集合。,6.中断系统应具备的基本功能,对于硬件中断,接口电路应具备屏蔽和开放的功能,这种功能由程序员通过软件去控制。,能实现中断判优(中断排队),当有多个中断源提
3、出请求时,应能优先响应高级别的中断源。,中断基本概念,能够实现中断嵌套,即高级别的中断源能够中断低级别的中断服务程序。,响应中断后,能自动转入中断处理,处理完毕能自动返回断点。,设“B” 级别高于“A”,中断基本概念,1. 开中断指令 STI功能:使F寄存器中I标志置1,CPU处于开中断状态。,2. 关中断指令 CLI功能:使F寄存器中I标志置0,CPU处于关中断状态。,3. 软件中断指令 INT nn为中断类型码,n为0255之间有定义的无符号整数。功能:无条件转向n型中断服务子程序。,.2 80X86的中断指令,INT n 指令的执行过程CPU响应软件中断的过程, F寄存器栈(保存INT
4、n 之前的F状态)使F中的T标志置0禁止单步操作I标志置0CPU处于关中断状态, 断口地址栈 先:断口基地址(CS) 栈,后:断口偏移地址(IP)栈, CPU从4n 4n+3单元取出n型服务程序入口地址 IP:CS,从而转入n型中断服务程序。,80X86中断指令,4. 中断返回指令 IRET,功能:依次从栈顶弹出6个元素 IP,CS,F如果栈顶是INT n 的断口地址,则执行IRET后,返回断点,否则不能。,执行INT n 栈顶示意图,执行IRET 示意图,sp ,IRET 是中断服务子程序的出口指令,80X86中断指令,.3 中断向量,什么是中断向量?中断向量是实模式下,中断服务子程序的 入
5、口地址,它由2部分组成: 服务程序所在代码段的段基址 2 个字节 服务程序入口的偏移地址 2 个字节,2. 中断向量表,每个中断都指定了一个类型码,也称为中断号。 每一种中断对应有一个中断服务程序(Interrupt Service Program ISP ),中断类型码通过一个地址指针表与中断服务程序的入口地址相联系:实模式下: 该表称为中断向量表; 保护模式下:该表称为中断描述符表。,3. 中断向量表的设置CPU规定:在实模式下,中断向量表需设置在系统的RAM最低端的1K单元 (00000H 003FFH),中断向量,4. 中断向量表的表地址与中断类型的关系,如:“21H”型中断向量:存放
6、在84H 87H单元中 问:9CH型中断向量存放在何处?,解: 9CH 4=1001110000=270H9CH型中断向量存于 270H 273H单元中,中断向量,5. 中断向量的引导作用,CPU响应软件中断的过程,中断向量,6. 中断向量表的初始化,由BIOS设计的中断服务程序(如INT 16H , INT 10H) 其中断向量在加电时由BIOS负责写入中断向量表。,由DOS设计的中断服务程序(如 INT 21H)其中断向量是在启动DOS时,由DOS负责写入中断向量表。,用户程序开发的中断服务程序,由用户程序写入其中断向量。,中断向量,问题:用户如何向中断向量表中写入中断向量?,中断向量,方
7、法一、用户自己编写程序填写中断向量CLIPUSH DSMOV AX, 0000HMOV DS, AXMOV BX, 4*nMOV AX, OFFSET SERVICEMOV BX, AXMOV AX, SEG SERVICEMOV BX+2, AXPOP DSSTI,中断向量,方法二、 DOS设计2个子程序,专门用于中断向量的读出、写入, INT 21H 的35H子功能 功能:读出n型中断向量 入口:AL=中断类型码 出口:ES:BX=n型中断向量, INT 21H 的25H子功能 功能:写入n型中断向量 入口:DS=中断服务程序所在代码段的段基址DX=中断服务程序入口的偏移地址AL=中断类型
8、码 出口:无,中断向量,例:把用户程序中以“TIMER”命名的中断服务子程序 的入口地址 4 1CH 4 1CH+3单元,中断向量,.4 系统中断的分类,系统中断的分类,1. CPU中断,CPU中断是指:CPU执行某些操作而引发的中断,这类中断使用了0、1、3、4、6、7中断号。,(1) 除法错中断 0型中断,(2) 单步中断 1型中断,(3) 断点中断 3型中断,(4) 溢出中断 4型中断,系统中断的分类,2. 软件中断,执行有定义的INT n指令而引发的中断,称为软件中断。,软件中断使用05H,10HFFH中的若干个中断号。又分为:,(1) BIOS中断BIOS中断,占用了05H、10H1
9、FH中断号,用户程序执 行相关的软中断指令可以调用相应的中断服务程序。,INT 05H 屏幕打印; INT 10H 屏幕显示 I/O; INT 11H 设备配置检测;,系统中断的分类,INT 12H 测试内存容量; INT 13H 磁盘I/O; INT 14H 串行通信 I/O; INT 15H BIOS扩展功能; INT 16H 键盘I/O; INT 17H 打印机I/O; INT 18H 启动PC机ROM BASIC(AT机)无; INT 19H 重新装入引导程序; INT 1AH 实时时钟管理。,中断号1DH,1EH,1FH,41H,46H也被BIOS占用了。但是,与这些中断号对应的并不
10、是中断服务程序。,系统中断的分类,(2) DOS中断DOS中断,又分为DOS专用中断,DOS保留中断,用户可调用的 DOS中断以及保留给用户开发的中断。,DOS专用中断, 22H型中断, 23H型中断, 24H型中断, 28H3FH型中断,系统中断的分类,用户可调用的DOS中断, 20H型中断, 21H型中断, 25H型中断, 26H型中断, 27H型中断,用户可开发的DOS中断,DOS保留的中断,系统中断的分类,外部硬件中断是由CPU以外的中断请求而引发的。如果有多个中断请求,怎样连接至CPU呢?,8259A,.5 8259A中断控制器,1. 8259A的内部结构,读/写 逻辑,级连/缓冲
11、比较器,SP/EN,A0,控制逻辑,中断 服务 寄存器 (ISR),优先权 电路,中断 请求 寄存器 (IRR),中断屏蔽寄存器(IMR),内部总线,CS,(1)中断请求寄存器 ( IRR),寄存引脚IR0IR7的中断请求信号,IRRi位置1,表明IRi引脚上有了中断请求信号,8259A内部结构,2. 中断屏蔽寄存器 (IMR),寄存程序员写入的中断屏蔽字,屏蔽字某位=1(IMRi位=1),则与该位对应的中断请求信号(IRRi位)就不能送到中断优先权电路。,读/写 逻辑,级连/缓冲 比较器,SP/EN,A0,控制逻辑,中断 服务 寄存器 (ISR),优先权 电路,中断 请求 寄存器 (IRR)
12、,中断屏蔽寄存器(IMR),内部总线,CS,8259A内部结构,如: MOV AL , 11111100B OUT 屏蔽寄存器口地址,AL;屏蔽IRR7 IRR2的请求开放IRR1,IRR0,如: IN AL,屏蔽寄存器口地址AND AL,11110111BOUT 屏蔽寄存器口地址,AL ;开放IRR3的请求;对其它位的请求不改变屏蔽/开放的状态,8259A内部结构,读/写 逻辑,级连/缓冲 比较器,SP/EN,A0,控制逻辑,中断 服务 寄存器 (ISR),优先权 电路,中断 请求 寄存器 (IRR),中断屏蔽寄存器(IMR),内部总线,CS,3. 优先权电路 (排队电路),8259A内部结
13、构,比较CPU正为之服务的中断源和刚进入优先权电路的中断源,哪一个级别更高。,通过判优选中其中级别最高的中断源,然后通过控制电路,从INT端向CPU提中断请求。,作用:比较同时送达优先权电路的中断请求,哪一个 级别最高。,8259A内部结构,读/写 逻辑,级连/缓冲 比较器,SP/EN,A0,控制逻辑,INT,INTA,中断 服务 寄存器 (ISR),优先权 电路,中断 请求 寄存器 (IRR),中断屏蔽寄存器(IMR),内部总线,CS,4. 中断控制电路,8259A内部结构,作用: 寄存一组初始化命令字和操作命令字,通过译码产 生内部控制信号 当判优电路选中一个中断源时向CPU提中断请求 (
14、INT),8259A内部结构,读/写 逻辑,级连/缓冲 比较器,SP/EN,A0,控制逻辑,INT,INTA,中断 服务 寄存器 (ISR),优先权 电路,中断 请求 寄存器 (IRR),中断屏蔽寄存器(IMR),内部总线,CS,5. 中断服务寄存器 (ISR),8259A内部结构,ISR: 8位寄存器,ISRi位与IRRi位一一对应,作用: 记录CPU正为之服务的是哪一个中断源,怎样记录?,反之,如果ISR0位由1 0,表明IR0的中断服务程序执行完了,所以ISR的每一位都是响应中断源的中断服务标志位。,8259A内部结构,6. 数据总线缓冲器,作用:完成与CPU数据线配接,接收初始化命令字
15、,操作命令字,当收到第二个中断响应脉冲时,通过他们 向CPU送出被选中的中断源的中断类型码n,在这之后CPU从4n+04n+3单元取出n型中断向量, 从而转入n型服务程序。,8259A内部结构,7. 读/写控制模块 功能:接收片选信号CS 、端口选择信号A0和读写控制信 号RD、WR。 一片8259A在系统中占用两个口地址,用末位地址线A0选择端口,其它地址线通过译码产生8259A的片选信号。,8. 级连/缓冲比较器,一位8259A可以管理8级中断,二片8259A“级连”可管理15级中断,级连/缓冲比较器是为完成多片8259A级连设置的模块。,8259A内部结构,8259A的管脚,2. 825
16、9A的中断过程CPU响应硬件中断的过程,首先由中断请求寄存器寄存加到引脚IR0IR7上的中断请求。,在中断屏蔽寄存器的管理下,没有被屏蔽的中断请求被送到优先权电路判优。, 经过优先权电路的判别,选中当前级别最高的中断源,然后从引脚INT向CPU发出中断请求信号。,CPU满足一定条件后,向8259A发出2个中断响应信号(负脉冲)。, 在实模式下,CPU从4n4n3单元取出该中断源的中断向量IP、CS,从而引导CPU执行该中断源的中断服务程序。,3. 8259A的中断管理方式,中断触发方式,边沿触发 IRi出现上升沿表示有中断请求 电平触发 IRi出现高电平表示有中断请求在第1个INTA#结束前,
17、IRi必须保持高电平,屏蔽中断源的方式,常规屏蔽方式MR屏蔽字决定了允许或禁止某位IRi所对应的中断:IMi=1 禁止, IMi=0 允许。 特殊屏蔽方式: 提供了允许较低优先级的中断能够得到响应的特殊手段。 原理:假定当前正在处理IR6,先进入特殊屏蔽方式,然后设置IM6=1。这时,除IR6外的所有中断请求均能得到响应。 特殊屏蔽方式中只能用SEOI命令结束中断。,中断优先级管理方式 两类优先级控制方式:固定优先级和循环优先级 固定优先级方式 所有中断请求IRi的中断优先级固定不变 优先级排列顺序可编程改变 加电后8259A的默认方式,默认优先级顺序从高到低为IR0IR7,IR7,IR6,I
18、R5,IR4,IR3,IR2,IR1,IR0,7,6,5,4,3,2,1,0,3,2,1,0,7,6,5,4,最低级,最高级,最高级,最低级,优先级,IR7,IR6,IR5,IR4,IR3,IR2,IR1,IR0,默认优先级,优先级可编程改变,循环优先级方式 中断源轮流处于最高优先级,即自动中断优先级循环 初始优先级顺序可用编程改变 某中断请求IRi被处理后,其优先级别自动降为最低,原来比它低一级的中断上升为最高级,IR7,IR6,IR5,IR4,IR3,IR2,IR1,IR0,7,6,5,4,3,2,1,0,2,1,0,7,6,5,4,3,最低级,最高级,最高级,最低级,ISR内容,IR7,
19、IR6,IR5,IR4,IR3,IR2,IR1,IR0,IR4的服务结束以前,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,IR4的服务结束以后,ISRi,中断嵌套方式 在中断处理过程中允许被更高优先级的事件所中断称为中断嵌套。8259A有两种中断嵌套方式: 普通全嵌套方式(默认方式) 一中断正被处理时,只有更高优先级的事件可以打断当前的中断处理过程而被服务。 特殊全嵌套方式 一中断正被处理时,允许同级或更高优先级的事件可以打断当前的中断处理过程而被服务。 注: 特殊全嵌套仅用于多个8259A级连时的主8259A,而不能用于从属8259A或单8259A系统。,D.,主8259
20、A,IR0IR1IR2IR3IR4IR5IR6IR7,一般嵌套方式: 从片的INT被主片封锁,故更高级别的IR0-IR2中断也无法得到响应,特殊嵌套方式: 因主片不封锁从片的INT,故级别高的IR0-IR2中断可以得到响应。(但IR3-IR7仍被本从片封锁),C.,假定IR7发生中断,并获得服务,一般嵌套方式:IR4的中断被服务时,这些中断将被封锁。,B.,特殊嵌套方式:IR4的中断被服务时,只封锁IR5-IR7。,A.,INT,E.,从8259A,INT,IR0IR1IR2IR3IR4IR5IR6IR7,一般全嵌套方式与特殊全嵌套方式的区别,去CPU,中断结束处理方式,当某一IRi中断被服务
21、时,ISR中的相应位ISRi=1。当服务结束后,则必须清零该ISRi位。使ISRi=0是通过向8259A发出中断结束命令(EOI命令)实现的。 三种EOI命令 自动EOI(AEOI)(自动EOI方式) 非指定EOI(NSEOI)(正常EOI方式) 指定EOI(SEOI)(特殊EOI方式),AEOI:在第2个INTA#结束时,由8259A使ISRi自动复位; 因不保留当前正在服务的中断的状态,故AEOI不能用于中断嵌套方式 SEOI:由CPU发出一条SEOI命令,该EOI命令中指出了所要复位的ISR的位号。 用于特殊屏蔽方式 NSEOI:由CPU发出正常EOI命令,该EOI命令使ISRi=1的位
22、中优先级最高的那一位复位。 用于普通全嵌套方式,中断服务程序,向从PIC发EOI命令,读从PIC的ISR,全0?,向主PIC发EOI命令,Y,IRET,恢复现场,N,特殊全嵌套方式下的EOI处理 只有当从PIC的中断全部处理完后,才能向主PIC发EOI命令,4. 8259A的编程,8259A的控制命令分为 初始化命令字ICW ICW1ICW4 向8259A写入ICW的过程称为初始化编程 操作命令字OCW OCW1OCW3 向8259A写入OCW的过程称为操作方式编程,8259A内部寄存器的寻址方法,需要CS#、A0、RD#、WR#和D4、D3的配合内部寄存器的访问方法如下表:,初始化命令字IC
23、W(Initialization Command Word)通常是系统开机时,由初始化程序填写,且在整个系统工作过程中保持不变。初始化命令字必须按顺 序填写。,(1) ICW1,1 初始化命令字,1需要ICW4 0不需要ICW4,1单片8259A 0级连,86系统不用(通常为0),1电平触发方式 0边沿触发方式,86系统不用(通常为0),A0 D7 D6 D5 D4 D3 D2 D1 D0,0,1 LTIM ADI SNGL ICW4,8259A的编程,1T7 T6 T5 T4 T3 ,A0 D7 D6 D5 D4 D3 D2 D1 D0,1,ICW2设置中断类型码,注:T7T3 中断向量类型
24、码高位,由编程决定低三位 自动设置为 IR0 IR7的类型编码(000 111),8259A传送的中断类型码,8259A的编程,1 S7 S6 S5 S4 S3 S2 S1 S0,1IR输入带有一个 从控制器0IR输入不带一个 从控制器,A0 D7 D6 D5 D4 D3 D2 D1 D0,1,1 0 0 0 0 0 ID2 ID1 ID0,从控制器ID,编码000111分别对应该从片的INT往主片的IR0IR7哪个端子输入。,A0 D7 D6 D5 D4 D3 D2 D1 D0,1,(3) ICW3 (主控制器),ICW3 (从控制器),8259A的编程,186 / 88模式 080 / 8
25、5模式,1自动EOI 0非自动EOI,0 X 非缓冲方式1 0 缓冲方式/从控制器1 1 缓冲方式/主控制器,1特殊完全嵌套方式 0非特殊完全嵌套方式,A0 D7 D6 D5 D4 D3 D2 D1 D0,1,(4) ICW4,0 0 0 SFNM BUF M / S AEOI PM,8259A的编程,8259A初始化编程流程图,8259A的编程,由CPU向8259A送三个字节的操作命令字OCW(Operation Command Word), 用以规定8259A的工作方式,如: 中断屏蔽 结束中断 优线权旋转 中断状态 等。操作命令字是在应用程序中设置的,设置时,顺序上没有严格的要求。,2
26、操作命令字,8259A的编程,(1)OCW1,OCW1是中断屏蔽命令字,命令格式如图。 命令字中的M7M0对应IMR的各位。Mi=1表示该中断被屏蔽,Mi=0表示该中断开放。,中断结束命令字,命令格式如图。 R、SL、EOI的不同组合决定了8259A的几种工作方式。 L2L0 这几位确定当SL=1时指定的特殊结束或特殊循环时的中断优先级。最常用的常规EOI命令字为20H。,(2)OCW2,用于控制8259A的运行方式。命令格式如图。,(3)OCW3,8259A编程举例,按以下要求初始化8259A: 端口地址为20H和21H; 中断为上升沿触发;单片8259A;不写ICW4; 与IR0-IR3对
27、应的中断向量码为08H-0BH; IR4-IR7不使用。 根据要求,各初始化参数及工作参数如下: ICW1 = 00010010 = 12H ICW2 = 08H 中断向量码 OCW1 = 11110000 = 0F0H 中断屏蔽字,初始化程序如下:INIT8259A:MOV DX,20H ;A0=0,写ICW1MOV AL,12H ;上升沿触发,单片,不写ICW4OUT DX,ALMOV DX,21H ;A0=1,写ICW2,OCW1MOV AL,08H ;ICW2OUT DX,ALMOV AL,0F0H ;OCW1:屏蔽IR4-IR7OUT DX,AL,5. 286以上微机的8259A中断
28、管理方式,系统加电后由BIOS对8259A初始化编程,设定中断管理方式 :, 中断屏蔽方式采用常规屏蔽方式 即应用时,向8259A中断屏蔽寄存器写入适当屏蔽字即可 屏蔽/开放某一级中断。, 中断源为固定优先级即IR0中断请求级别最高,IR7中断请求级别最低。,采用常规中断结束方式即在中断服务子程序结束之前向8259送中断结束命令。,6286以上的微机,对8259A的编程,对8259A编程分二步进行:,对8259A进行初始化编程系统加电后,由BIOS完成 对8259A进行应用编程编写中断程序时完成,有2项内容:,每一个硬件中断服务程序结束前必须向8259A送中断命令字,通知8259A本次中断结束
29、,否则8259A不能响应同一中断源的下次中断。,需要时,向8259A中断屏蔽寄存器写入屏蔽字。,8259A收到中断结束命令后,把ISR中的置1位清0!,1. 概述,硬件中断分类:可屏蔽中断,非屏蔽中断CPU有2个接收中断请求信号的引脚。,可屏蔽中断:输入到INTR引脚的中断请求信号,引发的中断。,非屏蔽中断:输入到NMI引脚的中断请求信号,引发的中断。,.6 PC/AT 可屏蔽中断,有可屏蔽中断请求,没有DMA请求,没有非屏蔽中断请求,响应非屏蔽中断的条件有非屏蔽中断请求,没有DMA请求一条指令执行完,响应可屏蔽中断的条件,CPU一条指令执行完毕,硬件中断的级别DMA请求级别高于非屏蔽中断高于
30、可屏蔽中断。,CPU处于开中断状态(I标=1),2. 可屏蔽中断的硬件结构,可屏蔽中断硬件结构(1),可屏蔽中断硬件结构(2),使用2片8259级连,管理15级中断,中断源与中断类型,硬件可屏蔽中断的中断级别,系统分配的8259口地址,中断结束命令, 命令字=20H,接入从8259的中断源,其服务程序结束应分别向主、从8259各送一个中断结束命令字 。, 中断的引发方式不同, CPU获取中断类型码的方式不同, CPU响应的条件不同,中断处理程序的结束方式不同,3硬件中断和软件中断的区别,4. 硬件可屏蔽中断例, 中断源:系统8254 0#计数器,每55ms有一次中断请求, 中断类型: 8型,(
31、1)日时钟中断,CPU转入8型中断后,完成下列工作 开中断,保护现场(DS压栈) 40H DS,对“日时钟计数器”加1 测算软驱马达关闭时间, 向主8259送中断结束命令 恢复现场,IRET, 执行INT 1CH, 日时钟中断处理流程:, 什么是“日时钟计数器”,BIOS系统规定:40H:6CH40H:6FH这4个单元 (共32位)为日时钟计数器,每55ms加1次,计数到:001800B0H,为24小时,其计数值供系统软件使用。,系统启动时CPU执行BIOS中的一段程序,读取CMOS实 时时钟电路的时间值计数值40:6CH40:6FH做 为日时钟计数器的计数初值。,关于1CH服务程序8#服务程
32、序,每隔55ms在DS=40H的前提下,调用一次1CH服务程序,之后又返回8型!,所以1CH中断是日时钟的外扩中断,用户可开发新的1CH中断(完成每55ms一次的定时操作)取代原来的中断服务子程序。,(2)用户中断, 中断源:系统总线插槽B4端引入的用户设计的硬件中断请求信号,用户中断请求的途径,用户 中断 请求,用户中断请求从ISA总线B4端子(IRQ9)引入,经过主8259,从8259二级中断管理,最后由主8259向CPU提中断。,只有从8259IMR1置0,主8259IMR2置0,其中断请求方能送到CPU。,实现用户中断必须对主、从8259应用编程,保证中断申请由8259中断控制器提向C
33、PU,IN AL,0A1H AND AL,11111101B OUT 0A1H,AL ;开放用户中断 IN AL,21H AND AL,11111011B OUT 21H,AL ;开放从8259中断,BIOS为“71H型”设计的服务程序如下:PUSH AXMOV AL,20HOUT 0A0H,ALPOP AXINT 0AH,用户中断的中断类型CPU响应用户中断后,自动转向“71H型”服务程序,用户中断服务程序结束 若用户中断定义为0AH型,服务程序结束前只向主8259送结束命令, 若用户中断定义为71H服务程序结束前,向主从8259各送一中断结束命令,用户定义的中断服务程序有两个设计方法:,
34、定义用户中断服务程序为“71H型”中断程序的准备工作:置换71H型中断向量,即把用户中断的中断向量471H 471 H+3单元, 定义用户中断服务程序为“0AH型”中断程序的准备工作:置换0AH型中断向量,即把用户中断的中断向量40AH 40AH+3单元,(3) 键盘中断,中断源 : 主板键盘接口电路 中断类型: 9 键盘中断全过程:,键盘接口分2部分:一部分装在键盘盒内键盘电路 另一部分装在主机板键盘接口电路,2 部分之间通过5芯电 源连接。,键盘电路以单片机为核心,加电后固化在单片机 内部的键盘扫描程序,不断扫描每一个按健,一旦有键闭合,就把闭合键的扫描码(位置码) 键盘接口电路。,键盘接
35、口电路:, 把串行扫描码通过移位寄存器转换成并行扫描码口地址为60H的端口寄存器,串并转换完毕,向主8259接中断请求, CPU响应后,转9型服务程序, 键盘中断处理流程,开中断,保护现场(DS压栈),40H DS,从60H口地址寄存器取并行扫描码分析,处理转换成2字节键代码存入键盘缓冲区,向8259发中断结束命令,恢复现场 IRET,键盘缓冲区,BIOS规定:系统RAM 40:1EH 40:3DH为键盘缓冲区共32个单元,实际使用30个单元,存放15个键的键代码。键盘缓冲区是以“先进先出”的规则存取。,由9型服务程序写入键代码,用户用INT 16H访问键盘缓冲区,键盘缓冲区是9型硬中断和IN
36、T 16H软中断之间交换信息的缓冲区 。,.7 实模式下的定时中断程序设计,应用背景在许多应用中,需要每隔一定时间完成一次预定的操作定时操作。如定时数据采集、定时显示、定时键盘扫描等,而采用定时中断技术实现这种操作具有实时性好、占用CPU资源较少的特点。,一、定时中断程序的设计方法1.定时中断源的选择 系统8254 0#计数器, 外扩8254作为定时中断源,2.确定中断服务程序的类型中断类型由定时中断源接入8259A的中断引脚IRx有关。 如果中断源是外扩定时器,由从8259A的IR1引脚引入,则服务程序应定义为0AH或71H型。 如果中断源是系统8254的0#计数器,并且定时周期是55ms的
37、整数倍,则定义用户服务程序为1CH型,取代系统的1CH型服务程序。 如果中断源是系统8254的0计数器,但定时周期55ms的整数倍,则应重新对8254 0计数器进行初始化。,定时周期不等于55ms整数倍的处理框图,3.置换中断向量服务程序的类型确定之后,应置换相应的中断 向量(使用INT21H的25H和35H子功能)。 4.开放8259A中断,从系统硬件中断的结构图可知: 用户中断要经过从8259A、主8259A两级中断控制器的管理,为了使用户中断请求送到CPU,应将从8259A的IMR的D1位置0,主8259A的IMR的D2位置0,从而打通用户中断请求的通道。,一般说,各种型号的主机板对日时
38、钟中断都是开放的,用户不必再采取措施。,5 .避免“DOS重入”,“DOS 重入”示意图,: INT21H,现行程序,21H型服务程序 : :IRET,有中断请求,: INT 21H,DOS不允许重入,6中断服务程序的执行时间必须远远小于定时中断的时间间隔,7. 中断结束向8259A发中断结束命令,定时中断周期T1,服务程序执行时间,IRX,T2 T1,T2,二.定时中断程序结构,之一,主程序,关中断 *中断源初始化置换中断向量其他准备工作开中断,等待中断,* 恢复系统资源恢复中断向量返回DOS,服务程序,保护现场,定时时间到?,执行定时操作,向8259A送结束命令恢复现场IRET,Y,N,避
39、免DOS 重入,特点:服务程序 直接进行定时操作,* 表示视具体情况而定,程序结束前,之二,主程序,关中断* 中断源初始化置换中断向量其他准备工作开中断,* 恢复系统资源恢复中断向量返回DOS,保护现场,定时时间到?,设置“时间到”标志,向8259A送结束命令恢复现场IRET,Y,N,“时间到”标志可利用数据段某单元或某个空闲寄存器,特点:服务程序不直接进行定时操作,而是建立“时间到”标志。由主程序判断时间到标志再进行定时操作。,* 表示视具体情况而定,其它操作,有无“时间到”标志?,执行定时操作,Y,程序是否需要结束?,N,Y,服务程序,N,三定时中断程序举例,【例9.8.1】1CH型中断的
40、应用假设微机系统外扩了共阴级数码管电路(见下页),要求使用系统定时源并采用中断方式每隔一秒完成一次8字左移,循环往复,直到主机键盘按下任意键时停止。,a,b,c,d,e,f,g,h,共阴级数码管结构,h,a,b,c,d,e,f,g,h,8位锁存器(位选),(200H选中),D0,D1,D2,D3,D4,D5,D6,D7,D0-D7,8位锁存器(段选),(201H选中),D0,D7,D6,D5,D4,D3,D2,D1,a,b,c,d,e,f,g,h,CS,CS,(反相输出),COM,COM,COM,COM,COM,COM,数码管显示原理使用段选码和位选码进行控制。 段选码:显示什么字符。6个数码
41、管的同名段共享连接,即D0-a;D1-b;D6-g;D7-h 。显示字符“8”的段选码是7FH。 位选码:选择被点亮的LED(仅D5-D0有效)。 点亮右边第1个LED,位选码为00100000B 点亮右边第2个LED,位选码为00010000B : : 点亮左边第1个LED,位选码为00000001B,设计思路主要解决四个问题:(1)字符“8”的显示控制问题,包括段选码和位选码;(2)定时时间间隔1秒钟如何实现;(3)每隔一秒钟“8”如何左移一位显示;(4)显示过程如何结束,MOV DX,201H MOV AL,7FH ;“8”段码 OUT DX, AL MOV DX,200H MOV AL
42、,Origin ;位码 OUT DX, AL,SHR Origin,1 :,SCAN:MOV AL,1 INT 16HJZ SCAN结束准备,定时程序由主程序和1CH型中断程序组成,主程序,图9-18 【例9.8.1】程序框图,关中断 转移系统的1CH型中断向量 写入用户的1CH型中断向量 第6位数码管显示“8”字符 开中断,有键入?,N,恢复系统的1CH型中断向量 返回DOS,Y,SCAN:MOV AH,1INT 16HJZ SCAN,CALL RESET MOV AH,4CH INT 21H,1CH型中断服务程序,保护现场 重新定义用户数据段中断计数,满18次?,18中断计数单元 ”8”字
43、左移一位,Y,N,恢复现场 中断返回,【程序清单】;FILENAME:891.ASM.486 DATA SEGMENT USE16 ;数据段定义OLD1C DD ? ICOUNT DB 18 ;中断计数初值ORIGIN DB 20H ;数码管位选初值 DATA ENDS CODE SEGMENT USE16 ;代码段ASSUME CS:CODE,DS:DATA START: MOV AX, DATA ;DS段赋值MOV DS, AXCLI ;关中断CALL READ1C CALL WRITE1C MOV DX,201H MOV AL,7FH OUT DX, AL ;输出“8”的字型码 MOV
44、DX,200H MOV AL,ORIGIN OUT DX, AL ;定位显示 STI ;开中断,SCAN: MOV AH,1 INT 16H ;有键入?JZ SCAN ;否,转移CALL RESETMOV AH,4CH ;返回DOSINT 21H ;-以下为中断服务程序 - SERVICE PROC PUSHA ;保护现场PUSH DSMOV AX,DATA ;注意:重新给DS赋值。MOV DS, AXDEC ICOUNT ;中断计数JNZ EXIT ;不满18次转移MOV ICOUNT,18 ;满18次,重新赋计数初值,SHR ORIGIN,1JNC NEXT ;没有显示到最左端,转移MOV
45、 ORIGIN, 20H ;已显示到最左端,重新赋初值NEXT: MOV AL,ORIGINMOV DX,200HOUT DX, AL ;“8”字左移一位EXIT: POP DSPOPA ;注意:不需给8259A送中断结束命令。IRET ;返回系统8型中断服务程序 SERVICE ENDP ;- READ1C PROC ;转移系统1CH型中断向量MOV AX,351CHINT 21HMOV WORD PTR OLD1C,BX MOV WORD PTR OLD1C+2,ESRET READ1C ENDP,;-WRITE1C PROC ;写入用户1CH型中断向量PUSH DSMOV AX,CODEMOV DS, AXMOV DX,OFFSET SERVICEMOV AX,251CHINT 21HPOP DSRETWRITE1C ENDP ;-RESET PROC ;恢复系统1CH型中断向量MOV DX,WORD PTR OLD1C ;注意:给DX和DS赋值不能颠倒MOV DS,WORD PTR OLD1C+2MOV AX,251CHINT 21HRETRESET ENDPCODE ENDSEND START,