8254 是 8253 的改进型,基本功能相同,硬件组成、外部引脚、编程特性完全兼容
数据总线缓冲器:用于将 8254 与系统数据总线相连。写入 8254 工作模式,向计数器写入计数初值,某计数器读取当前的计数值
读/写逻辑电路:选定制定寄存器,并指定读写操作
A0 | A1 | 说明 |
---|---|---|
0 | 0 | 计数器0 |
0 | 1 | 计数器1 |
1 | 0 | 计数器2 |
1 | 1 | 控制寄存器 |
控制寄存器:决定计数器的工作方式
计数器:拥有 3 个相互独立,结构完全一样的计数器。每个计数器有 3 个引脚:GATEi 门控信号输入端,CLKi 计数脉冲输入端,OUTi 信号输出端
部件 | 说明 |
---|---|
计数器初值寄存器 CR | 存放计数初值 |
计数器工作单元 CE | 用于进行 -1 操作 |
向计数器初值寄存器写值,会自动传入计数器工作单元,直到减到某值,OUTi 产生信号
软件启动:GATEi 为高电平
硬件启动:GATEi 有一个上升沿
重复计数:计数完毕后,初值寄存器的值又回存入工作单元
工作方式 | 启动方式 | 是否重复计数 | 输出信号 |
---|---|---|---|
0 | 软 | 否 | 结束输出低电平 |
1 | 硬 | 否 | 计数输出低,结束输出高 |
2 | 软、硬 | 是 | 结束前一个输出低 |
3 | 软、硬 | 是 | 输出对称方波 |
4 | 软 | 否 | 结束输出 CLK 宽度的低电平 |
5 | 硬 | 否 | 结束输出 CLK 宽度的低电平 |
输出不对称方波时,(N+1)/2 个时钟周期输出为高电平,(N-1)/2 个时钟周期输出为低电平,也就是高电平比低电平多一
8254 控制字有两个:一个是用来设置工作方式的方式控制字;另一个是用来设置读回命令的读出控制字
方式控制字
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|
计数器选择 | 读写格式选择 | 工作方式选择 | 是否使用 BCD |
D5D4 = 0,锁存
D5D4 = 1,只读写低 8 位
D5D4 = 2,只读写高 8 位
D5D4 = 3,先读写低 8 位,再读写高 8 位
十进制(BCD 码)计数值范围为 1 ~ 10000,取最大值时写入 0000H
二进制计数值范围为 0 ~ 65536,取最大值时写入 0000H
读出控制字
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|
1 | 1 | 0 则锁存计数值 | 0 则锁存计数器状态 | 工作方式选择 | 0 |
D4 = 0 则会将计数器状态存入状态寄存器
状态字
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|
OUT 引脚现行状态 | 计数初值是否装入 | 工作方式选择 |
注意
举例
8254 的计数器 0 做频率 4 kHz 的方波发生器,8254 的端口地址位 40H ~ 43H, fCLK0 = 12 MHz
;方波发生器所以工作在方式3
;计数初始值=12Mhz/4kHz=3000
;方式控制字00110111B
MOV AL,00110111B
OUT 43H,AL ;写控制字
MOV AX,3000H ;选择的是BCD计数
OUT 40H,AL ;写计数初值低8位
MOV AL,AH ;OUT不允许是H所以要先给L
OUT 40H,AL ;写计数初值高8位
8254 的计数器 2 做 1s 标准时钟,端口地址为 0360H、0362H、0364H、0366H,fCLK0 = 10 MHz
;计数初值=10MHz/1HZ=10 000 000 > 65535
;所以一个计数器不行,要用俩,且能重复计数,做1s标准时钟
;所以计数器2工作在方式2,计数器0工作在方式3
;计数器2计数初值=2000,计数器0计数初值=5000
;计数器2方式控制字10110101B,计数器0方式控制字00110101B
MOV AL,00110111B
OUT 0366H,AL
MOV AX,2000H
MOV 0360H,AL
MOV AL,AH
MOV 0360H,AL
MOV AL,10110101B
OUT 0366,AL
MOV AX,5000H
MOV 0364H,AL
MOV AL,AH
MOV 0364,AL
8254 端口地址为 40H ~ 43H,读出计数器 2 的计数值
MOV AL,1100100B
OUT 43H,AL ;写控制字
IN AL,42H
MOV DL,AL ;读状态
IN AL,42H ;读低8位
MOV AH,AL
IN AL,42H ;读高8位
XCHG AH,AL