《汇编语言程序设计》第十四章:端口输入、输出与外设编程.ppt

上传人:za****8 文档编号:3205628 上传时间:2019-12-08 格式:PPT 页数:44 大小:1.41MB
返回 下载 相关 举报
《汇编语言程序设计》第十四章:端口输入、输出与外设编程.ppt_第1页
第1页 / 共44页
《汇编语言程序设计》第十四章:端口输入、输出与外设编程.ppt_第2页
第2页 / 共44页
《汇编语言程序设计》第十四章:端口输入、输出与外设编程.ppt_第3页
第3页 / 共44页
点击查看更多>>
资源描述
汇编语言程序设计-朱耀庭,南开大学朱耀庭,第14章端口输入输出与外设编程,到目前为止,大部分编程工作都是针对CPU和内存的。但实际情况是除CPU和内存外,主机周围有很多外部设备,如键盘、鼠标、打印机、串口、USB等。这些设备都有其独立的芯片,有些芯片也是微处理器,CPU可以通过端口对其编程,实现对它们的控制和协调各部分的工作。在DOS环境下,这些工作是由初始化程序或DOS内部程序通过BIOS程序去进行的,用户只能通过DOS或BIOS的功能调用间接进行干预。本章将介绍如何通过端口直接对外设进行编程,使其完成要求的工作。内容涉及外设和其相应端口的概念、端口编址及其访问方式,同时还将介绍一些典型芯片的编程。,南开大学朱耀庭,第14章端口输入输出与外设编程,输入/输出有以下几个层次,应用程序级、语言级、DOS级、BIOS级和端口级。应用程序级的输入/输出是指用各种工具开发的应用程序的输入/输出,语言级是指各种语言的输入/输出语句,DOS或BIOS级是指通过DOS或BIOS功能调用实现的输入/输出,而最底层则是端口的输入/输出。本章就是要解决最后一级,也就是计算机最底层的输入/输出问题。,南开大学朱耀庭,第14章端口输入输出与外设编程,14.4综合实例,14.3其他芯片编程,14.28259A、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-1CPU与外设连接示意图,表14-1I/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端口地址分配表。IntelX86系列微处理器不能用mov,push,pop等内存读写指令对端口操作,端口读写的基本指令只有两条:in和out。端口指令寻址有两种方式:直接寻址和间接寻址。关于端口直接寻址和间接寻址的方法,在6.7节已经有详细说明。,南开大学朱耀庭,14.28259A、8253、8255典型芯片编程,外设通过接口芯片和CPU交互,接口芯片内部有若干寄存器,CPU通过端口对这些寄存器进行访问I/O芯片编程的过程,实际上就是通过端口对其内部寄存器进行设置的过程,一旦设置完毕,这些芯片就能按要求工作本节的重点是介绍一些典型芯片的编程方法,南开大学朱耀庭,14.28259A、8253、8255典型芯片编程,8259A芯片编程,8255编程,14.2.1,14.2.2,14.2.3,8253编程,南开大学朱耀庭,14.2.18259A芯片编程,8259A可编程中断控制器是专门用于系统中断管理的大规模集成电路芯片,图14-2是其内部结构图。CPU通过对8259A送4个初始化命令字以及3个操作字来完成对8259A的初始化,这一工作通常是在系统启动时由初始化程序完成的。一旦初始化完成,工作过程中一般不再改变。8259A提供了两个端口,但有多个命令字,因此命令字按一定顺序进行设置。系统运行过程中,可随时通过写入命令操作字来改变8259A的某些功能。,图14-28259内部结构图,南开大学朱耀庭,14.2.18259A芯片编程,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.18259A芯片编程,表14-2中断向量表,南开大学朱耀庭,14.2.18259A芯片编程,如图14-5所示,来自8259的中断是否被响应取决于标志寄存器FLAG中的中断标志位IF,当该位为1时,称作开中断。在开中断状态,即IF1,CPU允许响应任何非屏蔽中断;当该位为0时,即关中断状态,CPU不允许相应来自8259的所有硬件中断。需要注意的是,在进入中断处理例行程序时,计算机会自动关中断(置IF为0)。因此在编写中断处理程序时,一旦允许响应硬件中断,就应在中断处理程序中使用STI指令开中断,必要时再使用CLI指令关中断。,图14-5CPU响应中断,南开大学朱耀庭,14.2.18259A芯片编程,中断处理应遵循如下原则:在关中断状态保护现场在关中断状态屏蔽低级中断开中断后进行中断处理向中断命令寄存器发中断结束命令在关中断状态恢复现场开中断后返回编写8259A的中断处理程序时,如果要设置屏蔽字,例如,禁止除键盘以外的所有设备发出来的中断请求,则可以通过向21H端口送0FDH的方法来实现:MOVAL,0FDHOUT21H,AL,南开大学朱耀庭,14.2.18259A芯片编程,编写8259的中断处理程序与编写软中断处理程序不同,必须参与中断服务程序结束时的信号发送工作。即在中断处理程序结束前,也就是IRET之前,必须向8259发出“中断结束”的EOI命令给8259的中断命令寄存器,表示该硬件中断处理已经完毕。这一命令的代码是20H,而中断命令寄存器的端口号是20H,所以这段程序应写为:MOVAL,20HOUT20H,AL下面用一个例子来说明如何对21H端口编程:,南开大学朱耀庭,14.2.18259A芯片编程,例14-1:屏蔽键盘中断例题目:测试屏蔽并关闭键盘中断设计思路:通过向21H端口发送屏蔽字2H实现,例14-1:屏蔽键盘中断例,程序说明:程序运行后,键盘不能使用,该程序慎用,最好在虚拟机上调试,南开大学朱耀庭,14.2.28255编程,图14-6是8255的内部结构图8255用于系统板配置,它支持多种设备和信号,如键盘、扬声器、配置开关和若干其他信号该片对应4个I/O口。其中61H为输出端口PB,60H和62H是两个输入端口,分别称为PA和PC端口,63H对应单字节的命令寄存器图14-7是端口分配图,图14-68255内部结构图,图14-78255端口分配图1,图14-78255端口分配图2,南开大学朱耀庭,14.2.28255编程,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.28255编程,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.28255编程,例如读系统板配置开关1所给出的驱动器个数,源程序如下。INAL,61H;读PB口的当前值ORAL,080H;(AL)80H,强迫位7为OUT61H,AL;PB口位7置1,使PA为开关1开门INAL,60H;读PA口,即得开关1状态NOTAL;AL各位取反MOVCL,6;置移位置SHRAL,CL;右移6位前面补0,(AL)现为驱动器数,南开大学朱耀庭,14.2.28255编程,例14-2编程8255芯片61H让扬声器发声题目:关闭定时器门,按同样的时间间隔打开和关闭扬声器的门让扬声器发声设计思路:通过61H口关定时器门,用以下程序段定时打开或关闭扬声器门产生方波让扬声器发生INAL,61HMOVAH,ALXORAL,2OUT61H,AL,例14-2编程8255芯片61H让扬声器发声,程序说明:扬声器发声频率和发声时间由内外层循环控制,南开大学朱耀庭,14.2.38253编程,可编程定时/计数器8253通过软件设定,可以产生各种时间延迟信号,它的使用非常广泛,通常用于定时控制、延时、计数等场合。如定时刷新RAM、系统时钟的计时、扬声器的发音长短的控制等。在使用的时候,需要进行严密的计算和精确的测试,以满足不同的要求。Intel8254是8253的改进型号,其内部工作方式,外部引脚与8253完全相同,只是增加了一个读回命令和状态字。8253的编程同样适用于82548253是NMOS工艺制成的大规模集成电路,通过简单编程可实现不同的功能,图14-8为可编程定时/计数器8253的基本原理图,图14-88253内部结构图,南开大学朱耀庭,14.2.38253编程,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.38253编程,它的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.38253编程,表14-38253控制字各位的含义,南开大学朱耀庭,14.2.38253编程,例如,对2#通道(即第二个计数器)编程使其用方式5,先LSB后MSB,BCD码计数。MOVAL,0BBH;选2号通道,方式5,先LSB后MSB,BCD计数OUT43H,ALMOVAL,60HOUT42H,AL;60H送LSBMOVAL,0HOUT42H,AL;0H送MSB,南开大学朱耀庭,14.2.38253编程,例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机的键盘一般使用Intel8042兼容的微控制器,现在计算机上该功能一般已集成到南桥。然而,这个设备在逻辑上仍然叫做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端口60H和64H直接访问。最后一个必须使用读命令去读,使用写命令去写。使用的端口对应8255的端口,其端口分配见图14-6。当键盘按下一个键或释放一个键的时候,键盘控制器都会把这个键的相应的扫描码值放在60H这个端口寄存器中,并向CPU提出中断请求要求读取60H端口的键盘扫描码值。对于这种多个字节的扫描码,键盘控制器会向CPU发出多个中断请求,并依次发送它们。,南开大学朱耀庭,1键盘控制器8042,例14-4:重写INT9中断处理程序例题目:写新的INT9中断处理程序,利用键盘扫描码显示小写字母和数字符号设计思路:8042和8255端口兼容,通过60H口读键盘扫描码后查表输出对应符号,例14-4:重写INT9中断处理程序例,程序说明:新的INT9中断处理程序入口是newint9,主程序入口start,键盘扫描码转字符输出过程为prkey,南开大学朱耀庭,26845CRT控制器,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每读一个音符,按对应TIME1中的时长发声,直到遇结束符0频率为止,例14-5综合实例,程序说明:音符1、2、3、4、5、6、7、1、2、3、4、5、6、7对应频率分别为131、147、165、175、196、220、247、262、294、330、349、392、440、496,南开大学朱耀庭,14.4综合实例,例14-6编程8253计时并显示时间题目:命令行输入时:分:秒(xx:xx:xx)作为初始时间,重写INT8,编程8253定时器产生每秒100次中断,根据INT8对时:分:秒的修改,显示时:分:秒。设计思路:通过对8253进行编程,使定时器每秒发出100次中断信号,来修改该中断处理程序08H类的中断入口地址,20H,21H,22H,23H的内容使其指向自行设计的这一中断处理程序。主程序做完上述准备工作后开始显示时分秒,只要秒一变就重新显示一次更新后的时间,否则动态等待。与此同时中断处理程序每1/100秒中断主程序一次,每100次更新一次秒计时值,够60秒就更新分计时值,够60分就更新时计时值,够12小时就又从0时记时,如此往复不断地处理,每次中断后都返回主程序。主程序与中断处理程序间共用时、分、秒相应的变量,例14-6编程8253计时并显示时间,程序说明:本程序执行时,输入程序名后空一格,在命令行中按时分秒的格式输入计时起始时间,然后回车。只要用户输入任一键之后就开始计时,于是在屏幕上显示一个类似电子表的台式时钟,直到重新启动机器为止,南开大学朱耀庭,ThankYou!,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!