11 可编程计数器/定时器8253/8254
11.1 8253的结构和作用

有三个独立而相同的通道,每个通道都有
8bit控制字寄存器16bit计数初值寄存器,说明计数有上限,超过需要外层循环;定时时间=时钟周期*计数初值16bit计数执行部件,是一个减法计数器,从初值开始-1循环16bit输出锁存器,必要时从这里读出计数的瞬时值
三个16bit的寄存器都可以当成两个8bit的寄存器用
A1A0连接CPU的A1A0时,是8bitCPU;A2A1,则是16bitCPU
地址对应如下

控制字寄存器
每个位的作用如下

注意D5D4=11时的读/写顺序是先低后高
当工作于二进制计数时,n=0000 - FFFF H,其中0000代表n=65536
当工作于BCD码计数时,n=0000 - 9999 D,其中0000代表n=10000
11.2 8253的工作方式
一共有6种方式,但是-1操作一定是在CLK的下降沿进行的
方式0:计数结束产生中断信号
向计数通道写入初值n,
OUT=0只用
GATE=1时才计数,-1;GATE=0,不会重新计数;计数一次有效,需要手动再装载只有在n写入1个CLK之后才开始
-1,在写入后第n+1CLK减为0OUT产生一个正的跳变,作为中断信号输出到别的芯片

方式1:可编程单稳定输出
- 写入初值n
GATE产生上升沿,才启动计数,之后不需要GATE信号;计数一次有效- 当开始计数时,
OUT=0,在n=0时恢复,产生1一个\(t=nT_c\)的负脉冲信号

方式2:比率发生器
- 写入初值n
GATE=1时开始计数,当n=1时OUT输出1个\(T_c\)的负脉冲,然后自动装入n(初值),重新计数- 即每隔\(nT_c\)产生一个负脉冲
- 如果在计数过程中装入新的n,那么下次计数按新的来
- 在计数过程中
GATE变为0,则在下次GATE=1时重新开始计数

注意,这是特别的,当n=1时的输出
方式3:方波发生器(分频)
输入初值n,
GATE=1按下面方式计数若n为偶数,每次计数
-2,减到0时OUT=0;n回到初值,每次-2,减到0时OUT=1循环上面过程,产生占空比=0.5,周期=\(nT_c\)的方波
若n为奇数,
-1,然后每次-2,减到0时OUT=0;n回到初值,-3,然后每次-2,减到0时OUT=1循环上面过程,产生不对称的方波,周期=\(nT_c\)的方波
计数过程中
GATE=0,停止计数,当GATE=1时从头开始计数

方式4:软件触发选通
- 输入初值n,当
GATE=1时(不必是上升沿)直接开始计数,减到0时输出\(T=T_c\)的单个负脉冲 - n一次有效,想要继续必须再次输入
- 计数过程中
GATE=0,恢复后从头开始
方式4不需要GATE信号
方式5:硬件触发选通
- 输入初值n,
GATE上升沿开始计数,之后不需要,减到0时输出\(T=T_c\)的单个负脉冲 - n一次有效,想要继续必须再次输入
- n个CLK后产生一个1CLK的负脉冲
- 计数过程中
GATE=0,恢复后从头开始
方式4、5是类似的,但是方式5需要一个硬件的GATE上升沿信号

共同点
- 除了方式0外,其他的方式
OUT初始输出为1 - 除了方式4外,其他在
GATE=1或其上升沿下才能/触发计数
例:8086系统中,8253基地址为310H,时钟频率1MHz,让三个通道实现下面的功能
- 通道0,方式3,输出2kHz方波
- 通道1,产生宽度为480us的单脉冲
- 通道2,硬件触发,输出单脉冲,时间常数为26
解:基地址为310H = 0011 0001 0000B,A2A1接入芯片的A1A0,使用部分译码和74LS138作为译码器
三个时钟口共用一个时钟信号,得到的硬件连接如下

还需要写软件
通道0需要的稳定的方波,使用方式3,而\(1M \div 2k=500\),那么\(n=500D=0500H\),后者使用BCD编码
控制字为00 11 011 1,控制字地址为316H,写入通道0,端口是310H
mov al, 00110111B
out 316H, al ;写入控制字
mov al, 00H
out 310H, al ;写入低位
mov al, 05H
out 310H, al ;写入高位
通道1产生指定长度的单脉宽,时钟周期\(T_c=1\mu s\),一共480个时钟周期,选择方式1,\(n=480D=0480H\)
控制字为01 11 001 1,通道1地址为312H
mov al, 01110011B
out 316H, al ;写入控制字
mov al, 80H
out 312H, al ;写入低位
mov al, 04H
out 312H, al ;写入高位
通道2产生单脉冲,且硬件触发,使用方式5,时间常数就是延迟,即\(n=26D=0026H\)
控制字为10 01 101 1,通道2地址为314H
mov al, 10011011B
out 316H, al ;写入控制字
mov al, 26H
out 314H, al ;写入低位