8253详解及例题


一、工作方式


1、方式0——计数结束后输出由低变高

(1)工作过程

当写入方式0控制字后,计数器输出段OUT立即变成低电平。当写入计数初值N后,若GATE为高电平,计数器开始计数。

在计数过程中,OUT端一直维持为低,直到计数为0(计数)时,OUT端变为高,此时可以设置为向CPU发出中断请求。

在计数过程中,若GATE变为低电平,暂时停止计数,OUT不变,直到GATE变为高电平后继续接着计数,到计数为0(结束)时,呕吐端变为高,此时可以设置为向CPU发出中断请求。

8253用作计数器时,一般都工作在方式0。

(2)特点

  • 计数器只计一遍数。当计数到0时,并不回复计数初值,不开始重新计数,输出段OUT由低变高且一直保持为高。只有当写入一个新的计数初值后,OUT才变低,开始新的计数。
  • 在计数过程中可改变计数值。如果计数器为8位,在写入新的8位计数值后,计数器将按新的计数值重新开始计数。如果计数器为16位,在写入第一个字节后,计数器停止计数,在写入第二个字节后,计数器按照新的数值开始计数。
  • 在计数过程中,可由门控信号GATE暂停。当GATE=0时,计数器暂停计数;当GATE变为1后,就接着计数。
  • 方式0的OUT信号在计数到0时由低变高,可作为中断请求信号。但由于8253内部没有中断控制电路,通常接8259中断控制器。

2、方式1——可程控的单脉冲

(1)工作过程

写入控制字后,OUT输出高电平,此时并不开始计数。写入计数初值后,当门控制信号GATE变为高电平时(边沿触发!),启动计数,OUT输出变低。在整个计数过程中,OUT都维持低,直到计数到0时,输出变为高。因此,输出为一单脉冲,其低电平维持时间由装入的计数初值来决定。

(2)特点

  • 当计数到0后,计数器可再次由外部启动(GATE信号跳变依次),按原计数初值重新开始计数,输出单脉冲,二不需要再次送一个计数初值。

  • 在计数过程中,外部可发出门控脉冲,进行再触发。这时不管原来计数到何值,计数器将重新开始计数,输出端仍保持低电平。

  • 计数过程中改变计数初值不影响本次计数过程。若门控信号再次被触发,则计数器才按新的计数值计算。

方式0 方式1
设置计数初值后立即计数。 设置计数初值后不立即计数,直到有外部触发信号后才开始计数。
在计数过程中能用门控信号暂停计数 在计数过程中若有门控脉冲时不停止计数,而是使计数过程重新开始。
在计数过程中改变计数初值时,原计数停止,立即按新的初值开始计数。 在计数过程中当改变计数初值时,现行计数不受影响,新计数初值在下次启动计数后才起作用。
在一次计数结束后,必须重新设置设置计数初值才能再次计数,即计数初值只能使用一次。 计数初值在一次计数过程完成后继续有效。

3、方式2——分频器

(1)工作过程

写入控制字后,计数器输出端为高电平。写入计数初值后,只要GATE为高电平(电平触发!)计数器立即对CLK端的输入脉冲计数。

在计数过程中输出端始终保持为高,直到计数器减为1,输出变低。经过一个CLK周期,输出回复为高,同时按照原计数初值重新开始计数。如果计数初值为N,则在每输入N个脉冲后,输出一个脉冲。因此,这种方式可以作为分频器或用于产生实时时钟中断。

(2)特点

  • 不用重新设置计数初值,计数到0后自动装入初值,计数器能够连续工作,输出固定频率的脉冲。

    扫描二维码关注公众号,回复: 1370361 查看本文章
  • 计数过程可由门控信号GATE控制。当GATE为0时,暂停计数。当GATE变为1后,下一个CLK脉冲使计数器回复初值,重新开始计数。

  • 在计数过程中可以改变计数初值,这对正在进行的计数过程没有影响。但当计数到1时输出变低,过一个CLK周期输出又变高,计数器将按新的计数值计数。所以对方式2改变计数初值时,在下一次计数有效。

4、方式3——方波发生器

(1)工作过程

写入控制字后,输出为高电平。GATE为高电平时(电平触发!),在写入计数初值后就开始计数,输出保持为高。当计数到一半计数初值时,输出变为低,直到计数为0,输出又变为高,重新开始计数。

(2)特点

  • 当计数初值N为偶数时,输出端的高低电平持续时间相等,各为N/2个CLK脉冲周期;当计数初值N为奇数时,输出端的高电平持续时间比低电平持续时间多一个脉冲周期。即高电平持续(N+1)/2个脉冲周期,低电平持续(N-1)/2个脉冲周期。

  • 当GATE为1时,允许计数;当GATE=0时,停止计数。如果在OUT为低电平期间GATE=0,OUT将立即变高。当GATE变高以后,在下一个CLK脉冲来到时,计数器将重新装入初始值,开始计数。在这种情况下通过门控信号使计数器实现同步,称为硬件同步。

  • 如果GATE信号一直为高电平,在写入控制字和计数值后,将在下一个CLK脉冲来到时装入计数初值,这种情况称为软件同步。

  • 在计数期间写入一个新的计数初值,如果在输出信号半周期结束之前没有收到GATE脉冲,则要在现行输出半周期结束后才按新的计数初值开始计数。

  • 在写入新计数初值之后在现行输出半周期结束之前GAET=0,OUT立即变为高,计数器停止工作,当GATE=1后,将在下一个CLK脉冲来到时立即装入新的计数初值并开始计数。

5、方式4——软件触发的选通信号发生器

(1)工作过程

写入控制字后,输出端OUT变成高电平,以此作为初始电平。

当写入计数初值后开始计数,称为软件触发(前提条件是GATE为高电平)。

当计数到0后,输出变低,经过一个CLK周期,输出又变高,计数器停止计数。这种方式计数也是一次性的,只有在输入新的计数值后,才开始新的计数过程。若设置的计数初值为N,则是在写入了计数初值后经过N个CLK脉冲,才输出一个负脉冲。一般将此负脉冲作为选通信号。

(2)特点

  • 当GATE=1时,允许计数;当GATE=0时,禁止计数。所以,要做到软件触发,GATE应保持为1。

  • 在计数过程中,若改变计数初值,则在本次计数结束,下一周期开始按新的计数初值开始计数。这称为软件再触发。16位数,在设置第一个字节后停止计数,在设置第二个字节后开始计数。

6、方式5——硬件触发的选通信号发生器

(1)工作过程

写入控制字后,输出端出现高电平,写入计数初值后,计数器并不立即开始计数,而是要由门控脉冲的上升沿来启动计数,称为硬件触发。当计数到0时,输出变低,又经过一个CLK周期,输出恢复为高电平。这样在输出端得到一个负脉冲选通信号。计数器停止计数后要等到下次门控脉冲触发,才能再惊喜计数。

(2)特点

  • 若设置计数初值为N,则在门控脉冲触发后,进过N个CLK脉冲,才输出一个负脉冲。

  • 在计数过程中,若GATE端又出现一个脉冲进行触发,则使计数器重新开始计数,但对输出状态没有影响。

  • 如果在计数过程中改变计数值,只要没有门控信号的触发,就不影响本次计数过程。当计数到0后,若右有新的门控信号的触发,则按新的计数初值计数。

方式4 方式5
每次要靠软件设置计数初值后才能计数(软件触发)。 计数初值只需设置一次,但是每次计数要靠门控信号的触发(硬件触发)。
软件更改计数初值后立即起作用。 软件更改计数初值后要有新的门控信号的触发才能起作用。


  • 例1:设8086系统中8253的三个计数器的端口地址为060H,062H和064H,控制口地址为066H,要求计数器0为方式 1,按BCD计数;计数初值为1800D,计数器1为方式0,按二进制计数;计数初值为1234H,计数器2为方式3,按二进制计数;当计数初值为065H时,试分别写出计数器0,1,2的初始化程序。
    计数器0的初始化:
    计数0的控制字:00100011B=23H
    MOV AL,23H ;计数器0的控制字
    OUT 0 66H,AL ;控制字写入8253的控制器
    MOV AL,18H ;取计数初值的高8位,低8位00可不送
    OUT 060H,AL ;计数初值送计数器0端口
    计数器1和初始化:
    计数器1的控制字:01110000B=70H
    MOV AL,70H ;计数器的控制字:方式0,送高8位和低8位,二进制计数
    OUT 066H,AL ;控制字写入8253的控制器
    MOV AL,034H ;取计数初值的低8位
    OUT 062H,AL ;计数初值的低8位,写入计数器1端口
    MOV AL, 12H ;取计数初值的高8位
    OUT 062H,AL ;计数初值的高8位写入计数器1端口
    计数器2的初始化:
    计数器2的控制字:10010110B=96H
    MOV AL,96H ;计数器2的控制字96H:方式3,只送低8位,二进制计数
    OUT 066H,AL ;控制字写入8253的控制口
    MOV AL,056H ;计数初值的低8位
    OUT 064H,AL ;计数初值的低8位写入计数器2的端口
    例2:要求读出计数器2的当前计数值,并检查是否为全“1”。
    8253在读取计数器的当前计数值时,必须分两步进行。首先发一锁存命令(即控制字中RL1RL0=00),将当前计数 值锁存到输出锁存器中。第二步执行读操作,即用IN指令将锁存器中内容读入CPU。
    假设计数初值只有低8位,设其程序段如下(控制口地址为066H,计数器2的口地址为064H):
    KEEP:MOV AL,80H ;计数器2的锁存命令
    OUT 066H,AL ;锁存命令写入控制寄存器
    IN AL,064H ;读输出锁存器中的当前计数值(从计数器2端口读)
    CMP AL,0FFH ;比较当前计数值是否为全“1”
    JME KEEP ;非全“1”继续读
    HLT ;为全“1”暂停

  • 8253的应用举例

    例1:将8253的计数器1作为5ms定时器,设输入时钟频率为200kHz,试编写8253的初始化程序。
    (1)计数初值N计算
    已知输入时钟CLK频率为200kHz,则时钟周期为T=1/f=1/200kHz=5μs,于是计数初值N为:N=5ms/T=5ms/5μs=1000。
    (2)确定控制字
    按题意选计数器1,按BCD码计数,工作于方式0,由于计数初值N=1000,控制字D5D4应为11,于是8253的控制字 为:01110001B=71H。
    (3)选择8253各端口地址
    设计数器1的端口地址为3F82H,控制口地址为3F86H。
    (4)初始化程序如下
                    MOV AL,71H ;控制字
                    MOV DX,3F68H ;控制口地址
                    OUT DX,AL ;控制字送8253控制寄存器
                    MOV DX,3F82H ;计数器1端口地址
                    MOV AL,00 ;将计数初值N=1000的低8位写入计数器1
                    OUT DX,AL
                    MOV AL,10 ;将N的高8位写入计数器1
                    OUT DX,AL

    例2:以8086为CPU的某微机系统中使用了一块8253芯片,其通道端口地址为308H, 30AH,30CH,控制口地址为30EH,3个通道使用同一输入时钟,频率为2MHz,要求完成如下功能:
    利用计数器0采用硬件触发,输出宽度等于时钟周期的单脉冲,定时常数为36H;
    利用计数器1输出频率为2kHz的对称方波;
    利用计数器2产生宽度为0.6ms的单脉冲,
    试设计该定时系统硬件电路和初始化程序。
    (1)硬件电路设计
    硬件电路设计主要是地址译码电路设计及时8253与CPU间的连接。根据给定的端口地址可知,地址总线低位部分的 A9~A0分别为:A9A8=11,A7~A4=0000,A3A2A1=100~111,A0=0,由它们经译码器译码产生8253的片选信号8253的初始化编程与应用举例, 8253的数据线D7~D0必须与系统数据总线的低8位相连,8253的端口的选择信号A1A0应连系统地址的A2A1。根据上 述要求,译码器应选3-8译码器74LS138。该译码器有3个代码输入端(C,B,A),输入3位代码决定译码信号从 Y0~Y7中哪一个输出,本例中显然应以Y2输出。
    (2)初始化编程
    根据题意要求,对3个通道的工作方式,计数初值确定如下:
    由CLK0~CLK2=2MHz可得,时钟周期T=1/f=1/2MHz=0.5μs。
    选计数器0:选择方式5,门控信号GATE应接一正跳变信号,OUT端当计数为0时产生一个宽度等于时钟周期的单脉 冲。计数系数为36,用BCD计数。所以,计数器0的控制字应为00011011B=1BH。
    选计数器1:选择方式3,GATE按+5V,CLK1=2MHz输出方波频率为2kHz,所以,计数常数N1=2MHz/2kHz=1000,采用 BCD计数,于是计数器1的控制字为:01110111B=77H。
    选计数器2:选择方式1,以构成一个单稳态电路,输出脉冲宽度由计数常数N2决定,计数常数N2=600μs/0. 5μs=1200,采用BCD计数,于是计数器2的控制字为:10110011B=B3H。
    根据以上分析可得3个计数通道的初始化程序如下。
    计数通道0的初始化程序:
              MOV DX,30EH ;8253的控制口地址
              MOV AL,1BH ;计数通道0的控制字,低8位,方式5,BCD计数
              OUT DX,AL ;控制字写入控制口
              MOV DX,308H ;计数器0的端口地址
              MOV AL,036H ;计数初值的低8位
              OUT DX,AL ;低字节写入计数器0端口
    计数通道1的初始化程序:
              MOV DX,30EH ;8253的控制口地址
              MOV AL,77H ;计数通道1的控制字,先写低字节,后写高字节,方式3,BCD计数
              OUT DX,AL ;控制字写入控制口
              MOV DX,30AH ;计数通道1的端口地址
              MOV AL,00H ;计数初值的低字节
              OUT DX,AL ;低字节写入计数通道1
              MOV AL,10D ;计数初值的高字节
              OUT DX,AL ;高字节写入计数通道1
    计数通道2的初始化程序
           

猜你喜欢

转载自blog.csdn.net/liudongdong19/article/details/80515234