《微机原理与接口技术》课后习题答案 下载本文

第八章

1.8253芯片有哪几个计数通道?每个计数通道可工作于哪几种工作方式?这些操作方式的主要特点是什么?

答:8253内部包含3个完全相同的计数器/定时器通道,即0~2计数通道,对3个通道的操作完全是独立的。8253的每个通道都有6种不同的工作方式。方式0——计数结束中断方式:当对8253的任一个通道写入控制字,并选定工作于方式0时,该通道的输出端OUT立即变为低电平。要使8253能够进行计数,门控信号GATE必须为高电平。经过n十1个脉冲后,计数器减为0,这时OUT引脚由低电平变成高电平。OUT引脚上的高电平信号,一直保持到对该计数器装入新的计数值,或设置新的工作方式为止。在计数的过程中,如果GATE变为低电平,则暂停减1计数,计数器保持GATE有效时的值不变,OUT仍为低电平。待GATE回到高电平后,又继续往下计数。方式1——可编程单稳态输出方式:当CPU用控制字设定某计数器工作于方式1时,该计数器的输出OUT立即变为高电平。GATE出现一个上升沿后,在下一个时钟脉冲的下降沿,将n装入计数器的执行部件,同时,输出端OUT由高电平向低电平跳变。当计数器的值减为零时,输出端OUT产生由低到高的正跳变,在OUT引脚上得到一个n个时钟宽度的负单脉冲。在计数过程中,若GATE产生负跳变,不会影响计数过程的进行。但若在计数器回零前,GATE又产生从低到高的正跳变,则8253又将初值n装入计数器执行部件,重新开始计数,其结果会使输出的单脉冲宽度加宽。方式2——比率发生器:当对某一计数通道写入控制字,选定工作方式2时,OUT端输出高电平。如果GATE为高电平,则在写入计数值后的下一个时钟脉冲时,将计数值装入执行部件,此后,计数器随着时钟脉冲的输入而递减计数。当计数值减为1时,OUT端由高电乎变为低电平,待计数器的值减为0时,OUT引脚又回到高电平,即低电平的持续时间等于一个输入时钟周期。与此同时,还将计数初值重新装入计数器,开始一个新的计数过程,并由此循环计数。如果装入计数器的初值为n,那么在OUT引脚上,每隔n个时钟脉冲就产生一个负脉冲,其宽度与时钟脉冲的周期相同,频率为输入时钟脉冲频率的n分之一。在操作过程中,任何时候都可由CPU重新写入新的计数值,不影响当前计数过程的进行。当计数值减为0时,一个计数周期结束,8253将按新写入的计数值进行计数。在计数过程中,当GATE变为低电平时,使OUT变为高电平,禁止计数;当GATE从低电平变为高电平,GATE端产生上升沿,则在下一个时钟脉冲时,把预置的计数初值装入计数器,从初值开始递减计数,并循环进行。方式3——方波发生器:方式3和方式2的工作相类似,但从输出端得到的是对称的方波或基本对称的矩形波。如果写入计数器的初值为偶数,则当8253进行计数时,每输入一个时钟脉冲,均使计数值减2。计数值减为0时,OUT输出引脚由高电平变成低电平,同时自动重新装入计数初值,继续进行计数。当计数值减为0时,OUT引脚又回到高电平,同时再一次将计数初值装入计数器,开始下一轮循环计数;如果写入计数器的初值为奇数,则当输出端OUT为高电平时,第一个时钟脉冲使计数器减1,以后每来一个时钟脉冲,都使计数器减2,当计数值减为0时,输出端OUT由高电平变为低电平,同时自动重新装入计数初值继续进行计数。这时第一个时钟脉冲使计数器减3,以后每个时钟脉冲都使计数器减2,计数值减为0时,OUT端又回到高电平,并重新装入计数初值后,开始下一轮循环计数。方式4——软件触发选通:当对8253写入控制宇,进入工作方式4后,OUT端输出变为高电平,如果GATE为高电平,那么,写入计数初值后,在下一个时钟脉冲后沿将自动把计数初值装入执行部件,并开始计数。当计数值成为0时,OUT端输出变低,经过一个时钟周期后,又回到高电平,形成一个负脉冲。若在计数过程中写入一个新的计数值,则在现行计数周期内不受影响,但当计数值回0后,将按新的计数初值进行计数,同样也只计一次。如果在计数的过程中GATE变为低电平,则停止计数,当GATE变为高电平

21

后,又重新将初值装入计数器,从初值开始计数,直至计数器的值减为0时,从OUT端输出一个负脉冲。方式5——硬件触发选通:编程进入工作方式5后,OUT端输出高电平。当装入计数值n后,GATE引脚上输入一个从低到高的正跳变信号时,才能在下一个时钟脉冲后沿把计数初值装入执行部件,并开始减1计数。当计数器的值减为0时,输出端OUT产生一个宽度为一个时钟周期的负脉冲,然后OUT又回到高电平。计数器回0后,8253又自动将计数值n装入执行部件,但并不开始计数,要等到GATE端输入正跳变后,才又开始减1计数。计数器在计数过程中,不受门控信号GATE电平的影响,但只要计数器未回0,GATE的上升沿却能多次触发计数器,使它重新从计数初值n开始计数,直到计数值减为0时,才输出一个负脉冲。如果在计数过程中写入新的计数值,但没有触发脉冲,则计数过程不受影响。当计数器的值减为0后,GATE端又输入正跳变触发脉冲时,将按新写入的初值进行计数。

2.8253的最高工作频率是多少?8254与8253的主要区别是什么?

答:8253的最高计数频率能达到2MHz。 Intel 8254是8253的增强型产品,它与8253的引脚兼容,功能几乎完全相同,不同之处在于以下两点:(1)8253的最大输入时钟频率为2MHz,而8254的最大输入时钟频率可高达5MHz。(2)8254有读回(Read-back)功能,可以同时锁存1~3个计数器的计数值及状态值,供CPU读取,而8253每次只能锁存和读取一个通道的计数器,且不能读取状态值。 对8253进行初始化编程分哪几步进行? 答:(1)写入控制字用输出指令向控制字寄存器写入一个控制字,以选定计数器通道,规定该计数器的工作方式和计数格式。写入控制字还起到复位作用,使输出端OUT变为规定的初始状态,并使计数器清0. (2)写入计数初值用输出指令向选中的计数器端口地址中写入一个计数初值,初值设置时要符合控制字中有关格式规定。

4.设8253的通道0~2和控制口的地址分别为300H,302H,304H和306H,系统的时钟脉冲频率为2MHz,要求:

(1)通道0输出1kHz方波;

(2)通道1输出500Hz序列负脉冲; (3)通道2输出单脉冲,宽度为400μs。

试图画出硬件连线图,并编写各通道的初始化程序。 答:通道0工作在方式3,n0=2MHz/1.5KHz=1334 通道1工作在方式2,n1=1.5KHz/300Hz=5

通道2工作在方式0,当CLK2=2MHz时, n2=2MHz/50Hz-1=39999; 当CLK2=OUT0=1.5KHz时, n2=1.5KHz/50Hz-1=29 当CLK2=OUT1=300Hz时, n2=300Hz/50Hz-1=5

22

初始化程序如下: 通道0初始化: MOV DX, 306H

MOV AL, 00110111B(37H) ;方式3,先读/写低8位, ;后读/写低8位, BCD计数 OUT DX, AL

MOV DX, 300H

MOV AL, 34H ;初值低8位 OUT DX, AL

MOV AL, 13H ;初值高8位 OUT DX, AL 通道1初始化: MOV DX, 306H

MOV AL, 01010101B(55H) ;方式2,只读/写低8位, BCD计数 OUT DX, AL MOV DX, 302H

MOV AL, 05H ;初值 OUT DX, AL 通道2初始化: MOV DX, 306H

MOV AL, 10010001B(91H) ;方式0,只读/写低8位,BCD计数 OUT DX, AL MOV DX, 304H

MOV AL, 29H(或05H) ;初值 OUT DX, AL

5.设8253的口地址为40H~43H,时钟频率f=5MHz,通道2接一个LED显示器。要求:LED显示器点亮4秒钟后,再熄灭4秒钟,并不断重复该过程,试编写8253的初始化程序。

23

第九章

1.DMA控制器8237A有哪两种工作状态,其工作特点如何?

一种是系统总线的主控者,这是它工作的主方式。在取代CPU控制DMA传送时,它应提供存储器的地址和必要的读写控制信号,数据是在I/O设备与存储器之间通过数据总线直接传递;另一种是在成为主控者之前,必须由CPU对它编程以确定通道的选择、数据传送的模式、存储器区域首地址、传送总字节数等。在DMA传送之后,也有可能由CPU读取DMA控制器的状态。这时8237A如同一般I/O端口设备一样,是系统总线的从设备,这是8237A工作的从方式

2.8237A的当前地址寄存器、当前字计数寄存器和基字节数寄存器各保存什么值?

当前地址寄存器:每个通道都有一个16位的当前地址寄存器,用于存放DMA传送的存储器地址。

当前字节计数寄存器:每个通道都有一个16位长的当前字节计数寄存器。它保存当前DMA传送的字节数。

基字节数寄存器:每个通道都有一个16位的基字节数寄存器,它用来存放对应通道当前字节计数器的初值。

3.8237A进行DMA数据传送时有几种传送方式?其特点是什么? 单字节传送方式、数据块传送方式、请求传送方式、级联方式 4.8237A有几种对其DMA通道屏蔽位操作的方法? 通道屏蔽字:可用之灵对屏蔽寄存器写入通道屏蔽字来对单个屏蔽位进行操作,使之置位或复位。

主屏蔽字:8237A还允许使用主屏蔽命令设置通道的屏蔽触发器。

5.设置PC的8237A通道2传送1 KB数据,请给其字节数寄存器编程。

传送1KB(0400H字节)的字节数寄存器的初始值为03 FFH。通道2字节数寄存器的端口地址:8237A的基地址+09H;清除字节指示器的端口地址:8237A的基地址+0CH。当8237A通道2传送1KB数据,对字节数寄存器初始化编程如下: DMA EQU 00H ;设8237A的基地址为00H 输出清除字节指示器命令

OUT DMA+0CH,AL ;发清除字节指示器命令(指向16位字节数寄存器的低8位) 字节数寄存器的初始化操作

MOV AL,0FFH ;设置字节数寄存器低8位初始值 OUT DMA+09H,AL ;写字节数寄存器低8位初始值 MOV AL,03H ;设置字节数寄存器高8位初始值 OUT DMA+09H,AL ;写字节数寄存器高8位初始值

6.若8237A的端口基地址为000H,要求通道0和通道1工作在单字节读传输,地址减1变化,无自动预置功能。通道2和通道3工作在数据块传输方式,地址加1变化,有自动预置功能。8237A的DACK为高电平有效,DREQ为低电平有效,用固定优先级方式启动8237A工作,试编写8237A的初始化程序。

DMA EQU 000H; 8237A的基地址为00H 输出主清除命令

OUT DMA+0DH,AL; 发总清命令

写入方式字:单字节读传输,地址减1变化,无自动预置功能,选择通道0 MOV AL,01101000B; 方式字

OUT DMA+0BH,AL; 写入方式字

24