《汇编语言程序设计》第十四章:端口输入、输出与外设编程_第1页
《汇编语言程序设计》第十四章:端口输入、输出与外设编程_第2页
《汇编语言程序设计》第十四章:端口输入、输出与外设编程_第3页
《汇编语言程序设计》第十四章:端口输入、输出与外设编程_第4页
《汇编语言程序设计》第十四章:端口输入、输出与外设编程_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

-朱耀庭汇编语言程序设计汇编语言程序设计第 14章 端口输入输出与外设编程v 到目前为止,大部分编程工作都是针对 CPU和内存的。但实际情况是除 CPU和内存外,主机周围有很多外部设备,如键盘、鼠标、打印机、串口、 USB等。这些设备都有其独立的芯片,有些芯片也是微处理器, CPU可以通过端口对其编程,实现对它们的控制和协调各部分的工作。在DOS环境下,这些工作是由初始化程序或 DOS内部程序通过 BIOS程序去进行的,用户只能通过 DOS或 BIOS的功能调用间接进行干预。v 本章将介绍如何通过端口直接对外设进行编程,使其完成要求的工作。内容涉及外设和其相应端口的概念、端口编址及其访问方式,同时还将介绍一些典型芯片的编程。第 14章 端口输入输出与外设编程v 输入 /输出有以下几个层次,应用程序级、语言级、 DOS级、 BIOS级和端口级。v 应用程序级的输入 /输出是指用各种工具开发的应用程序的输入 /输出,语言级是指各种语言的输入 /输出语句, DOS或 BIOS级是指通过 DOS或 BIOS功能调用实现的输入 /输出,而最底层则是端口的输入 /输出。v 本章就是要解决最后一级,也就是计算机最底层的输入 /输出问题。第 14章 端口输入输出与外设编程14.4 综合实例14.3 其他芯片编程14.2 8259A、 8253、 8255典型芯片编程14.1 端口14.1 端口v 进行端口编程前,必须了解外设和 CPU是如何连接在一起的。如图 14-1所示, CPU与外部设备(例如鼠标、键盘等)的通讯,是通过 I/O接口芯片来完成的。一个 I/O外部设备的接口芯片,根据其复杂程度可能对应数量不等的多个端口。v 在这些端口中,通常有命令口、输入口和输出口。命令口接受来自 CPU的命令,输入口、输出口分别向 CPU发送和接收信息。通常在非直接数据存取方式下,计算机内存的信息只能够通过 CPU内部的累加器 AL或 AX与外部设备的端口进行信息交换。 CPU通过 I/O设备的命令口对该 I/O设备进行编程,告诉它用什么方式工作, CPU通过该设备的输入 /输出端口与其进行信息交换。表 14-1给出了不同外部设备所对应的端口。14.1 端口图 14-1 CPU与外设连接示意图表 14-1 I/O端口地址分配表演示动画14.1 端口主机 CPU对外部设备工作的控制指挥方式 1I/O端口编址和寻址 21.主机 CPU对外部设备工作的控制指挥方式v 80X86具有简单而又灵活的端口输入 /输出方式。v 在第 6章提到的 IN/OUT指令就是直接对端口进行输入 /输出操作指令。(1) DMA方式 (直接存储器访问 )v 系统板以 8237DMA控制器芯片提供 DMA机构,主要用于存储器刷新等。该芯片有 4个 DMA通道,可编程实现 4个独立的 DMA操作。这种方式往往用于内存和外部设备的成批数据交换,它和系统硬件相关,不属于本课程的讨论范围。由于其繁杂性,详细情况请查阅8237DMA之 Intel产品说明书。v 在 DMA方式下,不必经过累加器( AX或 AL)就可以完成内存和外设的直接数据交换。即使如此,主机 CPU对它的控制也是经由端口对其编程来实现的。1.主机 CPU对外部设备工作的控制指挥方式(2) 其他方式 (查询和中断方式 )v 查询方式, I/O设备接口电路中有工作状态 忙 , 闲 ,及缓冲器 满 、 空 等状态, CPU通过 AL(或 AX),进而通过端口对这些状态不断地进行查询,以完成对设备的指挥和数据交换工作。v 中断方式, CPU不必定时查询 I/O设备的状态,而是通过 AL(或 AX)进而通过端口直接下达命令和工作方式 (即对外设编程 ),一旦 I/O芯片接收了该信息,则由 I/O接口芯片来控制相应设备的 I/O,只是在工作完成或是遇到紧急情况 (特殊条件产生 )时才通过发中断信号的方式,请求 CPU干预。 CPU相应中断后,根据情况再通过 I/O端口进行数据读写或发布新的命令。2. I/O端口编址和寻址 v I/O端口编址有两种方式:统一编址和独立编址v 统一编址也称为存储器映像编址,这种方式是从存储器空间划出一部分空间给 I/O设备 ,把 I/O端口当作内存来对待,使用与访问内存同样的指令来访问。 Motorola系列、Apple系列、部分小型机就是采用这种方式。这种方式的优点是访问内存的指令均可用于访问 I/O端口,处理数据能力强、灵活,并且 I/O 可有较大编址空间,易扩展等。缺点是 I/O端口占用了一部分内存空间,使存储器容量减小,I/O指令较长,执行速度较慢等。2. I/O端口编址和寻址 v 独立编址也称为 I/O映像编址,外设的端口不占用内存空间v 采用这种编址方式对 I/O端口操作需要采用专门的输入 /输出指令v 如 80X86系列和 Z-80系列计算机都采用这种方式v 这种方式的优点是不占用内存空间、指令独立、 I/O操作和存储器操作容易区分,缺点是访问端口的方法不如访问存储器的方法多,且 I/O空间不易扩展等2. I/O端口编址和寻址 v Intel的 X86微处理器都支持 I/O独立编址,有单独的 I/O指令 (IN/OUT等 ),使用低 16位地址表示 I/O端口地址, 16位处理器支持字节型和字型 I/O操作, 32位处理器还支持双字型 I/O操作。相邻的字节型 8位端口,可以组成一个字型16位端口,相邻的 16位端口可以组成一个双字型 32位端口。 X86系列的微处理器最多支持 64k(065535)个字节型的端口。表 14-1给出了 IBM-PC的 I/O端口地址分配表。v Intel X86系列微处理器不能用 mov, push, pop等内存读写指令对端口操作,端口读写的基本指令只有两条: in和out。端口指令寻址有两种方式:直接寻址和间接寻址。关于端口直接寻址和间接寻址的方法,在 6.7节已经有详细说明。14.2 8259A、 8253、 8255典型芯片编程v 外设通过接口芯片和 CPU交互,接口芯片内部有若干寄存器, CPU通过端口对这些寄存器进行访问v I/O芯片编程的过程,实际上就是通过端口对其内部寄存器进行设置的过程,一旦设置完毕,这些芯片就能按要求工作v 本节的重点是介绍一些典型芯片的编程方法 14.2 8259A、 8253、 8255典型芯片编程8259A芯片编程 8255编程 14.2.114.2.214.2.3 8253编程 14.2.1 8259A芯片编程v 8259A可编程中断控制器是专门用于系统中断管理的大规模集成电路芯片,图 14-2是其内部结构图。v CPU通过对 8259A送 4个初始化命令字以及 3个操作字来完成对 8259A的初始化,这一工作通常是在系统启动时由初始化程序完成的。一旦初始化完成,工作过程中一般不再改变。v 8259A提供了两个端口,但有多个命令字,因此命令字按一定顺序进行设置。系统运行过程中,可随时通过写入命令操作字来改变 8259A的某些功能。图 14-2 8259内部结构图 14.2.1 8259A芯片编程v 8259A提供两个端口,即 20H和 21H,其中 20H端口为命令口。如图 14-3所示,通过 20H端口 CPU可以向 8259A发出命令,比如中断结束等。 21H端口对应中断屏蔽寄存器( IMR),通过它可以屏蔽所要屏蔽的一些中断,如图 14-4所示。一片 8259A能够接受 8个独立的硬件中断信号,编号为 IRQ0 IRQ7,号数小的级别最高。微机中 BIOS在系统初始化时已对其编程,并且使其分别对应中断类型 08H 0FH。其中 IRQ0IRQ7引脚与中断源的对应关系如表 14-2所示。用户通过写端口 21H可以设置对应编号的中断信号的屏蔽位 图 14-3 中断结束和优先级循环控制字图 14-4 中断屏蔽寄存器14.2.1 8259A芯片编程表 14-2 中断向量表 中断号 功能 中断向量号 中断向量地址 主 8259A IRQ0 日时钟 /计数器 0 08H 0020H 0023H 主 8259A IRQ1 键盘 09H 0024H 0027H 主 8259A IRQ2 接从片 8259A 0AH 0028H 002BH 主 8259A IRQ3 串行口 2 0BH 002CH 002FH 主 8259A IRQ4 串行口 1 0CH 0030H 0033H 主 8259A IRQ5 并行口 2 0DH 0034H 0037H 主 8259A IRQ6 软盘 0EH 0038H 003BH 主 8259A IRQ7 并行口 1 0FH 003CH 003FH 14.2.1 8259A芯片编程v 如图 14-5所示,来自 8259的中断是否被响应取决于标志寄存器 FLAG中的中断标志位 IF,当该位为 1时,称作开中断。在开中断状态,即 IF 1, CPU允许响应任何非屏蔽中断;当该位为 0时,即关中断状态, CPU不允许相应来自8259的所有硬件中断。v 需要注意的是,在进入中断处理例行程序时,计算机会自动关中断(置 IF为 0)。因此在编写中断处理程序时,一旦允许响应硬件中断,就应在中断处理程序中使用 STI指令开中断,必要时再使用 CLI指令关中断。图 14-5 CPU响应中断14.2.1 8259A芯片编程v 中断处理应遵循如下原则:在关中断状态保护现场在关中断状态屏蔽低级中断开中断后进行中断处理向中断命令寄存器发中断结束命令在关中断状态恢复现场开中断后返回v 编写 8259A的中断处理程序时,如果要设置屏蔽字,例如,禁止除键盘以外的所有设备发出来的中断请求,则可以通过向 21H端口送 0FDH的方法来实现 :MOV AL, 0FDHOUT 21H, AL14.2.1 8259A芯片编程v 编写 8259的中断处理程序与编写软中断处理程序不同,必须参与中断服务程序结束时的信号发送工作。v 即在中断处理程序结束前,也就是 IRET之前,必须向8259发出 “中断结束 ”的 EOI命令给 8259的中断命令寄存器,表示该硬件中断处理已经完毕。v 这一命令的代码是 20H,而中断命令寄存器的端口号是20H,所以这段程序应写为:MOV AL, 20HOUT 20H, ALv 下面用一个例子来说明如何对 21H端口编程 : 14.2.1 8259A芯片编程v 例 14-1:屏蔽键盘中断例v 题目:测试屏蔽并关闭键盘中断v 设计思路:通过向 21H端口发送屏蔽字 2H实现 例 14-1:屏蔽键盘中断例v 程序说明:程序运行后,键盘不能使用,该程序慎用,最好在虚拟机上调试 14.2.2 8255编程v 图 14-6是 8255的内部结构图v 8255用于系统板配置,它支持多种设备和信号,如键盘、扬声器、配置开关和若干其他信号v 该片对应 4个 I/O口。其中 61H为输出端口 PB, 60H和 62H是两个输入端口,分别称为 PA和 PC端口, 63H对应单字节的命令寄存器v 图 14-7是端口分配图图 14-6 8255内部结构图图 14-7 8255端口分配图 1图 14-7 8255端口分配图 214.2.2 8255编程v PC机加电后, BIOS发送 99H给 63H端口将该芯片初始化。可利用 PB端口给定位置置 1的方法选择 PA和 PC端口交替输入。利用 PB口可读到曾写入 PB口的当前值。下面分别介绍 PA, PB和 PC端口。v PA口:当 PB口位 7=0时,从 PA口输入的是键盘扫描码。当 PB口位 7=1时,从 PA口输入的是由系统开关 1, 2反映的系统配置状态。其中位 7 6表示开关 1的 8 7位,它指明了驱动器个数。其中位 5 4,表示开关 1的 6 5位,指明了显示器的类型。其中位 3 2对应开关 1的 4 3,表示系统板上的 RAM数。第 1位未用。第 0位对应开关 1的位 1表示非磁盘系统。14.2.2 8255编程v PB口:位 0 2为 1分别表示选通定时器 2的门,扬声器数据选通, PC口位 0 3的选源。位 3 6置 0分别表示开盒式磁带机马达,允许 RAM,允许由扩展槽发送错误信号,禁止键盘中断。位 7则用以 PA口输入时选源,用来给键盘发送肯定信号。v PC口:位 7 4置 1分别表示奇偶错,扩充槽错,定时器 2的输出,盒式磁带机的输入。位 3 0视 PB口位 2为 1或 0而定,当 PB口位 2为 1时, PC口位 0 3分别表示系统板开关上的 1 4位,指出扩展槽上 RAM总数。当 PB口位 2为 0时, PC口位 0 3分别对应系统板开关 2的 5 8位,表示备用。14.2.2 8255编程v 例如读系统板配置开关 1所给出的驱动器个数,源程序如下。 IN AL, 61H ;读 PB口的当前值OR AL, 080H ;(AL) 80H,强迫位 7为OUT 61H, AL ;PB口位 7置 1,使 PA为开关 1开门IN AL, 60H ;读 PA口,即得开关 1状态NOT AL ;AL各位取反MOV CL, 6 ;置移位置SHR AL, CL ;右移 6位前面补 0, (AL)现为驱动器数14.2.2 8255编程v 例 14-2 编程 8255芯片 61H让扬声器发声v 题目:关闭定时器门,按同样的时间间隔打开和关闭扬声器的门让扬声器发声v 设计思路:通过 61H口关定时器门,用以下程序段定时打开或关闭扬声器门产生方波让扬声器发生IN AL, 61HMOV AH, ALXOR AL, 2OUT 61H, AL例 14-2 编程 8255芯片 61H让扬声器发声v 程序说明: 扬声器发声频率和发声时间由内外层循环控制 14.2.3 8253编程v 可编程定时 /计数器 8253通过软件设定,可以产生各种时间延迟信号,它的使用非常广泛,通常用于定时控制、延时、计数等场合。如定时刷新 RAM、系统时钟的计时、扬声器的发音长短的控制等。在使用的时候,需要进行严密的计算和精确的测试,以满足不同的要求。 Intel 8254是 8253的改进型号,其内部工作方式,外部引脚与 8253完全相同,只是增加了一个读回命令和状态字。 8253的编程同样适用于 8254v 8253是 NMOS工艺制成的大规模集成电路,通过简单编程可实现不同的功能,图 14-8为可编程定时 /计数器 8253的基本原理图图 14-8 8253内部结构图14.2.3 8253编程v 8253内部有 3个独立的计数器,每个计数器占用一个 I/O端口地址,加上控制字端口,一片 8253共占了 4个 I/O端口地址。v 8253/8254工作方式:( 1)方式 0:计数到 0结束输出正跃变的信号方式。 可以作为查询信号,也可以直接去控制某个操作( 2)方式 1:硬件可重触发单稳方式 ( 3)方式 2:频率发生器方式,用来分频( 4)方式 3:方波发生器,产生周期方波( 5)方式 4:软件触发选通方式( 6)方式 5:硬件触发选通方式14.2.3 825

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论