微机原理与接口技术 第9章 计时/计数接口
第9章 计时/计数接口 教学提示:在计算机系统中,经常要用到定时信号。例如,个人计算机中动态存储器的刷新定时、喇叭的声源和系统日历时钟的计时等都是用定时信号产生的。在控制系统中,常常要求用定时时钟实现定时,如定时中断、定时检测和定时扫描等,也往往要求有计数器能对外部事件计数。要实现定时,常有3种方法。 (1) 软件定时。 (2) 不可编程的硬件定时。 (3) 可编程的硬件定时器。 教学要求:通过本章学习,使读者了解可编程的硬件定时器——Intel系列的定时器/计数器。该系列是可编程间断定时器PIT(programmable interval timer),型号为8253,其改进型为8254。
本章内容 9.1 概 述 9.1.1 8253 PIT的外部特点 9.1.2 8253 PIT的主要功能 9.1 概 述 9.1.1 8253 PIT的外部特点 9.1.2 8253 PIT的主要功能 9.1.3 8253 PIT的工作原理 9.1.4 8253 PIT的内部结构 9.1.5 8253 PIT的引脚 9.2 8253 PIT计时/计数器接口 9.2.1 8253 PIT的控制字 9.2.2 8253 PIT的工作方式 9.3 应用举例
9.1 概 述 Intel 8253是可编程间断定时器PIT,同时也可以用作事件计数器。每个8253芯片有3个独立的16位计数器通道,每个计数器有6种工作方式,都可以按二进制或十进制(BCD)计数。 Intel 8254是8253的改进型,内部工作方式和外部引脚与8253完全相同,只是增加了一个读回命令和状态字,时钟输入频率8253支持2MHz,8254支持10MHz。所以,本章所论述的8253同样适用于8254。 9.1.1 8253 PIT的外部特点 8253是一个双列直插式器件,具有24个引脚,使用单一+5V电源。具有3个独立的16位计数器。 9.1.2 8253 PIT的主要功能 (1) 每个计数器均可以按照BCD码或二进制进行计数。 (2) 每个计数器的计数速率可高达2MHz。 (3) 每个计数器有6种工作方式都可由程序设置。 (4) 所有输入/输出电平均与TTL电平兼容。
9.1 概 述 9.1.3 8253 PIT的工作原理 8253在工作时体现在两个方面:一方面按照计数器方式工作,即设置好计数初值后便开始减1计数,计到“0”时输出一个信号,计数器停止计数;另一方面作为定时器方式工作,定时常数设定后便进行减1计数,按定时常数不断地输出为时钟周期整数倍(即定时常数)的定时间隔。本质上讲都是基于计数器的减“1”工作。 当它作为定时器使用时,用系统时钟脉冲对减计数器进行减计数。当它作为计数器使用时,用外部事件的脉冲对计数器进行减计数。 8253具体用途如下。 (1) 在多任务分时系统中用作程序切换的中断信号。 (2) 可以向I/O设备输出精确的定时信号。 (3) 实现时间延迟。 (4) 作为一个可编程的时钟。 (5) 可以作为某种外部事件的计数器
9.1 概 述 图9.1 定时器/计数器的基本原理图
9.1 概 述 图9.1中有4个寄存器,分别是: (1) 控制寄存器:从数据总线缓冲器接收控制字,从而确定8253的操作方式,此寄存器中的数据不可读取; (2)初始值寄存器:存放初始数据,此值由程序写入,若不复位或没有向该寄存器写入新数据则一直保持原值; (3)状态寄存器:随时提供定时器/计数器的当前状态,根据这些状态可了解定时器/计数器某一时间的内部情况; (4)计数输出寄存器:数据可随时被CPU读出,它可以 反映出计数值的变化情况。
9.1 概 述 9.1.4 8253 PIT的内部结构 8253内部结构下图9.2所示。
9.1 概 述 (1)数据总线缓冲器。这是8253同CPU数据总线连接的8位双向三态缓冲器。CPU用I/O指令对8253读写的所有数据都是通过数据总线缓冲器传送的。 (2)读/写(R/W)逻辑电路。8253内部操作的控制部分,它决定3个计数器和控制寄存器中哪一个能工作,并控制内部总线上数据传送方向。 (3)控制寄存器。在8253初始化编程时,由CPU写入控制字,从而决定计数器的工作方式。此寄存器内容只能写入不能读出。 (4)计数器0、计数器1和计数器2。3个计数器功能完全相同,都有一个16位的可预置值的减法计数器。3个计数器的操作完全独立,各自均有6种工作方式。计数器的输入与输出以及门控信号之间的关系取决于工作方式。
9.1 概 述 9.1.5 8253 PIT的引脚 8253的引脚如图9.3所示。
9.2 8253 PIT计时/计数器接口 9.2.1 8253 PIT的控制字 在8253的初始化编程中,控制寄存器中的控制字由CPU写入,控制字规定了8253的工作方式。格式如图9.4所示。 (1) 计数器选择(D7D6)控制字的最高两位,决定这个控制字属于 哪一个计数器。 (2) 数据读/写格式(D5D4)。CPU向计数器写入初值和读取其当前状态时有几种不同格式。 (3) 工作方式选择(D3D2D1)。8253的每个计数器的6种不同的工作方式由此3位决定。 (4) 数制选择(D0)。8253的每个计数器有两种计数制:二进制计数和BCD码计数,由D0决定。 (5) 计时常数的计算: 计时常数=定时时间/8253的时钟周期
9.2 8253 PIT计时/计数器接口 图9.4 8253的控制字
9.2 8253 PIT计时/计数器接口 9.2.2 8253 PIT的工作方式 1.方式0——计数结束产生中断工作过程如图9.5所示。 ①写入控制字(CW)后,OUT变为低电平。 ②写入初值(n=4)后,再经一个CLK信号,初值进入计数执行部件。 ③GATE-1允许对CLK计数,GATE-0计数停止。 ④计数值到0时计数结束,OUT变为高电平。 ⑤计数结束后,计数值保持FF不变,直到重新送放计数初值。
9.2 8253 PIT计时/计数器接口 方式0的工作特点如下。 (1) 计数器只计数一次。 (2) 8253内部是在CPU写计数值的信号上升沿将计数初值写入计数器的计数初值寄存器。但是,计数初值在信号上升沿后的下一个CLK脉冲由计数初值寄存器送到计数器,计数开始。 (3) 门控信号可以暂停计数过程。在计数过程中,当GATE=0时,计数暂停,直到GATE=1后继续计数。工作波形如图9.6所示。 (4) 在计数过程中可以改变计数值。 (5) 8253可产生中断请求信号。
9.2 8253 PIT计时/计数器接口 2.方式1——可编程序的单拍脉冲 其工作过程如图9.7所示 。 ① 写入控制字(CW)后,OUT变为低电平。 ② 写入初值(n=3)后,初值进入初值寄存器CR。 ③ GATE上升沿使边沿触发器受到触发,再经一个CLK信号,初值进入计数执行部件CE,OUT信号变低。此后允许对CLK 计 数。 ④ 计数值到0时计数结束,OUT变为高电平。 ⑤ 计数结束后,计数值保持FF不变 ⑥ GATE上升沿使计数初值自动进入计数执行部件,OUT信号重新为低,并开始新一轮计数。
9.2 8253 PIT计时/计数器接口 方式1的工作特点如下。 (1) 若设置的计数值为n,则输出的单脉冲宽度为n个CLK脉冲输入间隔。 (2) 计数结束后外部门控脉冲再次触发,重新产生等宽单拍脉冲。 (3) 计数过程中外部门控脉冲再次触发,单拍脉冲宽度展宽。在门控脉冲上升沿过后的一个CLK脉冲下降沿,计数器重新计数。如图9.8所示。 图9.8 方式1时GATE信号的作用
9.2 8253 PIT计时/计数器接口 (4) 计数值重置,重新触发时生效。在计数过程中,可以重新写入计数值,计数过程不受影响,计数到0,OUT引脚输出高电平。外部门控脉冲再次触发,计数器按照新的计数值计数。如图9.9所示。 图9.9 方式1在计数过程中改变计数值
9.2 8253 PIT计时/计数器接口 3.方式2——分频器 其工作过程如图9.10所示。 ① 写入控制字(CW)后,OUT变为高电平。 ② 写入初值(n=4)后,再经一个CLK信号,初值进入计数执行部件,开始计数。 ③ GATE=1允许对CLK计数,GATE=0计数停止。 ④ 计数值到1时计数结束,OUT变为低电平,经一个CLK后,OUT变高,计数执行部件自动从初值寄存器获得原初值,并自动重新开始新一轮计数,如此反复进行,直到重新对8253初始化或使GATE变低。
9.2 8253 PIT计时/计数器接口 方式2的工作特点如下。 (1) 不用重新设置计数值,能够连续工作,输出固定n分频的脉冲。 (2) 计数过程门控脉冲可控。计数过程中,当GATE=0时,计数器暂停计数。计数器在GATE=1后的下一个时钟恢复计数初值并重新开始计数。如图9.11所示。 图9.11 方式2时GATE信号的作用
9.2 8253 PIT计时/计数器接口 3.方式2——分频器 其工作过程如图9.10所示。 ①写入控制字(CW)后,OUT变为高电平。 ②写入初值(n=4)后,再经一个CLK信号,初值进入计数执行部件,开始计数。 ③ GATE=1允许对CLK计数,GATE=0计数停止。 ④ 计数值到1时计数结束,OUT变为低电平,经一个CLK后,OUT变高,计数执行部件自动从初值寄存器获得原初值,并自动重新开始新一轮计数,如此反复进行,直到重新对8253初始化或使GATE变低。
9.2 8253 PIT计时/计数器接口 图9.12 方式2在计数过程中改变计数值 (3) 重置计数值可改变输出脉冲的频率。重置新的计数值不影响当前计数过程,从下一次计数开始,计数器按照新的计数值工作并产生另一频率的脉冲序列。如图9.12所示。 图9.12 方式2在计数过程中改变计数值
9.2 8253 PIT计时/计数器接口 4.方式3——可编程方波速率发生器 图9.13 方式3的波形 同方式2一样,方式3的输出也是周期性的。但方式3的输出中,波形为基本对称的矩形波或方波(即一半为高电平,另一半为低电平)。在方式3下,CPU写入控制字后,OUT引脚输出高电平,若GATE=1,CPU写入计数值后立即开始计数,OUT引脚仍然保持高电平,直至计数器计数到一半时才输出低电平,计数器计到0后,OUT引脚再次输出高电平,同时,计数器又重新开始计数,重复前面的过程,如此周而复始,输出波形为基本对称的矩形波或方波。如图9.13所示。 图9.13 方式3的波形
9.2 8253 PIT计时/计数器接口 方式3的工作特点如下。 (1) 若计数值为偶数,则CPU写入计数值n后,每个CLK脉冲到来时,计数器减2计数,当计到“0”时,OUT引脚输出状态改变,同时,计数器重新装入计数值并开始计数,重复前面的过程,如此周而复始地进行。输出方波的周期为n个CLK脉冲周期。图9.13 方式3的波形 (2) 若计数值为奇数,则CPU写入计数值n后,第一个CLK脉冲到来时,计数器减1。此后,每个脉冲到来时,计数器减2,计数器计到0后,OUT引脚输出状态改变,同时,计数器重新装入计数值并开始计数,第一个CLK脉冲到来时计数器减3。此后,每一个CLK脉冲到来时计数器减2,直至计数器计数到0,OUT引脚输出状态改变,计数器重新装入计数值并重复前面的过程,如此周而复始地进行。OUT引脚输出的一个周期的波形中,有(n+1)/ 2个CLK脉冲周期为高电平;有(n-1)/ 2 个CLK脉冲周期为低电平。设n=5,工作波形如图9.13所示。 (3) GATE信号的计数过程控制。GATE=1,计数器允许计数;GATE=0,计数器禁止计数。在计数过程的低电平期间,若GATE=0 ,计数器停止计数,待GATE=1后,计数器重新装入计数值并开始计数。工作过程如图9.14所示。
9.2 8253 PIT计时/计数器接口 图9.14 方式3时GATE信号的作用 (4) 在计数期间,新计数值的写入不影响现行计数过程。新计数值将在现行半周期结束时被装入计数器。但是,若在方波半周期结束之前且在新计数值写入之后8253收到GATE脉冲,则计数器便在下一个CLK脉冲到来时装入此新计数值并按此重新开始计数。
9.2 8253 PIT计时/计数器接口 5.方式4——软件触发选通 写入方式4的控制字后,OUT引脚输出高电平。在GATE=1时,CPU写入计数值后计数器立刻开始计数,当计数器减到0时,OUT=0,一个CLK脉冲周期后,OUT引脚恢复高电平输出,计数器停止计数。方式4工作过程如图 9.15所示。 图9.15 方式4的工作波形
9.2 8253 PIT计时/计数器接口 方式4的工作特点如下。 (1) CPU写入计数初值相当于软件启动。CPU写入计数初值n后,在下一个CLK脉冲到来时,计数值被装入计数器并开始计数,n个CLK脉冲周期后,OUT引脚输出一个CLK脉冲周期的负脉冲。 (2) GATE的控制作用。当GATE=1时,允许计数;当GATE=0时,禁止计数。因此,要做到软启动,必须保证GATE持续为“1”。如图9.16所示。 图9.16 方式4时GATE信号的作用
9.2 8253 PIT计时/计数器接口 (3) 若计数值在计数过程中改变,计数器则立刻按照新计数值重新计数。若为双字节计数,CPU写入第一字节时停止计数,第二字节写入后,计数器按照新的计数值计数。如图9.17所示。 图9.17 方式4在计数过程中改变计数值
9.2 8253 PIT计时/计数器接口 6.方式5——硬件触发选通 设置了方式5的控制字后,OUT为高电平。计数值设置后,计数器并不立刻计数,必须由GATE信号的上升沿触发计数器才开始计数。即计数器开始计数必须由硬件触发。计数到0后,OUT输出低电平,一个CLK脉冲周期后,OUT恢复高电平,计数器停止计数。要重新计数,8253需要另一个GATE信号的上升沿。如图9.18所示。 图9.18 方式5的工作波形 图中所示② 初值写入初值寄存器;③ GATE上升沿使计数执行部件在一个CLK后获得初值,并启动计数;④ 计数结束时,OUT输出一个CLK宽度的负脉冲,该负脉冲可作选通信号;⑤ 计数停止;⑥ 新的GATE上升沿,启动新一次计数。
9.2 8253 PIT计时/计数器接口 方式5的工作特点如下。 (1) 若计数值是置为n,门控脉冲上升沿触发后n+1个CLK脉冲周期由8253输出一个宽度为一个CLK脉冲周期的长度。 (2) 重新施加门控脉冲,计数器重新计数。在计数器计数过程中,若再施加门控脉冲,计数器重新计数,8253输出状态不受影响。如图9.19所示。 WR CW LSB=3 CLK GATE OUT 3 2 3 2 1 0 FF 图9.19 方式5时GATE信号的作用
9.3 应用举例 下面举例说明8253的使用方法。 1.微机日时钟 9.3 应用举例 下面举例说明8253的使用方法。 1.微机日时钟 以2MHz输入8253,实现每5秒定时中断。(设8253端口地址40H~43H)。 分析:8253的最大初值=65536(写入初值0)。CLK=2MHz可实现的最大时间间隔为: 65536/(2×106)秒=32.769毫秒 可见,仅用一个定时器无法实现5秒定时中断,需要采用两个计数器串联:一个计数器的输出(OUT)作为另一个计数器输入(CLK),如图9.21所示。
9.3 应用举例 图9.21 8253作为定时器的例子
9.3 应用举例 程序段如下: MOV AL,00110100B ;计数器0控制字 ,模式2,二进制初值,先低8位,后高8位 9.3 应用举例 程序段如下: MOV AL,00110100B ;计数器0控制字 ,模式2,二进制初值,先低8位,后高8位 OUT 43H,AL MOV AX,1000 ;计数器0计数初值 OUT 40H,AL MOV AL,AH MOV AL,01110100B ;计数器1控制字,模式2,二进制初值,先低8位,后高8位 MOV AX,10000 ;计数器1计数初值 OUT 41H,AL OUT 41H,AL
9.3 应用举例 2.提供可编程采样信号 用8253为A/D子系统提供可编程的采样信号。硬件电路如图9.23所示。 9.3 应用举例 2.提供可编程采样信号 用8253为A/D子系统提供可编程的采样信号。硬件电路如图9.23所示。 由图9.22可知,计数器1的时钟由计数器2的输出提供,故计数器1的时钟CLK1的频率为f /N2,计数器1工作在模式1——可重复触发的单稳态方式,则输出端OUT1的脉冲频率为f /(N2×N1)。计数器0工作在模式2——分频器,输出端OUT0的脉冲频率为f /N0,计数器0的GATE脉冲来自OUT1的控制。OUT0连接至A/D转换器的CONVERT端。当用软件对3个计数器设置好计数初值后,合上手动开关或继电器,A/D转换器便按照f /N0采样频率工作,每次采样的时间为N2×N1/f 。采样信号经A/D转换后送至8255A。 图9.22中,用PC5作为中断请求信号,从而引起中断,进入中断处理子程序。CPU在执行中断处理子程序的过程中,将接口8255A中的数据输入到累加器作处理。
9.3 应用举例 图9.22 8253硬件电路图
9.3 应用举例 具体程序段如下: MOV AL,14H ; OUT 76H,AL ;将计数器0设置为模式2 MOV AL,NOCNT ; 9.3 应用举例 具体程序段如下: MOV AL,14H ; OUT 76H,AL ;将计数器0设置为模式2 MOV AL,NOCNT ; OUT 70H,AL ;对计数器0设置计数初值N0 MOV AL,73H ; OUT 76H,AL ;将计数器1设置为模式1 MOV AX,N1CNT ; OUT 72H,AL ; MOV AL,AH ; OUT 72H,AL ;对计数器1设置计数初值N1 MOV AL,96H ; OUT 76H,AL ;将计数器2设置为模式3 MOV AL,N2CNT ; OUT 74H,AL ;对计数器2设置初值N2
第 9 章 结束 作业: 让各老师一定发表意见