




已阅读5页,还剩42页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
汇编语言程序设计 -朱耀庭,,南开大学 朱耀庭,,第14章 端口输入输出与外设编程,到目前为止,大部分编程工作都是针对CPU和内存的。但实际情况是除CPU和内存外,主机周围有很多外部设备,如键盘、鼠标、打印机、串口、USB等。这些设备都有其独立的芯片,有些芯片也是微处理器,CPU可以通过端口对其编程,实现对它们的控制和协调各部分的工作。在DOS环境下,这些工作是由初始化程序或DOS内部程序通过BIOS程序去进行的,用户只能通过DOS或BIOS的功能调用间接进行干预。 本章将介绍如何通过端口直接对外设进行编程,使其完成要求的工作。内容涉及外设和其相应端口的概念、端口编址及其访问方式,同时还将介绍一些典型芯片的编程。,南开大学 朱耀庭,,第14章 端口输入输出与外设编程,输入/输出有以下几个层次,应用程序级、语言级、DOS级、BIOS级和端口级。 应用程序级的输入/输出是指用各种工具开发的应用程序的输入/输出,语言级是指各种语言的输入/输出语句,DOS或BIOS级是指通过DOS或BIOS功能调用实现的输入/输出,而最底层则是端口的输入/输出。 本章就是要解决最后一级,也就是计算机最底层的输入/输出问题。,南开大学 朱耀庭,,第14章 端口输入输出与外设编程,14.4 综合实例,14.3 其他芯片编程,14.2 8259A、8253、8255典型芯片编程,14.1 端口,南开大学 朱耀庭,,14.1 端口,进行端口编程前,必须了解外设和CPU是如何连接在一起的。如图14-1所示,CPU与外部设备(例如鼠标、键盘等)的通讯,是通过I/O接口芯片来完成的。一个I/O外部设备的接口芯片,根据其复杂程度可能对应数量不等的多个端口。 在这些端口中,通常有命令口、输入口和输出口。命令口接受来自CPU的命令,输入口、输出口分别向CPU发送和接收信息。通常在非直接数据存取方式下,计算机内存的信息只能够通过CPU内部的累加器AL或AX与外部设备的端口进行信息交换。CPU通过I/O设备的命令口对该I/O设备进行编程,告诉它用什么方式工作,CPU通过该设备的输入/输出端口与其进行信息交换。表14-1给出了不同外部设备所对应的端口。,南开大学 朱耀庭,,14.1 端口,图14-1 CPU与外设连接示意图,表14-1 I/O端口地址分配表,演示动画,南开大学 朱耀庭,,14.1 端口,南开大学 朱耀庭,,1.主机CPU对外部设备工作的控制指挥方式,80X86具有简单而又灵活的端口输入/输出方式。 在第6章提到的IN/OUT指令就是直接对端口进行输入/输出操作指令。 (1) DMA方式(直接存储器访问) 系统板以8237DMA控制器芯片提供DMA机构,主要用于存储器刷新等。该芯片有4个DMA通道,可编程实现4个独立的DMA操作。这种方式往往用于内存和外部设备的成批数据交换,它和系统硬件相关,不属于本课程的讨论范围。由于其繁杂性,详细情况请查阅8237DMA之Intel产品说明书。 在DMA方式下,不必经过累加器(AX或AL)就可以完成内存和外设的直接数据交换。即使如此,主机CPU对它的控制也是经由端口对其编程来实现的。,南开大学 朱耀庭,,1.主机CPU对外部设备工作的控制指挥方式,(2) 其他方式(查询和中断方式) 查询方式,I/O设备接口电路中有工作状态忙,闲,及缓冲器满、空等状态,CPU通过AL(或AX),进而通过端口对这些状态不断地进行查询,以完成对设备的指挥和数据交换工作。 中断方式,CPU不必定时查询I/O设备的状态,而是通过AL(或AX)进而通过端口直接下达命令和工作方式(即对外设编程),一旦I/O芯片接收了该信息,则由I/O接口芯片来控制相应设备的I/O,只是在工作完成或是遇到紧急情况(特殊条件产生)时才通过发中断信号的方式,请求CPU干预。CPU相应中断后,根据情况再通过I/O端口进行数据读写或发布新的命令。,南开大学 朱耀庭,,2. I/O端口编址和寻址,I/O端口编址有两种方式:统一编址和独立编址 统一编址也称为存储器映像编址,这种方式是从存储器空间划出一部分空间给I/O设备,把I/O端口当作内存来对待,使用与访问内存同样的指令来访问。Motorola系列、Apple系列、部分小型机就是采用这种方式。这种方式的优点是访问内存的指令均可用于访问I/O端口,处理数据能力强、灵活,并且I/O 可有较大编址空间,易扩展等。缺点是I/O端口占用了一部分内存空间,使存储器容量减小,I/O指令较长,执行速度较慢等。,南开大学 朱耀庭,,2. I/O端口编址和寻址,独立编址也称为I/O映像编址,外设的端口不占用内存空间 采用这种编址方式对I/O端口操作需要采用专门的输入/输出指令 如80X86系列和Z-80系列计算机都采用这种方式 这种方式的优点是不占用内存空间、指令独立、I/O操作和存储器操作容易区分,缺点是访问端口的方法不如访问存储器的方法多,且I/O空间不易扩展等,南开大学 朱耀庭,,2. I/O端口编址和寻址,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端口地址分配表。 Intel X86系列微处理器不能用mov,push,pop等内存读写指令对端口操作,端口读写的基本指令只有两条:in和out。端口指令寻址有两种方式:直接寻址和间接寻址。关于端口直接寻址和间接寻址的方法,在6.7节已经有详细说明。,南开大学 朱耀庭,,14.2 8259A、8253、8255典型芯片编程,外设通过接口芯片和CPU交互,接口芯片内部有若干寄存器,CPU通过端口对这些寄存器进行访问 I/O芯片编程的过程,实际上就是通过端口对其内部寄存器进行设置的过程,一旦设置完毕,这些芯片就能按要求工作 本节的重点是介绍一些典型芯片的编程方法,南开大学 朱耀庭,,14.2 8259A、8253、8255典型芯片编程,8259A芯片编程,8255编程,14.2.1,14.2.2,14.2.3,8253编程,南开大学 朱耀庭,,14.2.1 8259A芯片编程,8259A可编程中断控制器是专门用于系统中断管理的大规模集成电路芯片,图14-2是其内部结构图。 CPU通过对8259A送4个初始化命令字以及3个操作字来完成对8259A的初始化,这一工作通常是在系统启动时由初始化程序完成的。一旦初始化完成,工作过程中一般不再改变。 8259A提供了两个端口,但有多个命令字,因此命令字按一定顺序进行设置。系统运行过程中,可随时通过写入命令操作字来改变8259A的某些功能。,图14-2 8259内部结构图,南开大学 朱耀庭,,14.2.1 8259A芯片编程,8259A提供两个端口,即20H和21H,其中20H端口为命令口。如图14-3所示,通过20H端口CPU可以向8259A发出命令,比如中断结束等。21H端口对应中断屏蔽寄存器(IMR),通过它可以屏蔽所要屏蔽的一些中断,如图14-4所示。一片8259A能够接受8个独立的硬件中断信号,编号为IRQ0IRQ7,号数小的级别最高。微机中BIOS在系统初始化时已对其编程,并且使其分别对应中断类型08H0FH。其中IRQ0IRQ7引脚与中断源的对应关系如表14-2所示。用户通过写端口21H可以设置对应编号的中断信号的屏蔽位,图14-3 中断结束和优先级循环控制字,图14-4 中断屏蔽寄存器,南开大学 朱耀庭,,14.2.1 8259A芯片编程,表14-2 中断向量表,南开大学 朱耀庭,,14.2.1 8259A芯片编程,如图14-5所示,来自8259的中断是否被响应取决于标志寄存器FLAG中的中断标志位IF,当该位为1时,称作开中断。在开中断状态,即IF1,CPU允许响应任何非屏蔽中断;当该位为0时,即关中断状态,CPU不允许相应来自8259的所有硬件中断。 需要注意的是,在进入中断处理例行程序时,计算机会自动关中断(置IF为0)。因此在编写中断处理程序时,一旦允许响应硬件中断,就应在中断处理程序中使用STI指令开中断,必要时再使用CLI指令关中断。,图14-5 CPU响应中断,南开大学 朱耀庭,,14.2.1 8259A芯片编程,中断处理应遵循如下原则: 在关中断状态保护现场 在关中断状态屏蔽低级中断 开中断后进行中断处理 向中断命令寄存器发中断结束命令 在关中断状态恢复现场 开中断后返回 编写8259A的中断处理程序时,如果要设置屏蔽字,例如,禁止除键盘以外的所有设备发出来的中断请求,则可以通过向21H端口送0FDH的方法来实现: MOV AL,0FDH OUT 21H,AL,南开大学 朱耀庭,,14.2.1 8259A芯片编程,编写8259的中断处理程序与编写软中断处理程序不同,必须参与中断服务程序结束时的信号发送工作。 即在中断处理程序结束前,也就是IRET之前,必须向8259发出“中断结束”的EOI命令给8259的中断命令寄存器,表示该硬件中断处理已经完毕。 这一命令的代码是20H,而中断命令寄存器的端口号是20H,所以这段程序应写为: MOV AL,20H OUT 20H,AL 下面用一个例子来说明如何对21H端口编程:,南开大学 朱耀庭,,14.2.1 8259A芯片编程,例14-1:屏蔽键盘中断例 题目:测试屏蔽并关闭键盘中断 设计思路:通过向21H端口发送屏蔽字2H实现,例14-1:屏蔽键盘中断例,程序说明:程序运行后,键盘不能使用,该程序慎用,最好在虚拟机上调试,南开大学 朱耀庭,,14.2.2 8255编程,图14-6是8255的内部结构图 8255用于系统板配置,它支持多种设备和信号,如键盘、扬声器、配置开关和若干其他信号 该片对应4个I/O口。其中61H为输出端口PB,60H和62H是两个输入端口,分别称为PA和PC端口,63H对应单字节的命令寄存器 图14-7是端口分配图,图 14-6 8255内部结构图,图14-7 8255端口分配图1,图14-7 8255端口分配图2,南开大学 朱耀庭,,14.2.2 8255编程,PC机加电后,BIOS发送99H给63H端口将该芯片初始化。可利用PB端口给定位置置1的方法选择PA和PC端口交替输入。利用PB口可读到曾写入PB口的当前值。下面分别介绍PA,PB和PC端口。 PA口:当PB口位7=0时,从PA口输入的是键盘扫描码。当PB口位7=1时,从PA口输入的是由系统开关1,2反映的系统配置状态。其中位76表示开关1的87位,它指明了驱动器个数。其中位54,表示开关1的65位,指明了显示器的类型。其中位32对应开关1的43,表示系统板上的RAM数。第1位未用。第0位对应开关1的位1表示非磁盘系统。,南开大学 朱耀庭,,14.2.2 8255编程,PB口:位02为1分别表示选通定时器2的门,扬声器数据选通,PC口位03的选源。位36置0分别表示开盒式磁带机马达,允许RAM,允许由扩展槽发送错误信号,禁止键盘中断。位7则用以PA口输入时选源,用来给键盘发送肯定信号。 PC口:位74置1分别表示奇偶错,扩充槽错,定时器2的输出,盒式磁带机的输入。位30视PB口位2为1或0而定,当PB口位2为1时,PC口位03分别表示系统板开关上的14位,指出扩展槽上RAM总数。当PB口位2为0时,PC口位03分别对应系统板开关2的58位,表示备用。,南开大学 朱耀庭,,14.2.2 8255编程,例如读系统板配置开关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编程,例14-2 编程8255芯片61H让扬声器发声 题目:关闭定时器门,按同样的时间间隔打开和关闭扬声器的门让扬声器发声 设计思路:通过61H口关定时器门,用以下程序段定时打开或关闭扬声器门产生方波让扬声器发生 IN AL,61H MOV AH,AL XOR AL,2 OUT 61H,AL,例14-2 编程8255芯片61H让扬声器发声,程序说明:扬声器发声频率和发声时间由内外层循环控制,南开大学 朱耀庭,,14.2.3 8253编程,可编程定时/计数器8253通过软件设定,可以产生各种时间延迟信号,它的使用非常广泛,通常用于定时控制、延时、计数等场合。如定时刷新RAM、系统时钟的计时、扬声器的发音长短的控制等。在使用的时候,需要进行严密的计算和精确的测试,以满足不同的要求。Intel 8254是8253的改进型号,其内部工作方式,外部引脚与8253完全相同,只是增加了一个读回命令和状态字。8253的编程同样适用于8254 8253是NMOS工艺制成的大规模集成电路,通过简单编程可实现不同的功能,图14-8为可编程定时/计数器8253的基本原理图,图14-8 8253内部结构图,南开大学 朱耀庭,,14.2.3 8253编程,8253内部有3个独立的计数器,每个计数器占用一个I/O端口地址,加上控制字端口,一片8253共占了4个I/O端口地址。 8253/8254工作方式: (1)方式0:计数到0结束输出正跃变的信号方式。 可以作为查询信号,也可以直接去控制某个操作 (2)方式1:硬件可重触发单稳方式 (3)方式2:频率发生器方式,用来分频 (4)方式3:方波发生器,产生周期方波 (5)方式4:软件触发选通方式 (6)方式5:硬件触发选通方式,南开大学 朱耀庭,,14.2.3 8253编程,它的3个计数器通道分别对应端口40H,41H,42H。每一通道均可通过43H端口编程,使其工作在上述的05六种方式之一。在系统中0#通道用以产生定时器中断,1#用以发送数据请求供DMA存储器刷新,2#到扬声器产生声音效果,由8255PC口可取样。 每一通道包括一个16位计数器和一个16位锁定寄存器(刷新前不变)。编程时将一计数值送给锁定寄存器,然后传给计数器,每输入一脉冲计数减1,减到0时发一信号。43H端口对应命令寄存器,其各位含义如下:位76指出要编程的通道,00,01,10分别对应0#,1#,2#通道。位54表示读写方式,00表示锁定当前计数器值,0表示只读/写MSB,10表示只读/写LSB,11表示先读/写LSB,后MSB(LSB,MSB各占8位)。位31表示6种方式,位0表示计数器计数方式,为0为二进制方式,为1为BCD码计数方式。8253控制字各位的含义如表14-3所示,南开大学 朱耀庭,,14.2.3 8253编程,表14-3 8253控制字各位的含义,南开大学 朱耀庭,,14.2.3 8253编程,例如,对2#通道(即第二个计数器)编程使其用方式5,先LSB后MSB,BCD码计数。 MOV AL,0BBH;选2号通道,方式5,先LSB后MSB,BCD计数 OUT 43H,AL MOV AL,60H OUT 42H,AL;60H送LSB MOV AL,0H OUT 42H,AL;0H送MSB ,南开大学 朱耀庭,,14.2.3 8253编程,例14-3:编程8255和8253让扬声器发声 题目:通过编程8255打开扬声器和定时器通道2门和编程8253发出600周声音 设计思路:根据主钟频率算出发出600周声音所需要向8253通道2锁存器发送的计数值。编程8255打开扬声器和定时器通道2门,向定时器通道2送计数值,例14-3:编程8255和8253让扬声器发声,程序说明:主钟1.19318兆赫,一个时钟周期约为888.229910-9秒。8253定时器在方式3可产生方波,600赫兹应为1/600888.229910-9=1989。若定时器通道2有输出可在8255PB口(61H)第0位和第1位为1时向扬声器输出方波经扬声器后平滑,产生方波另有他法。,南开大学 朱耀庭,,14.3 其他芯片编程,南开大学 朱耀庭,,1 键盘控制器8042,在以80X86为CPU的计算机内,主板上有一个称作键盘控制器的芯片,PC机的键盘一般使用Intel 8042兼容的微控制器,现在计算机上该功能一般已集成到南桥。 然而,这个设备在逻辑上仍然叫做8042。基于主板的不同,键盘控制器可以工作于“AT-兼容”模式, 或者“PS/2-兼容”模式。 如果主板支持PS/2鼠标就会使用后者,这时8042既是键盘控制器又是鼠标控制器。 键盘控制器根据硬连线的方式自动决定工作于哪种模式。,南开大学 朱耀庭,,1 键盘控制器8042,键盘缓冲区和状态字,键盘中断处理过程以及利用BIOS或者DOS来完成键盘输入的内容在第13章已有详细介绍。 此处介绍一下如何直接通过端口编程对键盘进行控制。 键盘控制器8042 包含如下寄存器: 1字节的输入缓存包含从键盘来的数据,只读 1字节的输出缓存 包含要被写到键盘的数据,只写 1字节的状态寄存器 8 个状态位,只读 1字节控制寄存器 7 个控制位,读写,南开大学 朱耀庭,,1 键盘控制器8042,前3个寄存器可以被CPU通过I/O端口60 H和64H直接访问。最后一个必须使用读命令去读, 使用写命令去写。使用的端口对应8255的端口,其端口分配见图14-6。 当键盘按下一个键或释放一个键的时候,键盘控制器都会把这个键的相应的扫描码值放在60H这个端口寄存器中,并向CPU提出中断请求要求读取60H端口的键盘扫描码值。对于这种多个字节的扫描码,键盘控制器会向CPU发出多个中断请求,并依次发送它们。,南开大学 朱耀庭,,1 键盘控制器8042,例14-4:重写INT 9中断处理程序例 题目:写新的INT 9 中断处理程序,利用键盘扫描码显示小写字母和数字符号 设计思路:8042和8255端口兼容,通过60H口读键盘扫描码后查表输出对应符号,例14-4:重写INT 9中断处理程序例,程序说明:新的INT 9 中断处理程序入口是newint9,主程序入口start,键盘扫描码转字符输出过程为prkey,南开大学 朱耀庭,,2 6845CRT控制器,6845CRT控制器是一个很复杂的芯片,加电后,由系统初始化,初始化后编程较容易。 它对应两个端口,3B4H端口供选择CRT芯片内部的寄存器,在访问3B5H端口时,必须先通过3B4H端口选择内部15个寄存器之一。 6845内部支持16KB字符存储器,通过015寄存器来选址。,南开大学 朱耀庭,,3彩色/图形适配器,单色有4KB存储器,从0B00H开始,而彩色有16KB存储器,从0B800H开始。 对彩色显示,6845的端口地址为3D4H,3D5H,而增加的3D9H供选色用,南开大学 朱耀庭,,4 打印机适配器,单色显示器打印机适配器,端口有3个,即3BCH、3BEH和3BDH。其中3BCH作为输出数据口,3BEH为控制口,3BDH为输入状态口。 并行打印适配器I/O口地址有378H、37AH和379H。其中378H输出数据,37AH输出控制,379H输入状态,南开大学 朱耀庭,,5异步通讯适配器8250芯片,异步通讯适配器是计算机和调制解调器等外部通信设备之间的接口电路 端口地址范围为3F8H3FEH,南开大学 朱耀庭,,14.4 综合实例,例14-5 综合实例: 题目:编写南开校歌唱歌程序 设计思路:让扬声器发某频率的声音方法见例14-3。将南开校歌简谱对应音符频率建表FREQ1,表中以0结束。将每一音符对应发声时长建表TIME1.从FREQ1每读
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 音乐一年级下册唱歌 其多列教案配套
- 全国规范化家长学校实践与发展
- 问题解决策略归纳教学设计 2024-2025学年鲁教版(五四制)(2024)六年级数学上册
- 商场商品管理培训
- x公司KayeSOP标准作业程序培训教材
- 小学英语外研版 (一年级起点)三年级上册Unit 2 Im eating hamburgers and chips.获奖教学设计
- 小学数学西师大版五年级下册第六单元 折线统计图折线统计图教案及反思
- 合同范本:专项计划协议
- 会议室租赁合同版
- 投资居间委托合同协议书
- 房地产案例:商业街-铁像寺水街
- 《神经外科常用药物》
- 义务教育地理课程标准(2022年版)
- 于承惠双手剑表格+文字行功歌诀
- 八年级物理下学期期中考试卷
- 火电厂锅炉燃烧器结构图
- 全过程工程咨询服务大纲
- 厄尔尼诺和拉尼娜现象课件
- 钢结构相关施工质量通病及预防措施
- 《认识三角形》第2课时示范公开课教学课件【七年级数学下册北师大】
- 织码匠文字材料语言源码目录
评论
0/150
提交评论