




已阅读5页,还剩128页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第九章中断 1基本概念 复习查询方式输入 当外设数据未准备好时 要不断查询 CPU效率低 1 中断方式示意 以输入中断为例 2 什么是中断 CPU暂停执行现行程序 转而处理随机事件 处理完毕后再返回被中断的程序 这一全过程称为中断 3 中断源能够引发CPU中断的信息源 1 外部中断源 硬件中断源 I O设备如键盘 显示器 打印机 数据通道如磁带 磁盘 时钟如82540 由此引发的中断 故障源如掉电 存贮器奇偶校验错 2 内部中断源 软件中断源 执行INT软件中断指令如执行指令INT21H CPU指令执行产生的异常如被0除 单步执行 4 中断系统为实现中断而采取的硬件 软件措施 5 中断系统应具备的基本功能 对于硬件中断 接口电路中应具备 屏蔽 和 开放 的功能 这种功能由程序员通过软件去控制 能实现中断判优 中断排队 当有多个中断源提出请求时 应能优先响应高级别的中断源 能够实现中断嵌套 即高级别的中断源能够中断低级别的中断服务程序 响应中断后 能自动转入中断处理 处理完毕能自动返回断点 为A服务 设 B 级别高于 A 6 具有中断请求功能的输入接口示意图 教材P169 输入设备 锁存器 8 三态缓冲器 8 CPU数据线 RDQ 5V 中断请求触发器 QD 中断允许触发器 数据线D0位 地址译码器 INTR 地址总线 IOW IOR 控制口选中 数据口选中 选通信号 280X86中断指令 1 开中断指令STI功能 使F寄存器中I标志置1 CPU处于开中断状态 2 关中断指令CLI功能 使F寄存器中I标志置1 CPU处于关中断状态 3 软件中断指令INTnn为中断类型码 n为0 255之间有定义的无符号整数 功能 无条件转向n型中断服务子程序 INTn指令的执行过程 CPU响应软件中断的过程 F寄存器 栈 保存INTn之前的F状态 使F中的T标志置0 禁止单步操作I标志置0 CPU处于关中断状态 断口地址 栈先 断口基地址 CS 栈 后 断口偏移地址 IP 栈 CPU从4n 4n 3单元取出n型服务程序入口地址 IP CS 从而转入n型中断服务程序 4 中断返回指令IRET 功能 依次从栈顶弹出6个元素 IP CS F如果栈顶是INTn的断口地址 则执行IRET后 返回断点 否则不能 图示执行INTn栈顶示意图 执行IRET示意图 sp IRET是中断服务子程序的出口指令 IRET和RET的区别IRET从栈顶弹出6个元素 IP CS F远程RET 从栈顶弹出4个元素 IP CS近程RET 从栈顶弹出2个元素 IP 中断向量和中断向量表 中断系统是为实现中断而采取的软 硬件措施 中断指令 中断向量和中断向量表是实现中断的重要软件措施 什么是中断向量中断向量是实模式下 中断服务子程序的入口地址 2 中断向量表 所有中断向量的集合 3 中断向量表的设置CPU规定 在实模式下 中断向量表需设置在系统的RAM最低端的1K单元 0 3FFH 它由2部分组成 服务程序所在代码段的段基址2个字节 服务程序入口的偏移地址2个字节 4 中断向量表的表地址与中断类型的关系 n型中断向量 如 21H 型中断向量 存放在84H 87H单元中问 9CH型中断向量存放在何处 解 9CH 4 1001110000 270H 9CH型中断向量存于270H 273H单元中 5 中断向量的引导作用 CPU响应软件中断的过程 6 中断向量表的初始化 由BIOS设计的中断服务程序 如INT16H INT10H 其中断向量在加电时由BIOS负责写入中断向量表 由DOS设计的中断服务程序 如INT21H 其中断向量是在启动DOS时 由DOS负责写入中断向量表 用户程序开发的中断服务程序 由用户程序写入其中断向量 方法一 自己编写程序填写中断向量CLIPUSHDSMOVAX 0000HMOVDS AXMOVBX 4 nMOVAX OFFSETSERVICEMOV BX AXMOVAX SEGSERVICEMOV BX 2 AXPOPDSSTI 方法二 DOS设计2个子程序 专门用于中断向量的读出 写入 INT21H的35H子功能 功能 读出n型中断向量入口 AL 中断类型码出口 ES BX n型中断向量 INT21H的25H子功能 功能 写入n型中断向量入口 DS 中断服务程序所在代码段的段基址DX 中断服务程序入口的偏移地址 例 把用户程序中以 TIMER 命名的中断服务子程序的入口地址 4 1CH 4 1CH 3单元 7 关于中断向量表的说明 在实模式下 系统RAM最低端的1K单元为中断向量表 但是并非每一个表项都是中断向量 BIOS利用某些表项做为 参数指针 参数指针指向的是一群参数 而不是中断服务程序 因此称它们为 向量 是比较合适的 例如 1DH型向量 指向屏幕参数表 1EH型向量 指向软盘参数表 1FH型向量 指向图型字符表 41H型向量 指向第一台硬盘参数表 46H型向量 指向第二台硬盘参数表 用户程序不能改动这些向量 当然也不能执行以1DH 1EH 1FH 41H 46H为中断类型码的软中断指令 否则系统将会瘫痪 4系统中断的分类 CPU中断逻辑 CPU中断 软件中断 INTn指令 非屏蔽中断请求 中断控制系统 NMI 可屏蔽中断请求 INTR 一 CPU中断 CPU中断是指 CPU执行某些操作而引发的中断 这类中断使用了0 1 3 4 6 7中断号 1 除法错中断 0型中断 CPU执行DIV或IDIV指令 如果除数为0 或者商数超出寄存器的表示范围 CPU自动调用0型中断服务程序 DOS为0型中断设计的服务程序并没有为 除法错 采取什么补救措施 仅仅是显示一行错误信息 Divideoverflow 然后返回DOS 因此 用户程序执行 INT0 指令是毫无意义的 2 单步中断 1型中断 3 断点中断 3型中断 八 四 当标志寄存器的T标志为1时 CPU一条指令执行完毕 自动调用1型中断服务程序 但是 DOS为1型中断设计的服务程序只有一条IRET指令 实际上 单步中断是因为DEBUG程序的需要而设计的 在用户程序中执行 INT1 指令是毫无意义的 CPU执行 INT3 指令后 调用3型中断服务程序 而DOS系统的3型中断服务程序也只有一条IRET指令 断点中断也是因为DEBUG程序的需要而设计的 而在DEBUG程序当中 利用 INT3 指令设置程序断点 当执行到 INT3 指令时 转入3型中断服务程序 该程序应由DEBUG设计 显示断点前程序的执行结果 在用户程序中执行 INT3 指令是毫无意义的 4 溢出中断 4型中断对应的软件中断指令有两种汇编格式 功能稍有不同 INTO INT4 八 四 当FLAG寄存器的溢出标志为1 在这种条件下 执行 INTO 指令 将会调用4型服务程序 否则 如果溢出标志为0 执行 INTO 指令是无效的 但是和1型 3型中断一样 DOS为4型中断设计的服务程序也只有一条IRET指令 如果用户程序需要对运算过程进行监控 应当在有可能产生溢出的运算操作之后安排一条INTO指令监测溢出标志 同时 还要自行设计溢出处理程序取代原先的4型中断服务程序 二 软件中断 执行有定义的INTn指令而引发的中断 称为软件中断 在这里 之所以加了 有定义的 这一限制词 是因为并非所有的中断号都有与之配套的中断服务程序 软件中断使用05H 10H FFH中的若干个中断号 软件中断又可分为BIOS中断 DOS中断 1 BIOS中断BIOS中断 占用了05H 10H 1FH中断号 用户程序执行相关的软中断指令可以调用相应的中断服务程序 INT05H屏幕打印 INT10H屏幕显示I O INT11H设备配置检测 八 四 INT12H测试内存容量 INT13H磁盘I O INT14H串行通信I O INT15HBIOS扩展功能 INT16H键盘I O INT17H打印机I O INT18H启动PC机ROMBASIC AT机 无 INT19H重新装入引导程序 INT1AH实时时钟管理 中断号1DH 1EH 1FH 41H 46H也被BIOS占用了 但是 与这些中断号对应的并不是中断服务程序 也就是说 不存在与这些中断号对应的软中断指令 用户程序如果执行INT1DH INT1FH INT41H INT46H 必将引起系统瘫痪 参看中断向量表的说明 八 四 2 DOS中断DOS中断 又分为DOS专用中断 DOS保留中断 用户可调用的DOS中断以及保留给用户开发的中断 1 DOS专用中断 22H型中断程序正常结束时 DOS将自动调用该中断返回父进程 23H型中断程序非正常结束时 如 用户按下Ctrl C 或者Ctrl Break中途停止程序的运行 DOS调用该中断 24H型中断程序运行发生严重错误时 例如 对软磁盘文件进行操作的时候 驱动器小门没有关闭 或进行打印操作而打印机没有连通 DOS自动调用此类中断 发出错误信息 Notready Abort Retry Ignore 这些中断是DOS专用的 DOS在调用此类中断之前 还要做些准备工作 因此 用户程序不能直接调用这些中断 八 四 28H 3FH型中断也为DOS专用 Microsoft公司没有公开这类中断的功能 但是 一些醉心钻研DOS的专家们 仍然破译出一些有价值的信息 例如 INT33H为鼠标器调用 2 用户可调用的DOS中断 20H型中断用户程序执行INT20H指令可结束程序的运行 返回DOS 但必须注意 在执行INT20H之前 必须保证用户程序CS寄存器的内容等于PSP段基址 因此在用户的COM文件中 可以直接使用INT20H返回DOS INT20H与INT21H的0号功能调用 完成相同的操作 21H型中断DOS系统的许多功能都集中在21H型中断服务程序中 用户程序把功能号写入AH寄存器 设置相应的入口参数 然后执行INT21H即可调用不同的功能 我们把执行INT21H指令所完成的功能 称为 DOS系统功能调用 八 四 25H型中断此类中断在指定的驱动器上 按照扇区号读取信息 26H型中断在指定的驱动器上 按照扇区号写入信息 INT25H INT26H称为 绝对磁盘读写调用 在此类调用中 DOS系统不使用文件控制块 也不使用文件号去管理磁盘文件 而是按照扇区号直接进行磁盘信息的读写 27H型中断中止并驻留程序于内存之中 用户程序执行INT27H可以中止程序的运行 并且把欲驻留的程序段驻留在内存之中 八 四 60H 66H是保留给用户使用的中断号 DOS没有为它们设计服务程序 启动DOS后 60H 66H型 中断向量 均为0值 正因为如此 如果你没有开发出60H 66H型中断服务程序 没有改写60H 66H型中断向量 千万不可调用此类中断 否则系统瘫痪 3 用户可开发的DOS中断 4 DOS保留的中断 DOS为了自身版本的升级和功能扩充 保留了若干个中断它们是 42H 45H 4BH 5FH 68H 6FH 72H 74H 77H 7FH 以上关于软件中断的概念 在设计应用程序时是十分有用的 实际上 如果不涉及BIOS中断 不涉及DOS中断 用户将无法设计应用程序 八 四 9 58259中断控制器 外部中断是由CPU以外的中断请求而引发的 CPU只有一个引脚接收外部的中断请求 如果有多个中断请求 怎样连接至CPU呢 为此INTEL公司设计了专用的配套芯片8259中断控制器 由8259管理8个中断源 并最后向CPU提中断请求 八 五 一 8259的内部结构 读 写逻辑 级连 缓冲比较器 SP EN A0 控制逻辑 INT INTA 中断服务寄存器 ISR 优先权电路 中断请求寄存器 IRR 中断屏蔽寄存器 IMR 内部总线 八 五 CS 1 中断请求寄存器 IRR 寄存引脚IR0 IR7的中断请求信号 IRRi位置1 表明IRi引脚上有了中断请求信号 2 中断屏蔽寄存器 IMR 寄存程序员写入的中断屏蔽字 屏蔽字某位 1 IMRi位 1 则与该位对应的中断请求信号 IRRi位 就不能送到中断优先权电路 八 五 优先权电路 Q3 Q4 IR3 IR4 Q3 Q4 IMR IRR 八 五 如 MOVAL 11111100BOUT屏蔽寄存器口地址 AL 屏蔽IRR7 IRR2的请求开放IRR1 IRR0 如 INAL 屏蔽寄存器口地址ANDAL 11110111BOUT屏蔽寄存器口地址 AL 开放IRR3的请求 对其它位的请求不改变 屏蔽 开放的状态 3 优先权电路 排队电路 作用 比较同时送达优先权电路的中断请求 哪一个级别最高 八 五 比较CPU正为之服务的中断源和刚进入优先权电路的中断源 哪一个级别更高 通过判优 选中 其中级别最高的中断源 然后通过控制电路 从INT端向CPU提中断请求 4 中断控制电路 作用 寄存一组初始化命令字和操作命令字 通过译码产生内部控制信号 当判优电路选中一个中断源时向CPU提中断请求 INT 八 五 通过INTA接收CPU送来的中断响应信号 中断响应信号是2个连续的负脉冲 八 五 5 中断服务寄存器 ISR ISR 8位寄存器 ISRi位与IRRi位一一对应 作用 记录CPU正为之服务的是哪一个中断源 怎样记录 八 五 反之 如果ISR0位由1 0 表明IR0的中断服务程序执行完了 所以ISR的每一位都是响应中断源的中断服务标志位 6 数据总线缓冲器 作用 完成与CPU数据线配接 接收初始化命令字 操作命令字 当收到第二个中断响应脉冲时 通过他们向CPU送出被选中的中断源的中断类型码n 在这之后CPU从4n 0 4n 3单元取出n型中断向量 从而转入n型服务程序 7 读 写控制模块接收CPU的读 写控制命令字和口地址选择信号 八 五 8 级连 缓冲比较器 一位8259可以管理8级中断 二片8259 级连 可管理15级中断 级连 缓冲比较器是为完成多片8259级连设置的模块 二 8259的中断过程 CPU响应硬件中断的过程 8259A的中断过程 就是微机系统响应可屏蔽中断的过程 这一过程 简单描述如下 首先由中断请求寄存器寄存加到引脚IR0 IR7上的中断请求 在中断屏蔽寄存器的管理下 没有被屏蔽的中断请求被送到优先权电路判优 八 五 经过优先权电路的判别 选中当前级别最高的中断源 然后从引脚INT向CPU发出中断请求信号 CPU满足一定条件后 向8259A发出2个中断响应信号 负脉冲 在实模式下 CPU从4 n 4 n 3单元取出该中断源的中断向量 IP CS 从而引导CPU执行该中断源的中断服务程序 八 五 三 8259的中断管理方式 8259是很复杂的中断控制器 它从5个方面对中断进行管理 每一种方式又有多种选择 八 五 说明 各种中断管理方式的选择是在初始化编程时 通过初始化命令字设定的 2 中断系统是全机的核心 只有对中断系统的方方面面全面了解的基础上才能组织初始化命令字 3 只有系统程序员才具备这方面的知识 所以对8259的初始化编程应由系统程序完成 本书不做介绍 原因是 8259A是中断系统的核心器件 对它的初始化编程要涉及到中断系统软 硬件许多问题 而且一旦完成初始化 所有硬件中断源和中断处理程序 包括已开发和未开发的 都必须受其制约 八 五 严格地讲 像这样影响深远而且带有决策性质的问题 只有微机系统的设计者才有权威定夺 正因为如此 对系统8259A的初始化编程是在微机启动之后由BIOS自动完成的 从系统安全性考虑 用户在使用过程中不应当再对其初始化 更不能改变对它的初始化设置 八 五 四 286以上微机 8259的中断管理方式 系统加电后 由BIOS对8259初始化编程 设定的中断管理方式为 中断屏蔽方式采用常规屏蔽方式即应用时 向8259中断屏蔽寄存器写入适当屏蔽字即可屏蔽 开放某一级中断 八 五 中断源为固定优先级即IR0中断请求级别最高 IR7中断请求级别最低 采用常规中断结束方式即在中断服务子程序结束之前向8259送中断结束命令 五 286以上的微机 对8259的应用编程 对8259编程分二步进行 对8259进行初始化编程 系统加电后 由BIOS完成 对8259进行应用编程 编写中断程序时 由中断程序完成 有2项内容 八 五 每一个硬件中断服务程序结束前必须向8259送中断命令字 通知8259本次中断结束 否则8259不能响应同一中断源的下次中断 八 五 需要时 向8259中断屏蔽寄存器写入屏蔽字 8259收到中断结束命令后 把ISR中的置1位清0 9 6硬件中断 一 概述 1 硬件中断分类 可屏蔽中断 非屏蔽中断CPU有2个接收中断请求信号的引脚 可屏蔽中断 输入到INTR引脚的中断请求信号 引发的中断 八 六 非屏蔽中断 输入到NMI引脚的中断请求信号 引发的中断 有可屏蔽中断请求 没有DMA请求 没有非屏蔽中断请求 4 响应非屏蔽中断的条件 有非屏蔽中断请求 没有DMA请求 一条指令执行完 八 六 3 响应可屏蔽中断的条件 CPU一条指令执行完毕 2 硬件中断的级别DMA请求级别高于非屏蔽中断高于可屏蔽中断 CPU处于开中断状态 I标 1 二 可屏蔽中断的硬件结构 可屏蔽中断硬件结构 1 八 六 硬盘 CS A0 从片片选 地址线A0 CAS2 0 INT D7 D0 INTA RD WR SP EN 从8259 主8259IR2 主8259CAS2 0 主8259相应引脚 可屏蔽中断硬件结构 2 IR1 IR3 IR5 IR7 IR0 IR2 IR4 IR6 实时时钟 IRQ10 IRQ9 IRQ12 IRQ11 用户中断 保留 保留 保留 保留 协处理器 八 六 1 使用2片8259级连 管理15级中断 八 六 2 中断源与中断类型 八 六 八 六 3 硬件可屏蔽中断的中断级别 4 系统分配的8259口地址 八 六 5 中断结束命令 命令字 20H 八 六 八 六 接入从8259的中断源 其服务程序结束应分别向主 从8259各送一个中断结束命令字 三 关于用户中断 1 用户中断请求的途径 用户中断请求 用户中断请求从ISA总线B4端子 IRQ9 引入 经过主8259 从8259二级中断管理 最后由主8259向CPU提中断 只有从8259IMR1置0 主8259IMR2置0 其中断请求方能送到CPU 八 六 2 实现用户中断必须对主 从8259应用编程 这样 对各种型号的主板都能适应 INAL 0A1HANDAL 11111101BOUT0A1H AL 开放用户中断INAL 21HANDAL 11111011BOUT21H AL 开放从8259中断 3 用户中断的中断类型CPU响应用户中断后 自动转向 71H型 服务程序 八 六 BIOS为 71H型 设计的服务程序如下 PUSHAXMOVAL 20HOUT0A0H ALPOPAXINT0AH 有两个解决方法 定义用户中断服务程序为 0AH型 中断程序的准备工作 置换0AH型中断向量 即把用户中断的中断向量 4 0AH 4 0AH 3单元 定义用户中断服务程序为 71H型 中断程序的准备工作 置换71H型中断向量 即把用户中断的中断向量 4 71H 4 71H 3单元 八 六 4 用户中断服务程序结束 若用户中断定义为0AH型 服务程序结束前只向主8259送结束命令 若用户中断定义为71H服务程序结束前 向主从8259各送一中断结束命令 四 硬件中断和软件中断的区别 综合以上描述可以看出 CPU在获得中断类型码以后 如何转向服务程序 就这一点而言 响应硬件中断和软件中断的操作是相同的 但是硬件中断和软件中断有许多不同点 八 六 中断的引发方式不同硬件中断是由CPU以外的硬设备发出中断请求 接到引脚INTR和NMI 而引发的 而软件中断是由于CPU执行INTn指令而引发的 CPU获取中断类型码的方式不同 响应硬件可屏蔽中断后 中断类型码是由8259A提供的 响应软件中断时 中断类型码是由软件中断指令INTn本身提供的 CPU响应的条件不同 CPU只有在开中断时 才能响应硬件可屏蔽中断 响应软件中断不受此限制 中断处理程序的结束方式不同 在硬件可屏蔽中断服务程序中 中断处理结束后 需要做两件事 八 六 一是向8259A发出中断结束命令 8259A收到此命令后将ISR寄存器中的相应位清0 结束中断 二是执行IRET指令 中断返回 而在软件中断服务程序中 中断处理结束后只需执行IRET指令 这些都是设计中断服务程序必须掌握的基本概念 9 7日时钟中断 1 中断源 系统82540 计数器 每55ms有一次中断请求 2 中断类型 8型 八 七 CPU转入8型中断后 完成下列工作 开中断 保护现场 DS 压栈 40H DS 对 日时钟计数器 加1 测算软驱马达关闭时间 八 七 向主8259送中断结束命令 恢复现场 IRET 执行INT1CH 3 日时钟中断处理流程 4 什么是 日时钟计数器 BIOS系统规定 40H 6CH 40H 6FH这4个单元 共32位 为日时钟计数器 每55ms加1次 计数到 001800B0H 为24小时 其计数值供系统软件使用 系统启动时CPU执行BIOS中的一段程序 读取CMOS实时时钟电路的时间值 计数值 40 6CH 40 6FH做为日时钟计数器的计数初值 八 七 5 关于1CH服务程序8 服务程序 每隔55ms在DS 40H的前提下 调用一次1CH服务程序 之后又返回8型 所以1CH中断是日时钟的外扩中断 用户可开发新的1CH中断 完成每55ms一次的定时操作 取代原来的 9 8实模式定时中断程序设计 什么是定时中断 利用中断技术 每隔一定时间完成一次预定的操作 定时操作 八 八 一 定时中断程序的设计方法 1 硬件 首先要明确谁是定时中断源 定时源是系统82540 计数器 定时源是ISA总线B4端子上的外扩定时源 2 确定中断服务程序的类型 这一问题和中断源有关系 如果中断源是ISA总线B4端子引入的则服务程序应定义为0AH或71H型 按用户中断处理 八 八 有两种可能 如果中断源是系统82540 而且定时操作周期 55ms整数倍 则定义用户服务程序为1CH型 取代系统的1CH服务程序 如果中断源是系统82540 但定时操作周期 55ms整数倍 应重新对82540 初始化 八 八 重新对系统82540 初始化 中断计数 满Nms 定时操作 新8型服务程序 满55ms 其中 X是N和55ms的最大公约数N是定时操作的周期 八 八 3 置换中断向量服务程序的类型确定之后 应置换相应的中断向量 4 开放8259中断 从硬件中断的结构图可知 用户中断要经过从8259 主8259两级中断管理 其中断请求才能送到CPU 为了适应各种类型的主机板 在中断程序的准备工作中 应将从8259IMR1位置零 主8259IMR2位置零 从而打通用户中断请求的通道 一般说 各种型号的主机板对日时钟中断都是开放的 用户不必再采取措施 八 八 5 避免 DOS重入 图示 现行程序 INT21H 中断服务程序应避免使用INT21H 八 八 6 服务程序的执行时间远远小于定时中断的时间间隔 7 中断结束向8259发中断结束命令 八 八 二 定时中断程序结构 八 八 特点 服务程序不直接进行定时操作 而是建立时间到标志 主程序中判时间到标志 再进行定时操作 八 八 三 定时中断程序设计举例 例8 9 1 1CH型中断的应用假设微机系统外扩了如下的数码管电路 要求使用系统定时源并采用中断方式 每隔一秒完成一次8字左移 循环往复 直到主机键盘按下任意键时停止 八 八 图中数码管为共阴极 6个数码管的同名段已复接 该电路有两个端口 即段选口201H 位选口200H a h 八 八 针对口地址201H执行输出指令时 段选寄存器锁存数据线D0 D7的信息 经过同相驱动器 驱动6个数码管的a h阳极段 即数据线D0对应于a段 数据线D7对应于h段 a h 八 八 针对口地址200H执行输出指令时 位选寄存器锁存数据线D0 D7位的信息 经过反相驱动器 驱动第1 第6位数码管的共阴极 当D0位为1时 点亮第1位数码管 D0位为0时 熄灭第1位数码管 以此类推 八 八 a h 设计思路 因为系统定时器每隔55ms产生一次日时钟中断 中断18次为990ms 接近一秒钟 还由于日时钟中断每次都要调用1CH型中断 因此用户可以设计新的1CH型中断服务程序 对日时钟中断进行计数 计满18次完成一次8字左移 对日时钟中断进行 中断计数 是实现长时间定时的常用方法 八 八 关中断转移系统的1CH型中断向量写入用户的1CH型中断向量第6位数码显示8字开中断 主程序 有键入 恢复系统的1CH型中断向量返回DOS Y 保护现场重新定义用户数据段中断计数 N 满18次 18 中断计数单元8字左移一位 恢复现场中断返回 Y 1CH型中断服务程序 图8 9例8 9 1程序框图 八 八 解法1 借用系统82540 计数器 定义服务程序为1CH型 八 八 程序清单 486DATASEGMENTUSE16OLD1CDD ICOUNTDB18 中断计数初值ORIGINDB20H 数码管位选初值DATAENDSCODESEGMENTUSE16ASSUMECS CODE DS DATABEG MOVAX DATAMOVDS AXCLI 关中断CALLREAD1CCALLWRITE1C 八 八 MOVDX 201HMOVAL 7FHOUTDX AL 输出8的字型码MOVDX 200HMOVAL ORIGINOUTDX AL 定位显示STI 开中断SCAN MOVAH 1INT16H 有键入 JZSCAN 否转CALLRESETMOVAH 4CHINT21H 八 八 SERVICEPROCPUSHA 保护现场PUSHDSMOVAX DATAMOVDS AX 重新给DS赋值DECICOUNT 中断计数JNZEXIT 不满18次转MOVICOUNT 18 满18次重新设置计数初值SHRORIGIN 1JNCNEXTMOVORIGIN 20HNEXT MOVAL ORIGINMOVDX 200HOUTDX AL 8字左移一位EXIT POPDS 恢复现场POPAIRET 返回系统8型中断服务程序SERVICEENDP 八 八 READ1CPROC 转移系统1CH型中断向量MOVAX 351CHINT21HMOVWORDPTROLD1C BXMOVWORDPTROLD1C 2 ESRETREAD1CENDP WRITE1CPROC 写入用户1CH型中断向量PUSHDSMOVAX CODEMOVDS AXMOVDX OFFSETSERVICEMOVAX 251CHINT21H 八 八 POPDSRETWRITE1CENDP RESETPROC 恢复系统1CH型中断向量MOVDX WORDPTROLD1CMOVDS WORDPTROLD1C 2MOVAX 251CHINT21HRETRESETENDPCODEENDSENDBEG 八 八 重点注意3个问题 进入服务程序后 重新给DS赋值 服务程序结束前 没有给8259送结束命令 RESET子程序中 给DX DS赋值不能颠倒 八 八 解法2 借用82540 计数器 重新对其初始化 使之每隔5ms有一次中断 定义服务程序为8型 源程序请见书P211 214 重点解释 怎样从用户的8型中断服务程序转入系统的8型中断服务程序 在代码段中OLD08DD 存放系统8型中断向量 每隔55ms执行一条JMPCS OLD08 OLD08 IP OLD08 2 CS 八 八 9 9实时时钟中断 中断源 主板上实时时钟电路 中断类型 70H 八 八 实时时钟中断包括 周期中断和告警中断2种 统称实时时钟中断 八 八 CMOS内部有若干存储单元 存放实时时钟信息 基准时钟为32 768KHZ 经32分频 产生1 024KHZ的方波 每1024个方波秒单元加1 每60秒分单元加1 八 八 系统正常工作时 不允许周期中断 不允许告警中断 因此 正常工作时系统是没有实时时钟中断的 八 八 如果需要 可以重新对CMOS编程 使之产生周期中断或告警中断 八 八 八 九 系统启动 CPU执行BIOS中的一段程序 读取CMOSRAM中的实时时钟 计数值 40 6CH 40 6FH做为日时钟计数器的初值 断电后 实时时钟电路由电池供电 仍连续工作象手表一样计时 所以称为实时时钟电路 初值在整机售出时调整好 八 九 八 九 一 实时时钟中断处理流程 70H型服务程序 开中断 保护现场 周期中断 事件等待计数器减976 s 够减 禁止周期中断事件等待标志置0用户等待标志置为80H Y Y N N 等待时间到 报警中断 INT4AH IRET 系统4AH型中断服务程序 向主从8259发中断结束命令恢复现场IRET N 8 12实时时钟中断处理流程 BIOS28684 1 10版 八 九 Y 问题 什么是事件等待计数器 什么是事件等待标志 什么是用户等待标志 1 什么是 事件等待标志计数器 BIOS规定 系统RAM40 9CH 40 9FH这4个单元为 事件等待计数器 存放用户预置的 等待时间 八 九 2 什么是 用户等待标志 用户等待标志 是用户程序附加段中自定义的一个字节型单元 它是70H型服务程序向用户程序传送信息的单元 3 什么是 事件等待标志 事件等待标志 是BIOS程序的一个工作单元 与用户程序无关 二 周期中断的开发 欲开发周期中断 需做两项准备工作 对CMOS重新编程 使之允许周期中断 预置等待时间 这两项工作只需成功地调用INT15H的83H子功能即可完成 八 九 INT15H83H号子功能 预置等待时间 入口参数 置AL 0 表明是预置等待时间 置CX DX 等待时间的微秒数 其中CX为高16位二进数 DX为低16位二进数 置ES BX 用户等待标志的物理地址 出口参数 C标志置1 表示预置失败 C标志置0 表示预置成功 说明 用户等待标志是一个字节型单元 该单元要求设置在用户程序的附加段 该单元偏移地址要求写入BX寄存器 八 九 若成功的执行了INT15H的83H号子功能 意味着 BIOS已经对CMOS重新编程 允许周期中断 打这以后 CMOS才能每隔976 s提出一次周期中断请求 CPU响应后转入实时时钟中断处理 对事件等待计数器减976 s 不够减时 置 用户等待标志 为80H 通报等待时间到 用户程序查询 用户等待标志 为80H时 转而执行预定的操作 八 九 例 试验周期中断 编写一个程序 利用周期中断 在程序执行后每隔2秒钟 显示一串字符 TIMETO 按任意键时停止 程序清单 DATASEGMENTFLAGDB00H 用户等待标志TTTDD2000000 等待时间 微秒 MESGDB TIMETO 0DH 0AH DATAENDSCODESEGMENTASSUMECS CODE DS DATA ES DATABEG MOVAX DATAMOVDS AX 八 九 MOVES AXAGA MOVAH 83H 预置等待时间MOVAL 0MOVBX OFFSETFLAGMOVCX WORDPTRTTT 2MOVDX WORDPTRTTTINT15HJCAGASTISCAN MOVAH 1INT16HJNZEXIT 有键入转CMPFLAG 80HJNZSCAN 用户等待标志没置位转DISP MOVAH 9MOVDX OFFSETMESG 八 九 INT21HMOVFLAG 0 用户等待标志复位JMPAGAEXIT MOVAH 4CHINT21HCODEENDSENDBEG INT21HMOVFLAG 0 用户等待标志复位JMPAGAEXIT MOVAH 4CHINT21HCODEENDSENDBEG 八 九 三 报警中断的开发 在CMOS编程允许报警中断的前提下 当实时时钟达到用户预置的报警时间的时候 CMOS发出报警中断 CPU响应后最终转向报警中断处理程序 即4AH型中断服务程序 欲开发报警中断需做两项准备工作 对CMOS重新编程使之允许报警中断 预置报警时间 这两项工作只需先行调用INT1AH的07H号子功能 然后调用INT1AH的06H子功能 即可完成 八 九 INT1AH的07H号子功能 复位报警 为预置报警时间做准备入口参数 无 INT1AH的06H号子功能 预置报警时间 入口参数 置CH 报警时刻的小时数 0 23的BCD码数 置CL 报警时刻的分钟数 0 59的BCD码数 置DH 报警时刻的秒数 0 59的BCD码数 出口参数 C标志置1 表示预置失败 C标志置0表示预置成功 八 九 例 试验报警中断 设置报警时间 当实时时钟达到报警时间时 喇叭发出三声短促的音响 注意 为了实验方便 我们令程序执行后5秒钟的系统时间为实时时间 八 九 程序清单 CODESEGMENTASSUMECS CODEBEG CLICALLWRITE4ACALLC ALARM 清除报警时间CALLS ALARM 设置报警时间CALLSETTIME 设置系统时间STISCAN MOVAH 1INT16HJZSCAN 等待中断CALLC ALARM 清除报警时间MOVAH 4CHINT21H 八 九 SERVICEPROCMOVCX 3OPEN INAL 61HORAL 00000011BOUT61H AL 接通扬声器CALLDELAY 延时CLOSE INAL 61HANDAL 11111100BOUT61H AL 关闭扬声器CALLDELAY 延时LOOPOPENIRETSERVICEENDP 八 九 DELAYPROCPUSHCXMOVAH 86HMOVCX 0MOVDX 50000INT15HPOPCXRETDELAYENDP 八 九 WRITE4APROC 设置4AH型中断向量MOVAX CODEMOVDS AXMOVDX OFFSETSERVICEMOVAX 254AHINT21HRETWRITE4AENDP 八 九 SETTIMEPROC 设置系统时间AGA MOVAH 03HMOVCX 1030HMOVDX 0INT1AHJCAGARETSETTIMEENDP C ALARMPROC 清除报警时间MOVAH 07HINT1AHRETC ALARMENDP 八 九 S ALARMPROC 设置报警时间AGAIN MOVAH 06HMOVCX 1035HMOVDH 05HINT1AHJCAGAINRETS ALARMENDPCODEENDSENDBEG 八 九 四 周期中断和报警中断的区别 相同 都是为用户提供一个时间等待的功能 不同 时间概念不同 周期中断提供的时间等待功能 其时间概念是 相对时间 是相对于程序执行时的时间 而告警中断 提供的时间等待功能 是实时时间 什么是相对时间 实时时间 如 你午休时要求同室的同学 我睡一会儿 过10分钟叫醒我 这 10分钟 就是相对时间 我睡一会儿 1 30叫醒我 这 1 30 就是实时时间 八 九 等待时间到 的通报方式不同 对于周期中断 等待时间到 BIOS置用户等待标志为80H 对于告警中断 等待时间到 CPU自动转向 4AH型 服务程序 程序的开发方式不同 对于周期中断 用户程序只能查询等待标志 当其为80H时 转而执行定时操作 对于告警中断 用户应采用中断方式 设计新的4AH服务程序 八 九 9 10键盘中断 中断源 主板键盘接口电路中断类型 9一 键盘中断全过程 八 十 1 键盘接口分2部分 一部分装在键盘盒内 键盘电路另一部分装在主机板 键盘接口电路 2部分之间通过5芯电源连接 2 键盘电路以单片机为核心 加电后固化在单片机内部的键盘扫描程序 不断扫描每一个按健 一旦有键闭合 就把闭合键的扫描码 位置码 键盘接口电路 3 键盘接口电路 把串行扫描码通过移位寄存器转换成并行扫描码 口地址为60H的端口寄存器 八 十 串并转换完毕 向主8259接中断请求 CPU响应后 转9型服务程序 二 键盘中断处理流程 开中断 保护现场 DS 压栈 40H DS 从60H口地址寄存器取并行扫描码分析 处理转换成2字节键代码存入键盘缓冲区 向8259发中断结束命令 恢复现场IRET 八 十 三 键盘缓冲区 BIOS规定 系统RAM40 1EH 40 3DH为键盘缓冲区共32个单元 实际使用30个单元 存放15个键的键代码 键盘缓冲区是以 先进先出 的规则存取 由9型服务程序写入键代码 用户用INT16H访问键盘缓冲区 键盘缓冲区是9型硬中断和INT16H软中断之间交换信息的缓冲区 注意 CPU执行INT16H时 在16H服务程序中 DS 40H 如果此时响应中断 DS的值 用户程序数据段的段基址 八 十 四 键代码生成 1 特殊键状态标志 键盘中断处理程序 从键盘接口电路获取按键扫描码 对其进行分析 区分是字符键还是特殊键 特殊键是 Ins CapsLock NumLock ScrollLock Alt Ctrl 左 右Shift 前四个是开关键 BIOS规定 系统RAM40 17H单元为特殊键的键标志单元 用来记录特殊键的状态 键标志单元位结构如下 八 十 D7 Ins键奇数次按下置1 偶数次按下置0 D6 CapsLock键奇数次按下置1 偶数次按下置0 D5 NumLock键奇数次按下置1 偶数次按下置0 D4 ScrollLock键奇数次按下置1 偶数次按下置0 D3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校园门卫安全知识培训课件
- 校园广播安全知识培训课件
- 杀鸡杀鸭测试题及答案
- 病号心理测试题及答案
- 宝鸡焊工考试题及答案
- 民法自考试题及答案
- 教育哲学考试题及答案
- 炭疽防治考试题及答案
- java容器面试题及答案分享
- 2025年广东惠州仲恺高新区中小学校教师招聘考试笔试试题(含答案)
- 电力建设水电工程智慧工地技术规范
- 2025年初级消防员试题及答案
- 2025年四川省成都市锦江区中考数学二诊试卷(含部分答案)
- 食源性疾病防治知识
- API RP 5A3-2023 套管、油管和管线管的螺纹脂推.荐方法
- 行政岗干货知识培训课件
- 向上沟通培训课件
- 食品配送车辆管理制度
- 2025智联招聘行测题库及答案解析
- 网站篡改演练方案
- 《2025年CSCO卵巢癌诊疗指南》更新要点解读
评论
0/150
提交评论