11 可编程计数器/定时器8253/8254

学习笔记
作者: MingXiao

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时才计数,-1GATE=0,不会重新计数;计数一次有效,需要手动再装载

  • 只有在n写入1个CLK之后才开始-1,在写入后n+1CLK减为0

    OUT产生一个正的跳变,作为中断信号输出到别的芯片

方式1:可编程单稳定输出

  • 写入初值n
  • GATE产生上升沿,才启动计数,之后不需要GATE信号;计数一次有效
  • 当开始计数时,OUT=0,在n=0时恢复,产生1一个\(t=nT_c\)的负脉冲信号

方式2:比率发生器

  • 写入初值n
  • GATE=1时开始计数,n=1OUT输出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 0000BA2A1接入芯片的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		;写入低位


Comments