2022年微机原理习题答案章 5.pdf
73 第 9 章 定时/计数器 8253 应用设计1.下列地址哪些能够分配给8253/8254 的计数器0?为什么?(23H、54H、97H、51H、FCH、59H)解:因为已经约定采用A2,A1 作为 8253 的内部地址线,而且计数器0的地址为00,所以在题中所给的地址中只有51H,59H 的 A2 和 A1 同时为 0,即:A2A1=00.2.如果计数器0 设定为方式0,GATE01,CLK0 1MHz,时常数为N1000,请画出OUT0 的波形。如果计数器1 设定为方式1,其它参数与计数器0 相同,画出OUT1 的波形。3.编程实现:将 8253 计数器 0 设置成方式4,并置时常数10000,然后处于等待状态,直到 CE 的内容 1000 后再向下执行。解:MOV DX,COUNTD;写入计数器0 的方式控制字MOV AL,00111000B OUT DX,AL MOV DX,COUNTA;设置计数器0 的常数MOV AX,10000 OUT DX,AL XCHG AL,AH OUT DX,AL L1:MOV DX,COUNTD;写入计数器0 的方式控制字名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 16 页 -74 MOV AL,0H OUT DX,AL MOV DX,COUNTA;读入 CE IN AL,DX MOV AH,AL IN AL,DX XCHG AL,AH CMP AX,1000;判别 CE 当前大小JA L1 4.利用 8253 可以实现确定时间的延迟,编程实现延时10 秒的程序段(设可以使用的基准时钟为 1MHz)。解:本题使用计数器0 和计数器1,并且计数器0 的输出 OUT0 作为计数器1 的时钟输入 CLK1.程序如下:MOV DX,COUNTD ;写计数器0方式控制字MOV AL,00110100B OUT DX,AL MOV DX,COUNTA MOV AX,10000;写计数器0时常数,分频得到100Hz 时钟频率OUT DX,AL XCHG AL,AH OUT DX,AL MOV DX,COUNTD ;写计数器1 方式控制字MOV AL,01110000B OUT DX,AL MOV DX,COUNTB MOV AX,999;分频得到0.1Hz 时钟频率。(在方式 0 下,时常数为N 时,;OUT 输出的低电平宽度为N+1).OUT DX,AL 名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 16 页 -75 XCHG AL,AH OUT DX,AL L1:;延时MOV DX,COUNTD ;当前 CE 的内容锁存到OL MOV AL,01000000B OUT DX,AL MOV DX,COUNTB IN AL,DX MOV AH,AL IN AL,DX XCHG AL,AH CMP AX,999 JNA L1;延时结束,则继续执行,否则,跳到L1,继续延时.5.比较 8254 方式 0 与方式 4、方式 1 与方式 5 的区别?方式 0 与方式 4 方式 0 OUT端计数过程中为低,计数值减为0 时,输出变高方式 4 OUT端计数过程中为高,计数值减为0 时输出宽度为1 个 CLK的负脉冲方式 1 与方式 5 方式 1 OUT端输出宽度为n 个 CLK的低电平,计数值减为0 时,输出为高方式 5 OUT端计数过程中为高,计数值减为0 时输出宽度为1 个 CLK的负脉冲6.在 8088 最小系统中,8253 的端口地址为284H287H。系统提供的时钟为1MHz,要求在 OUT0 输出周期为20 微秒的方波,在OUT1 输出周期为200 微秒,其中每周期为负的时间是180 微秒的信号。请编写8253 的初始化程序。解:OUT0 输出为 20 微妙方波,可用方式三直接产生,OUT1 输出波形与书中例9.2 类似,可用其中思想产生此信号。如果允许增加外部器件,也可在例9.1 的基础上,将OUT端信号通过与非门取反,这样即可产生题目要求信号。本例利用例9.1 思想解答名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 16 页 -76 MOV DX,287H;写计数器0 控制方式字MOV AL,00010110B OUT DX,AL MOV DX,284H;写计数器0 时常数MOV AL,20 OUR DX,AL MOV DX,287;写计数器2 控制方式字MOV AL,10010110B OUT DX,AL MOV DX,286H;写计数器2 时常数MOV AL,200 OUT DX,AL MOV DX,287H MOV AL,01010010B;写计数器1 控制方式字OUT DX,AL MOV DX,285H MOV AL,9;写计数器1 时常数OUT DX,AL 7.通过 8253 计数器 0 的方式 0 产生中断请求信号,现需要延迟产生中断的时刻,可采用:A)在 OUT0变高之前重置初值;B)在 OUT0变高之前在GATE0 端加一负脉冲信号;名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 16 页 -77 C)降低加在CLK0端的信号频率;D)以上全是。解:D A:方式 0 下,在 OUT0 变高之前重置初值,将在下一个CLK的下降沿使时常数从CR读入 CE并重新计数。B:在 OUT0变高之前在GATE0 端加一负脉冲信号可以延时一个时钟周期,达到延时的目的。C:降低加在 CLK0端的信号频率,可以增大时钟周期,达到延长 OUT0端低电平的时间。(注:A中,如果重置的初值为1,则不会达到延时的效果)8.已知 8254 计数器 0 的端口地址为40H,控制字寄存器的端口地址为43H,计数时钟频率为 2MHz,利用这一通道设计当计数到0 时发出中断请求信号,其程序段如下,则中断请求信号的周期是 32.7675 ms。MOV AL,00110010B OUT 43H,AL MOV AL,0FFH OUT 40H,AL OUT 40H,AL 9.若 8254 芯片可使用的8086 端口地址为D0D0H D0DFH,试画出系统设计连接图。设加到 8254 上的时钟信号为2MHz,(1)利用计数器02 分别产生下列三种信号:周期为 10us 的对称方波每 1s 产生一个负脉冲 10s 后产生一个负脉冲每种情况下,说明8254 如何连接并编写包括初始化在内的程序段。(2)希望利用8086 通过一专用接口控制8253 的 GATE端,当 CPU使 GATE有效开始,20us 后在计数器0 的 OUT 端产生一个正脉冲,试设计完成此要求的硬件和软件。解:(1)选用 D0D0H D0DFH 中的偶地址DODO,DOD2,DOD4,DOD6为基本地址作为8254 的端口名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 16 页 -78 地址,设 8086 工作在最小方式下。8254 端口地址译码电路如下图:计数器 0 输入端加2MHz 的时钟信号,GATE0加+5V 电压,输出 OUT0信号为周期为 10 s的对称方波。初始化代码:MOV DX,0D0D6H;写计数器0 工作方式MOV AL,00010110B OUT DX,AL MOV DX,0D0D0H;写计数器0 时常数MOV AL,20 OUT DX,AL CLK0加 2MHz 的始终信号,GATE0,GATE1加+5V 电压,OUT0输出加到CLK1 做时钟信号,OUT1 输出为每1s 产生一个负脉冲。初始代码:MOV DX,0D0D6H;写计数器0 的工作方式MOV AL,00010110B OUT DX,AL MOV DX,0D0D0H;写计数器0 的时常数MOV AL,100 OUT DX,AL MOV DX,0D0D6H;写计数器1 的工作方式MOV AL,01110100B 名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 16 页 -79 OUT DX,AL MOV DX,0D0D2H;写计数器1 的时常数MOV AX,20000 OUT DX,AL XCHG AL,AH OUT DX,AL CLK0加 2MHz 的始终信号,GATE0,GATE1加+5V 电压,OUT0输出加到CLK2 做时钟信号,OUT2 输出为 10s后产生一个负脉冲。初始代码:MOV DX,0D0D6H;写计数器0 的工作方式MOV AL,00110110B OUT DX,AL MOV DX,0D0D0H;写计数器0 的时常数MOV AX,1000 OUT DX,AL XCHG AL,AH OUT DX,AL MOV DX,0D0D6H;写计数器2 的工作方式MOV AL,10111000B OUT DX,AL MOV DX,0D0D4H;写计数器2 的时常数MOV AX,20000 OUT DX,AL XCHG AL,AH OUT DX,AL 1)选用地址 D0D0,DOD2,DOD4,DOD6为 8253 的端口地址,D0D8 为 GATE 端口地址,该端口采用74LS373,8253 用方式 4,在 OUT 输出端加非门实现脉冲功能。接口电路如图:名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 16 页 -80 初始代码为:MOV DX,0D0D8H;GATE 初始化MOV AL,0 OUT DX,AL MOV DX,0D0D6H;写计数器0 工作方式MOV AL,00011000B OUT DX,AL MOV DX,0D0D0H;写计数器0 时常数MOV AL,40 OUT DX,AL MOV DX,0D0D8H MOV AL,1 OUT DX,AL;使 GATE 变高有效10.若加到 8254 上的时钟频率为0.5MHz,则一个计数器的最长定时时间是多少?若要求 10分钟产生一次定时中断,试提出解决方案。解:一个计数器的最长定时时间应该是置入时常数0 时,此时定时时间为:65536/0.5*106s=131ms 采用方式 0 即:计数达到终值时中断来10 分钟产生一次定时中断,此时时常数CR名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 16 页 -81 为:10*60*0.5*106=3*109.由于一个计数器最多分频65536,所以至少得使用2 个计数器。我们采用计数器0和计数器 1.计数器 0 的时常数CR0为 60000,计数器1 的时常数CR1为 50000.连接方式为:把 0.5MHz 的时钟频率接到计数器0 的 CLK0,然后把计数器0 的 OUT0接到计数器1 的 CLK1。这样计数器1 的 OUT1端输出的就是10 分钟产生一次的定时中断。11.织布机控制系统如图9.26 所示,已知织布机每织1 米发出一个正脉冲,每织100 米要求接收到一脉冲,去触发剪裁设备把布剪开。(1)设 8253 的端口地址为80H83H,编写对 8253 初始化程序。(2)假定系统提供的信号频率为1MHz,希望利用8253 的其余通道产生0.1 秒的周期信号,编写初始化程序。8088CPU最小方式系统总线译码电路D7D0A1A0WRRDIO/MA9A2=1Intel8253D7D0A0A1RDWRCSCLK0GATE0OUT0织布机系统+5V图 9.26 织布机控制系统解:(1)MOV DX,83H MOV AL,00010100B OUT DX,AL MOV DX,80H MOV AL,100 OUT DX,AL(2)将计数器1 的输出 OUT1 信号作为计数器2 的时钟输入CLK2,计数器 1 的时钟输名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 16 页 -82 入为系统提供1MHZ 的信号MOV DX,83H MOV AL,01110100B OUT DX,AL MOV DX,81H MOV AX,1000 OUT DX,AL XCHG AL,AH MOV DX,AL MOV DX,83H MOV AL,10010110B OUT DX,AL MOV DX,82H MOV AL,100 OUT DX,AL 12.在 IBM PC系统中根据下列不同条件设计接口逻辑,利用 8253 完成对外部脉冲信号重复频率的测量。(1)被测脉冲信号的重复频率在101000Hz 范围内。(2)被测脉冲信号的重复频率在0.5 1.5Hz 范围内。(3)被测脉冲信号重复频率在10100Hz范围内。(4)被测是间歇脉冲信号,每次有信号时有100 个脉冲,重复频率为0.8 1.2MHz,间歇频率大约每秒15 次,要求测有信号时的脉冲重复频率。解:用两个计数器,计数器0 的 CLK接待测信号,GATE接半周期为10s 的高电平信号,OUT接 8259,同时取反接计数器1 的 GATE 端。计数器1 的 CLK接系统时钟,半周期为 T0。在这样的逻辑电路下,计数器0 的功能是记录待测信号的脉冲数N0,计数器1 的功能是记录在相同时间里系统时钟信号的脉冲数N1。根据T=N1*T0/N0可计算出待测信号的周期。S(t)是待测信号,S(t)为给定的周期大于10s 的高电平信号。名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 16 页 -83 Intel8253CLK0GATE0OUT0CLK1GATE1OUT1CLK2GATE2OUT2D0D7RDWRA1A0CS8259IR0S(t)S(t)1MHz端口声明:COUNTA 为计数器0 的地址,COUNTB 为计数器2 的地址,COUNTD 为控制器地址,COUNT 为 373 地址程序如下:MOV DX,COUNTD ;计数器 1 初始化 MOV AL,01110000B OUT DX,AL MOV DX,COUNTB OUT DX,AL MOV DX,COUNTB MOV AL,O OUT DX,AL MOV DX,COUNTD ;计数器 0 初始化MOV AL,00010000B OUT DX,AL MOV DX,COUNTA MOV AL,0 OUT DX,AL OUT DX,AL STI 读两计数器的计数,并进行计算的中断服务子程序:名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 16 页 -84 PUSH AX PUSH BX PUSH CX PUSH DX MOV DX,COUNTD MOV AL,00000000B OUT DX,AL MOV DX,COUNTA IN AL,DX XCHG AL,AH IN AL,DX XCHG AL,AH NEG AX INC AX MOV BX,AX MOV DX,COUNTD MOV AL,00010000B OUT DX,AL MOV DX,COUNTB IN AL,DX XCHG AL,AH IN AL,DX XCHG AL,AH NEG AX INC AX MOV CX,T0 MUL CX DIV BX MOV SFR,AX POP DX 名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 16 页 -85 POP CX POP BX POP AX IRET SFR中保存结果即为待测信号的周期。对于(1)题,10*10 不小于 100,10*1000 不大于 65535,可以用计数法。同理(3)也可用此方法。对于(2)题,可用周期法。逻辑电路图如下:Intel8253CLK0GATE0OUT0CLK1GATE1OUT1CLK2GATE2OUT2D0D7RDWRA1A0CS8259IR01MHzS(t)程序如下:MOV DX,COUNTD MOV AL,0011 0100B OUT DX,AL MOV DX,COUNTA MOV AL,0 OUT DX,AL OUT DX,AL STI PUSH AX 名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 16 页 -86 PUSH BX PUSH DX MOV DX,COUNTD MOV AL,0000 0000B OUT DX,AL MOV DX,COUNTA IN AL,DX XCHG AL,AH IN AL,DX XCHG AL,AH NEG AX INC AX MOV BX,AX MOV DX,000FH MOV AX,4240H DIV BX MOV SFR,AX POP DX POP BX POP AX IRET(4)如图设计接口,计数器1 用来记录在50 个脉冲所用时间,50 个信号脉冲最多用 1/0.8*50(约为 63us)由于计数器1 用 1MHz CLK,故其计数个数N即为 N us,所以当 N63 时,则有低电平间隔计入,须重新计数。当N63 时,则计算得待测频率。名师资料总结-精品资料欢迎下载-名师精心整理-第 14 页,共 16 页 -87 Intel8253CLK0GATE0OUT0CLK1GATE1OUT1CLK2GATE2OUT2D0D7RDWRA1A0CS74LS373D0D7GD0D7OE8259IR0译码S(t)1MHz程序如下:MOV DX,COUNTD MOV AL,00H OUT DX,AL MOV DX,COUNTD MOV AL,0001 0000B OUT DX,AL MOV DX,COUNTA MOV AL,50 OUT DX,AL MOV DX,COUNTD MOV AL,0111 0000B OUT DX,AL MOV COUNTB MOV AL,0 OUT DX,AL OUT DX,AL L2:MOV DX,COUNT ;给 GATE0 和 GATE1 高电平,开始计数MOV AL,81H OUT DX,AL 名师资料总结-精品资料欢迎下载-名师精心整理-第 15 页,共 16 页 -88 L1:NOP MOV DX,COUNTD MOV AL,00000000B OUT DX,AL MOV DX,COUNTA IN AL,DX MOV DX,COUNTA IN AL,DX AND AL,AL ;判断是否计完50 个脉冲,若未计完继续等待JNZ L1 MOV DX,COUNT MOV AL,00H ;若计完则暂停计数OUT DX,AL MOV DX,COUNTD ;读计数器1 结果MOV AL,01000000B OUT DX,AL MOV DX,COUNTB IN AL,DX XCHG AL,AH IN AL,DX XCHG AL,AH NEG AX INC AX CMP AX,70H ;当 AL 大于 70,则有间歇计入,重新测试JA L2 MOV BL,AL MOV AL,50 ;计算频率DIV BL MOV FREC,AL 名师资料总结-精品资料欢迎下载-名师精心整理-第 16 页,共 16 页 -