5.计数器和定时电路(8254A)


5.1 概述

  • 8254引脚

    • 8254与CPU接口
      • 8位数据线:D0~D7
      • 寻址控制线:A0A1/CS
      • 读写控制线:/RD/WR
    • 8254与外设接口(每个对应)
      • 时钟输入:CLK
      • 输入门控:GATE
      • 波形输出:OUT

5.2 8254的控制字

  • D7D6:

    • 8253:选取0-2控制寄存器
    • 8254:11读回
      • D5=0 锁存计数值
      • D4=0 将计数器状态存入状态寄存器
  • D5D4:

    • 00:锁定计数器值(供CPU读)
    • 01:读写低8位
    • 10:读写高8位
    • 11:先读写低8位,再8高位
  • D3D2D1:

    • 选取0-6工作方式
  • D0:

    • 0:二进制
    • 1:二-十进制
  • Tips:

    • 先减一,再判断是否为0,最长时间为初值0,代表65536
    • 十进制范围0001~10000←初值0000H
    • 二进制范围0001H~10000H(65536)←初值0000H
    • 共4个端口,地址从低到高为计数器0、1、2、控制字

5.3 可编程定时/计数器的工作方式

  • 共同点:

    • 控制字写入时,复位
    • 写入初值后,经过一个时钟周期,CE才开始工作,即N+1个脉宽
    • CLK的上升沿,门控信号GATE被采样
  • 不同点:

    • 输出的波形
    • 触发方式
    • GATE对计数操作的影响
  • 方式0:__——:计数结束产生中断输出(软件控制)

    • 预置初值后低电平,计数值减为0时,输出高电平并维持
    • GATE=0,计数停止;GATE=1,继续计数
    • 计数过程中可重写改变计数值
  • 方式1:__ ——:重复触发的单稳输出(硬件触发)

    • 预置初值后低电平,计数值减为0时,输出高电平并维持
    • 计数未完成时,允许GATE多次重触发
    • GATE上升沿触发,在下一个CLK下降沿开始计数
    • 下个GATE触发信号到来时,需当前计数值计满回0,将新初值装入CE,开始计时
  • 方式2:—— _ —— _:分频器(软件控制)

    • 计数减到1时,OUT输出一个CLK脉宽低电平自动装入重新计数
    • GATA上升沿重新装入初值
    • 新初值下次计数才起作用
  • 方式3:— __ — __:方波发生器(软件控制)

    • 计数值一半**(n+1)/2**时,OUT变低,任务完成OUT变高
    • 其他与方式2
  • 方式4:—— _—:选通信号发生器(软件控制)

    • 写入初值开始计数,计数减到0,输出一个脉宽低电平
    • GATE=0,计数停止;GATE=1,继续计数
    • 新初值立即起作用
  • 方式5:—— _—:选通信号发生器(硬件触发)

    • 多次重触发
    • GATE上升沿开始触发,计数减到0,输出一个脉宽低电平
    • 下个GATE触发信号到来时,需当前计数值计满回0,将新初值装入CE
  • 方式0与方式4(软件控制特点)

    • GATE=1,工作;GATE=0,暂停
    • 无法自动重装
    • 新初值立即生效
    • 方式0:__ ——— 计数结束产生中断输出
    • 方式4:—— _ — 选通信号发生器
  • 方式1与方式5(硬件触发特点)

    • GATE上升沿触发
    • 允许多次重触发
    • 当前计数结束,才可在下个GATE上升沿到来时装入初值,并开始计数
    • 方式1:__ — 重复触发的单稳输出,计数结束后,会继续输出相应宽度的负脉冲
    • 方式5:**—— _ — **选通信号发生器
  • 方式2与方式3(波形输出)(软件控制)

    • 预置初值自动装入

    • 方式2: —— _ —— _ 分频器

    • 方式3:— __ — __ 方波发生器

例题


定时功能例题

  • 设某应用系统中,系统提供一个频率为10kHz的时钟信号,要求每隔100ms采集一次数据。在系统中,采用8254定时器的通道0来实现这一要求。将8254芯片的CLK0接到系统的10kHz时钟上,OUT0输出接到CPU的中断请求线上,8254的端口地址为10H~13H

  • 10kHZ = 1*10^-4s = 0.1ms

  • 使用端口10H与13H,方式2,初值为1000

    1
    2
    3
    4
    5
    6
    MOV AL,00110101B
    OUT 13H,AL
    MOV AL,00H
    OUT 10H,AL
    MOV AL,10H
    OUT 10H,AL

计时功能例题

  • 通过PC机系统总线在外部扩展一个8254,利用其通道0记录外部事件的发生次数,每输入一个高脉冲表示事件发生1次。当事件发生100次后就向CPU提出中断请求(边沿触发),假设8254片选信号的I/O地址范围为200H~203H

  • 中断,需要上升沿__——

  • 使用端口200H与203H

  • 选用方式0,初值为100H

    1
    2
    3
    4
    5
    6
    7
    8
    MOV AL,00110001B
    MOV DX,203H
    OUT DX,AL
    MOV DX,200H
    MOV AL,00H
    OUT DX,AL
    MOV AL,01H
    OUT DX,AL

级联例题

  • 已知某8254占用I/O空间地址为320H~323H,如下图所示,输入其CKL1端的脉冲频率为1MHz,要求用8253连续产生10秒的定时信号。

  • 1/1MHZ=10^-6 为10^7倍,需要两片

  • 设N1=500=1F4H,N2=20000=4E20H

  • 通道1

    1
    2
    3
    4
    5
    6
    7
    8
    MOV DX,323H
    MOV AL,01110100B
    OUT DX,AL
    MOV DX,321H
    MOV AL,0F4H
    OUT DX,AL
    MOV AL,01H
    OUT DX,AL
  • 通道2

    1
    2
    3
    4
    5
    6
    7
    8
    MOV DX,323H
    MOV AL,10110100B
    OUT DX,AL
    MOV DX,322H
    MOV AL,20H
    OUT DX,AL
    MOV AL,4EH
    OUT DX,AL

应用举例

  • 某产品的包装流水线中,一个包装箱能装24罐饮料。装箱时希望流水线上每通过24罐饮料,流水线要停4秒以等待包装箱封口,然后继续通过下一箱的24罐。流水线就是这样周而复始的运作。试利用一片8253来完成流水线控制中的定时和计数功能。假设8253的端口地址为8CH~8FH,采用的时钟频率是2KHz。

  • 需要能够重复触发,1、2、3

  • 通道一

    • 需要软件触发 2、3,计数结束后输出上升沿
    • 选择2
  • 通道二

    • 需要使通道一暂停输出,需输出4s的低电平,之后持续高电平,选用方式1
    • 选择方式1,初值8000
  • 通道一计数饮料,方式2,初值24

    1
    2
    3
    4
    5
    6
    MOV DX,8FH
    MOV AL,01010101B
    OUT DX,AL
    MOV DX,8DH
    MOV AL,24H
    OUT DX,AL
  • 通道二计时,方式1,初值8000

    1
    2
    3
    4
    5
    6
    7
    8
    MOV DX,8FH
    MOV AL,10110011B
    OUT DX,AL
    MOV DX,8EH
    MOV AL,00H
    OUT DX,AL
    MOV AL,80H
    OUT DX,AL