微机原理-可编程计数器/定时器 8253/8254及其应用

在微型计算机系统中,常需要用到定时功能。

  • 在IBM PC机中,需要有一个实时时钟以实现计时功能。
  • 对动态RAM进行刷新。
  • 在计算机实时控制和处理系统中,则要按一定的采样周期对处理对象进行采样。
  • 外部事件进行计数。
  • Intel 8253就是一种能完成上述功能的计数器/定时器芯片﹐被称为可编程间隔定时器(Programmable Interval Timer,PIT)。8253内部具有3个独立的16位计数器通道,通过对它进行编程,每个计数器通道均可按6种不同的方式工作,并且都可以按二进制或10进制格式进行计数,最高计数频率能达到2MHz。

一、8253的内部结构和引脚信号

(1)数据总线缓冲器

  • 数据总线缓冲器是8253与系统数据总线相连接时用的接口电路,它由8位双向三态缓冲器构成,CPU用输入、输出指令对8253进行读/写操作的信息,都经8位数据总线D~D传送。
  • 传送信息包括:
    ①CPU在对8253进行初始化编程时,向它写入的控制字。
    ②CPU向某一计数器写入的计数初值。
    ③从计数器读出的计数值。
    (2)读/写控制逻辑
    可接收的信号有:
    C S ‾ \overline{CS} CS片选信号,低电平有效,由地址总线经I/О端口译码电路产生。
    R D ‾ \overline{RD} RD读信号,低电平有效。
    W R ‾ \overline{WR} WR写信号,低电平有效。
    A 1 A 0 A_1A_0 A1A0端口选择信号。在8253内部有3个计数器通道(0~2)和一个控制字寄存器端口。当A_1A_0$ =00时,选中通道0;A_1A_0 = 01 时 , 选 中 通 道 1 ; A 1 A 0 =01时,选中通道1;A_1A_0 =01,1;A1A0=10时,选中通道2;A_1A_0$=11时,选中控制字寄存器端口。
C S ‾ \overline{CS} CS R D ‾ \overline{RD} RD W R ‾ \overline{WR} WR A 1 A 0 A_1A_0 A1A0功能
01000写入计数器0
01001写入计数器1
01010写入计数器2
01011写入控制字寄存器
00100读计数器0
00101读计数器1
00110读计数器2
00111无操作
1××××禁止使用
011××无操作

(3)计数器0~2

  • 8253内部包含3个完全相同的计数器/定时器通道,对3个通道的操作完全是独立的。每个通道都包含一个8位的控制字寄存器、一个16位的计数初值寄存器、一个计数器执行部件(实际的计数器)和一个输出锁存器。执行部件实际上是一个16位的减法计数器。
  • 每个通道工作时,都是对输入到CLK引脚上的脉冲按二进制或10进制(BCD码)格式进行计数。
  • 定时时间=时钟脉冲周期 t c t_c tc×预置的计数初值n

(4)控制字寄存器

  • 规定各计数器通道的工作方式、读写格式和数制。

  • S C 1 S C 0 SC_1SC_0 SC1SC0 通道选择位
    S C 1 S C 0 SC_1SC_0 SC1SC0= 00,01,10 分别表示向8253的计数器通道0~2写入控制字。 S C 1 S C 0 SC_1SC_0 SC1SC0= 11时无效。

  • R L 1 R L 0 RL_1RL_0 RL1RL0
    ▶ \blacktriangleright R L 1 R L 0 RL_1RL_0 RL1RL0=01,表示只读/写低8位字节数据,只写入低8位时,高8位自动置为0。
    ▶ \blacktriangleright R L 1 R L 0 RL_1RL_0 RL1RL0=10,表示只读/写高8位字节数据,只写入高8位时,低8位自动置为0。
    ▶ \blacktriangleright R L 1 R L 0 RL_1RL_0 RL1RL0=11,允许读/写16位数据。由于8253的数据线只有8位( D 7 ∼ D 0 D_7\sim D_0 D7D0),一次只能传送8位数据,所以读/写16位数据时必须分两次进行,先读/写计数器的低8位字节,后读/写高8位字节。
    ▶ \blacktriangleright R L 1 R L 0 RL_1RL_0 RL1RL0=00,把通道中当前数据寄存器的值送到16位锁存器中,供CPU读取该值。

二、初始化编程步骤和门控信号的功能

2-1 8253的初始化编程步骤

(1)写入控制字
用输出指令向控制字寄存器写人一个控制字,以选定计数器通道,规定该计数器的工.作方式和计数格式。写入控制字还起到复位作用,使输出端OUT变为规定的初始状态,并使计数器清0。
(2)写入计数初值

  • 用输出指令向选中的计数器端口地址中写人一个计数初值
  • 初值若是8位数﹐则只要用一条输出指令就可完成初值的设置。如果是16位数,则必须用两条输出指令来完成,而且规定先送低8位数据,后送高8位数据。注意,计数初值为0时,也要分成两次写入,因为在二进制计数时,它表示65536,BCD计数时,它表示10000。

2-2 门控信号控制功能

三、8253的工作方式

3-1 方式0-计数结束中断方式

  • 当对8253的任一个通道写入控制字,并选定工作于方式0时,该通道的输出端OUT立即变为低电平。
  • 要使8253能够进行计数,门控信号GATE必须为高电平。
  • 向计数通道写入初值n(=4)时,则 W R 0 ‾ \overline{WR_0} WR0变成低电平。
  • W R n ‾ \overline{WR_n} WRn上升沿后的下一个时钟脉冲的下降沿时,才把 n装入通道内的实际计数器中,开始进行减1计数。
  • 这个由低到高的正跳变信号,可以接到8259A 的中断请求输入端,利用它向CPU发中断请求信号。

3-2 方式1-可编程单稳态输出方式

  • 当CPU用控制字设定某计数器工作于方式1时,该计数器的输出OUT立即变为高电平。
  • 必须等到GATE由低电平向高电平跳变,形成一个上升沿后,才能在下一个时钟脉冲的下降沿。
  • 当计数器的值减为零时,输出端OUT产牛由低到高的正跳变。这样,就可在OUT引脚上得到一个负的单脉冲,单脉冲的宽度可由利序来控制,它等于时钟脉冲的宽度乘以计数值n。

3-3 方式2-比率发生器

  • 如果 GATE为高电平,则在写人计数值后的下一个时钟脉冲时,将计数值装入执行部件。
  • 每隔n个时钟脉冲就产生一个负脉冲,其宽度与时钟脉冲的周期相同,频率为输入时钟脉冲频率的n分之一。这实际上是一种分频工作方式。
  • 写入新初值 n ′ n\prime n,下次计数按 n ′ n\prime n计数。
  • 当GATE变为低电平时,将迫使OUT变为高电平,并禁止计数。

3-4 方式3-方波发生器

  • 从输出端得到的不是序列负脉冲,而是对称的方波或基本对称的矩形波
  • 写入计数器的初值为偶数,则当8253进行计数时,每输入一个时钟脉冲,均使计数值减2。
  • 如果写入计数器的初值为奇数,则当输出端ОUT为高电平时,第一个时钟脉冲使计数器减1,以后每来一个时钟脉冲,都使计数器减⒉,当计数值减为0时,输出端OUT由高电平变为低电平,同时自动重新装入计数初值继续进行计数。这时第一个时钟脉冲使计数器减3,以后每个时钟脉冲都使计数器减⒉,计数值减为0时,OUT端又回到高电平,并重新装入计数初值后,开始下一轮循环计数。
  • 当写入的计数初值为偶数时,输出完全对称的方波,写人初值为奇数时,其输出波形的高电平宽度比低电平多一个时钟周期。

3-5 方式4-软件触发选通

  • 如果GATE为高电平,那么写入计数初值后,在下一个时钟脉冲后沿将自动把计数初值装入执行部件,并开始计数。
  • 计数过程是由软件把计数初值装入计数寄存器来触发的。

3-6 方式5-硬件触发选通

  • 当装入计数值n后,不管GATE是高电平还是低电平,减1计数器都不会工作。
  • 方式1用来产生单脉冲。
  • 方式2用来产生序列负脉冲,每个负脉冲的宽度与CLK脉冲的周期相同。
  • 方式3用于产生连续的方波。方式2和方式3都实现对时钟脉冲进行n分频。
  • 方式4和方式5的波形相同,都在计数器回О后,从OUT端输出一个负脉冲,其宽度等于一个时钟周期。但方式4由软件(设置计数值)触发计数,而方式5由硬件(门控信号GATF)触发计数。
  • 1
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值