可编程计数器/定时器的工作原理
计数器:设置好技术初值后,便开始减1计数,减为0时,输出一个信号
定时器:设置好定时常数后,便进行减1计数,按定时常数不断地输出为时钟周期整数倍的定时间隔
差别:计数器减到0后,输出一个信号便结束;定时器减为0后,自动恢复初值重新计数
输入信号中断的CLK决定了计数速率,门控脉冲GATE是对时钟的控制信号。计数器/定时器的输出可连到系统的中断请求上,用来产生中断;也可以连到I/O设备上,启动一个I/O操作。
计数器的值送到技术输出寄存器中可被读出。计数值到达0时,一方面会在输出引脚OUT上输出一个信号,另一方面还会在状态寄存器的对应位上反映出来。
控制寄存器可用来控制计数器/定时器的工作模式。工作模式就是时钟脉冲和门控脉冲怎样配合来产生怎样的输出。
8253/8254的编程结构
1.三个计数器共用一个控制寄存器和一个状态寄存器(只有8254有状态寄存器)
2.执行部件CE实际上是一个16位的减法计数器;输出锁存器OL用来锁存计数执行部件CE的内容,从而使CPU可对此进行读操作
8253/8254控制寄存器和控制字
三个计数器共用一个控制寄存器,通过对控制寄存器写入控制字,可以使3个计数器工作于不同的模式。
(1)模式设置控制字
BCD位:计数初值的格式,此位如为1,则后面设置的计数初值为BCD码格式,范围为0 ~ 9999;如为0,则后面设置的计数初值为0 ~FFFFH
M2、M1、M0:决定工作模式,共6种
RW1、RW2:读/写指示位
00:锁存操作,使当前计数值在输出锁存器中锁定
01:只读/写低8位
10:只读/写高8位
11:先读/写低8位,再读/写高8位
SC1、SC2:选择计数器
(2)读出控制字
每个计数器的当前计数值和当前状态(8254)可以被读取,因为不管是计数值还是状态都是不断变化的,所以在读取前要先进行锁存
D7、D6、D0:读出控制字的标识码
D5:为0时将所选计数器的当前计数值进行锁存
D4:将所选计数器的状态进行锁存
D3、D2、D1:分别对应计数器2、1、0。读出控制字可用一个锁存命令同时锁存多个计数器的计数值,也可用一个锁存命令锁存某个计数器的计数值和状态,但不能一次锁存多个计数器的状态,因为状态寄存器只有一个,一个时刻只能对应于一个计数器。
8254的状态寄存器和状态字
和控制寄存器共用一个端口地址
D7:表示OUT端的状态,为1表示高电平,为0表示低电平
D6:表示初值是否已经装入计数器,为0表示装入
D5 ~ D0:同模式设置寄存器的对应位含义相同
8253/8254的编程命令
编程的三条原则:
1.对计数器设置初始值前必须先写控制字。
2.初始值设置时,要符合控制字中的格式规定,即只写低位字节还是只写高位字节,或高低位字节都写,控制字一旦规定,具体初始值设定时就要一致。
3.要读取计数器的当前值和状态字,必须用控制字先锁定,才能读取。
写入命令:设置控制字命令、设置初值命令和锁存命令
读出命令:读取当前计数值和当前状态字
8253/8254的工作模式
模式0——计数结束产生中断(电平触发)
注:
1.门控GATE=1时,计数进行,否则计数停止;
2.计数到0时,不会自动装入初值重复计数,除非重新写入初值;
模式1——可编程的单稳态触发器(上升沿触发)
注:
1.用上升沿触发,每触发一次,输出一个宽度为N个时钟周期的负脉冲
2.触发可重复进行,计数结束后,如又来一个触发上升沿,那么,会重复计数过程,不必重新写入计数初值
3.在计数期间,如又写入新的计数值,当前输出不受影响,即仍然输出宽度为N的负脉冲。但如果又来一个触发信号,则按新的计数值做减1计数。
4.单稳态输出脉冲的宽度主要决定于计数值,但也受门控信号的应县,在提前触发(即单稳态受触发后未回到稳态而又受触发)时,会使单稳态输出变宽。
模式2——分频器
注:
1.既可用电平触发,也可用上升沿触发,重复输出宽度为1个时钟周期的负脉冲。
2.减到1(不是0)时,输出端OUT变为低电平,输出一个负脉冲,脉冲宽度为一个时钟周期。
3.计数期间,如写入新的计数初值,输出端OUT不受影响,计数器到0后,将按新的计数值进行计数。
4.软件同步:计数器写入控制字后,若GATE一直处于高电平,那么写入初值后便开始计数。硬件同步:GATE来了一个上升沿,计数器从初值重新开始计数。
5.GATE为持续高电平时,工作如同一个N分频的计数器,正脉冲为N-1个时钟脉冲宽度,负脉冲为一个时钟脉冲宽度。
模式3——方波发生器
注:
1.写入控制字后以高电平为初始电平,写入初值并触发后,当计数到一半时,输出变为低电平,到终值时又变为高电平。
2.GATE=1,计数进行,否则停止。
3.计数过程中,如写入新的初值,不影响当前输出周期,此后再按新的值开始计数。
4.软件同步(类似);硬件同步(类似);
模式4——软件触发的选通信号发生器
注:
1.用电平触发,输出单一的负脉冲。
2.减为0时,输出宽度为1个时钟周期的负脉冲,一般将此作为选通信号。
3.GATE=1时进行计数。
4.若写入新的计数值,那么按新的初值作减1计数
模式5——硬件触发的选通信号发生器
注:
1.上升沿触发
其他参照模式4与模式1