第 9章 DMA控制器 82C37A和时间间隔定时器 82C54
掌握 82C37A,82C54的内部结构
掌握 DMA方式传送的一般过程
掌握 82C54引脚定义及使用方法
熟练应用 82C54编程
熟悉 82C37A内部寄存器的功能及使用,
了解 82C37A引脚定义教学目的和要求重点
82C37A实现 DMA方式传送的一般原理与过程
82C54引脚定义及使用,82C54的编程应用难点
82C37A内部寄存器的功能及编程
DMA方式传送的一般过程
82C54的六种工作方式及对应时序
9.1 DMA控制器 82C37A
82C37A芯片拥有以下几个特点,
管脚引线与 NMOS8237A兼容
4个各自独立的 DMA通道
可以级联扩展成至任意数量的 DMA通道 。
高速数据传输:在 8MHz时钟时可达每秒 4MB;
在 12.5MHz时钟时可达每秒 6.25MB;
存储器到存储器之间传送方式
静态 CMOS设计,允许低功耗操作
TTL/CMOS电平全兼容
内部寄存器可用软件读取
9.1.1 82C37A的内部结构
82C37A芯片是一个多模式的直接存储器存取控制器,是一种 CHMOS外围接口 。 由于它允许外部设备直接从系统存储器传送信息,所以极大地改进了系统的性能图 9-1给出了 82C37A DMA控制器 (或者称
DMAC)的内部结构框图 。 从图中可以看出,
82C37A芯片是由定时及控制,优先级编码器及循环优先级逻辑,命令控制及 12个不同类型的寄存器等功能模块组成 。 下面简要地介绍每部分电路以及寄存器的主要功能
82C37A的内部结构
82C37A的定时及控制部件产生外部总线接口所需要的控制信号 。 例如,它接受 READY及 等输入信号,产生 ADSTB及 AEN等输出信号 。 这些信号与输入到 82C37A的时钟信号一起进行的是同步操作 。
目前高速的 82C37A可在 12.5MHz的最大时钟速率下进行操作如果 82C37A收到多个 DMA服务请求,那么它将按优先级的高低来处理这些 DMA服务请求 。 在软件控制之下,可选择两种优先级方式中的一种 。 这两种优先级方式分别被称之为 固定优先级和循环优先级
CS
固定优先级方式 是在数值上按由小到大顺序给各个通道指定优先级,即通道 0的优先级最高,而通道 3
的优先级最低
循环优先级 的初始化优先级级别与固定优先级相同 。
但是,当某个特定级别的 DMA请求得到服务之后,
进行优先级循环,先前得到服务的通道被指定为最低优先级
例如,假设初始化优先级为 1的刚刚被服务过,此时通道 2就会处于最高优先级,而通道 1则被循环到最低优先级
82C37A的内部结构
82C37A的 内部 结构
82C37A芯片的命令控制电路对通过微处理器接口送给它的寄存器命令进行译码,由此来确定这次访问的是哪一个寄存器,以及将要形成的是哪种类型操作;另外,在 DMA
操作期间,它通常还要对该电路由程序所决定的操作方式进行译码
82C37A的内部结构由 图 9-1的逻辑框图可以看出,82C37A
有 12个不同类型的内部寄存器 。 例如当前地址寄存器,当前计数寄存器,命令寄存器,
屏蔽寄存器以及状态寄存器等 。 所有这些寄存器的名称已列于表 9-1之中,同时在表中还列出了它们的大小及个数 。 注意,图中有 4个当前地址寄存器,且其大小均为 16位,即 4
个 DMA通道的每一个通道都有一个当前地址寄存器表 9-1 82C37A内部寄存器
9.1.2 82C37A引脚信号的定义图 9-2给出了 82C37A可编程 DMA控制器的引脚图,其引脚定义如下:
CLK,时钟输入信号
,片选信号 (Chip
Select),低电平有效有效时允许 CPU对
82C37A进行编程
CS
82C37A引脚信号的定义译码器 不使用 8086/8088的控制信号 ( M/
/IO),因为它有新的存储器读写信号与 I/O
读写控制信号 (,,和 )
RESET,复位 (Reset) 信号
READY,准备就绪输入端,高电平表示已准备好 。
若把逻辑 0加到准备就绪输入上,则使 82C37A进入等待状态,以等待较慢的存储器或 I/O设备准备就绪后,82C37A才继续操作
IO
M
IOWIORMEMWMEMR
HLDA,总线保持回答 (Hold Acknowledge)信号 。 DMAC向 CPU发总线请求信号 HRQ以后,至少再过一个时钟周期,CPU才能发出总线保持回答信号 HLDA,通知 82C37A可以获得 对地址,数据及控制总线的控制权
DREQ3~ DREQ0,DMA请求 ( DMA Request)
输入信号 。 用于为 4个 DMA通道中的每一个请求
DMA传输 。 由于这些输入的极性是可编程的,所以它们可以是高有效输入也可以是低有效输入 。
当 DMAC向 I/O设备送来 DMA响应信号 DACK以后,I/O接口才撤除 DREQ有效电平
82C37A引脚信号的定义
DB7~ DB0,8位数据线 。 当 DMAC为主模块时,
DB7~ DB0输出当前地址寄存器中的高 8位地址,并通过 ADSTB打入锁存器,和地址线 A7~ A0输出的低 8位地址一起构成 16位的存储器地址;当 DMAC
为从模块时,CPU通过 DB7~ DB0对 DMAC进行读写操作
存储器读信号 。 此信号有效时,所选中的存储器单元的内容被读到数据总线上
MEMR
82C37A引脚信号的定义
存储器写信号 。 此信号有效时,数据总线上的内容被写入选中的存储单元
输入输出设备写信号 。 在 DMA控制器作为主模块时,的方向是由 DMA控制器送出的,此信号有效时,存储器中读出的数据被写入 I/O接口中;在 DMA控制器作为从模块时,的方向是送入 DMA控制器,此信号有效时,CPU往 DMA控制器的内部寄存器中写入信息,即进行编程
MEMW
IOW
IOW
82C37A引脚信号的定义
,输入输出设备读信号,低电平有效 。
在 DMA控制器作为主模块时,作为输出控制信号由 DMA控制器送出,此信号有效时,
I/O接口部件中的数据被读出送往数据总线;
在 DMA控制器作为从模块时,作为输入控制信号送入 DMA控制器,此信号有效时,
CPU读取 DMA控制器中内部寄存器的值
IOR
IOR
IOR
,DMA传输过程结束信号 。 是双向的,
当由外部往 DMA控制器送一个 信号时,DMA
传输过程被外部强迫性地结束;另一方面,当
DMA控制器的任一通道中计数结束时,会从引脚输出一个有效电平,作为 DMA传输结束信号 。 不论是从外部终止 DMA过程,还是由内部计数结束引起终止 DMA过程,都会使 DAM控制器的内部寄存器复位
EOP
82C37A引脚信号的定义
EOP
EOP
EOP
82C37A引脚信号的定义
DACK,DMA控制器送出 I/O接口的回答信号 。 DMA控制器获得 CPU送来的总线允许信号 HLDA以后,便产生 DACK信号送到相应的外设的接口
HRQ,总线请求信号 。 当外设的 I/O接口要求 DMA传输时,往 DMA控制器发送 DREQ信号,如果相应通道的屏蔽位为 0,则 DMA控制器的 HRQ端输出为有效电平,从而向 CPU
发总线请求
A3~ A0,最低的 4位地址线,它们是双向信号端 。
在 DMA控制器作为从模块时,A3~ A0作为输入端,
对 DMA控制器的内部寄存器进行寻址,这样,
CPU 可以对 DMA控制器进行编程;在 DMA控制器作为主模块时,这 4个信号端工作于输出状态,
以提供低 4位地址,其对应的寄存器地址如表 9-2
所示
A7~ A4,这 4位地址线始终工作于输出状态或浮空状态 。 它们在 DMA传输时提供高 4位地址
82C37A引脚信号的定义
82C37A引脚信号的定义
ADSTB,地址选通输出信号 。 此信号有效时,
DMA控制器的当前地址寄存器中的高 8位地址通过 8位数据线 DB7~ DB0送到外部锁存器
AEN,地址输出允许信号 。 AEN使地址锁存器中的高 8位地址送到地址总线上,与芯片直接输出的低 8位地址共同构成内存单元地址的偏移量 。 AEN信号也使与 CPU相连的地址锁存器无效,
这样,就保证了地址总线上的信号是来自 DMA
控制器,而不是来自 CPU的表 9-2 软件操作及对应的寄存器地址
9.1.3 内部寄存器的功能和应用前面介绍了 82C37A内部结构和寄存器,下面将通过 82C37A DMA控制器的各种操作来说明这些寄存器所具有的功能
每个 DMA通道都配备有 2个地址寄存器,其一为基址寄存器,其二为当前地址寄存器 。 在基址寄存器内存放着 DMA操作的起始地址,而在当前地址寄存器内保持着的则是将要访问的下一个存储单元的地址 。 在向基址寄存器写入的同时,也将自动地把相同的值装入当前的地址寄存器 。 由此可见,初始的当前地址寄存器的值总是指向 DMA传送的存储器起始地址 。 这些寄存器必须在启动 DMA周期之前装入适当的值内部寄存器的功能和应用
在 82C37A芯片内还有一个名为先 /后触发器的内部触发器 。 该触发器标识将哪一个字节写入基址寄存器 。 如果这个内部触发器的开始状态是逻辑 0,那么软件必须向该寄存器写入地址字的低字节;相反,
如果它为逻辑 1,必须将高字节写入该寄存器
例如,为了把地址 1234H写入 DMA控制器通道 0的基址和当前地址寄存器中,且该 DMA控制器的基本
I/O地址为 ADDER,这里 ADDER≤ F0H,并且由
82C37A的 信号如何产生来决定,那么可以通过执行下列指令来初始化基址寄存器和当前地址寄存器
CS
内部寄存器的功能和应用例 【 9-1】 MOV AL,34H ;写低字节
OUT ADDER+0,AL
MOV AL,12H ;写高字节
0UT ADDER+0,AL
假定该内部触发器已初始化为 0
82C37A的每个 DMA通道还配备有两个字计数寄存器,被分别称之为基本字计数寄存器和当前字计数寄存器 。 两个寄存器的长度也均为 16位 。 基本字计数寄存器的值规定 DMA操作期间所传送的数据字节数 。 实际传送的字节数总是比编程写入该寄存器的值多 1。 这是因为 DMA传送的结束是通过检测当前字计数值从 0000H到 FFFFH的变化来实现的 。 在 DMA操作周期的任何时刻,当前字计数寄存器中的值总是表示还剩多少个字节尚未传送内部寄存器的功能和应用对计数寄存器的编程方法与上面介绍的对地址寄存器的编程方法相同 。 例如,要把计数值 0FFFH写入到 DMA控制器通道 1的基本字计数寄存器和当前字计数寄存器中,设 DMAC的基 I/O地址为 ADDER,
且 ADDER≤ F0H,则可通过执行下列指令来实现例 【 9-2】 MOV AL,0FFH ;写低字节
OUT ADDER+3,AL
MOV AL,0FH ;写高字节
OUT ADDER+3,AL
82C37A其他 5个寄存器。
一,命令寄存器 ( CR-command register)
由图 9-1可以看出,82C37A内配备有一个 8位的命令寄存器 。 该寄存器的各位用来控制 DMA控制器所有通道的操作方式 。 图 9-3给出了每个控制位的功能;通常是通过这些位的设置来选择各种操作,例如,存储器到存储器之间传送,允许 DMA
控制器及选择优先级方式等 。 例如,当位 0为 1时,
则允许存储器到存储器之间的 DMA传送方式,而当该位为 0时,则 DMA传送操作是在 I/O设备和存储器之间进行 。 另外,若将位 4设置为 0,则全部 4个通道选择均为固定优先级方式;若这位被设置 1,则选择的是循环优先级二,方式寄存器 (MR-Mode register)
82C37A的方式寄存器用于设备的操作特性 。 从图 9-1可以看出,4个 DMA通道的每一个通道都分别有一个方式寄存器,每个寄存器的长度均为 6位 。
其中的各个位用来为每个 DMA通道选择各种操作方式 。 典型方式寄存器的格式如图 9-4所示
最低 2位代码用以标识写入方式命令字节的通道号 。
例如,在一个写入通道 1的方式寄存器命令中,这 2
位必须为 01
二、方式寄存器 (MR-Mode register)
D2位和 D3位规定该通道是形成数据写,数据读还是检验总线周期 。
例如,如果将这两位设置为 01,那么该通道将形成写数据传送,即 I/O
设备到存储器的 DMA数据传送
D4 和 D5 分 别 决 定 在
DMA周期结束及 DMA数据传送时如何修改当前地址和当前计数寄存器中的值二、方式寄存器 (MR-Mode register)
D4允许或禁止自动初始化处理功能 。 若允许自动初始化,则在 DMA操作结束时,分别将基地址和基本字计数寄存器的内容重新装入当前地址和当前计数寄存器内 。 在这种情况下,
该通道已为开始下一次 DMA操作做好了准备
在每次 DMA数据传送完成时,当前地址寄存器是自动增值还是自动减值,用 D5的设置来确定
最高 2位 (即 D6和 D7),被用来为该通道从 4
种可能的 DMA操作方式中选择出其中的一种
这 4种操作方式分别称为,请求方式,单次方式,块方式和级联方式。 这 4种方式允许每次传送 1个数据字节或 1个字节块
在请求传送方式中,一旦启动了 DMA周期,
只要 HRQ信号保持有效且还未达到终止计数值 (TC),则将仍然连续不断地进行数据字节的传送二、方式寄存器 (MR-Mode register)
二、方式寄存器 (MR-Mode register)
块传送方式:一旦启动了 DMA周期,将连续进行数据传送操作,直至达到了终址计数值 。
在请求传送方式下,DREQ返回到它的无效状态并将暂停数据传送过程,但在块传送方式下,当 DMA周期开始后可在任何时刻释放
DREQ信号,而块传送仍将继续进行,直至整个数据块传送完毕
单次传送方式:通道被设置为每次只能进行一个数据的传送 。 另外,如果在当前数据传送完成时还未达到终止计数值,在这种情况下就不会出现自动初始处理操作 。 如果在当前数据传送完成之前 DREQ输入变成了无效信号,只有 DREQ再次变为有效后,才可进行另一次数据传送操作 。 另一方面,如果 DREQ信号在整个数据传送周期一直保持为有效,那么 82C37A的 HRQ输出将转变为无效,即逻辑 0电平,以便在进行下一次单次传送之前,允许微处理器至少可以获得一个总线周期的系统总线控制权二、方式寄存器 (MR-Mode register)
二、方式寄存器 (MR-Mode register)
前面已经介绍了如何通过 DREQ输入端上的硬件请求信号来启动 DMA周期 。 另外,82C37A也能响应对 DMA服务软件的启动请求 。 请求寄存器就是为达到这一目的而提供的 。 虽然表 9-1中列出的该请求寄存器仅有 4位,但每一位都对应一个 DMA通道 。
当一个通道的请求位被置成 l时,则启动 DMA操作;
当被置成 0时,则停止 DMA操作 。 使用软件启动的
DMA通道必须是块传送操作方式三、请求寄存器 (RR-request register)
对请求寄存器中的各位进行置位或复位操作,可通过向
82C37A写命令的方法来实现 。 图 9-
5中展示出了请求寄存器的格式四、屏蔽寄存器 (MSR-mask register)
单个通道屏蔽寄存器在 82C37A内部还提供了一个单个通道屏蔽寄存器,如图 9-6所示 。
D1 D0位的编码分别代表 4个通道,D2位为屏蔽位,当屏蔽位被置 1
时,将禁止相应通道上的 DREQ输入 。 当 屏蔽位被置 0时,将允许相应通道上的 DREQ输入,对应的通道可被外部设备激活四、屏蔽寄存器 (MSR-mask register)
4个通道屏蔽寄存器
4个通道屏蔽寄存器中的命令如图 9-7中 。 这个命令字可用来同时装入 4
个通道的屏蔽位 。 当屏蔽位被置 1时,将禁止相应通道上的 DREQ输入,相反,如果把屏蔽位置 0,
则允许 DREQ输入,所对应的通道可被外部设备激活五、状态寄存器 (SR-status register)
状态寄存器,其内含有 4个 DMA通道的操作状态信息从图 9-8
中可以看到,其中的低 4位标识通道 0~ 3
是否已达到它们的终止计数值当某一通道的 DMA
操作达到终止计数值时,通过将相应的 TC
位设置成逻辑 1电平来记录这一事实五、状态寄存器 (SR-status register)
状态寄存器的高 4位表示是否有相应通道的请求被挂起 。 例如若由软件或硬件把一个 DMA请求发送给了通道 0,则状态寄存器的位 4被置成 1。 微处理器可通过软件来读取状态寄存器的内容
9.1.4 82C37A与微处理器的接口图 9-9 中 展 示 出 了
82C37A 与微处理器之间的接口信号方框图在 微 机 系 统 中,
82C37A是作为外围控制器来工作的,它的操作必须通过软件进行初始化处理,这要通过写它的内部寄存器来实现,
这些数据的传送要通过它与微处理器之间的接口来进行
9.1.4 82C37A与微处理器的接口图 9-10展示出微处理器与 82C37A相连接当 82C37A没有被外围设备用来进行
DMA操作时,此时它处于所谓空闭状态 。 在这种状态下,
微处理器可以向这个 DMA控制器输出命令以及读/写它的内部寄存器
9.1.4 82C37A与微处理器的接口
数据线 DB0~ DB7是进行这些数据传送的通路 。 所访问的寄存器 由 DMAC内部接到地址输入端 A0~A3的 4位寄存器 ( I/O缓冲 ) 中的地址来确定
在数据传送总线周期,其他地址位被外部电路译码,
以产生 82C37A的片选输入 。 在空闲状态时,
82C37A不断采样这个片选输入信号,等待它变为有效 。 在这个输入端上的逻辑 0将开启微处理器接口 。 微处理器分别用信号 /IOR和 /IOW来通知
82C37A是进行输入总线周期还是输出总线周期 。
由此可见,这实际上是把 82C37A映像到了微型计算机的 I/O地址空间
9.1.5 82C37A的 DMA接口
82C37A芯片内拥有 4个独立的 DMA通道,
通常,总是把每一个通道指定给一个专门的外围设备 。 由图 9-11可见,该电路有 4个 DMA
请求输入信号,标识为 DREQ0~ DREQ3。 这4位请求输入信号分别与通道 0,1,2,3相对应 。
在空闲状态,82C37A不断地测试这些输入信号,以确定是否有一个是有效的 。 当某一外围设备欲进行 DMA操作时,就通过使 82C37A的
DREQ输入信号变为 1来产生 1个服务请求
I/O电路的 I/O接口
9.1.5 82C37A的 DMA接口
在响应有效的 DMA请求时,该 DMA的控制器将使它的保持请求回答 (HRQ)输出信号变为 1。 通常,
把这个输出信号提供给微处理器的 HOLD输入端,
并通知该微处理器,DMA控制器要求获得对系统总线的控制权 。 当微处理器准备放弃对总线的控制权时,它就使其总线信号进入高阻状态,并使保持响应 HLDA 输 出 信 号为 1,来把这 一事 实通知 给
82C37A芯片 。 微处理器的 HLDA信号端就接到
82C37A芯片的 HLDA输入端,以此表明目前系统总线可以由 DMA控制器使用
9.1.5 82C37A的 DMA接口
当 82C37A控制了系统总线时,它就通过输出一个
DMA响应信号 (DACK)来告诉申请 DMA服务的外围设备,它已处于准备就绪状态 。 注意,在图 9-11中,
4个 DMA请求输入 (DREQ0~ DREQ3)信号中的每一个信号,都有一个与其相对应的 DMA输出响应
(DACK0~ DACK3)信号 。 一旦完成了这个 DMA请求 /响应信号的交换过程,这个外围 I/O电路就可在
82C37A的控制之下进行对系统总线及存储器的直接访问
在 DMA总线周期期间,总线是由 DMA控制器实施控制的,由 82C37A产生地址及形成存储器或 I/ O
数据传送所需要的全部控制信号
在整个 DMA总线周期开始时刻,16位的地址输出到地址线 A0~ A7及数据线 DB0~ DB7上。数据线上的高端 8位地址与地址选通信号 (ADSTB)是在同一时刻变为有效的,所以 ADSTB是用来锁存地址的高端 8位进入外部地址锁存器的定时信号
9.1.5 82C37A的 DMA接口
地址允许信号在整个 DMA总线周期期间均为有效状态,它一方面能用来允许该地址锁存器,
另一方面又用于禁止其他电路连接到总线上
假定要从 I/ O外部电路将数据传送到存储器,
82C37A利用 输出信号来通知 I/O电路,把数据放到数据线 DB0~ DB7上。同时,它利用信号把总线上的有效数据写入存储器。
在这种情况下,数据直接从 I/O电路传送到存储器而没有通过 82C37A芯片
9.1.5 82C37A的 DMA接口
IOR
MEMW
9.1.5 82C37A的 DMA接口与此类似,同样也可以产生从存储器到 I/O
电路的 DMA数据传送 。 在这种情况下,
82C37A先从存储器读出数据,然后再把它们传送到 I/O电路,最终再将数据传送至外围设备 。 对于这样的数据传送方式来说,82C37A
芯片的 和 控制信号有效
82C37A所形成存储器到 I/ O或 I/O到存储器的 DMA总线周期,均需用 4个时钟周期时间 。 时钟周期的持续时间由加到 CLOCK输入端的时钟信号的频率所决定
MEMR IOW
9.1.5 82C37A的 DMA接口
82C37A还能形成存储器到存储器的 DMA
传送 。 在这样的数据传送中,和 这
2个信号均要被使用 。 与 I/O到存储器的操作不同,这种存储器到存储器的数据传送需要占用 8个时钟周期时间 。 这是因为要用 4个时钟作为读总线周期,把数据从源存储器单元传送到 82C37A内部的暂存寄存器,然后再用另外 4个时钟作为写总线周期,把数据从暂存寄存器传送到目的存储器单元
MEMR MEMW
9.1.5 82C37A的 DMA接口
READY输入信号用来适应低速的存储器或 I/O电路 。 在 82C37A将要完成一个存储器或 I/O总线周期之前,READY必须变为有效的 1电平 。 若 READY为 0,则需插入等待状态来扩展当前总线周期的持续时间
9.2 可编程时间间隔定时器芯片 82C54
82C54是一种实现定时和计数功能的外围电路,
拥有 3个独立的 16位计数器,每个计数器都可通过程序设计的方法设定为实现定时功能的各种操作方式 。
可编程时间间隔定时器芯片 82C54有以下几个 特点,
与 所有 Intel系列微处理器兼容
可 以处理从 DC~ 12MHz范围的输入频率信号
3个独立的 16位的计数器
最大计数范围为 0~ 65535
6种可编程的计数模式
状态读返回命令
以二进制或 BCD计数
与 TTL完全兼容
单 5V供电电压
低 功耗的 CHMOS
工作 温度范围:
C82C54 0?C~ +70?C
I82C54 -40?C~ +85?C
M82C54 -55?C ~ +125?C
9.2.1 82C54内部结构
82C54的内部结构如图 9-12
所示,该 芯片内 部由数 据总线 缓冲器,控制 寄存器,读
/ 写控制 逻辑以 及计数 器等组成
82C54内部结构一,数据总线缓冲器该缓冲器为 8位双向三态的缓冲器,可直接挂在数据总线上 。 通过它,一方面可以向控制寄存器写入控制字,向计数器写入计数初值;另一方面也可由 CPU通过该缓冲器读取计数器的当前计数值二,读/写控制逻辑读/写逻辑的功能是接收来自 CPU的控制信号,包括读信号,写信号,片选信号 和芯片内部寄存器的寻址信号 A1,A0,并完成对 82C54各计数器的读/写操作
RD WR CS
82C54内部结构三,控制字寄存器接收来自 CPU的控制字,并由控制字 D7,D6位的编码决定该控制字写入哪一个计数器的控制寄存器中四,计数器
82C54有 3个独立的计数器通道,每个通道的结构完全相同,如图 9-13所示 。 每一个通道有一个 16位减法计数器,还有对应的 16位初值寄存器和输出锁存器 。 计数开始前写入的计数初值存于初值寄存器;计数过程中,减法计数器的值不断递减,而初值寄存器中的初值不变 。 输出锁存器则用于写入锁存命令时锁定当前计数值
82C54每个计数器的内部逻辑图
9.2.2 82C54的引脚信号
82C54有 24条引脚,双列直插式封装,如图 9-14
所示一,与 CPU一侧的接口信号
D0~ D7,三态双向数据线 。
与 CPU数据总线相连,用于传递 CPU与 82C54之间的 数据信息,控制信息和状态信息
82C54的引脚信号
片选信号,输入,低电平有效 。 有效时,
表示 82C54被选中,允许 CPU 对其进行读/
写操作 。 通常连接到 I/O端口地址译码电路的输出端
,写信号,输入,低电平有效 。 用于控制 CPU对 82C54的写操作,可与 A1,A0信号配合以决定是写入控制字还是计数初值
WR
CS
,读信号,输入,低电平有效 。 用于控制 CPU对 82C54的读操作,可与 A1,A0
信号配合读取某个计数器的当前计数值
A1,A0,地址输入线 。 用于寻址 82C54
内部的 4个端口,即 3个计数器和一个控制字 。 一般 与 CPU 低 位的 地址 线 相连,
82C54的读/写操作逻辑如表 9-3所示
RD
82C54的引脚信号表 9-2 82C54读 /写操作逻辑
A1 A0 操作功能
0 1 0 0 0 计数初值装入计数器 0
0 1 0 0 1 计数初值装入计数器 1
0 1 0 1 0 计数初值装入计数器 2
0 1 0 1 1 写控制寄存器
0 0 1 0 0 读计数器 0
0 0 1 0 1 读计数器 1
0 0 1 1 0 读计数器 2
CS RD WR
82C54的引脚信号二,与外部设备的接口信号
CLK[0,1,2],时钟脉冲输入端,用于输入定时脉冲或计数脉冲信号 。 CLK可以是系统时钟脉冲,也可以由其他脉冲源提供
GATE[0,1,2],门控输入端,用于外部控制计数器的启动计数和停止计数的操作 。 两个或两个以上计数器连用时,可用此信号来同步,也可用于与外部某信号的同步
OUT[0,1,2,],计数输出端 。 在不同方式的计数过程中,OUT引脚上输出相应的信号
9.2.3 82C54的控制字一,82C54的方式控制字
82C54的方式控制字有 4个主要功能,
从 3个计数器中选择一个
确 定计数器数据的读写格式
确 定计数器的工作方式
选择计数器的计数方式方式控制字的格式如图 9-15所示,其中,X表示没有使用位,通常设置为 0
82C54的控制字格式
82C54的控制字
计数器选择 (D7D6)
决定这个控制字是哪一个通道的控制字 。 由于 3个通道的工作是完全独立的,
所以需要有 3个控制字寄存器分别规定相应通道的工作方式 。 但它们的地址是同一个,即 A1A0= 11(控制字寄存器的地址 )。 所以,需要由这 2位来决定是哪一个通道的控制字
读 /写格式 (D5D4)
CPU向计数通道写入初值和读取它们的当前状态时,有几种不同的格式
1.若低 8位计数,则令 D5D4= 01,只写低 8位,高 8位自动置 0;
2.若高 8位计数,则令 D5D4= 10,只写高 8位,低 8位自动为 0;
3.若 16位计数,则令 D5D4= 11,先写入低 8位,后写入高 8位;
4.令 D5D4= 00,则把当前计数器中的值锁存到输出寄存器中,以便读取
82C54的控制字
工作方式 (D3D2D1)
82C54的每个通道可以有 6种不同的工作方式,由
D3D2D1 三位决定,具体情况在 9.2.4节中详细介绍
数制选择 (D0)
82C54的每个通道都有两种计数制:二进制和二 —
十进制 (BCD码 ),由 D0位决定 。 在二进制时,写入初值的范围为 0000H~ FFFFH,其中 0000H是最大值,表示 65536。 在二 — 十进制时,写入初值范围为 0000~ 9999,其中 0000表示最大值 l0000。
因为计数器是先减 1,再判断是否为 0,所以写入 0
实际代表最大计数值
82C54的控制字例 【 9-3】 选用 计数器 0计数,计数值为 1000,分别用二进 制和二 — 十进制 ( BCD) 方式计数,用方式 3计数,假设系统安排 82C54计数器 0,1,2和控制端口的地址分别为:
220H,221H,222H和 223H,试对计数器 0编程初始化
MOV DX,223H
MOV AL,00110110H ;二进制方式计数
OUT DX,AL ;送计数方式控制字
MOV DX,220H
MOV AX,1000 ;十进制数 1000送给 AX
OUT DX,AL ;先送低 8位
MOV AL,AH
OUT DX,AL ;后送高 8位
82C54的编程逻辑二,82C54的编程逻辑当初始化 82C54某个计数通道时,首先把相应的方式控制字写入到控制字寄存器中,再根据控制字中数据读 /写格式 (D5D4)位的规定,写入计数初值到对应的计数通道 。 82C54工作过程中,任一通道的计数值,CPU可用输入指令读取 。 CPU读到的是执行输入指令瞬间计数器的当前值,但 82C54的计数器是 16位的,所以要分 2次读至 CPU,因此,
若不锁存的话,在前后两次执行输入指令的过程中,
计数值可能已经发生变化了
82C54的编程逻辑锁存当前计数值有下面 3种方法:
利用 GATE信号使计数过程暂停
向 82C54写入一个方式控制字,令 82C54通道的输出锁存器锁存。 82C54的每个通道都有一个 16位输出锁存器,平时它的值随着通道计数器的值变化。
当向通道写入锁存的控制字时,它把计数器的当前值锁存 (计数器可继续计数 ),于是 CPU读取的就是输出锁存器的值。当对计数器重新编程,或读取计数值后,自动解除锁存状态,它的值又随减法计数器变化
写读回命令锁存
82C54的编程逻辑
82C54的编程逻辑
82C54的另一种工作方式,称为 读回方式 。 这种工作方式允许程序用一条命令就可锁存全部 3个计数器的当前计数值和状态信息 。 读回命令的格式如图 9-16所示,读回命令时控制字寄存器中的 D6
和 D7位均为 1。 其中,使 D1位 (CNT0),D2 位
(CNTl)和 D3位 (CNT2)分别对应 3计数器,为 1选中计数器,为 0不选中计数器,D4位为 0,表示将锁存状态信息,D5位为 0表示将锁存计数值 。 这样,
3个计数器的当前计数值和状态信息就可以同时锁存,以便分时读出
9.2.4 82C54的六种工作方式
82C54的每一个计数器都可以按照控制字的规定有 6种不同的工作方式 。 下面结合时序波形图介绍各种工作方式的计数过程一,方式 0(计数结束中断方式 )时序如图 9-17
计数过程当写入方式 0控制字后,OUT立即变为低电平,
并且在计数过程中一直维持低电平 。 若 GATE= 1,写入初值后,CLK第 1个下降沿到,计数值装入计数器,
随后每一个 CLK脉冲下降沿到,计数器减 1。 计数器减到零时,OUT输出变为高电平,并且一直保持到该通道重新装入计数值或重新设置工作方式为止
GATE信号的影响门控信号 GATE可以用来控制计数过程,GATE
为低电平时暂停计数,当 GATE重新为高电平时又恢复计数
新的初值对计数过程的影响方式 0是写一次计数值,只计数一遍,计数器不会自动重装初值重新开始计数 。 如果在计数过程中写入新的计数初值,则在写入新值后的下一个时钟下降沿计数器将按新的初值计数,即新的初值是立即有效的方式 0
方式 0波形图方式 0波形图备注,下面的约定适用于所有的工作方式波形图:
计数器编程采用二进制方式,只对低字节操作
(LSB);
计数器的片选信号 一直处于低电平;
CW表示控制字 (Control Word); CW=10 表示 10H写入计数器;
LSB表示计数器的低字节;
图下的数字表示计数值:上面的数是高字节,下面的数是低字节;
N表示一个不确定的计数值
CS
二、方式 1 (可编程单稳态触发器)
方式 1的时序如图 9-18所示 。 这种方式由外部门控信号 GATE上升沿触发,产生一单拍负脉冲信号,
脉冲宽度由计数初值决定
计数过程写入控制字后,OUT输出为高电平 。 写入计数初值之后,计数器并不立即开始计数,而要等到 GATE
上升沿后的下一个 CLK输入脉冲的下降沿,OUT输出变低,计数才开始 。 结束时,OUT输出变高,从而产生一个宽度为 N个 CLK周期的负脉冲二、方式 1
GATE信号的影响方式 1中,GATE信号的作用可从两个方面进行说明
第一,在计数结束后,若再来一个 GATE信号上升沿,则下一个时钟周期的下降沿又从初值开始计数,而不需要重新写入初值,即门控信号可重新触发计数
第二,在计数过程中,若再来一个门控信号的上升沿,也在下一个时钟下降沿从初值起重新计数,
即终止原来的计数过程,开始新的一轮计数
新的初值对计数过程的影响如果在计数过程中写入新的初值,不会立即影响计数过程,只有下一个门控信号到来后的第一个时钟下降沿,才终止原来的计数过程,
按新值开始计数 。 即新的初值下次有效方式 1波形图方式 1波形图三、方式 2 (脉冲波发生器、分频器 )
方式 2的工作波形如图 9-19所示 。 这种方式的功能如同一个 N分频计数器,输出是输入时钟按照计数值 N分频后的一个连续脉冲
计数过程写入控制字后的第一个 CLK时钟上升沿,
输出端 OUT 变成高电平 。 若 GATE= 1,写入计数初值后的第一个时钟下降沿开始减 1计数三、方式 2
减到 1时,输出端 OUT变为低电平,减到 0时,
输出 OUT又变成高电平,同时从初值开始新的计数过程 。 因此,方式 2能自动重装初值,
输出固定频率的脉冲,也称之为分频器
GATE信号的影响方式 2中,GATE信号为低电平时终止计数,
而由低电平恢复为高电平后的第一个时钟下降沿重新从初值开始计数 。 由此可见,GATE
一直维持高电平时,计数器为一个 N分频器
新的初值对计数过程的影响如果在计数过程中写入新的初值,且
GATE信号一直维持高电平,则新的初值不会立即影响当前的计数过程,但在计数结束后的下一个计数周期将按新的初值计数,
即新的初值下次有效方式 2波形图方式 2波形图四、方式 3 (方波发生器 )
方式 3的工作波形如图 9-20所示方式 3波形图四、方式 3
计数过程方式 3的计数过程按计数初值的不同分为两种情况:
( 1) 计数初值为偶数 写入控制字后的第一个时钟上升沿,输出端 OUT变成高电平 。 若 GATE= 1,写入计数初值后的第一个时钟下降沿开始减 1计数 。 减到
N/2时,输出端 OUT变为低电平;减到 0时,输出端
OUT又变成高电平,并重新从初值开始新的计数过程 。 可见,输出端 OUT的波形是连续的方波,故称方波发生器
( 2) 计数初值为奇数 写入控制字后的时钟上升沿,输出端 OUT变成高电平。若
GATE= 1,写入计数初值后的第一个时钟下降沿开始减 1计数,减到 (N+1)/2以后,输出端 OUT变为低电平;减到 0时,输出端
OUT又变成高电平,并重新从初值开始新的计数。这时输出的波形为连续的近似方波四、方式 3
GATE信号的影响
GATE= l,允许计数,GATE= 0,禁止计数;
如果在输出端 OUT为低电平期间,GATE变低,则
OUT将立即变高,并停止计数 。 当 GATE变高以后,
计数器重新装入初值并重新开始计数
新的初值对计数过程的影响如果在计数过程中写入新的初值,而 GATE信号一直维持高电平,则新的初值不会立即影响当前的计数过程,只有在计数结束后的下一个计数周期,才按新的初值计数 。 若写入新的初值后,遇到门控信号的上升沿,则终止现行计数过程,从下一个时钟下降沿开始按新的初值进行计数五、方式 4 (软件触发选通方式 )
计数过程写入方式控制字后,OUT输出高电平若 GATE= 1,写入初值后的下一个 CLK脉冲开始减 1计数,计数到达 0值 (注意:不是减到 1),OUT
输出为低电平,持续一个 CLK脉冲周期后再恢复到高电平
门控信号的影响
GATE= 1时,允许计数; GATE信号变低,禁止计数,输出维持当时的电平 。 这种方式依赖于装入计数值触发工作,因此,称为软件触发选通方式
新的初值对计数过程的影响在计数过程中改变计数值,则在写入新值后的下一个时钟下降沿计数器将按新的初值计数,
即新值是立即有效的方式 4波形图方式 4波形图六、方式 5 (硬件触发选通方式 )
计数过程写入控制字后,输出 OUT即为高电平 。 写入计数初值后,计数器并不立即开始计数,而是由门控脉冲的上升沿触发 。 计数结束 (计数器减到 0),输出一个持续时间为一个 CLK时钟周期的负脉冲,然后输出恢复为高电平 。 直到 GATE信号再次触发 。
输出负脉冲可以用作选通脉冲,它是通过硬件电路产生的门控信号上升沿触发得到的,所以叫硬件触发选通方式六、方式 5
门控信号的影响若在计数过程中,又有一个门控信号的上升沿,则立即终止当前的计数过程,且在下一个时钟下降沿,又从初值开始计数,如果计数过程结束后,来一个门控上升沿,计数器也会在下一个时钟的下降沿,又从初值开始减 1 计数,即门控信号的上升沿任何时候到来,都会立即触发一个计数过程新的初值对计数过程的影响如果在计数过程中写入新的初值,则新的初值不会立即影响当前的计数过程,只有到下一个门控信号上升沿到来后,才从新的初值开始减 1计数 。 即新的计数初值在下一个门控信号上升沿触发后有效方式 5波形图
9.2.5 82C54几种工作方式的比较一,计数值 N与输入 CLK 和输出 OUT的关系
82C54在不同工作方式下,计数值 N与输入 CLK时钟脉冲和输出 OUT的关系是不同的,
如表 9-4所示表 9-4计数值 N与输入 CLK 和输出 OUT的关系方式 功能 N与 CLK 和 OUT的关系
0 计完最后一个数中断 写入 N后,过 N+1个 CLK输出变高
1 硬件再触发单拍脉冲 宽度为 N-1个 CLK的正脉冲
2 速率发生器 每 N个 CLK,输出 N-1个 CLK高,1个
CLK低
3 方波速率发生器 N为偶数:输出为 N/2个 CLK高,
N/2个 CLK低的方波; N为奇数:输出为 (N+1)/2个 CLK高,(N-1)/2个
CLK低的方波
4 软件触发选通 写入 N后过 N+1个 CLK,输出一个
CLK宽度的负脉冲
5 硬件触发选通 门控触发后过 N+1个 CLK,输出一个
CLK宽度的负脉冲
82C54几种工作方式的比较二,启动计数和重复计数的条件所有工作方式都必须设置计数值才能够开始工作,但不是所有的方式一经设置计数值就马上开始计数,需要有一定的条件才能工作 。 有些方式一经启动,计数器就永无休止的工作下去,而有些方式只能计数一次 。 如果要重复计数同样需要某些条件,这些条件如表 9-5所示表 9-5 启动计数和重复计数的条件方 式 功 能 启动条件 重复条件
0 计完最后一个数中断 写计数值 写计数值
1 硬件再触发单拍脉冲 外部触发 外部触发
2 速率发生器 写计数值 自动
3 方波速率发生器 写计数值 自动
4 软件触发选通 写计数值 写计数值
5 硬件触发选通 外部触发 外部触发
82C54几种工作方式的比较三,门控信号的作用
82C54在不同的工作方式下,门控信号
GATE的作用如 表 9-6所示表 9-6 门控信号的作用方式 功 能
GATE
低或变为低 上升沿 高
0 计完最后一个数中断 禁止计数 --- 允许计数
1 硬件再触发单拍脉冲 --- (1)启动计数
(2)下一 CLK后使输出变低
---
2 速率发生器 (1)禁止计数
(2) 立 即使输出为高
(1)重新装入计数值
(2)启动计数允许计数
3 方波速率发生器 (1)禁止计数
(2) 立 即使输出为高启动计数 允许计数
4 软件触发选通 禁止计数 --- 允许计数
5 硬件触发选通 --- 启动计数 ---
82C54几种工作方式的比较四,在计数过程中改变计数值
82C54的六种工作方式都可以在计数器计数过程中改变计数值 。 新的计数值什么时候起作用,随工作方式不同而有差异,具体区别如表 9-7所示表 9-7在计数过程中改变计数值方式 功 能 改变计数值
0 计完最后一个数中断 立即有效
1 硬件再触发单拍脉冲 外部触发后有效
2 速率发生器 计数到 1后有效
3 方波速率发生器 (1) 外部触发后有效
(2) 计数到 0后有效
4 软件触发选通 立即有效
5 硬件触发选通 外部触发后有效
82C54几种工作方式的比较五,82C54应用举例例 【 9-4】 设一片 82C54接在系统中,如图 9-23
所示 。 计数器 0,1,2及控制口地址分别为 320H、
321H,322H以及 323H,用计数器 0与计数器 1级联定时,在 OUT1输出对称方波,使 LED点亮 0.5S,
熄灯 0.5S,周而复始,试对计数器 0和计数器 1初始化编程分析,由于 CLK0输入 f=1MHz,所以周期 t0=1μs,
而定时时间间隔为 1S,那么计数初始值:
1000ms÷ 1μs=1000000,分配为 1000× 1000,
即计数器 0与 1分别送初始值 1000,均选用二进制计数,并采用方式 3计数,编程如下:
82C54应用举例
MOV DX,323H ;控制端口地址给 DX
MOV AL,00110110B ;计数器 0控制字
OUT DX,AL
MOV AX,1000
MOV DX,320H
OUT DX,AL ;先送低 8位
MOV AL,AH
OUT DX,AL ;后送高 8位
MOV DX,323H
MOV AL,01110110B ;计数器 1控制字
OUT DX,AL
MOV DX,321H
MOV AX,1000
OUT DX,AL ;先送低 8位
MOV AL,AH
OUT DX,AL ;后送高 8位
82C54应用举例计数器 0输出周期为 1ms的方波,计数器 1输出周期为 1000ms的方波,低电平使 LED导通发亮当每个计数器送完初始值后,要等到下一个完整的
CLK时钟到来时,减法计数器才获得计数初始值,
并开始作减 1计数 。 只要 82C54不掉电,它将不停顿地对外部脉冲进行计数
82C54应用举例
82C54应用举例例 【 9-5】 假如一片 82C54的 3个计数器全部级联起来,外部计数脉冲的频率为 2MHz,采用二进制方式计数,最长的定时间隔是多少?
解,① 输入 f=2MHz,所以周期 t=0.5μs
② 每个计数器的初值为 0时,实际初值相当于 65536,
则第一级定时间隔为 65536× 0.5μs=32.768ms
③ 3个计数器全部级联,定时间隔 为
T=65536× 65536× 65536× 0.5μs