1、微机原理与接口技术(楼顺天第二版)习题解答第 9 章 定时/计数器 8253 应用设计9.1 答:假定已经约定采用 A2,A1 作为 8253 的内部地址线,而且计数器 0 的地址为 00,所以在题中所给的地址中只有 51H,59H 的 A2 和 A1 同时为 0,即:A2A1=00。9.2 答:9.3 答:MOV DX,COUNTD ;写入计数器 0 的方式控制字MOV AL,00111000BOUT DX,ALMOV DX,COUNTA ;设置计数器 0 的常数MOV AX,10000OUT DX,ALXCHG AL,AHOUT DX,ALL1: MOV DX,COUNTD ;向计数器 0
2、 发锁存命令MOV AL,0H OUT DX,ALMOV DX,COUNTA ;读入 CEIN AL,DXMOV AH,ALIN AL,DXXCHG AL,AHCMP AX,1000 ;判别 CE 当前大小JA L1 9.4 答:本题使用计数器 0 和计数器 1 级联,并且计数器 0 的输出 OUT0 作为计数器 1 的时钟输入 CLK1。程序如下:MOV DX,COUNTD ;写计数器 0 方式控制字MOV AL,00110110BOUT DX,ALMOV DX,COUNTAMOV AX,10000 ;写计数器 0 时常数,分频得到 100Hz 时钟频率OUT DX,ALXCHG AL,AH
3、OUT DX,ALMOV DX,COUNTD ;写计数器 1 方式控制字MOV AL,01110000BOUT DX,ALMOV DX,COUNTBMOV AX,999 ;分频得到 0.1Hz 时钟频率。 (在方式 0 下,时常数为 N 时,;OUT 输出的低电平宽度为 N+1).OUT DX,ALXCHG AL,AHOUT DX,ALL1: ;延时MOV DX,COUNTD ; 当前 CE 的内容锁存到 OLMOV AL,01000000BOUT DX,ALMOV DX,COUNTBIN AL,DXMOV AH,ALIN AL,DXXCHG AL,AHCMP AX,999JNA L1 ;延时
4、结束,则继续执行,否则,跳到 L1,继续延时.9.5 答:8253 的方式 2 与方式 3 均为一次计数完成后自动装入计数初值再计数的计数方式。差别是方式 2 设定计数 N 时 N-1 时钟周期为高电平,1 时钟周期为低电平;方式 3 设定计数 N 时,若 N 为偶数,则 N/2 周期为高电平,N/2 周期为低电平,若 N 为奇数,则(N+1)/2 周期为高电平,(N-1)/2 周期为低电平。9.6 答:CLK 为计数时钟,每个时钟周期计数一次,GATE 为门控信号,在方式 0、方式2、方式 3、方式 4 中,GATE 信号为高电平时正常计数, GATE 信号为地点平时暂停计数;在方式 1 和
5、方式 5 中由 GATE 信号触发计数。9.7 答:方式 0 与方式 4方式 0, OUT 端计数过程中为低,计数值减为 0 时,输出变高方式 4, OUT 端计数过程中为高,计数值减为 0 时输出宽度为 1 个 CLK 的负脉冲方式 1,与方式 5方式 1, OUT 端输出宽度为 n 个 CLK 的低电平,计数值减为 0 时,输出为高方式 5, OUT 端计数过程中为高,计数值减为 0 时输出宽度为 1 个 CLK 的负脉冲9.8 答:OUT0 输出为 20 微妙方波,可用方式三直接产生;OUT1 输出周期为 200 微秒,其中每周期为负的时间是 180 微秒的信号,可用 OUT0 输出的
6、20 微秒方波作为 CLK1 计数时钟,使计数器 1 工作在方式 2,计数初值为 200 微妙/20 微妙=10。硬件上要在 OUT1输出端接一反相器就可实现题目要求产生的在 OUT1 输出周期为 200 微秒,其中每周期为负的时间是 180 微秒的信号。8253 的初始化程序如下:MOV DX,287H ;写计数器 0 控制方式字MOV AL,00010110BOUT DX,ALMOV DX,284H ;写计数器 0 时常数MOV AL,20OUT DX,ALMOV DX,287H ;写计数器 1 控制方式字MOV AL,01010100BOUT DX,ALMOV DX,285H ;写计数器
7、 2 时常数MOV AL,10OUT DX,AL9.9 答:39.10 答:3, 5000 9.11 答:0, 10000。9.12 答:D9.13 答:B 9.14 答:B 9.15 答:B9.16 答:B,F9.17 答:D9.18 答:根据程序,使用计数器 0,工作在方式 2,计数初值为 0FFFFH,所以中断请求周期为 65535/2000000s=32.7675ms。9.19 答:(1)选用 D0D0HD0DFH 中的偶地址 DODO,DOD2,DOD4,DOD6 为基本地址作为 8254 的端口地址,设 8086 工作在最小方式下。8254 端口地址译码电路如下图: 计数器 0 输
8、入端加 2MHz 的时钟信号,GATE0 加+5V 电压,输出 OUT0 信号为周期为 10s 的对称方波。初始化代码:MOV DX,0D0D6H ;写计数器 0 工作方式MOV AL,00010110BOUT DX,ALMOV DX,0D0D0H ;写计数器 0 时常数MOV AL,20OUT DX,ALCLK0 加 2MHz 的始终信号, GATE0,GATE1 加+5V 电压,OUT0 输出加到 CLK1 作时钟信号,OUT1 输出为每 1s 产生一个负脉冲。初始代码:MOV DX,0D0D6H ;写计数器 0 的工作方式MOV AL,00010110BOUT DX,ALMOV DX,0
9、D0D0H ;写计数器 0 的时常数MOV AL,100OUT DX,ALMOV DX,0D0D6H ;写计数器 1 的工作方式MOV AL,01110100B OUT DX,ALMOV DX,0D0D2H ;写计数器 1 的时常数MOV AX,20000OUT DX,ALXCHG AL,AHOUT DX,ALCLK0 加 2MHz 的始终信号, GATE0,GATE1 加+5V 电压,OUT0 输出加到 CLK2 做时钟信号,OUT2 输出为 10s 后产生一个负脉冲。初始代码:MOV DX,0D0D6H ;写计数器 0 的工作方式MOV AL,00110110BOUT DX,ALMOV D
10、X,0D0D0H ;写计数器 0 的时常数MOV AX,1000OUT DX,ALXCHG AL,AHOUT DX,ALMOV DX,0D0D6H ;写计数器 2 的工作方式MOV AL,10111000BOUT DX,ALMOV DX,0D0D4H ;写计数器 2 的时常数MOV AX,20000OUT DX,ALXCHG AL,AHOUT DX,AL(2)选用地址 D0D0,DOD2,DOD4,DOD6 为 8253 的端口地址,D0D8 为 GATE 端口地址,该端口采用 74LS373,8253 用方式 4,在 OUT 输出端加非门实现脉冲功能。接口电路如图:初始代码为:MOV DX,
11、0D0D8H ;GATE 初始化MOV AL,0OUT DX,ALMOV DX,0D0D6H ;写计数器 0 工作方式MOV AL,00011000BOUT DX,ALMOV DX,0D0D0H ;写计数器 0 时常数MOV AL,40OUT DX,ALMOV DX,0D0D8HMOV AL,1OUT DX,AL ;使 GATE 变高有效9.20 答:一个计数器的最长定时时间应该是置入时常数 0 时,此时定时时间为:65536/0.5*106s=131ms采用方式 0 即:计数达到终值时中断来 10 分钟产生一次定时中断,此时时常数 CR 为:10*60*0.5*106=3*109.由于一个计
12、数器最多分频 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,83HMOV AL,00010100BOUT DX,ALMOV DX,80HMOV AL,100OUT DX,AL(2)将计数器 1 的输出 OUT1 信号作为计数器 2 的时钟
13、输入 CLK2,计数器 1 的时钟输入为系统提供 1MHZ 的信号。MOV DX,83HMOV AL,01110100BOUT DX,ALMOV DX,81HMOV AX,1000OUT DX,ALXCHG AL,AHMOV DX,ALMOV DX,83HMOV AL,10010110BOUT DX,ALMOV DX,82HMOV AL,100OUT DX,AL9.22 答:用两个计数器,计数器 0 的 CLK 接待测信号,GATE 接半周期为 10s 的高电平信号,OUT 接 8259,同时取反接计数器 1 的 GATE 端。计数器 1 的 CLK 接系统时钟,半周期为 T0。在这样的逻辑电
14、路下,计数器 0 的功能是记录待测信号的脉冲数 N0,计数器 1 的功能是记录在相同时间里系统时钟信号的脉冲数 N1。根据 T=N1*T0/N0 可计算出待测信号的周期。S(t)是待测信号,S(t)为给定的周期大于 10s 的高电平信号。I n t e l8 2 5 3C L K 0G A T E 0O U T 0C L K 1G A T E 1O U T 1C L K 2G A T E 2O U T 2D 0 D 7R DW RA 1A 0C S8 2 5 9I R 0S ( t )S ( t )1 M H z端口声明:COUNTA 为计数器 0 的地址,COUNTB 为计数器 2 的地址,
15、COUNTD 为控制器地址,COUNT 为 373 地址程序如下:MOV DX,COUNTD ;计数器 1 初始化MOV AL,01110000BOUT DX,ALMOV DX,COUNTBOUT DX,ALMOV DX,COUNTBMOV AL,OOUT DX,ALMOV DX,COUNTD ;计数器 0 初始化MOV AL,00010000BOUT DX,ALMOV DX,COUNTAMOV AL,0OUT DX,ALOUT DX,ALSTI读两计数器的计数,并进行计算的中断服务子程序:PUSH AXPUSH BXPUSH CXPUSH DXMOV DX,COUNTDMOV AL,0000
16、0000BOUT DX,ALMOV DX,COUNTAIN AL,DXXCHG AL,AHIN AL,DXXCHG AL,AHNEG AXINC AXMOV BX,AXMOV DX,COUNTDMOV AL,00010000BOUT DX,ALMOV DX,COUNTBIN AL,DXXCHG AL,AHIN AL,DXXCHG AL,AHNEG AXINC AXMOV CX,T0MUL CXDIV BXMOV SFR,AXPOP DXPOP CXPOP BXPOP AXIRETSFR 中保存结果即为待测信号的周期。对于(1)题,10*10 不小于 100,10*1000 不大于 65535,
17、可以用计数法。同理(3)也可用此方法。对于(2)题,可用周期法。逻辑电路图如下:I n t e l8 2 5 3C L K 0G A T E 0O U T 0C L K 1G A T E 1O U T 1C L K 2G A T E 2O U T 2D 0 D 7R DW RA 1A 0C S8 2 5 9I R 01 M H zS ( t )程序如下:MOV DX,COUNTDMOV AL,0011 0100BOUT DX,ALMOV DX,COUNTAMOV AL,0OUT DX,ALOUT DX,ALSTIPUSH AXPUSH BXPUSH DXMOV DX,COUNTDMOV AL,
18、0000 0000BOUT DX,ALMOV DX,COUNTAIN AL,DXXCHG AL,AHIN AL,DXXCHG AL,AHNEG AXINC AXMOV BX,AXMOV DX,000FHMOV AX,4240HDIV BXMOV SFR,AXPOP DXPOP BXPOP AXIRET(4) 如图设计接口,计数器 1 用来记录在 50 个脉冲所用时间,50 个信号脉冲最多用1/0.8*50(约为 63us)由于计数器 1 用 1MHz CLK,故其计数个数 N 即为 N us,所以当 N63时,则有低电平间隔计入,须重新计数。当 N63 时,则计算得待测频率。I n t e l
19、8 2 5 3C L K 0G A T E 0O U T 0C L K 1G A T E 1O U T 1C L K 2G A T E 2O U T 2D 0 D 7R DW RA 1A 0C S7 4 L S 3 7 3D 0D 7GD 0D 7O E8 2 5 9I R 0译码S ( t )1 M H z程序如下:MOV DX,COUNTDMOV AL,00HOUT DX,ALMOV DX,COUNTDMOV AL,0001 0000BOUT DX,ALMOV DX,COUNTAMOV AL,50OUT DX,ALMOV DX,COUNTDMOV AL,0111 0000BOUT DX,A
20、LMOV COUNTBMOV AL,0OUT DX,ALOUT DX,ALL2: MOV DX,COUNT ;给 GATE0 和 GATE1 高电平,开始计数MOV AL,81HOUT DX,ALL1: NOP MOV DX,COUNTDMOV AL,00000000BOUT DX,ALMOV DX,COUNTAIN AL,DXMOV DX,COUNTAIN AL,DXAND AL,AL ;判断是否计完 50 个脉冲,若未计完继续等待JNZ L1MOV DX,COUNTMOV AL,00H ;若计完则暂停计数OUT DX,ALMOV DX,COUNTD ;读计数器 1 结果MOV AL,010
21、00000BOUT DX,ALMOV DX,COUNTBIN AL,DXXCHG AL,AHIN AL,DXXCHG AL,AHNEG AXINC AXCMP AX,70H ;当 AL 大于 70,则有间歇计入,重新测试JA L2MOV BL,ALMOV AL,50 ;计算频率DIV BLMOV FREC,AL9.23 答:程序如下:;计数器 0,方式 0,当计数满后为高电平,引发中断MOV DX,33H MOV AL,00110000B ;计数器 0,方式 0OUT DX,ALMOV DX,30HMOV AX,23000OUT DX,AL ;写低位计数值XCHG AH,ALOUT DX,AL
22、 ;写高位计数值;计数器 1,计数值为 10000/20=500,方式 3MOV DX,33HMOV AL,01110110BOUT DX,ALMOV DX,31HMOV AX,500OUT DX,ALXCHG AH,ALOUT DX,AL 9.24 答:;若计数器 02 的端口地址为 1AB0H,1AB2H, 1AB4H,控制字口为 1AB6H;计数器 0,方式 1,BCD 计数,计数值 4650MOV DX,1AB6H MOV AL,00110011B ;计数器 0,方式 1,十进制计数OUT DX,ALMOV DX,1AB0HMOV AX,4650HOUT DX,AL ;写低位计数值XC
23、HG AH,ALOUT DX,AL ;写高位计数值;计数器 1,计数值 3420,方式 2,二进制计数MOV DX,1AB6HMOV AL,01110100BOUT DX,ALMOV DX,1AB2HMOV AX,3420OUT DX,ALXCHG AH,ALOUT DX,AL;计数器 2,方式 4,二进制计数,计数初值 120MOV DX,1AB6HMOV AL,10011000B ;由于计数初值为 120,可以只写低位OUT DX,ALMOV DX,1AB4HMOV AX,120OUT DX,AL9.25 答:;若计数器 02 的端口地址为 0FA0H,0FA2H, 0FA4H,控制字口为
24、 0FA6H;准备中断向量表MOV AX,0MOV DS,AXMOV SI,42H ;中断类型号 42HSHL SI,1SHL SI,1 ;SI4MOV SI,OFFSET INT_SERVICE ;中断服务程序的偏移地址存入向量表MOV AX,CSADD SI,2MOV SI,AX ;中断服务程序的段地址存入向量表 ;如果用 8259,则对 8259 初始化;计数器 2,二次读写计数值,方式 0,二进制计数MOV DX,0FA6H MOV AL,10110000B ;计数器 0,方式 1,十进制计数OUT DX,ALMOV DX,0FA4HMOV AX,1000OUT DX,ALXCHG A
25、H,ALOUT DX,AL ;其他程序;中断服务程序INT_SERVICE:STI ;开中断MOV DX,0FA6H MOV AL,10110000B ;计数器 2,二次读写计数值,方式 0,二进制计数OUT DX,ALMOV DX,0FA4HMOV AX,1000OUT DX,ALXCHG AH,ALOUT DX,AL IRET9.26 答:首先更正 8259A 的 IR2 的中断类型码为 42H。;根据题图的硬件电路,8253 的四个端口地址应该连续,100H 为计数器 0;101H 为计数器 1,102H 为计数器 2,103H 为控制字寄存器端口;准备中断向量表MOV AX,0MOV
26、DS,AXMOV SI,42H ;中断类型号 42HSHL SI,1SHL SI,1 ;SI4MOV SI,WORD PTR INT_POINT ;中断服务程序的偏移地址存入向量表ADD SI,2MOV SI,WORD PTR INT_POINT+2 ;中断服务程序的段地址存入向量表 ;由于题目要求两个计数器级联,实现最大中断周期的周期性定时中断信号;则让计数器 0 和 1 的计数初值均设为 0,按方式 3 计数MOV DX,0103H MOV AL,00010110B ;计数器 0,方式 3,二进制计数OUT DX,ALMOV DX,0100HMOV AX,0OUT DX,AL ;计数器 1
27、 MOV DX,0103H MOV AL,01010110B ;计数器 0,方式 3,二进制计数OUT DX,ALMOV DX,0101HMOV AX,0OUT DX,AL9.27 答:根据题图,8253 的四个端口地址为 0F8H,0FAH,0FCH,0FEH。LED0 亮 10s后灭,可以通过方式 0,计数 10000 次;LED1 在 闭合后亮 15s 后灭,即计数器 1 为方式1,计数值为 15000;LED2 为亮 2s,灭 2s 闪烁,即计数器 2 为方式 3,计数值为 4000。程序为:;计数器 0MOV DX,0FEH MOV AL,00110000B ;计数器 0,方式 0,二进制计数OUT DX,ALMOV DX,0F8HMOV AX,10000OUT DX,AL XCHG AH,ALOUT DX,AL;计数器 1 MOV DX,0FEH MOV AL,01110010B ;计数器 1,方式 1,二进制计数OUT DX,ALMOV DX,0FAHMOV AX,15000OUT DX,AL XCHG AH,ALOUT DX,AL;计数器 2 MOV DX,0FEH MOV AL,10110110B ;计数器 2,方式 3,二进制计数OUT DX,ALMOV DX,0FCHMOV AX,4000OUT DX,AL XCHG AH,ALOUT DX,AL