微机 —— 可编程定时器/计数器 8253/8254

8253/8254是 Intel公司生产的可编程通用硬件定时/计数器芯片

实现定时的方法有三种:软件定时、不可编程的硬件定时、可编程的硬件定时

  软件定时:容易实现  但是占用CPU资源,降低了CPU的利用率
 不可编程定时:电路不复杂,但是使用不灵活
可编程的硬件定时:能满足各种不同的定时和计数要求,得到了广泛应用
一、8253芯片引脚

8253是24脚双列直插式芯片,用+5V电源供电。芯片内有三个相互独立的16位定时/计数器

 (1) 数据引脚 D7~D0:数据线,双向三态,与系统数据总线连接。
 (2) 片选信号 /CS:输入信号,低电平时选中此片。由CPU输出的地址经地址译码器产生。
 (3) 地址线 A0,A1:这两根线接到系统地址总线的A0,A1上,当CS为低电平,且8253被选中时,用它们来选择8253内部的四个寄存器。
 (4) 读信号 RD:输入信号,低电平有效。由CPU发出,用于控制对选中的8253内部寄存器的读操作。
 (5) 写信号 WR:输入信号,低电平有效。由CPU发出,用于控制对选中的8253内部寄存器的写操作。
 (6) 时钟脉冲信号 CLK0~CLK2:计数器0、计数器1和计数器2的时钟输入端。由CLK引脚输入的脉冲可以是系统时钟(或系统时钟的分频脉冲)或其他任何脉冲源所提供的脉冲。该脉冲可以是均匀的、连续的并具有精确周期的,也可以是不均匀的、断续的、周期不确定的脉冲。时钟脉冲信号的作用是在8253进行定时或计数时,每输入一个时钟信号,便使计数值减1.
      若CLK是由精确的时钟脉冲提供,则8253作为定时器使用;
      若CLK是由外部事件输入的脉冲, 则8253作为计数器使用。 
                       定时的本质是计数
                       
 (7) 门控脉冲信号 GATE0~GATE2:计数器0、计数器1和计数器2的门控制脉冲输入端,是由外部送入的门控脉冲,该信号的作用是控制启动定时器/计数器工作。
 (8)  输出信号 OUT0~OUT2:计数器0、计数器1和计数器2的输出端。当计数器计数到0时,该端输出一标志信号,从而产生不同工作方式时的输出波形。   
二、8253芯片的内部结构

8253 内部结构框图:

8253内部结构框图
(1) 3个独立的16位计数器

 包括一个8位的控制寄存器、一个16位的计数初值寄存器CR、一个16位的减1计数器CE和一个16位的输出锁存寄存器OL。 
 
 16位的计数初值寄存器CR和16位的输出锁存寄存器OL:都没有计数功能,只起锁存作用。
 
 16位的减1计数器CE:执行计数操作,其操作方式受控制寄存器控制,最基本的操作是:接受计数初值寄存器CR的初值,在GATE的控制下对CLK信号进行减1计数,把计数结果送输出锁存寄存器OL中锁存。当计数减到0时,该计数通道的OUT引脚发出OUT信号。

(2) 控制寄存器

  控制字将决定计数器的工作方式、计数形式及输出方式,亦决定如何装入计数初值。

(3) 数据缓冲器

   数据缓冲器是三态、双向8位缓冲器

(4) 读/写逻辑

   读/写逻辑的任务是接收来自CPU的控制信号,完成对8253内部操作的控制。

8253计数器在工作之前。用户必须对其进行初始化编程

首先CPU用输出指令向控制寄存器送控制字,然后再用输出指令向计数初值寄存器CR预置计数/定时的初值。
启动工作后,CR中的初值就送入减1计数器CE对CLK输入的计数/定时脉冲信号进行减1计数。当CE中的内容减为0,表示计数/定时到,则OUT端输出信号。

输出信号的波形形式由工作方式决定

三、8253的初始化编程(重点)

(1)8253的控制字格式
8253控制字格式
D7D6位是控制字的计数器编号。控制字中使用最高两位表明将控制字写入哪个计数器的控制寄存器中。

D5D4位用来设定计数器的数据读/写方式。

D3D2D1位决定了计数器的工作方式。

D0位决定计数器的数制:D0=0,选择二进制计数;D0=1,选择十进制计数。

(2)8253的读/写操作

写操作:是指CPU对8253写入控制字或写入计数初值

  8253在开始工作之前,CPU要对其进行初始化编程(写入控制字和计数初值),具体应注意以下两点:
  ① 对每个计数器,必须先写控制字,后写计数初值。因为后者的格式是由前者决定的。
  ② 写入的计数初值必须符合控制字(D5D4两位)决定的格式。16位数据应先写低8位,再写高8位。
  
  当给8253中的多个计数器进行初始化编程时,其顺序可以任意,但对每个计数器进行初始化时必须遵循上述原则。 
例:
设三个计数器的CR/OL端口地址为70H、71H、72H,控制寄存器端口地址73H。计数器0,工作模式2,CR/OL仅使用低8位,初值为50,计数值使用BCD码计数。
试根据上述要求编写初始化程序。

计数器0: D7D6 ———> 00
CR/OL仅使用低8: D5D4 ————> 01
工作模式2: D3D2D1 ————> 010
BCD码计数: D0 ————> 1

初始化程序为:
MOV AL,  15H
OUT  73H,  AL
MOV AL,  50H
OUT  70H,  AL

读操作:是指读出某计数器的当前计数值到CPU中

有两种读取当前计数值的方法:

    ① 先使计数器停止计数(在GATE端加低电平或关闭CLK脉冲):根据送入的控制字中的D5D4位的状态,用一条或两条输入指令读CE的内容。
       实际上,CPU是通过输出锁存器OL读出当前计数值的。
       
    ② 在计数的过程中不影响CE的计数而读取计数值:为达此目的,应先对8253写入一个具有锁存功能的控制字,即D5D4位应为00,这样就可以将当前的CE内容锁存入OL中,然后再用输入指令将OL的内容读到CPU中。当CPU读取了计数值后,或对计数器重新进行初始化编程后,8253会自动解除锁存状态,OL中的值又随减1计数器CE值变化。
例
设8253芯片的端口地址为388H~38BH。
现要求计数器0工作在方式3,计数初值为2354,十进制计数;计数器1工作在方式2,计数初值为18H,二进制计数。
试根据上述要求编写初始化程序及读取计数器0当前计数值的程序。 


  ;计数器0的初始化程序
	MOV		DX,38BH		        ;给计数器0送控制字
	MOV		AL,00110111B           ; 将控制字送 AL    计数器000 ;计数初值是2354,计数器需16位操作: 11 ; 工作方式3011 ; 十进制计数: 1 ;
	OUT		DX,AL
	MOV		DX,388H		        ;送计数初值的低8位
	MOV		AL,54H
	OUT		DX,AL
	MOV		AL,23H		            ;送计数初值的高8位
	OUT		DX,AL 
	
 ;计数器1的初始化程序
	MOV		DX,38BH		        ;给计数器1送控制字
	MOV		AL,01010100B
	OUT		DX,AL
	MOV		DX,389H		         ;计数初值送低8位
	MOV		AL,18H
	OUT		DX,AL 

 ;计数器0当前计数值读出程序
	MOV		DX,38BH	             ;送计数器0当前计数值锁存命令
	MOV		AL,00H
	OUT		DX,AL	
	MOV		DX,388H	             ;读出当前计数值的低8位
	IN		AL,DX
	MOV		CL,AL
	IN		AL,DX	                 ;读出当前计数值的高8位
	MOV		CH,AL

四、8253的工作方式(重点)

具有六种不同的工作方式。当对已知的脉冲进行计数时芯片用做定时,当对外部事件进行计数时用做计数

(1)方式0 —— 计数结束产生中断:软件启动、不能自动重复

方式0主要用于单次计数,计数到0时,利用OUT信号作为查询信号或中断请求信号

特点:
(1)结果特点:计数器减1为0,OUT升高,向CPU发中断请求。
(2)过程特点:
     控制字写入:当控制字写入控制字寄存器后,输出端变成低电平,并在计数值减到0之前一直保持低电平。
     计数值写入: OUT不变,仍然为低电平( OUT=0)
     启动方式:写入计数值(软件启动)。写入计数值后,必须在下一个CLK时钟脉冲来到时,计数初值才由CR传送到CE。
     计数期间: OUT为低电平。
     计数为0时:OUT升高( OUT=1),向CPU发中断请求(如果使用中断的话),直到CPU写入新的控制字或计数值时,才能使OUT=0。
     计数期间写入新的计数值:如果计数值是一个字节,则在写入后的下一个时钟脉冲,新的计数值由CR送CE,开始新的计数;如果计数值是两个字节,则写入第一个字节时终止计数,写入第二个字节后的下一个时钟脉时,新的计数值由CR送CE,启动计数器按照新的计数值开始计数。
     GATE的作用: GATE=0,禁止计数,计数器停止; GATE=1时,允许计数,此时计数器从刚才中断的地方开始连续计数。
     计数值有效期限:计数值一次有效。

(2)方式1 —— 可编程单次脉冲:一种硬件启动、不能自动重复但通过GATE的正跳变可使计数过程重新开始的计数方式

特点:
(1)结果特点:输出单拍负脉冲,脉冲宽度可有程序设定。
(2)过程特点:
     控制字写入:当控制字写入控制字寄存器后,输出端变成高电平, ( OUT=1)
     计数值写入: OUT不变,仍然为高电平( OUT=1)
     启动方式:GATE上跳沿(硬件启动) 启动后的下一个CLK时钟脉冲使OUT变为低电平(OUT=0)     
     计数期间: OUT为低电平(OUT=0) 
     计数为0时: OUT变为高电平( OUT=1)
     计数期间写入新的计数值:不影响原计数,只有当下一个GATE上跳沿来到时,才能使用新的计数值。
     GATE的作用: GATE=0或GATE=1时 ,不影响计数。但若出现上跳沿则重新启动计数器,按照新的计数值开始计数,若在计数尚未结束时,就出现了上跳沿,则重新计数。因此时输出负脉冲的宽度延长,
     计数值有效期限:计数值多次有效。

(3)方式2 —— 分频工作方式

方式2一旦启动,计数器就可以自动重复地工作

OUT输出信号的频率为CLK信号频率的1/N,即N次分频

特点:
 (1)结果特点:产生连续的负脉冲信号,负脉冲宽度等于一个时钟周期,脉冲周期可有软件设定,脉冲周期=计数值×时钟周期。
(2)过程特点:
     控制字写入:当控制字写入控制字寄存器后,输出端变成高电平, ( OUT=1)。
     计数值写入: OUT不变,仍然为高电平( OUT=1)
     启动方式:两种。
            硬件启动:GATE上跳沿启动;
             软件启动: 写入计数值启动(此时GATE=1)
     计数期间: OUT为高电平(OUT=1)。但在CE有1到0的计数中, OUT输出一个负脉冲,负脉冲宽度等于一个时钟周期
     计数为0时: OUT变为高电平( OUT=1) 开始下一个周期的计数。
    计数期间写入新的计数值:影响随后的脉冲周期。
     GATE的作用:GATE信号保持高电平, GATE=0时, 停止计数; GATE上跳沿则启动计数器,重新开始计数 。
     计数值有效期限:计数值多次有效

(4)方式3 —— 方波发生器

工作于方式3时,在计数过程中其输出前一半时间为高电平,后一半时间为低电平。其输出是可以自动重复的周期性方波,输出的方波周期为N*TCLK

特点:
(1)结果特点:产生连续的方波信号,方波周期=计数值×CLK时钟周期。
(2)过程特点:
    控制字写入:当控制字写入控制字寄存器后,输出端变成高电平, ( OUT=1)。
    计数值写入: OUT不变,仍然为高电平( OUT=1)
    启动方式:两种。
            硬件启动:GATE上跳沿启动;
            软件启动: 写入计数值启动(此时GATE=1)
    计数期间: 若计数值N为偶数,则在前N /2计数期间OUT输出为高电平(OUT=1)。后N /2计数期间, OUT输出为低电平(OUT=0);若计数值N为奇数,则在前(N+1)/2计数值期间, OUT输出为高电平(OUT=1),后(N-1)/2计数值期间, OUT输出为低电平(OUT=0),
    计数为0时: OUT输出高电平( OUT=1)。从而完成一个周期,然后, CR值自动装入CE,开始下一个周期的计数。
    计数期间写入新的计数值:不影响当前输出周期,等到计数值减到0后,或GATE有上跳后,将把CR的新的内容从新装入CE中,开始以新的周期输出方波。
    GATE的作用: GATE=0时, OUT=1 ,停止计数;GATE=1时,计数进行。在计数过程中,应始终使 GATE=1 。GATE有上跳沿时,下一个CLK时钟使CR装入CE,开始新的计数。
    计数值有效期限:计数值重复有效

(5)方式4 —— 软件触发选通:软件启动、不自动重复

特点:
(1)结果特点:计数器减为0时,输出一个时钟周期宽的负脉冲。
(2)过程特点:
    控制字写入: OUT输出高电平( OUT=1)。
   计数值写入: OUT输出高电平( OUT=1)
   启动方式:写入计数值启动,在经过一个CLK时钟周期,减1计数器CE获得计数初值,开始减1计数。
   计数期间: OUT输出为高电平(OUT=1)。
   计数为0时: 计数器减到0后,OUT输出一个负脉冲,宽度为一个时钟周期,然后又自动变为高电平,并一直维持高电平,通常将此负脉冲作为选通信号。
   计数期间写入新的计数值:立即有效。写入新计数值后,在下一个时钟周期时,新计数值被装入CE,开始以新的计数值计数,如果写入的计数值是2个字节,那么写入第一个字节时,停止计数,写入第二个字节后的下一个CLK时钟周期时新值装入CE,并以新的计数值开始重新计数。
   GATE的作用: GATE=0时,禁止计数 ; GATE=1时,允许计数,此时计数器从暂停的地方开始连续计数, GATE信号不影响OUT的状态。
   计数值有效期限:计数值一次有效。

(6)方式5 —— 硬件触发选通:硬件启动、不自动重复

特点:
   (1)结果特点:计数器减为0时,输出一个时钟周期宽的负脉冲。
   (2)过程特点:
        控制字写入: OUT输出高电平( OUT=1)。
        计数值写入: OUT输出高电平( OUT=1)
        启动方式:GATE上跳沿。当GATE端有上跳沿信号后,下一个CLK脉冲使CR的计数值装入CE,从而开始计数过程。
        计数期间: OUT输出为高电平(OUT=1)。
        计数为0时: 计数器减到0后,OUT输出一个负脉冲,宽度为一个时钟周期,然后OUT恢复输出高电平。
        计数期间写入新的计数值:不影响本次计数,但影响GATE上跳沿启动后的计数过程。一旦GATE重新启动将按新的计数值开始计数。
        GATE的作用: 无论GATE=0还是GATE=1均不影响计数过程,而当GATE有上跳沿时将从新启动计数过程,按最新的计数值开始计数。
        计数值有效期限:计数值多次有效。
五、8253六种工作方式的比较:

1、方式0和方式4

 相同点: 二者都由软件触发(写入计数值)起动计数,无自动重装计数初值的能力。每写入一次计数初值,启动一次计数过程。
    
 不同点:方式0在计数过程中OUT输出为低电平,计数结束时变为高电平,并一直保持;方式4在计数过程中OUT输出为高电平,计数结束时输出一个负脉冲,宽度为一个CLK脉冲周期,以后又保持高电平。

2、方式1和方式5

 相同点:均由硬件触发(GATE上升沿)启动计数。写入计数初值后并不马上计数,必须在门控信号GATE的上升沿触发下才开始计数。
 
 不同点:方式1在计数过程中OUT输出一个宽度为N*TCLK的单相负脉冲;方式5在计数结束后OUT输出一个宽度TCLK的负脉冲。

3、方式2和方式3

 相同点:具有自动重新装入计数初值的能力(即减1到0时计数初值寄存器的内容又被装入减1计数器继续计数),OUT端可输出连续的波形。
   
 不同点:方式2输出矩形波信号,方式3输出方波信号。

六种工作方式的区别:

 完成的功能不同
 启动计数器的触发方式不同。(软/硬件)
 输出波形不同。
 更新初值的有效性
 有的工作方式具备“初值自动重装”的功能。
 初值自动重装的功能是:当计数值减到规定的数值后,计数初值将会自动地重新装入计数器。
六、8254与8253的区别

8254是8253的改进型,它们的引脚定义与排列、硬件组成等基本上是相同的。因此8254的编程方式与8253是兼容的,凡是使用8253的地方均可用8254代替。

(1) 允许最高计数脉冲(CLK)的频率不同。8253的最高频率为2 MHz,而8254允许的最高计数脉冲频率可达10 MHz(8254为8 MHz,8254−2为10 MHz)。
(2) 8254每个计数器内部都有一个状态寄存器和状态锁存器,而8253没有。
(3) 8254有一个读回命令字,用于读出当前减1计数器CE的内容和状态寄存器的内容,而8253没有此读回命令字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柯糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值