间隔定时器8254
$ B$ Q I9 _* M# E1 h. i( z
8254是8253的改进型。它的引脚、工作方式与8253完全相同。改进主要在两个方面:一是8254的计数频率更高,可达6 MHZ,8254.2的计数频率可达10 MHz;二是8254多了一个读回命令,该命令可将选择的计数器的状态字和(或)当前计数值锁存,供CPU读取。读回命令的格式和含义如图6.25所示。该命令字的D3~D1某位为1表示选择相应的计数器;D5为0表示锁存所选择的计数器的当前值;D4为0表示锁存所选择的计数器的状态。该命令字是写入控制字端口的。
) q8 ^" B2 {- u' [) P+ r7 P& a3 l
4 z6 t' V* W) I7 ^/ j; b& t
/ f# |0 M' _4 w" W, T8 @/ H) C6 Y X% a8 f) e J: r0 \
# h) f$ i3 E' x% N: N7 w 读回命令对某个计数器进行状态锁存,则接着可从该计数器端口读取一个状态字。状态字的格式和含义如图6.26所示。该状态字的低6位实际是对该计数器进行设置的方式控制字的相应内容;D7位是该计数器输出端OUT。的当前状态;D6位反映预置的初值是否已写入计数器中,该位是状态字中最常用的位,也是8254最具特色的位。例如,将脉冲式电表的输出作计数器的输入,当统计各用户的用电量时,可能有的用户一直未用电,电表没有输出一个脉冲,这样预置的初值就不能装入。在这种场合下,如果使用没有状态字的8253,程序处理起来将相当麻烦,而用8254则非常方便。
R) C/ S0 K3 i
" w8 p; j, t6 J
# r1 _7 g* y2 n$ U! g9 B2 G" z0 i4 L$ d2 z \5 F5 O
% V. T5 s: R8 S3 \# A! }( b5 p
& K9 n) f6 s1 v y# Y! ` 允许在读回命令中使D5和D4位同时为O,即当前计数值和状态字都要读回。但两者都要从同一个计数器端口读入,此时,先读入的一个字节一定是状态字,接着的读入与原先对该计数器的设置有关,如果是设置成先读/写低8位再读/写高8位,则在读状态字后,可依次读到当前计数值的低字节和高字节。
; q6 m4 P7 n$ L t, n3 c8 v% l { 也允许在读回命令中同时对两个或三个计数器进行锁存,并且状态和计数值都锁存。
3 N0 S- \7 T: {* d2 ~. C
当发出对多个计数器进行锁存的读回命令后,读计数器的操作顺序没有要求,而对每一个计数器,还是先读入的是状态字,后读入的是当前计数值。