6.不可以;不可以;从输出锁存寄存器读出减1计数器中的计数值。 7.启动计数和中止计数。当GATE=0时,方式0,2,3,4会中止计数。
8.当计数过程中写入新的计数初值后,方式0和方式4立即有效,即在下一个CLK时钟周期,计数器从新的计数初值开始计数。方式1和方式5在GATE信号触发后有效,而方式2和方式3则在下一个计数周期或GATE信号触发后有效。
9.中止计数或定时过程的方法与工作方式有关,其中止计数的方法有:
① 对单次计数或定时过程,采用GATE=0来中止。8253的方式0和方式4采用此法。 ② 对重复计数或定时过程,采用GATE=0来中止。8253的方式2和方式3采用此法。 ③ 对硬件启动的计数或定时过程,GATE=0不影响计数或定时。8253的方式1和方式5不能用GATE=0来中止计数或定时过程。
10.答:先使用8253的锁存命令将计数器2当前的内容锁存起来,然后发读命令从锁存器中读取。程序段如下:
MOV DX,307H ;发计数器2的锁存命令
MOV AL,80H
OUT DX,AL
MOV DX,306H ;读数据 IN AL,DX ;先读低8位 MOV BL,AL ;保存到BL IN AL,DX ;再读高8位 MOV AH,AL
MOV AL,BL ;数据保存在AX中
五、应用题
1.解:首先计算计数初值: TOUT0 = 1/fOUT0 = 1/40KHz TCLK0 = 1/CLK0 = 1/1MHz
n = TOUT0/TCLK0 = CLK0/fOUT0 = 1MHz/40KHz = 1000/40 =25
若采用二进制计数,则写入方式为:
MOV AL,25
OUT PORT0,AL ;PORT0为通道0的端口地址 若采用十进制计数,则写入方式为:
MOV AL,25H OUT PORT0,AL
2.分析:在8253的6种工作方式中,输出连续波形的是方式2和方式3;方式2中重复周期为TOUT=n×TCLK,负脉冲宽度为1×TCLK。
答:(1) 计数器工作于方式2,是速率发生器;
(2) 计数初始值n=TOUT /TCLK=1ms/400ns=2500
3.分析:本题采用2个计数通道串联使用,要求两个计数通道的计数初值乘积为
13
OUT DX,AL
n0×n1=TOUT1 /TCLK0
TCLK0=1/CLK0=1/1MHz=1μs n0×n1=3600s/1μs=36×10
可选取n0=n1=6×10。因为n0和n1大于10000,必须采用二进制计数。为方便起见,
设定二个计数器都工作于方式2。
答:8253初始化程序为:
MOV AL,00110100B ;通道0初始化 MOV DX,183H OUT DX,AL
MOV AL,01110100B ;通道1初始化 OUT DX,AL
MOV AX,60000 ;通道0写入计数初值 MOV DX,180H OUT DX,AL MOV AL,AH OUT DX,AL
MOV DX,181H ;通道1写入计数初值 MOV AX,60000 OUT DX,AL MOV AL,AH OUT DX,AL
MOV AX,,0000H ;ES指向0000H(中断向量表首地址在00000H) MOV ES,AX
MOV DI,4×0AH ;DI指向IR2的中断向量地址指针 CLD
MOV AX,OFFSET INTER ;偏移量写入中断向量表 STOSW
MOV AX,SEG INTER ;段基值写入中断向量表 STOSW HLT
4.解:使用8253利用软件产生一次性中断,最好采用方式0。若20ms产生一次中断,而CLK为2MHz,则计数初值为(20×10)×(2×10)=40000。 程序如下:
CS8253 EQU xxH MOV AL,00110000B
OUT CS8253+3,AL ;设计数器0为方式0,二进制计数。 MOV AX,40000H OUT CS8253,AL
-3
6
4
8
14
MOV AL,AH
OUT CS8253,AL ;送初值40000 STI
5.解:计数器0:选择方式3,输出频率为4kHz的对称方波;计数初值N=4MHz/4kHz=1000,用BCD计数;计数器0的控制字应为00100111B=27H。
MOV AL,27H MOV DX,3E36H OUT DX,AL MOV AL,10H MOV DX,3E30H OUT DX,AL
计数器1:选择方式1,以构成一个单稳态电路,输出脉冲宽度由计数常数N1决定;计数常数N1=1ms/T=1000/0.25=4000,采用BCD计数;
计数器1的控制字为:01100011B=63H。 MOV AL,63H MOV DX,3E36H OUT DX,AL MOV AL,40H MOV DX,3E32H OUT DX,AL
计数器2:选择方式0,计数常数N2=5ms/T=20000=4E20H,采用二进制计数;计数器2的控制字为:10110000B=B0H。
MOV AL,0B0H MOV DX,3E36H OUT DX,AL MOV AL,20H MOV DX,3E34H OUT DX,AL MOV AL,4EH OUT DX,AL
15