《微型计算机原理》课件第8章_第1页
《微型计算机原理》课件第8章_第2页
《微型计算机原理》课件第8章_第3页
《微型计算机原理》课件第8章_第4页
《微型计算机原理》课件第8章_第5页
已阅读5页,还剩228页未读 继续免费阅读

下载本文档

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

文档简介

第8章输入/输出方法及常用的接口电路8.1概述

8.2I/O端口的编址及基本输入/输出方法

8.38255A并行接口电路

8.4可编程计数/定时器8253/82548.5串行通信及8251串行接口电路

8.6DMA控制器8237A8.7多功能I/O接口电路823808.1概述图8.1主机通过I/O接口与外设交换信息

为什么主机与外设交换信息要通过接口电路呢?这主要由于:

(1)外部设备不能直接和CPU数据总线相连,要借助于接口电路使外设与总线隔离,起缓冲、暂存数据的作用,并协调主机和外设间数据传送速度不配的矛盾。因为在微机系统中,数据总线是各种设备以及存储器传送信息的公共总线。任何设备(包括存储器)都不允许长期占用数据总线,而仅允许被选中的设备在读/写周期中(RD或WR为低电平)享用数据总线。图8.2经接口电路传送数据(a)经接口输入数据;(b)经接口输出数据(2)接口电路为主机提供有关外设的工作状态信息及传送主机送给外设的控制命令。如输出时,CPU将信息送到接口以备输出;输入时,输入设备将数据送到接口寄存,以备CPU来读取。这些均由接口发出相应的信号来告诉外设或CPU。这些信号主要有“准备好”、“忙”、“闲”等。(3)借助于接口电路对信息的传输形式进行变换。一般CPU在处理数据时均以并行的方式处理,例如Z80-CPU以8位一个字节为处理单位,但有的外设只能接受串行的,即一位一位传送的数据方式,此时就需要有一个接口来处理并行或串行数据的转换。在此应指出接口(Interface)和端口(Port)的区别。端口(简称口)这个术语实际上指那些在接口电路中完成信息的传送,并可由编程人员寻址进行读写的寄存器。若干个口加上相应的控制电路而构成接口。所以,一个接口往往含有几个端口。CPU可通过输入/输出指令向这些端口取或存信息。端口主要有两类:一类为状态口和命令口。状态口主要用来检测外设的工作状态。CPU通过输入指令来检测某一外设的工作状态,以决定下一步的操作,通常称此为输入(设备)状态字。

所以说状态字是描写外设所处状态的。CPU可通过输出指令向某一外设发出控制命令以控制相应的外设,通常称此为输出(设备)控制字。所以说控制字是控制外设实际操作的命令。控制字中每一位所具有的状态代表了某种操作命令。例如“启动(或停止)电机转动”,“步进电机转向”,“改变某种频率”等。另一类为数据口,它传送的是数据信息,如数字、字符及某种特定的编码等。图8.3外设通过接口与系统的连接8.2I/O端口的编址及基本输入/输出方法8.2.1I/O端口的编址方法1.I/O端口的统一编址方式统一编址是将I/O端口看成是存储器空间的一个组成部分,按照存储器单元的编址方法统一编排地址号。这样,CPU对I/O端口的输入/输出操作如同对存储单元的读/写操作一样。对存储器的各种寻址方式也同样适用于对I/O端口。所有访问内存的指令同样都可用于访问I/O端口。统一编址的最大优点是无需专门的I/O指令,从而简化了指令系统的设计,并能省去相应I/O操作的对外引线。而且CPU可直接对I/O数据进行算术和逻辑运算。统一编址的不足之处在于I/O端口地址占用了一部分存储器空间,另外访内指令长度一般比专用的I/O指令长,从而取指周期较长,又多占了指令字节。2.I/O端口的独立编址方式独立的I/O端口编址方式的特点是有一个与存储器地址空间完全独立的I/O地址空间。在这个空间内,每一个I/O设备的端口有一个唯一对应的I/O端口地址。这种独立的编址方式要求CPU有专用的I/O指令(IN及OUT指令),用于CPU与I/O端口之间的数据传输。Intel公司研制开发的CPU产品通常都设有IN、OUT指令。因此,80x86CPU组成的系统一般都采用独立编址方式。如8086/8088CPU采用地址总线的低16位作为I/O端口的寻址地址线。因而IN、OUT指令可寻址216=65536(64K)个8位地址号的I/O端口,或32K个16位的I/O端口。80386DX的地址总线是32位,则就有直接访问4GB(232字节)的存储器空间或I/O空间的能力。80386以上的CPUI/O端口的地址号可以是双字(32位),指令中端口地址中的字传送到AX,端口地址+2中的高字则传送至EAX的高16位中。8086/8088CPU组成系统时有最大、最小两种工作方式。在不同的方式下,8086/8088CPU对I/O端口存取操作的控制命令有所不同。①最小方式对I/O端口的控制操作。在最小方式下,CPU的读命令(RD)和写命令(WR)对存储器和I/O端口的访问是公用的。当存储器地址空间和I/O端口地址号两者不重叠时,则仅用RD和WR信号就能区分CPU的访内及访外操作。如果两者的地址号发生重叠时,除了RD、WR信号外,还应与M/IO信号相配合来区分访内访外操作。当M/IO为低电平时为访外操作。②最大方式对I/O端口的控制操作。在最大方式下,CPU是通过总线控制器8288分别产生存储器读/写命令和I/O读/写命令代替公用的M/IO信号。这样,对于独立编址的I/O端口而言,CPU只需通过总线控制器发出IORC或IOWC命令就可实现对I/O端口的读/写操作。大多数8位接口电路芯片中都有几个端口,通常各端口的地址号是连续排列的,则其中有奇地址也有偶地址。当8位接口芯片与8086CPU16位数据总线相连时,原则上讲,它既可以和数据总线的低8位相连,也可以和数据总线的高8位相连。但应注意低8位数据总线只能传送I/O为偶地址的端口数据,而高8位数据总线只能传送I/O为奇地址的端口数据。①I/O端口仅使用偶地址。图8.4只使用偶地址的I/O接口地址线连接方法②I/O端口使用连续的地址。图8.58位接口与16位数据总线的连接方法8.2.2I/O端口地址译码

1.固定式端口地址译码所谓固定式端口地址译码是指接口中用到的端口地址不能更改。目前,各种I/O功能接口卡中大部分都采用固定地址译码。当接口芯片仅有一个端口地址时,则可采用门电路组成地址译码电路。当接口芯片中有多个端口,通常各端口的地址号是连续排列的,则采用译码器译码比较方便。译码器的型号很多,最常用的有3-8译码器,74LS138,8205;4-16译码器74LS154;双2-4译码器74LS139和74LS155等。用户可根据需要选用合适的译码器。表8.1几种常用的通用译码器输入输出对应关系列表图8.6IMB-PC系统板I/O地址译码电路2.开关式可选端口地址译码1)使用拨动开关或跨接开关在地址译码的基础上,通过线路板上的微型拨动开关DIP或跨接开关“跳线”连接。从而使得某个特定的I/O端口(或存储器)在一组线地址中选定当前所使用的译码地址,增加地址译码的灵活性。图8.7使用跳线开关选择I/O口译码地址2)使用比较器+地址开关译码图8.8由比较器组成的可选式译码电路

图8.8所示为由比较器74LS688与3-8译码器组成的I/O芯片地址可选的译码电路。8位比较器74LS688对两组8位的输入端P0~P7和Q0~Q7信号进行比较。其比较规则为:当P0~P7≠Q0~Q7时,P=1,输出高电平;当P0~P7=Q0~Q7时,P=0,输出低电平。

应用时,可将P0~P7与地址线及控制线相连,Q0~Q7连接地址开关,而将比较器输出端P接到74LS138的控制端,如G2A上。根据比较器的特性,当输入端P0~P7的地址与输入端Q0~Q7的开关状态一致时,输出为低电平,打开译码器74LS138允许进行译码。因此,使用时可预置微型拨动开关DIP为某一值,得到一组所要求的口地址。图中让IOW和IOR信号参加译码,可分别产生8个读或写的端口地址。从图中连线可以看出,仅当A9=1(因Q6接+5V),AEN=0(因Q7接地)才使译码有效。8.2.3基本的输入/输出方法在微机系统中,微机与外设之间的信息传送,实际上是CPU与接口之间的信息传送。传送的方法,一般可分为3种方式:(1)程序控制的输入/输出方式。(2)程序中断的输入/输出方式。(3)直接存储器存取(DMA)方式。传送的方式不同,CPU对外设的控制方式也不同,从而使接口电路的结构及功能也不同,CPU与外设接口的连接方法也不同。在微机与外设之间的信息传送是接口设计中极为重要的问题。1.程序控制的输入/输出程序控制的输入/输出方式是指在程序的编制中利用I/O指令来完成CPU与接口间交换信息的一种方式。何时进行这种信息传送是事先知道的,所以能把I/O指令插入到程序中所需要的位置。根据外设性质的不同,这种传送方式又可分为无条件传送及有条件传送两种。

(1)无条件传送。当程序执行到I/O指令时,无条件地立即执行I/O指令相应的操作,如图8.9所示。图8.9无条件数据传送(2)有条件传送。这种传送方式如图8.10所示。CPU在传送数据之前应检查外设是否已作好收发数据的准备(Ready)工作,若设备已“准备就绪”,则可接着进行数据传送。为用这种方式传送数据,一般要用3条有如下功能的指令来完成。①将描述外设工作状态的信息(如“准备好”)——状态字读入CPU相应的寄存器中。②检测相应的状态位,以检查外部设备收发数据的准备工作是否“准备就绪”。③若外部设备没有“准备就绪”,则重复执行①、②步骤,等待“准备就绪”;若外设“准备就绪”,则可执行预定的数据传送。图8.10有条件数据传送2.程序中断的输入/输出方式

程序控制的输入/输出方法是由CPU来查询外设的状态,CPU处于主动的地位;外设处于被动的地位;而程序中断的输入/输出则是外设处于主动地位,CPU处于被动地位。只有当外设要传送数据时才向CPU发出中断请求信号。实时性比程序控制的输入/输出要好得多。但它仍有缺点,主要是:①为了能接受中断的请求信号,CPU内部要有一些线路来控制。②利用中断输入/输出,每传送一次数据就要中断一次CPU。CPU响应中断后,每次都要执行“中断处理程序”,而且在其中都要保护现场、恢复现场,这相当麻烦,浪费了很多不必要的CPU时间。故此种传送方式一般较适合于传送少量的输入/输出数据。对于大量的输入/输出数据可采用高速的直接存储器存取方式DMA。3.直接存储器存取方式(DMA)图8.11典型的DMA传送流程图

实现DMA传送的基本操作如下:①外设可通过DMA控制器向CPU发出DMA请求;②CPU响应DMA请求,把总线控制权交给DMA控制器,使系统转变为DMA工作方式;③由DMA控制器发出I/O数据的存储地址,并决定传送数据块的长度;④执行DMA传送;⑤DMA操作结束,并将控制权交还给CPU。8.38255A并行接口电路8.3.18255A的结构与功能图8.128255A内部结构框图及引脚排列(a)内部结构图;(b)引脚图

1.3个并行输入/输出端口(A口、B口、C口)3个端口的功能全部由程序设定,每个端口都有自己的功能特点。A口、B口通常可当作独立的I/O口使用;C口也可以用作一般的I/O端口,但当A口、B口作为应答式(选通式)I/O口使用时,它分为2个4位端口:A组C口(或上C口)和B组C口(或下C口),分别用来作为A口、B口应答式I/O工作时,提供输出控制信息及输入状态信息之用。各端口的功能如表8.2所示。表8.28255A端口功能表2.读/写控制逻辑

读/写控制逻辑的功能用于管理数据、控制字或状态字的传送。与此部分有关的信号为:片选信号CS和来自地址总线信息(A1、A0)以及有关控制信号,如RD、WR、RESET。其中:A1、A0:端口选择信号。8255A内部共有4个端口:3个数据端口和1个控制端口。规定A1A0为00、01、10和11时,分别选中端口A、B、C和控制端口。A1A0和RD、WR、CS信号相配合可对各端口实现输入/输出操作,其功能见表8.3。当与8086系统16位数据总线的低8位(D7~D0)相连时,8255A的A0、A1线分别与CPU的A1、A2地址线相连,而地址总线A0设置为“0”,从而8255A的端口地址为偶地址。

RESET:复位信号,高电平有效。有效时将控制字寄存器清零,所有的端口均被置成输入方式。表8.38255A端口选择及操作功能表3.A组和B组控制电路这两组接受来自CPU的读/写控制逻辑部分的信号和CPU发出的控制字,然后分别决定各端口的功能。A组控制电路控制A口及A组C口(PC7~PC4),B组控制电路控制B口及B组C口(PC3~PC0)。还可根据控制字的要求,对端口C的某位实现“置0”及“置1”的位操作。4.数据总线缓冲器

这是一个双向三态的8位缓冲器,用于和系统的数据总线D7~D0相连。输入输出的数据以及CPU发出的控制字及读入的状态字都是通过此缓冲器传送的。在8086系统中,采用16位数据总线,通常8255A的D7~D0是接于16位数据总线的低8位上。8.3.2工作方式的选择及其功能

8255A有3种基本工作方式,而且对C口各位又可以进行按位操作。这些都由CPU输出到8255A来控制。8255A的控制字分为两种:一种是各端口的“工作方式选择控制字”。它可以使8255A的三个端口工作于不同的工作方式。方式选择控制字总是将三个端口分为两组来设定工作方式,即A口和C口的高4位(A组C口)作为一组,端口B和C口的低4位(B组C口)作为另一组。另一种控制字是“端口C按位置1/置0控制字”。它可以使C口中的任何一位进行置“1”或置“0”操作。图8.138255A两种工作方式控制字格式(a)工作方式选择控制字;图8.138255A两种工作方式控制字格式(b)置位/复位控制字

假设我们要求8255A的各个端口工作于如下方式:A口方式0输出;B口方式0输入;A组C口(PC4~PC7)方式0输出;B组C口(PC0~PC3)方式0输入,则相应的方式选择控制字为10000011B(83H)。设8255A控制端口的地址为D6H,则在8086系统中,对8255A的初始化程序为MOVAL,83H;将控制字送入AL。OUT0D6H,AL;控制字写入到指定的控制端口中。

对端口C的置位/复位功能主要用于通过C口某位输出高/低电平控制信号。当要通过置1/置0控制字对C口PC6位实现置0操作时,控制字为00001100B(0CH)。控制字的D0位用于区分是置1还是置0操作,但究竟对C口的哪一位进行相应操作则由控制字中的D3、D2、D1决定。现为PC6位,则对应为110代码。此时,对PC6置0操作的初始化程序为MOVAL,0CH;对PC6位实现置0操作。OUT0D6H,AL1.工作方式0

方式0也叫基本输入/输出方式。它适用于无需应答(握手)信号的简单的无条件输入/输出数据的场合,即输入/输出数据处于准备好状态。这时CPU可以随时从端口中写入或读取数据。在这种方式下,A口、B口可以通过由CPU对8255A相应的方式选择控制字,规定为输入口或输出口;端口C也同样由方式选择控制字分别规定A组C口、B组C口为输入口或输出口。2.工作方式1

方式1也称为选通型(应答式)输入/输出方式。和方式0相比,它最主要的特点是当A口、B口工作于方式1时,要利用A组C口、B组C口的端线作为A口、B口选通型工作时提供所需的选通信号或提供有关的状态信号之用。现分输入及输出两种情况说明。

(1)方式1输入。当A口、B口工作于方式1输入时,端口C控制信号的定义如图8.14(a)所示。图中还给出了相应的方式选择控制字格式。C口所提供的控制信号说明如下:图8.148255A工作方式1及时序图(a)方式1输入;(b)方式1输出图8.148255A工作方式1及时序图(a)方式1输入;(b)方式1输出3.工作方式2图8.158255A工作方式2及时序图后续图8.158255A工作方式2及时序图4.8255A的状态字格式

图8.16几种状态字格式(a)、(b)方式1输入、输出状态字格式;(c)、(d)A组为方式2,B组为方式1的输入、输出状态字格式

图8.16几种状态字格式(a)、(b)方式1输入、输出状态字格式;(c)、(d)A组为方式2,B组为方式1的输入、输出状态字格式8.3.38255A应用举例

例8.1

利用8255A作为输出设备打印机的接口。其连接方法如图8.17(a)所示。当主机需要打印输出时,先测试打印机忙(Busy)信号。若打印机处于忙状态(如正在处理一个字符或正在打印一行字符),则Busy为高电平“1”,反之,则Busy为低电平“0”。当Busy=0时,则CPU可通过8255A向打印机输出一个字符,此时还需经PC6输出一个负脉冲选通信号,输出至打印机的STB端,用此负脉冲(宽度≥1μs)将PA0~PA7上的字符信息打入锁存于打印机输入缓冲器中,由打印机进行处理。同时,打印机应送出Busy=1信号,表示打印机处于忙状态。一旦Busy=0,则表示打印机处理完毕,又可以接收一个新的字符数据。图8.178255A用作打印机接口及打印机时序(a)8255A与打印机的连接;(b)打印机时序

为此,8255A端口A的8条并行数据线PA0~PA7作为数据传送通路,A口应工作于方式0输出,端口B不用。端口C也工作于方式0,PC2作为Busy信号输入端,所以C口PC3~PC0应设定为输入方式;PC6作为STB选通信号输出端,故PC7~PC4应设定为输出方式。现根据图8.17中8255A的寻址信号,8255A的端口地址为:端口A:0380H;端口B:0381H;端口C:0382H;控制寄存器端口:0383H。8255A接口的初始化及控制程序编制如下:;8255初始化程序BEGIN:MOVAL,10000001B;送工作方式选择控制字至控制寄存器中。 A、B、C口均为工作方式0。A口、B口 为输出方式。PC4~PC7为输出,

;PC0~PC3为输入。

MOVDX,0383H OUTDX,AL MOVAL,00001101B ;送C口置1/置0控制字,置PC6=1。

OUTDX,AL ;使STB初始状态为高电平。;下面为控制程序,设欲打印的字符已存于CL中,经8255A的A口输出至打印机。CONP:MOVDX,0382H ;从C口检测Busy=0否,若等于1,则 等待;等于0则可送打印字符。

LPST:INAL,DXH ;读入C口值。

ANDAL,04H ;保留PC2(Busy)状态。

JNZLPST ;若Busy=1,则等待,等于0则向下执行。

MOVAL,CL ;将(CL)字符送A口。

MOVDX,0380HOUTDX,ALMOVAL,0CH;送C口置1/置0控制字,置PC6=0,即使STB为低电平。MOVDX,0383HOUTDX,ALMOVCX,XXH;为使STB宽度≥1μs,送延时程序。EDLAY:DECCXJNZDELAYMOVAL,0DH;再使STB为高电平。 ;地址指向控制口。

OUTDX,AL

;向下执行后续程序。

例8.2

利用8255A实现与10位A/D转换器和10位D/A转换器的接口。图8.18为8255A与A/D、D/A的接口相连方法。图中10位A/D变换由START输入一个正脉冲启动,开始将UA变换为数字量,BUSY变高。当A/D这次变换结束,BUSY变低告之CPU可从A/D变换器的D0~D9端上获得稳定的数字量。

D/A变换器是由STB负脉冲将加在D0~D9上的10位数字量锁存于D/A变换器内部,并且将其变换成模拟电压输出。图8.188255A与A/D、D/A转换器的接口

为了实现8255A与这两个芯片如图所示的连接,应将8255的A组和B组均初始化工作在方式0之下。而且A口和C口的高4位初始化为输入;B口和C口的低4位初始化为输出。只有这样才能满足如图连接上的要求。这时的方式控制字应为:10011000B,即98H。故为了启动A/D变换,应从C口的PC2送出一正脉冲,这可利用位操作控制字来完成。初始化时应先将PC2输出置为0。当要启动A/D变换时,可选送00000101B控制字到控制寄存器,置PC2=1;再对C口送00000100B置PC2=0,实现对A/D的启动。以同样的原理,D/A转换在初始化时将PC3输出为高,利用位操作字同样可以形成D/A变换器的负锁存脉冲。

若8255A与CPU系统的地址信息连接仍同图8.17所示,则对8255A的初始化编程如下:

MOVDX,0383H;送方式选择控制字到8255控制寄存器。

MOVAL,98HOUTDX,ALMOVAL,00000100B;使PC2输出初始时为低电平。

OUTDX,AL

在初始化8255A之后,若要启动A/D变换一次,并将变换的10位数字量放在DX的低10位中,其高6位应为0,其程序可以如下编写:

MOVDX,0383HMOVAL,00000101B;PC2=1,使START为高电平,启动A/D转换。

OUTDX,ALMOVAL,00000100BOUTDX,AL;置PC2=0,使START为低。

DECDX;(DX)=0382,指向C口。WAIT:INAL,DX ;等待A/D转换结束(PC4=0)。

ANDAL,20HJNZWAITINAL,DX ;由C口读取A/D转换的D9、D8位。

ANDAL,0C0HMOVCL,AL ;D9、D8位值暂存CL的D7、D6中。

DECDX ;(DX)=0380H,指向A口。

DECDXINAL,DX ;由A口读取D7~D0位转换值。

MOVAL,AL;D7~D0位值存DL中。

ROLCL,1 ;CL中D7、D6值移至D1、D0位中完成10位A/D转换值 ;的装配,存DX中。

ROLCL,1MOVDH,CL

在完成上述指令时,10位A/D变换器的数字量就存放在DX中。同时,A/D变换器处于就绪状态,可以接收下一次变换的启动信号。至于D/A变换器,情况就更简单一些。首先将要变换的10位数字量写入8255A的B口和C口的PC0、PC1,C口的两位应为数字量的高二位,B口的8位为数字量的低8位。然后,利用位操作控制字产生一个负的STB锁存脉冲就可以了,程序从略,读者可以自己完成此程序的编写。8.4可编程计数/定时器8253/82548.4.18253的组成与功能图8.198253/8254内部结构框图及引脚图(a)结构框图;(b)引脚图1.3个独立的16位计数器图8.208253/8254计数器内部逻辑框图

2.控制命令寄存器此寄存器用来保存来自CPU送入的控制字。每个计数器都有一个控制命令寄存器,用于保存该计数器的控制信息。控制字将决定计数器的工作方式、计数形式及输出方式,亦能决定应如何装入计数器初值。8253的3个控制寄存器只占用一个地址号,而靠控制字中最高二位来指定当前的控制字是发给哪个计数器的。控制寄存器只能写入,不能读出。3.读/写逻辑读/写逻辑的任务是接收来自CPU的控制信号,完成对8253各计数寄存器的读/写操作。这些控制信号包括读信号RD、写信号WR、片选信号和片内寄存器寻址信号A0、A1。4.数据总线缓冲器这是一个双向、三态8位缓冲器。它用于8253和系统数据总线连接。CPU通过数据总线缓冲器将控制命令字和计数值写入8253计数器,或者从8253计数器中读取当前计数值。

8253的8位数据线D0~D7通常与系统数据总线D0~D7相连。

8253共占用4个I/O地址。当A1A0=00时,为计数器0中的CR和OL寄存器的共用地址。同时,当A1A0=01和10时,分别为计数器1和2的CR和OL的共用地址。当A1A0=11时,是3个计数器内的3个控制寄存器的共用的地址号。但CPU给哪一个计数器送控制字,这由控制字格式中最高两位(计数器选择位)SC1、SC0的编码来决定。表8.48253端口的地址分配8.4.28253的控制字、读/写操作和初始化编程1.8253的控制字格式图8.218253控制字格式2.8253的读/写操作

(1)读操作。所谓读操作是指读出某计数器的计数值至CPU中。有两种读数方法。①先使计数器停止计数(在GATE端加低电平或关闭CLK脉冲):根据送入的控制字中RL1、RL0的状态,用一条或两条输入IN指令读CE的内容,通常第一次读低字节(LSB),第二次读出高字节。实际上,CPU是通过输出锁存器OL中读出的,因为在计数过程中OL的内容是跟随CE内容变化的。此时由于CE不再计数,故可稳定地读出OL(即CE)的内容。②在计数过程中不影响CE的计数而读取计数值:这称为“飞读”方法。为达此目的,应先对8253写入一个具有锁存功能的控制字,即D5D4位(RL1、RL0)应取00,而其余位不变。这样就可将当前的CE内容锁存入OL中,然后再用两条输入指令将OL中的内容取到CPU中,从而实现“飞读”。当CPU读取了计数值后,或对计数器重新初始编程后8253会自动解除锁存状态,OL中的值又随计数器CE值变化。(2)写操作。所谓写操作是指CPU对8253写入控制字或写入计数初值。8253中3个计数器的控制寄存器地址号是共用的,并由控制字中D7D6位(SC1、SC0)的状态来确定是哪一个计数器的控制字,从而计数初值会分别写入各对应的端口计数器CR中。

8253投入工作之前,CPU要对它进行初始化编程。初始化编程的步骤为:①写入计数器的控制字,规定其工作方式及相应功能;②写入计数初值。当计数初值为8位,则控制字中RL1,RL0应取01,只写入CR的低8位,CR的高8位会自动置0;若是16位计数,而低8位是0,则应取RL1、RL0为10,只写入高8位,低8位会自动置0。若是16位的计数初值,则LR1,LR0=11,应分两次写入初值,先写低8位,再写入高8位。由于计数器采用递减方式计数,因此如果计数初值为0000H,则是最大的计数初值。若选择0计数器,工作在方式3,计数初值为2354H,十进制计数方式;或选择1#计数器,工作在方式2,计数初值为18H,二进制计数方式。并设8253端口地址为40~43H。则根据上述各计数器的功能,其初始化编程如下:;对0#计数器初始化编程

MOVAL,37H ;对0#计数器送控制字。

OUT43H,ALMOVAL,54H ;送初值的低8位。

OUT40H,ALMOVAL,23H ;送初值的高8位。

OUT40H,AL;对1#计数器初始化编程。

MOVAL,01010100B ;对1#计数器送控制字。

OUT43H,ALMOVAL,18H ;计数初值送低8位。

OUT41H,AL当采用“飞读”的方法读取1#计数器的计数值时,可采用如下程序片段:

MOVAL,01000100B ;对1#计数器送锁存控制字。

OUT43H,ALINAL,41H ;读低8位。

MOVCL,AL ;读取的计数值存于CL中。当计数值为16位时,则“飞读”时还应读取高8位锁存器中的计数值。8.5.38253的工作方式及其时序图1.方式0—计数结束产生中断方式图8.22方式0时序波形图说明:①WR有效,表示CPU执行OUT指令,写入控制字CW或计数初值。LSB表示写入到CR低位字节内容。②OUT波形下面的数字表示计数单元CE的内容,N代表不确定的值。N后面的上下两行数字,上行表示CE的高8位内容,下行为低8位内容。数之间的短垂线表示此时刻(CLK下降沿)发生数值变化。③门控信号GATE的上升沿有效。即每出现一次上升沿才意味着有一个触发信号,与上升沿之后的高电平持续时间长短无关。8253利用CLK脉冲的上升沿瞬间检测GATE端的电平,此瞬间是什么电平就确认此时为什么电平。(1)GATE为高电平,由WR启动计数。图中设控制字CW=10H,置入CR的计数值为0004H(仅写入到低位字节,LSB=4)。当写入控制字后,OUT输出变为低电平。置入CR初值后,利用第1个CLK下降沿将(CR)送至CE中,再经过4个CLK下降沿,(CE)减1到0,计数结束,OUT变为高电平并一直保持到重新写入控制字或重新写入新的计数值为止。图中的说明也适用于其它工作方式。(2)在计数过程中,由门控信号GATE控制是否暂停计数。当GATE由高电平变为低电平期间暂停计数,CE内容不变。当GATE再变高电平后就接着计数。

(3)在计数过程中改变计数值。在计数过程中,若计数值为8位计数,则在写入新的计数值后,计数器将按新的计数值重新开始计数。如果是16位计数,则在写入第一个字节后,计数器停止计数。在写入第二个字节后计数器按照新的数值开始计数。2.方式1—可编程单次脉冲方式图8.23方式1时序波形图3.方式2—分频工作方式图8.24方式2时序波形图4.方式3—方波发生器图8.25方式3时序波形图5.方式4——软件触发选通方式图8.26方式4时序波形图6.方式5——硬件触发选通方式图8.27方式5时序波形图表8.5GATE信号功能表8.5.48253与系统的连接应用举例图8.288253与8088总线的连接

图8.28示出了8253用作方波发生器与8088总线的接口方法。图中仅用了A7~A2作为8253片选地址线,产生片选信号Y0与8253的CS端相连。CS信号与A1、A0地址线相配合决定了0、1、2#计数器及控制寄存器的地址号分别为40H、41H、42H、43H。要求2#计数器用作方波发生器产生40kHz方波输出。已知CLK2时钟端输入信号频率为2MHz。根据上述要求2#计数器应设置成方式3工作状态,按双字节传送的50分频计数值应为0032H。此时,2#计数器的初始化程序如下:MOVAL,10110110B;对2#计数器送控制字。

OUT43H,ALMOVAL,32H ;对送50分频计数值0032H的低8位。

OUT42H,ALXORAL,AL ;送高8位值为00H。

OUT42H,AL

在实际应用中,常需要对脉冲的周期、相位、脉冲的宽度进行测量,这时需要一些标准信号的输入,这些都可以通过对8253的控制来完成。图8.298253在系统板上的连接

计数器0用作系统的定时,为系统的电子钟提供一个恒定的时间基准。计数器0的输出OUT0与8259中断控制器的IQR0相连,作为最高级别的可屏蔽0级中断。系统BIOS初始化编程设定计数器0工作于方式3,计数初值设定为0(即为最大初始值65536),控制字为36H。这样,每隔55ms产生一次0级中断。在中断服务程序中,由16位的计数单元对中断次数计数,当计数单元产生进位时,表示所经过的时间约为1h(即65536×1/18.2≈3600s),其误差可由程序中加以修正,以消除积累误差。另外,计数器0还用于对软盘驱动器的马达启/停时间进行管理,每开放一定时间,再令其关闭。其初始化程序片断如下:MOVAL,00110110B;对计数器0设置控制字,方式3。 ;二进制计数。先写CRL,再写CRH。

OUT43,ALMOVAL,0 ;设定初始值(最大初始值)。

OUT40H,AL ;写入计数器0中的计数寄存器低8位。

OUT40H,AL ;写入计数器0中的计数寄存器高8位。

计数器1用作对动态RAM的刷新定时,其输入时钟CLK1同样为1.931816MHz方波。计数器1输出的定时信号接在8237DMA芯片的一个DMA请求端DRQ0,用来发出请求信号,负责对动态存储器刷新。它每隔15.12ms产生一个脉冲宽度为840ns的负脉冲输出信号对动态存储器进行刷新操作。此时计数初值为12H,控制字为54H,相应的初始化程序片断如下:MOVAL,54H;对计数器1设置控制字,二进制计数,只写CRL。OUT43H,AMOVAL,12H;为刷新DRAM,设置分频系数。OUT41H,AL;写入计数器1中的计数寄存器低8位(CRL)。

计数器2在此有两个作用:其一是作为与音频盒式磁带机接口,其二是产生扬声器的频率信号,并与8255A的B口的PB1位共同控制扬声器的发声,其电路连接见图8.29所示。当8255A的PB1为高电平时,在BIOS中提供了扬声器发声程序,此程序把声音频率相应的计数值送入计数器2,用以产生音频信号。现以通过改变8253计数器2的计数值,本例中,每敲一键,计数器的计数初值减100H,音调增高从而改变扬声器发出的音调,其相应的编程如下:CODESEGMENTASSUMECS:CODE,DS:CODE,ES:CODE,SS:CODEORG100HSTART:JMPBEGINORG-SNDDW533H ;BIOS初始化8253时,对通道2设置的计数初值。SAVE-IDDW1133H ;定义最初的计数值,最低音调。BEGIN:PUSHCS ;赋DS段址。

POPDSMOVBX,10H ;发声次数。NEW-SOUND:MOVAL,0B6H;设置通道2控制字,方式3,先写CRL,后写

CRH,;二进制计数。

OUT43H,AL MOVAX,SAVE-ID;设定初始计数值。

SUBAX,100H;每次计数值减100H。

MOVSAVE-ID,AX OUT42H,AL;写入通道2的CRL。

MOVAL,AHOUT42H,AL;写入通道2的CRH。 IN AL,61H ;读入8255端口B的值。

MOV AH,AL XOR AL,03H ;8253通道2选通,扬声器打开。

OUT 61H,AL MOV CX,0FFFFH ;延时。DELAY: LOOPDELAY MOVAL,AH ;关闭扬声器。

OUT61H,AL MOVAH,00H ;通过键盘读字符。

INT16H DECBX ;计数器减1。

JNZNEW-SOUND MOVAL,0B6H ;恢复扬声器初始音调。 OUT 43H,AL MOV AX,ORG-SND OUT 42H,AL MOV AL,AH OUT 42H,AL MOV AH,4CH;返回DOS。

INT 21HCOOE ENDS END START8.5.58254可编程计数/定时器

其主要差别是:

(1)允许最高计数脉冲(CLK)的频率不同。8253的最高频率为2MHz,而8254允许的最高计数脉冲频率可达10MHz(8254为8MHz,8254-2为10MHz)。

(2)8254每个计数器的内部都有一个状态寄存器和状态锁存器,而8253是没有的。

(3)8254多一个读回命令字,用以读出当前计数单元CE的内容和状态寄存器的内容,而8253没有此读回命令字。图8.308254的锁存命令和读回命令格式(a)锁存命令格式;(b)读回命令格式图8.31CPU读状态锁存器内容命令格式其中D5~D0内容和写入到计数器的控制字的对应位相同。D7输出位反映了该计数器输出引脚信号OUT的状态。若OUT为高电平,则D7=1;若OUT为低电平,则D7=0,D6位指示时间常数寄存器CR中的内容是否已装入到计数单元CE中。若已装入CE中,则D6=0;若CPU向计数器写入控制字及计数初值后,但CR内容仍未装入CE中,则D6=1。8.5串行通信及8251串行接口电路8.5.1串行通信的基本概念1.串行通信与并行通信图8.32通信的两种基本方式(a)串行通信;(b)并行通信2.串行通信中的数据传送模式

(1)单工、半双工、全双工的数据传送模式。①单工(Simplex)通信模式。仅能进行一个方向的数据传送。如A作为发送器,B能作为接收器。②半双工(HalfDuplex)通信模式。它能够在设备A和设备B之间交替地进行双向数据传送。即数据可以在一个时刻从设备A传送到设备B,而另一时刻也可以从设备B传送到设备A,但不能同时进行。③全双工(FullDuplex)通信模式。通信设备A或B均能在发送的同时又能接收数据。即设备A向设备B发送数据的同时,设备B也可以向设备A发送数据。图8.33数据传送模式(a)单工;(b)半双工;(c)全双工3.比特率与波特率数据传送的速率通常用比特率(bitrate)表示。比特率是指每秒能传输的比特(bit)数,单位为bit/s(bps-bitpersecond)。在数据通信中,还有另外一个常用术语——波特率(Baudrate),波特率是指每秒能传输的符号(也称离散状态)数。若每个符号所含信息量等于1比特,则波特率等于比特率。在计算机中,一个“符号”的含义为高、低两种电平,即符号所含信息量刚好等于1比特。因此,在计算机数据传输中常将比特率称为波特率。

计算机数据传输的速率是120字符/s,而每个字符假如为10个比特(bit)位,则其传输的波特率为10bit/字符×120字符/s=1200bit/s=1200波特每一位的传输时间Td就是波特率的倒数,在本例中则为Td=1/1200=0.833ms

国际上规定了一个标准波特率系列,即110、300、600、1200、1800、2400、4800、9600和19200波特。串行接口的打印机通常采用110波特,也有采用150波特和300波特,字符显示器终端设备使用的波特率1200以上。当使用调制解调器在公共电话线上进行远程数据通信时常使用1200波特,线路质量好的城市和地区可达2400波特。4.串行通信中的异步传送与同步传送(1)异步传送。图8.34异步传送数据格式(a)有空闲位;图8.34异步传送数据格式(b)无空闲位①起始位。每个字符的开始必须是持续一个比特时间的逻辑“0”电平,标志着每一个字符的开始。②数据位。有5~8位,紧跟着起始位之后,是字符中的有效数据位。传送数据时,先送低位,后送高位数据。③奇偶校验位。仅占一位。可根据需要设置奇校验或偶校验,也可以不设校验位。④停止位。1位或1.5位,或2位。并规定为逻辑“1”状态。(2)同步传送。图8.35同步方式所采用的数据格式(a)单同步;(b)双同步;(c)SDLC;(d)HDLC

同步传送中,最常用的是SDLC/HDLC数据格式。SDLC(SynchronousDataLinkControl)是IBM公司推出的同步数据链控制规程,而HDLC(HighLevelDataLinkControl)是ISO推荐的高级数据链路控制规程。这两种规程除了某些术语和细节不同外,基本原理相同。图8.36为SDLC/HDLC数据格式。各部分功能说明如下:图8.36SDLC/HDLC数据格式①SDLC/HDLC标志符,格式01111110。其作用是作为信息传输的边界符,在两个标志符间的信息称为一帧,在一帧信息传送前先送该标志符,表示一帧开始,一帧信息传输结束,紧接着应再送一标志符,作为一帧结束的标志。为了实现标志符编码的唯一性,采用了“0”比特插入/删除技术,以保证接收站能正确识别数据场信息中含有与标志符代码相同的数据信息。其方法是:在发送数据场信息时,如遇到连续5个“1”,则自动插入“0”。接收端在连续收到5个“1”后就自动将其后的“0”删除,以便恢复信息原有的含义。例如,当CPU将数据TFFEH=0111111111111110B送至发送端后,发送器自动插入“0”变为:01111101111101110B,此信息由接收器接收,并删除“0”后恢复成原信号TFFEH。②地址场,简称A场。SDLC规定A场为一个字节长;HDLC规定A场可以为任意字节长度。当地址场字节第1(D0)位为“0”,则后跟字节为地址场信息,否则为最后一个地址场信息。③控制场,简称C场。SDLC规定C场为一个字节长;HDLC规定C场为一个字节或2个字节长。SDLC/HDLC的所有场都是从最低有效位(D0)开始传送。④信息场,简称Ⅰ场。它紧跟C场之后,其长度可以从0位(无信息)到存储器可容纳的最大位数。⑤帧校验位,简称FC场。SDLC/HDLC均采用16位循环冗余校验(CyclicRedundancyCheck)CRC校验码,其生成多项式为X16+X12+X5+1。除F场和自动插入的“0”比特外,所有的信息都参加CRC计算。从SDLC/HDLC数据格式中看出,传送的数据信息越长,通信效率越高。5.信号的调制和解调如果要利用电话信道进行远距离传输的话,直接采用数字信号是不能实现的。因为电话信道主要用以传输人的话音信息,在此频带范围以外的直流成分和其它频率分量将因不能通过电话信道传输数字信号。必须采取一些措施,把数字信号转换成适于传输的模拟信号,而在接收端再将模拟信号转换成数字信号。前一种转换称为调制,后一种转换称为解调。完成调制、解调功能的设备叫做调制解调器(Modem)。调制解调器的类型比较多,但基本可分为两类:异步调制解调器和同步调制解调器。

异步调制解调器适用于异步通信方式,它不提供同步时钟信号。常用的调制方法是频移键控(FSK,FrequencyShiftKeying)或称为两态调频。频移键控的基本原理是把“0”和“1”的两种数字信号分别调制成两个不同频率的音频信号。图8.37频移键控调制原理图8.38PSK相移键控调制原理(a)二进制0;(b)二进制1;(c)PSK信号(101)8.5.2串行接口的基本结构与功能1.异步串行接口的基本结构与功能图8.39异步串行接口的基本结构(1)输出缓冲寄存器。它接收CPU从数据总线送来的并行数据,并加以保存。

(2)输出移位寄存器。它接收从输出缓冲寄存器送出的并行数据,以发送时钟的速率把数据逐位移出。

(3)输入移位寄存器。它以接收时钟的速率把出现在串行数据输入线上的数据逐位移入。当数据装满后,并行送往输入缓冲寄存器中。(4)输入缓冲寄存器。它从输入移位寄存器并行接收数据,然后由CPU取走。

(5)控制寄存器。它接收由CPU送入的控制字,由控制字的内容决定通信时的数据格式以及传输方式等。

(6)状态寄存器。其中存放着各种状态标志信息。在通信过程中,当符合某种状态时,接口中的状态检测逻辑将状态寄存器的相应位置“1”,让CPU查询。

发送数据的过程是:CPU把要输出的数据写入输出缓冲寄存器,然后由接口电路中的发送控制逻辑根据预先写入控制字的内容对数据格式化,即加上起始位、奇偶校验位和停止位等成帧信息。格式化后的数据由输出移位寄存器按选定的传输速率逐位移出,由串行数据输出线输出。

接收数据的过程是:串行口允许接收后,接收控制电路不断监视串行数据输入线上的电平,一旦出现持续一个位周期的低电平,则开始采样有效数据位,并逐位移入移位寄存器中。采样重复进行,直至采样规定的停止位为止。然后再将有效数据并行送入输入缓冲寄存器,并由接口电路中的差错检测逻辑对输入数据进行校验,再根据校验结果置状态寄存器相应标志位。如传送数据正确,则由CPU读取数据。在异步通信时,发送接收端都要用发送/接收时钟来决定每一信息位对应的时间宽度。发送/接收时钟(统称为外部时钟)的频率可以是位传输率的16倍、32倍和64倍。这个倍数称为波特率因子。

若设每一位信息所占的时间为

Td,外部时钟周期为Tc,则有如下关系:其中K=16、32或64,称为波特率因子。由于每个数据(信号)位时间周期Td=KTc,所以每K个时钟脉冲读一次数据。为保证采集数据的正确,采集时间应取在数据位的中间时刻,就可避开信息上升或下降时可能产生的不稳定状态。2.同步串行接口的基本结构与功能图8.40同步串行接口的基本结构8.5.3可编程串行通信接口Intel8251A1.8251A的结构、基本功能及工作原理图8.418251A的结构框图与引脚图(a)结构框图;(b)引脚图8251A可用于串行的异步或同步两种通信方式,其主要性能如下:

(1)可用于同步和异步传送。

(2)同步传送(5~8)位/字符;可选择内部或外部同步;可自动插入同步字符。

(3)异步传送(5~8)位/字符;时钟速率为通信波特率的1、16或64倍;可产生中止字符(BreakCharacter);可产生1、或2个位的停止位;可检查假启动位;自动检测和处理中止字符。

(4)波特率:DC-19.2bit/s(异步);DC-64bit/s(同步)。(5)全双工、双缓冲发送和接收器。

(6)出错检测:具有奇偶、溢出和帧错误等检测电路。

(7)全部输入输出与TTL电平兼容;单一的+5V电源;单一的TTL电平,28脚双列直插式封装。

(8)与Intel8080、8085、8086、8088CPU接口兼容。(1)接收器。它接收在芯片RxD引脚上出现的串行数据并按规定格式转换成并行数据,存放在接收缓冲器中,以待CPU取走此数据。当8251A工作于异步方式时,接收器监视RxD线上的电平变化。平时没有数据传送时,RxD线上为高电平。当发现有低电平出现时,则认为有可能是某一字符起始位的到来,但还不能确定它就是真正的起始位,因为有可能是干扰脉冲造成的低电平而出现的假起始位信号。为检测是否是真的起始位信号,采用当在RxD线上发现有低电平后,接收器启动一个内部计数器用作接收时钟,其波特因子可选16、32或64,当计数到相当于一个数据位宽度的一半(如选择K=16倍,则为计数到第八个脉冲)时,如果采样到的RxD仍为低电平,就确认是真正的起始位出现了,而不是噪声干扰信号,否则认为是假起始位信号。当真正的起始位出现以后,8251A接收器同样以内部计数器的接收时钟频率每隔16个时钟脉冲周期采样一次RxD,然后将采样的数据送至移位寄存器,经过移位操作,并经奇偶校验检查和去掉停止位,就得到了变换成并行格式的数据,存入接收缓冲寄存器。同时输出RxRDY状态信号,表示已经收到一个可用的数据字符,CPU可以到缓冲器取走数据。对于少于8位的数据字符,8251A将它们的高位填“0”。

在同步接收方式下,8251监视RxD线,每出现一个数据位就把它移位接收进移位寄存并与同步字符(由初始化程序设定)寄存器内容相比较,若不等则8251A重复执行上述过程,若相等,即找到了同步字符,则输出SYNDET信号,表示已找到同步字符。实现同步后,接收器与发送器之间就开始进行数据的同步传输。接收器不断对RxD线进行采样,并把收到数据位送到移位寄存器中。每当收到的数据达到设定的一个字符的位数时,就将移位寄存器中的数据并行送到接收缓冲寄存器中,并输出RxRDY信号,表示已收到一个数据字符。(2)发送器。在异步方式下,只有当程序设置了TxEN(TransmitterEnable——允许发送)和CTS(ClearToSend,这是由外设发来的对CPU请求发送信号的响应信号)有效时,才能开始发送过程。发送器接收CPU送来的并行数据,加上成帧信息起始位、校验位(由初始化程序规定设置),最后加上相应的停止位,由TxD输出线发送出去。

在同步方式下,也要在程序置TxEN和CTS有效,才能开始发送过程。发送器首先根据初始化程序对同步格式的设定,发送一个一个同步字符(单同步)或者两个同步字符(双同步),然后发送数据块。在发送数据块时,如果初始化程序设定为有奇偶校验,则发送器会对数据块中每个数据字符加上奇/偶校验位。在同步发送数据时,如果CPU来不及把新的数据提供给8251A时,发送器会自动插入同步字符。于是,就满足了在同步发送方式时不允许数据字符之间存在间隙的要求。如通信规程中有CRC校验,则发送器对所要传送的二进制码序列按特定的规则产生相应的校验码,并将其发送出去。

发送器的另一功能是发送中止符(Break)。中止符是由在通信线路上的连续的空白符(Space)组成。它是用来在全双工通信时中止发送终端的。只在8251A的命令寄存器D1(SBRK)位为“1”,则8251A就一直发送中止符。(3)数据总线缓冲器。它用来与CPU的数据总线D0~D7相连。其中含有3个缓冲器:①状态字缓冲器。它用来存放8251A内部的工作状态,供CPU查询、测试之用;②接收数据缓冲器。用来存放接收器已经装配完毕的字符,准备CPU来读取;③发送数据/命令缓冲器。用来寄存CPU送入8251A的数据或命令。(4)读/写控制逻辑电路。用以实现对CPU输出的控制信号译码,以控制实现如表8.6所示的读/写功能。表8.68251读/写控制功能表2.8251A与CPU及外设的连接图8.428251A与CPU及外设的连接(1)

温馨提示

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

评论

0/150

提交评论