微机原理与接口技术(楼顺天第二版)第九章习题解答精品名师资料 下载本文

初始代码为:

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变高有效

9.20 答:一个计数器的最长定时时间应该是置入时常数0时,此时定时时间为:

65536/0.5*10^6s=131ms

采用方式0即:计数达到终值时中断来10分钟产生一次定时中断,此时时常数CR为:10*60*0.5*10^6=3*10^9.

由于一个计数器最多分频65536,所以至少得使用2个计数器。我们采用计数器0和计数器1.计数器0的时常数CR0为60000,计数器1的时常数CR1为50000.

连接方式为:把0.5MHz的时钟频率接到计数器0的CLK0,然后把计数器0的OUT0接到计数器1的CLK1。这样计数器1的OUT1端输出的就是10分钟产生一次的定时中断。 9.21答:(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的时钟输入为系统提供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

9.22 答:用两个计数器,计数器0的CLK接待测信号,GATE接半周期为10s的高电平信号,OUT接8259,同时取反接计数器1的GATE端。计数器1的CLK接系统时钟,半周期为T0。在这样的逻辑电路下,计数器0的功能是记录待测信号的脉冲数N0,计数器1的功能是记录在相同时间里系统时钟信号的脉冲数N1。根据T=N1*T0/N0可计算出待测信号

的周期。S(t)是待测信号,S’(t)为给定的周期大于10s的高电平信号。

8259D0~D7RDWRA1A0CSCLK0GATE0OUT0CLK1GATE1OUT1CLK2GATE2OUT2S(t)S’(t)IR01MHzIntel8253 端口声明: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

读两计数器的计数,并进行计算的中断服务子程序:

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 POP CX POP BX POP AX IRET

SFR中保存结果即为待测信号的周期。

对于(1)题,10*10不小于100,10*1000不大于65535,可以用计数法。 同理(3)也可用此方法。

对于(2)题,可用周期法。逻辑电路图如下:

D0~D7RDWRA1A0CSCLK0GATE0OUT0CLK1GATE1OUT1CLK2GATE2OUT21MHzS(t)Intel82538259IR0 程序如下:

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 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,所以当N>63时,则有低电平间隔计入,须重新计数。当N>63时,则计算得待测频率。

8259D0~D7RDWRA1A0CSCLK0GATE0OUT0CLK1GATE1OUT1CLK2GATE2OUT2S(t)IR01MHzD0D7G74LS373D0D7OEIntel8253译码

程序如下:

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