可编程定时器/计数器(微机接口技术)

本文详细介绍了Intel 8253/8254可编程定时/计数器的工作原理、内部结构、管脚分配、编程方法以及在微型计算机系统中的应用实例。8253提供了3个独立的16位计数通道,支持6种工作方式,可以用于定时、计数、频率发生等多种功能。通过编程设置计数初值和工作模式,8253可以在不同场景下产生所需的时间延迟或脉冲信号。文中列举了多种工作方式的特性和应用场景,并给出了具体的初始化程序段,展示了如何配置8253以实现特定的定时或计数任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

微型计算机原理与接口技术

可编程定时器/计数器

可编程定时/计数器接口芯片8253 (和8254差不多)

Intel 8253 (或 8254)是一个可编程定时/计数器(PIT-Programmable Interval Timer)芯片,用于解决计算机中通常碰到的时间控制问题,即在软件的控制下产生精确的时间延迟。该芯片提供了3个独立的16位计数器通道。每个通道可工作在不同的工作方式下,并且这些工作方式均可以使用软件来设置。

  • 8254 是Intel 公司生产的可编程间隔定时器。 是8253 的改进型, 比8253 具有更优良的性能。

  • 8254是8253的更新产品,主要功能基本一样,只是8254芯片増加了回读命令。

8254 具有以下基本功能:

  1. 有3 个独立的16 位计数器。
  2. 每个计数器可按二进制或十进制(BCD) 计数。
  3. 每个计数器可编程工作于6 种不同工作方式。
  4. 8254 每个计数器允许的最高计数频率为10MHz(8253 为2MHz) 。
  5. 8254 有读回命令(8253 没有) , 除了可以读出当前计数单元的内容外, 还可以读出状态寄存器的内容。
  6. 计数脉冲可以是有规律的时钟信号, 也可以是随机信号。

功能

定时或计数实现方法

  • 微机经常要用来对外部事件进行定时控制对外部事件发生的次数进行记录,即所谓的定时或计数控制。

  • 一般来说,实现定时或计数通常可采用三种方法:

    • 方法1—由专门设计的硬件电路(数字电路)来实现
      • 优点:定时或计数与CPU并行地进行。
      • 缺点:通用性和灵活性差(因为若要改变定时/计数要求就必须改变电路参数)。
    • 方法2—用软件即通过编制一段程序来实现
      • 该软件控制方法是利用执行一条指令所需的时钟状态的个数来统计执行一段程序所花费的状态数,再乘以一个时钟周期的时间便得到定时的时间。
      • 该方法一般用在延时时间不长切使用次数不多的场合。
      • 优点:通用性和灵活性较好地进行。
      • 缺点:定时或计数占用CPU的工作时间。
    • 方法3—用可编程定时/计数器的输出来实现
      • 按要求对了编程定时/计数器设置参数。该方法具有以上两种方法的优点。
  • 可编程定时/计数器的基本功能(两方面)

    • 作为计数器,在设置好计数初值后,便开始减1计数,减到“0”时,输出一个信号;
    • 作为定时器,在设置好定时常数后,便开始减1计数,并按定时常数不断地输出为时钟周期整数倍的定时间隔。
    • 计数器与定时器的差别在于:计数器计数到零时便输出一个信号并结束,而定时器则不断的产生信号。
    • 计数器与定时器的共同点在于:他们的工作过程没有根本区别,都是基于计数器的“1”操作
  • 计数器与定时器的主要用途:

    1. 在多任务的分时系统中用作中断信号。实现程序的切换。
    2. 为I/O设备提供一个精确的定时信号。
    3. 作为一个可编程的波特率发生器。
    4. 实现时间延迟等。

基本原理

  • 在定时/计数器的基本原理图中,有四个寄存器一个计数执行单元CE
  • 四个寄存器都可被访问, 他们分别是:
    • 二个输出端口——初值寄存器CR控制寄存器
    • 二个输入端口——计数输出寄存器/锁存器OL状态寄存器

在这里插入图片描述

  • 其中:
    1. CE不与CPU有直接联系
    2. CE总是从初值寄存器CR中获得计数初值
    3. 只有把CE的内容传到计数输出寄存器OL中, CPU才能读出某个时候的计数值
  • 计 数 初 值 = f c l k ÷ f o u t 计数初值 = f_{clk} \div f_{out} =fclk÷fout

8253的内部结构

在这里插入图片描述

  • 8253三个相互独立的结构完全相同的计数电路,分别称做计数器0计数器1计数器2每个计数电路/通道包含:

    • 一个8位的控制寄存器(存放计数器的工作模式控制字);
    • 一个16位的初值寄存器(CR,8253工作前要对它设置初值);
    • 一个16位的计数执行单元(CE,接收CR送来的内容,并对该内容执行减1操作);
    • 一个16位的输出锁存器(OL,锁存CE的内容,使CPU能从中读出一个稳定的计数值);
  • CPU可以通过输入/输出指令对8253的内部寄存器进行访问。

    • 每个计数器通过3个引腿和外部联系;
      1. 一个时钟输入端CLK(计数输出脉冲端)
      2. 一个门控信号输入端GATE
      3. 一个输出端OUT(输出信号端)

8253的管脚分配

在这里插入图片描述

  • 与CPU相连接的读写逻辑电路信号有:

    • WR—写信号。有效时,表示CPU正对8253的某个计数器写入计数初值或对控制寄存器写入控制字。
    • RD—读信号。有效时,表示CPU正对8253的某个计数器进行读操作。
    • CS—片选信号。只有在它保持为低电平时,WR,RD才会被确认,否则将被忽略。
    • A 1 、 A 0 A_1、A_0 A1A0—片内寄存器地址信号。用来对3个计数器和控制寄存器进行寻址。当 A 1 A 0 A_1A_0 A1A0=11时,通过读/写控制逻辑电路选中控制寄存器,写入控制字。
      • A 1 A 0 A_1A_0 A1A0=11时,第一次写入的一定作为控制字,此后写入的作为命令。

    注意: WR和RD是针对CPU来说, 由CPU进行读写

  • 三个计数器都有的外部输入/输出信号:

    • CLK—计数器的时钟输入信号。用于输入定时基准脉冲或计数脉冲信号。在计数过程中,此引腿上每输入一个时钟信号,计数值减1,所以说,计数器是记录脉冲个数的计数器,而且计数器受到门控信号的控制。
    • GATE—计数器的门控输入信号。由外部通过该引腿控制启动或禁止计数器的操作。
    • OUT—时间到或计数结束输出信号。当计数器计数到0时,在该引腿必定有输出。在不同的模式下,可输出不同电平的信号。
    • D0~D8—与CPU相连接的双向数据线。可传输向计数器写入的计数初值,向控制寄存器写入的控制字,或从计数器中读取的计数值等数据。

8253的编程

8253的命令字和状态字

  1. 方式选择命令字(方式控制字)

在这里插入图片描述

作用 : 选择一个计数器, 确定工作方式, 并规定初值的写入顺序和计数初值(一串0,1代码)的数制。

(1)计数器选择

D7 D6=00 选择 0 # 0^{\#} 0#计数器

=01 选择 1 # 1^\# 1#计数器

=10 选择 2 # 2^\# 2#计数器

=11 标志该命令字是 “读出命令”, 即读出控制字标志

(2)读/写方式选择

D5 D4=00 标志该命令为 “锁存命令”,即表示锁存计数器的当前计数值, 以便读出检查。

=01 初值写入时, 只写低8位, 高8位自动补0。计数值读出时, 只能读低8位

=10 初值写入时, 只写高8位, 低8位自动补0。计数值读出时, 只能读高8位。

=11 初值写入 / 计数值读出的顺序为先低8位,后高8位。

(3)工作方式选择

D3 D2 D1 选中的计数器工作方式
0 0 0 0
0 0 1 1
× 1 0 2
× 1 1 3
1 0 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值