《微机原理与接口技术》课件第8章 输入输出与接口技术-1_第1页
《微机原理与接口技术》课件第8章 输入输出与接口技术-1_第2页
《微机原理与接口技术》课件第8章 输入输出与接口技术-1_第3页
《微机原理与接口技术》课件第8章 输入输出与接口技术-1_第4页
《微机原理与接口技术》课件第8章 输入输出与接口技术-1_第5页
已阅读5页,还剩118页未读 继续免费阅读

下载本文档

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

文档简介

第8章输入/输出与接口技术8.1接口技术概述8.2CPU与外设之间数据传送方式8.3DMA控制器8.4可编程定时/计数接口电路及其应用8.5可编程并行接口电路及其应用8.6可编程串行接口电路及其应用习题88.1.1CPU与外部设备之间的接口信息

CPU通过接口与外部设备的连接如图8.1所示,其中既有数据端口,又有状态端口,还有控制端口,每一个I/O端口对应一个I/O地址。从硬件角度看,端口可以理解为寄存器。数据端口可以是双向的,状态端口只作输入操作,控制端口只作输出操作。CPU用I/O指令对其直接访问。在I/O操作中,主要有三类信息:数据信息、状态信息和控制信息。8.1接口技术概述图8.1简单的外设接口

(1)数据信息:是CPU和I/O设备交换的基本信息,通常是8位或16位。数在输入过程中,数据信息一般是由外部设备通过接口芯片传递给系统的。数据信息由外设经过外设和接口之间的数据线进入接口,再到达系统的数据总线,然后送入CPU。在输出过程中,数据信息从CPU经过数据总线进入接口,再通过外设和接口之间的数据线,到达外设。

(2)状态信息:反映了当前外设的工作状态,它是由外设通过接口送入CPU的。对于输入设备来说,用Ready信号来表示待输入的数据是否准备就绪;对于输出设备来说,用Busy信号来表示输出设备是否处于空闲状态,如空闲,则可接收CPU送来的数据信息,否则CPU等待。

(3)控制信息:是CPU通过接口送给外设的。CPU通过发送控制信息控制外设的工作。外设种类不同,控制信息也各不相同。接口控制信号一般可分为两类:总线控制信号和输入/输出控制信号。总线控制信号包括数据线、地址线、IOR、LOW等;输入/输出控制信号比较复杂,一般包括数据线、输入/输出应答信号等。8.1.2输入/输出指令及其寻址方式在微型计算机系统中,端口的编址通常有两种不同的方式,一是I/O端口与存储器单元统一编址;二是I/O端口独立编址。

1.I/O端口与存储器单元统一编址所谓I/O端口与存储器单元统一编址,也称为存储器映像(MemoryMapped)I/O方式,既把每个I/O端口都当作一个存储器单元看待,I/O端口与存储器单元在同一个地址空间中进行统一编址。通常,是在整个地址空间中划分出一小块连续的地址分配给I/O端口。被分配给I/O端口的地址,存储器不能再使用,如图8.2所示。图8.2内存映射与I/O映射编址(a)内存映射编址;(b)I/O映射I/O编址

2.I/O端口独立编址I/O端口独立编址(I/OMapped),也称为I/O隔离编址或I/O指令寻址方式,即I/O端口地址区域和存储器地址区域,分别各自独立编址。访问I/O端口使用专门的I/O指令,而访问内存则使用MOV指令。CPU在寻址内存和外设时,使用不同的控制信号来区分当前是对内存操作还是对I/O操作。

3.输入/输出指令及其寻址

1)8086/8088采用的IN和OUT指令

I/O指令可以采用8位(单字节)或16位(双字节)地址两种寻址方式。如采用单字节作为端口地址,则最多可以有256个端口(端口地址号从00H~FFH),并且是直接寻址(直接端口寻址)方式,指令格式如下:输入: IN AX,Port ;从Port端口输入16位数据到AX IN AL,Port ;从Port端口输入8位数据到AL输出: OUT Port,AX ;从AX输出16位数据到Port端口

OUT Port,AL ;从AL输出8位数据到Port端口这里Port是一个单字节的8位地址。

如用双字节地址作为端口地址,则最多可以有64K个端口(端口地址号从0000H~FFFFH),并且是间接寻址方式,即把端口地址放在DX寄存器内(间接端口寻址)。其指令格式如下:输入: MOV DX,XXXXH ;16位地址

IN AX,DX ;16位传送或 IN AL,DX ;8位传送输出: MOV DX,XXXXH OUT DX,AX ;16位传送或 OUT DX,AL ;8位传送这里XXXXH为两字节地址信息。2)80286和80386/486还支持I/O端口直接与内存之间的数据传送输入: MOV DX,Port LES DI,Bufferin INSB ;8位传送或 INSW ;16位传送输出: MOV DX,Port LDS SI,Bufferout OUTSB ;8位传送或 OUTSW ;16位传送

这里的输入与输出是直接对内存储器的RAM而言,当输入时,用ES:DI指向RAM中的目标缓冲区Bufferin;当输出时,用DS:SI,指向源缓冲区Bufferout。若在INS或OUTS指令前加上REP重复前缀时,则可以实现I/O端口与RAM上的缓冲区之间进行成批数据传送。从输入/输出指令可以看出,对于PC系列的机器,I/O端口内的数据也有8位与16位之分,通常16位数据端口地址安置在偶数地址号上,CPU在一次总线周期内就可以存取16位的数据。8位数据的端口地址可以安置在偶地址号或奇地址号上,偶地址使用数据总线D7~D0传送数据,奇地址使用数据总线D15~D8传送数据。表8-l列出8位或16位数据端口在奇数或偶数端口地址号上,单字节直接寻址的输入/输出指令。表8-1IBM-PC机上I/O端口地址配置I/O端口配置地址数据总线指令举例8位偶数地址D7~D0INAL,20HOUT20H,AL奇数地址D15~D8INAL,21HOUT21H,AL16位偶数地址D15~D0INAX,20HOUT20H,AX8.1.3CPU的输入/输出时序1.I/O读总线周期时序一般I/O设备的工作速度较慢,所以在I/O总线周期的T3和T4之间插入一个等待状态Tw,使整个周期由4个T状态变为5个。所以各个信号也都要相应地延长或推迟一个时钟周期。CPU仍是在T4状态的开始采样数据线,由于CPU只用A15~A0寻址I/O端口,所以地址总线上没有A19~A16的状态。其时序如图8.3所示。图8.38086I/O读写时序

2.I/O写总线周期时序

I/O写总线周期的时序与I/O读相比,除()信号换成了()信号外,数据信号也提前产生,但仍必须保持到T4状态的上升沿之后,以便I/O端口在T4为低电平的某个时刻写入数据。8.1.4常用外围接口芯片

1.三态缓冲器74LS244外设输入的数据和状态信号,通过数据输入三态缓冲器经数据总线传送给微处理器。74LS244芯片的8位三态总线驱动器如图8.4所示。图8.474LS244结构及引脚

2.数据收发器74LS245

74LS245是一种三态输出的8总线收发器,其逻辑电路和引脚如图8.5所示。该收发器有16个双向传送的数据端,即A1~A8,B1~B8,另有两个控制端——使能端和方向控制端DIR,该芯片的功能见表8-2。

74LS245通常用于数据的双向传送、缓冲和驱动。表8-274LS245的真值表图8.574LS245结构及引脚

3.输出寄存器(74LS273)数据输出寄存器用来寄存微处理器送出的数据和命令。数据输出接口通常是用具有信息存储能力的双稳态触发器来实现的。最简单的输出接口可用D触发器构成。8D触发器74LS273如图8.6所示。8个数据输入端D0~D7与微型计算机的数据总线相连,8个数据输出端Q0~Q7与外设相连。图7.674LS273引脚及其真值表加到74LS273时钟端CLK的脉冲信号的上升沿将出现在D0~D7上的数据写入该触发器寄存。该触发器寄存的数据可由CLR上的脉冲的下降沿清除。该触发器寄存数据的过程是微处理器执行OUT指令完成的。执行OUT指令时,微处理器发出写寄存器信号,该信号通常是端口地址和I/O写信号IOW相负与产生的。将写寄存器信号接至74LS273的CLK端。OUT指令就把累加器AL中的数据通过数据总线送至该触发器寄存。74LS273可以用作无条件传送的输出接口电路。

4.锁存器74LS373锁存器是由三态缓冲器和寄存器组成的。数据进入寄存器寄存后并不立即从寄存器输出,要经过三态缓冲才能输出。锁存器既可以作数据输入寄存器,又可以作数据输出寄存器。

74LS273的数据锁存输出端Q是通过一个一般的门(二态门)输出的。也就是说,只要74LS273正常工作,其Q端总有一个确定的逻辑状态(0或1)输出。因此,74LS273无法直接用作输入接口,即它的Q端绝对不允许直接与系统的数据总线相连接。

74LS373是一种8D锁存器,具有三态驱动输出,其引线图和真值表如图8.7所示。图8.774LS373结构及引脚表8-374LS373的真值表8.2CPU与外设之间数据传送方式8.2.1程序控制方式

1.无条件传送无条件传送是一种最简单的输入/输出控制方法,一般用于控制CPU与低速I/O接口之间的信息交换,例如,开关、继电器和速度、温度、压力、流量等变送器(即A/D转换器)。由于这些信号变化很缓慢,当需要采集这些数据时,外部设备已经把数据准备就绪,无需检查端口的状态,就可以立即采集数据。数据保持时间相对于CPU的处理时间长得多。因此,输入的数据就用不着加锁存器而直接用三态缓冲器与系统总线连接。

2.有条件传送又称为程序查询方式。这种传送方式在接口电路中,除具有数据缓冲器或数据锁存器外,还应具有外设状态标志位,用来反映外部设备数据的情况。比如,在输入时,若数据已准备好,则将该标志位置位;输出时,若数据已空(数据已被取走),则将标志位置位。在接口电路中,状态寄存器也占用端口地址号。使用有条件传送方式控制数据的输入/输出,通常要按图8.8的流程进行。即首先读入设备状态标志信息,再根据所读入的状态信息进行判断,若设备未准备就绪,则程序转移去执行某种操作,或循环回去重新执行读入设备状态信息;若设备准备好,则执行完成数据传送的I/O指令。数据传送结束后,CPU转去执行其他任务,刚才所操纵的设备脱离CPU控制。图8.8条件传送示意图8.2.2中断控制方式有条件传送的缺点除了占用CPU较多的工作时间外,还难以满足实时控制系统对I/O工作的要求。因为在查询方式中,CPU处于主动地位,而外设接口处于消极被查询的被动地位。而在一般实时控制系统中,外设要求CPU为它服务是随机的,而且支持系统的外设往往有几个甚至几十个,若采用查询方式工作,很难实现系统中每一个外设都工作在最佳工作状态。所谓工作在最佳状态,是指一旦某个外设请求CPU为它服务时,CPU应该以最快的速度响应其请求。这就要求系统中的外设,具有主动申请CPU为其服务的权利。比如,当某个A/D转换器的模拟量已转换为数字量后,这时它就可以立刻向CPU发出中断请求,CPU暂时中止处理当前的事务,而转去执行优先的中断服务程序,输入A/D转换器的数字量数据。微型计算机都具有中断控制的能力,8086/8088CPU的中断结构灵活,功能很强。所以,微机系统采用中断控制I/O方式是很方便的。CPU执行完每一条指令后,都会去查询外部是否有中断请求,若有,就暂停执行现行的程序,转去执行中断服务程序,完成传送数据的任务。当然,在一个具有多个外设的系统中,在同一时刻就往往不止一个外设提出中断请求,这就引入了所谓中断优先权管理和中断嵌套等问题。8.2.3直接存储器存取(DMA)控制方式

对于一些高速外设或数据通信,如高速磁盘控制器或高速数据采集系统,中断控制方式往往满足不了它们的需要。为此,提出了数据在I/O接口与存储器之间的传送,不经CPU的干预,而是在专用硬件电路的控制下,在存储器和外部设备之间,直接开辟高速的数据传送通路直接传送。这种方法称为直接存储器存取(DirectMemoryAccess,缩写为DMA)。为实现这种工作方式而设计的专用接口电路,称为DMA控制器(DMAC)。例如,Intel公司的8257、8237,Zilog公司的Z8410(Z80DMAC),Motorola公司的MC6844等,都是能实现DMA方式的可编程DMAC芯片。DMA的工作过程大致如下:

(1)当外设准备好,可以进行DMA传送时,外设向DMA控制器发出DMA传送请求信号(DRQ)。

(2)DMA控制器收到请求后,向CPU发出“总线请求”信号HOLD,申请占用总线。

(3)CPU在完成当前总线周期后会立即对HOLD信号进行响应。响应包括两个方面,一是CPU将数据总线、地址总线和相应的控制信号线均置为高阻态,由此放弃对总线的控制权。另一方面,CPU向DMA控制器发出“总线响应”信号(HLDA)。(4)DMA控制器收到HLDA信号后,就开始控制总线,并向外设发出DMA响应信号DACK。

(5)DMA控制器送出地址信号和相应的控制信号,实现外设与内存或内存与内存之间的直接数据传送。例如,在地址总线上发出存储器的地址,向存储器发出写信号MEMW,同时向外设发出I/O地址、IOR和AEN信号,即可从外设向内存传送一个字节。

(6)DMA控制器自动修改地址和字节计数器,并据此判断是否需要重复传送操作。规定的数据传送完后,DMA控制器就撤消发往CPU的HOLD信号。CPU检测到HOLD失效后,紧接着撤消HLDA信号,并在下一时钟周期重新开始控制总线时,继续执行原来的程序。(1)硬盘和软盘I/O。可以使用DMAC作磁盘存储介质与半导体主存储器之间传送数据的接口。这种场合需要将磁盘中的大量数据(如磁盘操作系统等)快速地装入内部存储器。

(2)快速通信通道I/O。例如,光导纤维通信链路,DMAC可以用来作为计算机系统和快速通信通道之间的接口,可作为同步通信数据的发送和接收,以便提高响应时间,支持较高的数据传输速率,并使CPU脱出来做其他工作。DMA方式主要用于:(3)多处理机和多程序数据块传送。对于多处理机结构,通过DMAC控制数据传送,可以较容易地实现专用存储器和公用存储器之间的数据传送,对多任务应用、页式调度和任务调度都需要传送大量的数据。因此,采用DMA方式可以提高数据传输速度。

(4)扫描操作。在图像处理中,对CRT屏幕送数据,也可以采用DMA方式。(5)快速数据采集。当要采集的数据量很大,而且数据是以密集突发的形式出现,例如,对波形的采集,此时采用DMA方式可能是最好的方法,它能满足响应时间和数据传输速率的要求。

(6)在PC/XT机中还采用DMA方式进行DRAM的刷新操作。DMA工作过程波形如图8.9所示。图8.9DMA工作波形8.2.4I/O处理机方式

8089是专门用来处理输入/输出的协处理器。它共有52条指令、lMB寻址能力和两个独立的DMA通道。当8086/8088加上8089组成系统后,8089能代替8086/8088,以通道控制方式管理各种I/O设备。以通道控制方式管理I/O设备,目前只有在大中型计算机中才普遍使用,因此,8089为微机的输入/输出系统设计带来换代性的变化。一般情况下,通过接口电路控制I/O外设,必须依靠CPU的支持,对于非DMA方式,从外部设备每读入一个字节或发送给外部设备一个字节,都必须由CPU执行指令来完成。虽然高速设备可以用DMA传送数据,但仍然需要CPU对DMAC进行初始化,启动DMA操作,以及完成每次DMA操作之后都要检查传送的状态。

对I/O数据的处理,如对数据的变换、拆、装、检查等,更加需要CPU支持,CPU控制I/O如图8.10(a)所示。从图中不难看出,普通I/O接口,不管是DMA方式还是非DMA方式,在I/O传送过程都要占去CPU的开销。8089是一个智能控制器,它可以取出和执行指令,除了控制数据传送外,还可以执行算术和逻辑运算、转移、搜索和转换。当CPU需要进行I/O操作时,它只要在存储器中建立一个信息块,将所需要的操作和有关参数按照规定列入,然后通知8089前来读取。8089读得操作控制信息后,能自动完成全部的I/O操作。

因此,对配合8089的CPU来说,所有输入/输出的操作过程中,数据都是以块为单位成批发送或接收的,而把一块数据按字或字节与I/O设备(如CRT终端,行式打印机)交换都由8089来完成,当8089控制数据交换时,CPU可以并行处理其他操作。由于引入8089来承担原来必须由CPU承担的I/O操作,这就大大地减轻了CPU控制外设的负担,有效地减少了CPU在I/O处理中的开销。8089控制I/O如图8.10(b)所示。图8.108086、8089控制I/O(a)8086控制I/O;(b)8089控制I/O8.3DMA控制器8237及其应用8.3.1DMA控制器的功能通用的DMA控制器应具有以下功能:

(1)编程设定DMA的传输模式及其所访问内存的地址区域。

(2)屏蔽或接受外部设备的DMA请求(DREQ)。当有多个设备同时请求时,还要进行优先级排队,首先接受最高级的请求。(3)向CPU转达DMA请求。DMA控制器要向CPU发出总线请求信号HOLD(高电平有效),请求CPU放弃总线的控制。

(4)接收CPU的总线响应信号(HLDA)。接管总线控制权,实现对总线的控制。

(5)向相应外部设备转达DMA允许信号DACK。于是在DMA控制器的管理下,实现外部设备和存储器之间的数据直接传送。(6)在传送过程中进行地址修改和字节计数。在传送完要求的字节数后,向CPU发出DMA结束信号(EOP),撤消总线请求(HRQ),将总线控制权交还给CPU。

DMA控制器一方面可以接管总线,直接在其他I/O接口和存储器之间进行读写操作,就像CPU一样成为总线的主控器件,这是有别于其他I/O控制器的根本不同之处。另一方面,作为一个可编程I/O器件,其DMA控制功能正是通过初始化编程来设置的。当CPU用I/O指令对DMA控制器写入或者读出时,它又和其他I/O电路一样成为总线的从属部件。8.3.2可编程控制器Intel8237DMAC的主要性能和内部结构

8237DMAC是Intel8080、8085、8086、8088系列通用的,一种高性能可编程DMA控制器芯片,它的性能如下:

(1)使用单一的+5V电源、单相时钟、40条引脚、双列直插式封装。时钟频率为3~5MHz,最高速率可达1.6MB/s。

(2)具有四个独立的通道。可以采用级联方式扩充用户所需要的通道,每个通道都具有16位地址寄存器和16位字节计数器。(3)用户通过编程,可以在四种操作类型和四种传送方式之中任选一种。

(4)每个通道都具有独立的允许/禁止DMA请求的控制。所有通道都具有独立的自动重置原始状态和参数的能力。

(5)有增1和减1自动修改地址的能力。

(6)具有固定优先权和循环优先权两种优先权排序的优先权控制逻辑。(7)每个通道都有软件的DMA请求。还各有一对联络信号线(通道请求信号DREQ和响应信号DACK),而且DREQ和DACK信号的有效电平可以通过编程来设定。

(8)具有终止DMA传送的外部信号输入引脚,外部通过此引脚输入有效低电平的过程终止信号EOP,可以终止正在执行的DMA操作。每个通道在结束DMA传送后,会产生过程终止信号EOP输出,可以用它作为中断请求信号输出。

8237A的内部寄存器的类型和数量如表8-4所示。表8-48237A内部寄存器8237A由I/O缓冲器、时序和控制逻辑、优先级编码器和循环优先级逻辑、命令控制逻辑和内部寄存器组五部分组成,如图8.11所示。其中图(a)是8237A内部结构框图,图(b)是四通道示意图。通道部分只画出了一个通道的情况,即每个通道都有一个基地址寄存器、基字节数寄存器、当前地址寄存器和当前字节数寄存器(16位),每一个通道都有一个6位的模式寄存器以控制不同的工作模式。图8.118237A结构(a)内部结构框图;(b)四通道示意框图图8.118237A结构(a)内部结构框图;(b)四通道示意框图8.3.38237的引脚和时序图8.128237引脚

引脚的功能定义如下:

CLK(Clock):时钟输入,用来控制8237内部操作定时和DMA传送时的数据传送速率。

CS(ChipSelect):片选输入,低电平有效。在CPU控制总线时,即8237在受控方式下,当CS有效时,选中该8237作为I/O设备,而当CPU向8237写入编程控制字时,它开启I/O写输入;当CPU从8237读回状态字,或当前地址、当前字节计数器内容时,它开启I/O读输入。在DMA控制总线时,自动禁止CS输入,以防止DMA操作期间该器件选中自己。RESET:复位输入,高电平有效。RESET有效时,会清除命令、状态、请求和暂存寄存器,并清除字节指示器和置位屏蔽寄存器。复位后,8237处于空闲周期,它的所有控制线都处于高阻状态,并且禁止所有通道的DMA操作。复位之后必须重新对8237初始化,它才能进入DMA操作。READY:准备好输入信号。当选用的存储器或I/O设备速度比较慢时,可用这个异步输入信号使存储器或I/O读写周期插入等待状态,以延长8237传送的读/写脉冲(IOR,LOW,EMMR和MEMW)。

HRQ(HoldRequest):请求占有信号,输出,高电平有效。在仅有一块8237的系统中,HRQ通常接到CPU的HOLD引脚,用来向CPU请求对系统总线的控制权。如果通道的相应屏蔽位被清除,也就是说DMA请求未被屏蔽,只要出现DREQ有效信号,8237就会立即发出HRQ有效信号。在HRQ有效之后,至少等待一个时钟周期后,HLDA才会有效。HLDA(HoldAcknowledge):同意让出总线响应输入信号,高电平有效。来自CPU的同意让出总线响应信号,它有效表示CPU已经让出对总线的控制权,把总线的控制权交给DMAC。

DREQ0~DREQ3(DMARequest):DMA请求输入信号。它们的有效电平可由编程设定。复位时使它们初始化为高电平有效。这4条DMA请求线是外部电路为取得DMA服务,而送到各个通道的请求信号。在固定优先权时,DREQ0的优先权最高,DREQ3的优先权最低。各通道的优先权级别是可以编程设定的,当通道的DREQ有效时,就向8237请求DMA操作。DACK是响应DREQ信号后,进入DMA服务的应答信号,在响应的DACK产生前DREQ必须维持有效。DACK0~DACK3(DMAAcknowledge):DMA响应输出,它们的有效电平可由编程设定,复位时使它们初始化为低电平有效。8237用这些信号来通知各自的外部设备已经被授予一个DMA周期了,即利用有效的DACK信号作为I/O接口的选通信号。系统允许多个DREQ同时有效,但在同一时间,只能一个DACK信号有效。

A3~A0(Address):地址线的低4位,双向、三态地址线。CPU控制总线时,它们是输入信号,用来寻址要读出或写入的8237内部寄存器,在DMA的有效周期内,由它们输出低4位地址。A7~A4:三态、输出的地址线。在DMA周期,输出低字节的高4位地址A7~A4。

DB7~DB0:双向、三态的数据总线,连接到系统数据总线上。在I/O读期间,在编程条件下,输出被允许。可以将8237内部的地址寄存器、状态寄存器、暂存寄存器和字节计数器中的内容读入CPU。当CPU对8237的控制寄存器写入控制字时,在一个I/O写周期内,这些输出被禁止,数据从CPU写入8237。在DMA操作期间,8237的高8位地址A7~A0,由DB7~DB0输出,并由ADSTB信号将这些地址信息锁存入地址锁存器。若是进行存储器与存储器之间的DMA操作,则在存储器读出期间,把从源存储器读出的数据输入到8237的暂存器;而在存储器写入期间,数据再从暂存器输出,然后写入到新的目的存储单元。ADSTB(AddressStrobe):地址选通、输出信号,高电平有效。用来将从DB7~DB0,输出的高8位地址A7~A0选通到地址锁存器。

AEN(AddressEnable):地址允许、输出信号,高电平有效。在DMA传送期间,该信号有效时,禁止其他系统总线驱动器使用系统总线,同时允许地址锁存器中的高8位地址信息送上系统地址总线。

IOR(I/ORead):I/O读,双向、三态,低电平有效。CPU控制总线时由CPU发来,若该信号有效,表示CPU读取8237内部寄存器。在进行DMA操作时由8237发出,采用读取I/O设备的控制信号。LOW:I/O写,双向、三态,低电平有效。CPU控制总线时由CPU发来,CPU用它把数据写入8237。而在DMA操作期间LOW是由8237发出,作为对I/O设备写入的控制信号。

MEMR(MemoryRead):存储器读,输出,三态,低电平有效。在DMA操作期间MEMR是由8237发出,作为从选定的存储单元读出数据的控制信号。

MEMW(MemoryWrite):存储器写,输出,三态,低电平有效。在DMA操作期间,MEMW由8237发出,作为把数据写入选定的存储单元的控制信号。EOP(EndOfProcess):过程结束,双向,低电平有效。表示DMA服务结束。当8237接收到有效的EOP信号时,就会终止当前正在执行的DMA操作。当复位请求位时,如果是允许自动预置(自动再启动方式),就将该通道的基址寄存器和基字节计数器的内容,重新写入当前的地址寄存器和当前的字节计数器,并使屏蔽位保持不变。若不是自动预置方式,当EOP有效时,将会使当前运行通道的状态字中的屏蔽位和TC位置位,EOP可以由I/O设备输入给8237。另外,当8237的任一通道到达计数终点(TC)时,会产生低电平的输出脉冲信号,此信号除了使8237终止DMA服务外,还可以送出作为中断请求信号等使用。EOP信号不用时,必须通过上拉电阻接到高电平,以防止误输入。8237的操作时序如图8.13所示。它有三种操作周期:空闲周期(IdelCycle),即DMAC工作于被动状态;请求应答周期和DMA操作周期,即DMAC工作于主动状态。每个操作周期又由若干状态组成,每种状态是一个时钟周期。8237有SI、S0、S1、S2、S3、S4和Sw

共七种状态。1.空闲周期SI8237在编程进入允许DMA工作状态之前或虽已编程进入允许DMA,但无DMA请求时,8237处于空闲周期,执行空闲状态SI。在空闲周期内,在每个SI的下降沿,8237采样DREQI输入信号,以确定是否有通道请求DMA服务。同时,还采样CS输入引脚,判断CPU是否要对该8237芯片进行编程写入或读出,若8237采样到CS有效,只要HLDA是低电平,便可以进入编程工作状态(即CPU可以访问8237)。CPU可以访问由地址信息A3~A0寻址的内部寄存器。

2.请求应答周期S0

对8237编程完成后,在SI的下降沿采样到DREQI有效后,8237将在SI的上升沿,向CPU输出占有总线的请求信号HRQ,并向CPU请求DMA服务,进入S0状态,等待CPU同意让出总线的回答信号HLDA,在HLDA有效之前的S0状态中,CPU仍可以访问8237。S0状态是8237送出HRQ信号向CPU提出控制总线的请求信号HRQ后,到它接收到CPU发回同意让出总线的HLDA有效信号之间的周期状态。这是8237从被动状态过渡到主动状态的过渡时期。

3.DMA操作周期在HLDA到达之后,8237开始进入数据传送周期,开始以DMA方式传送数据。一个完整的DMA传送周期包括S1、S2、S3和S4共四个状态。如果是慢速的存储器或I/O设备,可以由READY引脚输入低电平,当S3结束的下降沿采样READY为低电平时,就在S3和S4之间插入Sw状态(见图8.13(c)),以达到速度的匹配。对于存储器至存储器之间的数据传送,每传送一个数据,需先从源存储器单元读出数据,将它存入暂存器,再写入目的存储器单元中,这样传送一个数据要八个状态。因此,状态标注采用两位数标注,从存储器读出要用S11、S12、S13和S14共四个状态,写入存储器用S21、S22、S23和S24共四个状态(见图8.13(b))。图8.138237操作时序图8.138237操作时序图8.138237操作时序

一个DMA有效周期时序是:8237收到有效的HLDA响应信号后进入S1时,立即输出地址允许信号AEN,这标志着8237获得了系统总线控制权和DMA周期的开始。8237在S1期间把高8位地址A15~A8送到数据总线DB7~DB0上,并发出ADSTB地址选通信号。在ADSTB的下降沿(在S2内),把高8位地址存入地址锁存器,再由地址允许信号AEN把高8位地址送上地址总线A15~A8。低8位地址A7~A0由8237直接或经驱动器输出到地址总线A7~A0上。对于一般的DMA在S2发出DACK信号,通知请求DMA服务的设备,即DACK信号可以用作I/O端口的片选信号。因为,DMAC从地址总线上发出的地址已被用来访问存储器。

若是M→I/O或I/O→M的传送方式,对I/O设备的寻址就用DACK担任。随后,若是DMA读操作,就发出存储器读命令MEMR;若是DMA写操作,则发出I/O读命令IOR读取要传送的数据。在S3状态中8237发出写命令,把读出的数据写入指定的地址单元。对于DMA读操作发出I/O写命令IOW;对于DMA写操作发出MEMW命令。若编程选用扩展写命令,则写入操作和读出操作同时开始。在S2期间同时发出MEMR和LOW或IOR和MEMW。在存储器和I/O设备之间传送数据时,数据不读入8237,而是保持在数据线DB7~DB0上。所以,写周期一开始,即可从数据总线上直接写到存储器或I/O端口。也就是说DMA通道提供了直接传送数据的功能。

对于存储器至存储器的传送,不发I/O读写命令。每传送一个字节用八个状态,前四个状态发出MEMR命令,把数据从源地址存储器读入8237暂存器,后四个状态发出MEMW命令,把暂存器中的数据写入目的存储器。

对于成组或请求传送,连续传送多个数据,其地址码是连续变化的。对于大多数传送来说,保存在地址锁存器中的高8位地址是不变的,只有当低8位地址发生进位或借位时,才会改变高8位地址。为了加快传送速度,只有对地址锁存器中的A15~A8内容进行修改时,才去执行S1状态,否则可以不进入S1状态。在S3后沿,8237检测READY输入信号。若READY为低电平时,8237插入Sw状态;若READY为高电平时,就进入S4状态。S4状态结束后,8237已完成数据传送,因此,对应的读写信号变为无效。S4状态结束后,若8237还处于DMA操作,即开始另一个DMA传送周期。若DMA操作结束,则8237进入空闲状态SI。图8.13(a)为DMA读或DMA写连续传送两个字节的时序,图8.13(b)是存储器至存储器传送操作时序,图8.13(c)表示插入Sw的时序。

为了提高传送速度,若存储器或I/O响应速度跟得上,可以采用压缩时序的方式,如图8.13(d)所示。由于S1是用来输出高8位地址,而S3是用来延长读取数据脉冲时间,因此可以省去S1和S3,而使数据传送压缩为两个状态。压缩时序方式只用于连续数据块传送,即高8位地址不变的数据块,若在数据传送过程中高8位地址必须修改,则仍然需要出现S1状态。8.3.48237DMAC的工作方式

1.工作模式在DMA传输时,每个通道有四种工作模式。

1)单次传送方式单次传送方式也称单字节传送方式。每次DMA操作只传送一个字节,即DMAC发出一次占用总线请求,获得总线控制权后,进入DMA传送方式,只传送一个字节的数据。然后,就自动把总线控制权交还给CPU,让CPU至少占用一个总线周期。若还有通道请求信号,DMAC再重新向CPU发出总线请求,获得总线控制权后,再传送下一个字节数据。2)成组传送方式成组传送方式也称为连续传送或块传送方式。在进入DMA操作后,就连续传送数据,直到整块数据全部传送完毕。在字节计数器减到0或外界输入终止信号EOP时,才会将总线控制权交还给CPU而退出DMA操作方式。如果在数据的传送过程中,通道请求信号DREQ变为无效,DMAC也不会释放总线,只是暂时停止数据的传送,等到DREQ信号再次变为有效后,又继续进行数据传送,一直到整块数据全部传送结束,才会退出DMA方式,把总线控制权交还给CPU。3)请求传送方式请求传送方式也可以用于成块数据传输。当DMAC采样到有效的通道请求信号DREQ时,向CPU发去请求占用总线的信号HRQ(在Z80DMA中是BUSRQ),CPU让出总线控制权后,就进入DMA操作方式。当DREQ变为无效后,DMAC立即停止DMA操作,释放总线给CPU,当DREQ再次变为有效后,它才再次发出HRQ请求信号,CPU再次让出总线控制权,DMAC又重新控制总线,继续进行数据传送,数据块传送结束就把总线归还给CPU。这种方式适用于准备好传送数据时,发出通道请求;若数据未准备好,则通道请求无效,并将总线控制权暂时交还给CPU。

4)级联方式级联方式是用来扩充DMA的通道数的。

2.操作类型根据传输过程中数据的流向,操作类型可以分为三种。

(1)DMA写传送(I/O设备→存储器)。它是将I/O设备(如磁盘接口)传送来的数据写入存储器。

(2)DMA读传送(存储器→I/O设备)。它是将存储器中的数据,写入I/O设备。(3)DMA校验。该方式实际并不进行数据传送,只是完成某种校验过程。当一个8237通道处于DMA校验方式时,它会像上述的传送操作一样,保持着它对系统总线的控制权,并且每个DMA周期都将响应外部设备的DMA请求,只是不产生存储器或I/O设备的读/写控制信号,这就阻止数据的传送。但I/O设备可以使用这些响应信号,在I/O设备内部对一个指定数据块的每一个字节进行存取,以便进行校验。上述的三种操作中,被操作的数据都不进入DMAC内部,而且校验方式也仅是由DMAC控制系统总线,并响应I/O设备的DMA请求,在每个DMA周期向I/O设备发出一个DMA响应信号DACK,I/O设备利用此信号作为片选信号,去进行某种校验。

存储器至存储器传送是8237进行存储器之间的数据块传送操作时,由通道0提供源地址,而由通道1提供目的地址和进行字节计数。这种传送需要两个总线周期:第一个总线周期先将源地址内的数据读入8237的暂存器,在第二个总线周期再将暂存器内容放到数据总线上,然后在写信号的控制下,将数据总线上的数据写入目的地址的存储器单元。8.3.58237的控制字和编程

1.内部寄存器

8237内部寄存器如表8-4所示,现对这些寄存器的功能说明如下。

1)当前地址寄存器每个通道都有一个16位长的当前地址寄存器,当进行DMA传送时,由它提供访问存储器的地址。在每次数据传送之后,地址值自动增1或减1。CPU是以连续两字节按先低字节后高字节顺序,对其进行写入或读出的。在自动预置方式下,当EOP有效后,将它重新预置为初始值。2)当前字节计数器每个通道都有一个16位长的当前字节计数寄存器,它保存当前DMA传送的字节数。实际传送的字节数比编程写入的字节数大1,例如,编程的初始值为10,将导致传送11个字节,每次传送以后,字节计数器减1。当其内容从0减1而到达FFFFH时,将产生终止计数TC脉冲输出。CPU访问它是以连续两字节对其读出或写入的。在自动预置方式下,当EOP有效后,将它重新预置成初始值。如果处在非自动预置方式,这个计数器在终止计数之后将为FFFFH。3)基地址寄存器和基字节计数器每个通道均有一个16位的基地址寄存器和一个16位的基字节计数寄存器,它们用来存放所对应的地址寄存器和字节计数器的初始值。在编程时,这两个寄存器由CPU以连续两字节方式与对应的当前寄存器同时写入,但它们的内容不能读出。在自动预置方式下,基地址寄存器的内容被用来恢复当前寄存器的初始值。

4)命令寄存器这是DMAC四个通道公用的一个8位寄存器,它控制8237的操作。编程时,CPU对它写入命令字,而由复位信号(RESET)和软件清除命令清除它。其命令格式如图8.14所示。图8.14命令寄存器格式(1)D0位为允许或禁止存储器至存储器的传送操作。这种传送方式能以最小的程序工作量和最短的时间,成组地将数据从存储器的一个区域传送到另一个区域。当D0=1时,允许进行存储器至存储器传送,此时首先由通道发出DMA请求,规定通道用于从源地址读入数据,然后将读入的数据字节存放在暂存器中,由通道1把暂存器的数据字节写到目的地址存储单元。一次传送后,两通道对应存储器的地址各自进行加1或减l。当通道1的字节计数器为FFFFH时,产生终止计数TC脉冲,由EOP引脚输出有效信号而结束DMA服务。每进行一次存储器至存储器传送,需要两个总线周期,通道0的当前地址寄存器用于存放源地址,通道1的当前地址寄存器和当前字节计数器提供目的地址和进行计数。(2)D1位设定在存储器至存储器传送过程中,源地址保持不变或按增1或减1改变。当D1=0时,传送过程中源地址是变化的;当D1=1时,在整个传送过程中,源地址保持不变,可以把同一源地址单元的同样内容的一个数据写到一组目标存储单元中。当D0=0时,不允许存储器至存储器传送,则D1位无意义。

(3)D2位为允许或禁止DMAC工作的控制位。

(4)D3、D5为与时序有关的控制位,详见后面的时序说明。(5)D4位用来设定通道优先权。当D4=0时,为固定优先权,即通道0优先权最高,优先权随着通道号增大而递减,通道3的优先权最低;当D4=1时,为循环优先权,即在每次DMA操作周期(不是DMA请求,而是DMA服务)之后,各个通道的优先权都发生变化。刚刚服务过的通道其优先权变为最低,它后面的通道的优先权变为最高。循环优先权结构可以防止任何一个通道独占DMA。所有DMA操作,最初都指定通道0具有最高优先权,DMA的优先权排序只是用来决定同时请求DMA服务的通道的响应次序。任何一个通道一旦进入DMA服务后,其他通道都不能打断它的服务,这一点和中断服务是不同的。

(6)D6、D7位用于设定DREQ和DACK的有效电平极性。5)模式寄存器每个通道都有一个8位的模式寄存器,它用于指定DMA的操作类型、传送方式、是否自动预置和传送一字节数据后地址是按增1还是减1规律修改。由CPU写入工作方式寄存器的控制字。下面介绍各位的作用。

(1)命令字的D0、D1两位是通道的寻址位,即根据D0、D1两位的编码,确定此命令字写入的通道。其格式如图8.15所示。(2)D3、D2位为当D7、D6位不同时为1时,由这两位的编码设定通道的DMA的传送类型:读、写和校验。注意:当设定命令寄存器为存储器至存储器的传送方式时,应将工作方式寄存器D3、D2位设定为00。图8.15模式寄存器格式(3)D4位设定通道是否进行自动预置。当选择自动预置时,在接收到EOP信号后,该通道自动将基地址寄存器内容装入当前地址寄存器,将基字节计数器内容装入当前字节计数器,不必通过CPU对8237进行初始化,就能执行另一次DMA服务。

(4)D5位设定每传送一字节数据后,存储器地址是进行加1还是减1修改。

(5)D7、D6这两位的不同编码决定该通道DMA传送的方式。8237进行DMA传送时,有4种传送方式:单次传送、请求传送、成组传送和级联方式。6)请求寄存器

DMA请求可以由I/O设备发出DREQ信号,也可以由软件发出,请求寄存器就是用于由软件来启动DMA请求的设备。存储器到存储器传送,必须利用软件产生DMA请求,这种软件请求DMA传送操作必须是成组传送方式。在传送结束后,EOP信号变为有效,该通道对应的请求标志位被清“0”。因此,每用软件执行一次DMA请求传送,都要对请求寄存器编程一次,RESET信号清除所有通道的请求寄存器。软件请求位是不可屏蔽的,可以用请求控制字对各通道的请求标志进行置位和复位。该寄存器只能写,不能读。对某个通道的请求标志进行置位和复位的命令字格式如图8.16所示。8237接收到请求命令时。按D1、D0确定的通道,对该通道的请求标志执行D2规定的操作。D2=1,将请求标志位置1,D2=0,将请求标志位清0。例如,若用软件请求通道,进行DMA传送,则向请求寄存器写入04H控制字。图8.16请求寄存器格式7)屏蔽寄存器

8237每个通道均有一屏蔽标志位。当某通道的屏蔽标志位置1时,禁止该通道的DREQ请求,并禁止该通道DMA操作。若某个通道规定不自动预置,则当该通道遇到有效的信号时,将对应的屏蔽标志位置1。RESET信号使所有通道的屏蔽标志位都置1,各通道的屏蔽标志位可以用命令进行置位或复位。其命令字有两种格式:第一种格式用来单独为每个通道的屏蔽位进行置位或复位,其中D2位为0表示清除屏蔽标志,D2位为1表示置位屏蔽标志,由D1和D0的编码指出通道号。第二种格式是可以同时设定四个通道的屏蔽标志。其命令字格式如图8.17所示。图8.17屏蔽寄存器格式

注意:这两种不同格式的命令字,写入DMAC时,有不同的口地址。写单个通道屏蔽寄存器口地址为0AH,而同时写四个通道的屏蔽位的口地址为0FH。例如,为了在每次对软盘读写操作时,进行DMA初始化,都必须解除通道2的屏蔽,以便响应硬件DREQ2的DMA请求。可以采取下述两种方法之一来清除屏蔽寄存器:(1)使用单一通道屏蔽命令。例如:MOV AL,0000001B ;开放通道2OUT DMA+0AH,AL ;写单一屏蔽寄存器(2)使用4位屏蔽命令。例如:MOV AL,00001011B ;仅开放通道2OUT DMA+0FH,AL ;写入4位屏蔽命令8)状态寄存器状态寄存器是一个8位寄存器,用来存放8237的状态信息,它可以由CPU读出。状态寄存器的格式如图8.18所示。它的低4位是表示四个通道的终止计数状态,高4位是表示当前是否存在DMA请求。只要通道到达计数终点TC,或外界送来有效的EOP信号,D3~D0相应的位就被置1,RESET信号和CPU每次读状态后,都清除D3~D0位。D7~D4位表示通道3~0请求DMA服务,但未获得响应的状态。图8.18状态寄存器格式9)暂存寄存器暂存寄存器为8位的寄存器,在存储器至存储器传送期间,用来暂存从源地址单元读出的数据。当数据传送完成时,所传送的最后一个字节数据可以由CPU读出。用RESET信号可以清除此暂存器中的数据。10)命令寄存器

8237设置了3条软件命令,它们是:主清除、清除字节指示器和清除屏蔽寄存器。这些软件命令只要对某个适当地址进行写入操作就会自动执行清除命令。

(1)主清除命令。该命令在8237内部所起作用和硬件复位信号RESET相同。它执行后能清除命令寄存器、状态寄存器、各通道的请求标志位、暂存寄存器和字节指示器,并把各通道的屏蔽标志位置1,使8237进入空闲周期。(2)清除字节指示器命令。字节指示器又称为先/后触发器或字节地址指示触发器。因为8237各通道的地址和字节计数都是16位的,而8237每次只能接收一个字节数据,所以CPU访问这些寄存器时,要用连续两个字节进行。当字节指示器为0时,CPU访问这些16位寄存器的低字节;当字节指示器为1时,CPU访问这些16位寄存器的高字节。为了按正确顺序访问16位寄存器的高字节和低字节,CPU首先使用清除字节指示器命令来清除字节指示器,使CPU第一次访问16位寄存器的低字节,第一次访问之后,字节指示器自动置1,而使CPU第二次访问16位寄存器的高字节,然后字节指示器自动恢复为0状态。(3)清除屏蔽寄存器命令。这条命令清除四个通道的全部屏蔽位,使各通道均能接受DMA请求。

2.内部寄存器的寻址对8237内部寄存器的寻址和执行与控制器有关的软件命令,都由芯片选择信号CS、I/O读信号IOR、I/O写信号LOW和A3~A0地址线的不同状态编码来完成。CS=0表示访问该8237DMAC芯片;A3=0表示访问某个地址寄存器或字节计数器;A3=1表示访问控制寄存器和状态寄存器,或正在发出一条软件命令。在CS和A3都为0时,CPU访问某个地址寄存器或字节计数器,而用IOR为低电平或IOW为低电平表示是读操作还是写操作。对当前地址寄存器进行写入的同时,也写入基本地址寄存器;对当前字节计数器进行写入的同时,也写入基本字节计数器。在CS为0、A3为1时,CPU对状态和控制寄存器的寻址及给出的软件命令归纳如表8-5所示。每片8237占有16个口地址,暂存寄存器只能在存储器至存储器传送完成后进行读出。并由A2~A1编码状态给出通道号,而A0=0表示访问当前地址寄存器,A0=1表示访问当前字节计数器。表8-58237内部寄存器口地址分配主片的I/O口地址(H)从片的I/O口地址(H)寄存器IN(读,)OUT(写,)0000C0CH0当前地址寄存器CH0基址与当前地址寄存器0010C2CH0当前字节计数器CH0基字节计数器与当前字节计数器0020C4CH1当前地址寄存器CH1基址与当前地址寄存器0030C6CH1当前字节计数器CH1基字节计数器与当前字节计数器0040C8CH2当前地址寄存器CH2基址与当前地址寄存器0050CACH2当前字节计数器CH2基字节计数器与当前字节计数器0060CCCH3当前地址寄存器CH3基址与当前地址寄存器0070CECH3当前字节计数器CH3基字节计数器与当前字节计数器续表8-58237内部寄存器口地址分配0080D0状态寄存器命令寄存器0090D2

请求寄存器00A0D4

写屏蔽寄存器单个屏蔽位00B0D6

模式寄存器00C0D8

清除字节指令器(软命令)00D0DA暂存寄存器主清除指令(软命令)00E0DC

清除屏蔽寄存器(软命令)00F0DE

写全部屏蔽位寄存器3.8237的编程步骤(1)输出主清除命令;(2)写入基址与当前地址寄存器;(3)写入基址与当前字节数地址寄存器;(4)写入模式寄存器;(5)写入屏蔽寄存器;(6)写入命令寄存器;(7)写入请求寄存器。

若有软件请求,就写入到指定通道,可以开始DMA传送过程;若无软件请求,则在完成(1)~(7)的编程后,由通道的DREQ启动DMA传送过程。例如,若要利用通道0,由外设(磁盘)输入32KB的一个数据块,传送至内存8000H开始的区域(增量传送),采用块连续传送的方式,传送完不自动初始化,外设的DREQ和DACK都为高电平有效。编程首先要确定端口地址。地址的低4位用以区分8237的内部寄存器,高4位地址A7~A4经译码后,连至选片端CS,假定选中时高4位为5。(1)模式控制字D7 D6 D5 D4 D3 D2 D1 D01 0 0 0 0 1 0 0(2)屏蔽字 D7 D6 D5 D4 D3 D2 D1 D00 0 0 0 0 0 0 0(3)命令字 D7 D6 D5 D4 D3 D2 D1 D01 0 1 0 0 0 0 0初始化程序如下:OUT 5DH,AL ;输出主清除命令MOV AL,00HOUT 50H,AL ;输出基址和当前地址的低8位MOV AL,80HOUT 50H,AL ;输出基址和当前地址的高8位MOV AL,00HOUT 51H,ALMOV AL,80HOUT 51H,AL ;给基址和当前字节数赋值MOV AL,84HOUT 5BH,AL ;输出模式字MOV AL,00HOUT 5AH,AL ;输出屏蔽字MOV AL,0A0HOUT 58H,AL ;输出命令字8.3.6Intel8237的应用举例

1.8088访问8237的寻址当8237处于SI空闲状态时,CPU可以对它进行访问,但是否访问此8237,这要取决于它的片选引脚CS是否出现低电平。主系统板内部的8237片选引脚CS,接到系统板中I/O接口电路的选中信号产生电路的译码输出(Y0)DMACS上。由I/O接口片选信号产生电路,及I/O接口使用的I/O地址表可知,当出现I/O地址为00H~1FH时,DMACS为低电平,此时8237被选中。若CPU执行的是OUT指令,则IOW有效,CPU送上数据总线的数据,写入8237内部寄存器;

若8088执行的是IN指令,则IOR有效,就会将8237内部寄存器的数据,送上数据总线并读入CPU。8237内部又有多个寄存器,CPU与8237传送数据时,具体访问哪个内部寄存器,要取决于它的A3~A0地址信息的编码状态。8237的A3~A0接系统地址总线A3~A0,在系统的BIOS中,安排8237内部寄存器使用的I/O端口地址为00H~0FH。DMAC内部寄存器与I/O端口地址的对应关系如表8-5所示。2.8237的初始化编程在进行DMA传输之前,CPU要对8237进行编程。DMA传输要涉及到RAM地址、数据块长、操作方式和传输类型。因此,在每次DMA传输之前,除自动预置外,都必须对8237进行一次初始化编程。若数据块超过64KB界限时,还必须将页面地址写入页面寄存器。IBM-PC/XT机中,BIOS对8237的初始化程序如下。

1)对8237A-5芯片的检测程序在系统上电后,要对DMA系统进行检测,其主要内容是对8237A-5芯片所有通道的16位寄存器进行读/写测试,即对四个通道的八个16位寄存器先写入全“1”后,读出比较,再写入全“0”后,读出比较。若写入内容与读出结果相等,则判断芯片可用;否则,视为致命错误。下面是PC/XT机的DMA系统检测的例程。;检测前禁止DMA控制器工作MOV AL,04H ;命令字,禁止8237工作OUT DMA+08,AL ;命令字送命令寄存器OUT DMA+0DH,AL ;主清除DMA命令;对CH0~CH3作全“1”和全“0”检测,设置当前地址、寄存器和字节计数器MOV AL,0FFH ;对所有寄存器写入FFHC16: MOV BL,AL ;为比较将AL存入BLMOV BH,ALMOV CH,8 ;置循环次数为8MOV DX,DMA ;DMA第一个寄存器地址装入DXC17: OUTDX,AL ;数据写入寄存器低8位OUT DX,AL;数据写入寄存器高8位MOV AX,0101H;读当前寄存器前,写入另一个值,破坏原内容IN AL,DX;读通道当前地址寄存器低8位或当前字节计数器低8位MOV AH,ALIN AL,DX;读通道当前地址寄存器高8位或当前字计数器高8位CMP BX,AX;比较读出数据和写入数据JE C18 ;相同转去修改

温馨提示

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

评论

0/150

提交评论