第四节 可编程定时和计数器
在控制系统中,经常需要有一些实时钟以实现实时或延时控制,如定时启动,定时检测,定时通信等,计数器 对外部事件计数.实现这些要求经常有三种方法:
(1)设计数字逻辑电路,用硬件实现定时或计数功能,如用NE555芯片实现定时,用74LS163电路实现计数等.
(2)软件定时,让CPU反复执行一段程序,程序段所需时间乘以循环次数就是延时时间.这种方法通用性, 灵活性好,但占用CPU的时间,降低CPU的利用率.
(3)可编程定时器电路,可用软件改变定时范围,并与CPU并行工作,功能强,使用灵活.
各种系列的微处理器芯片中都有可编程的定时计数电路,如I8253和I8254,Z80CTC,M6840等,本节主要介绍 I8253定时计数电路.
§7.4.1 概述
Intel 8253是一种具有以下三个独立的16位计数器的可编程器件,可以用来定时和计数.
1.基本功能如下:
(1)一片上有三个独立的计数器通道.
(2)每个计数器的计数频率范围为0~2MHZ.
(3)每个计数器都可以按照二进制或十进制计数.
(4)每个通道有6中工作方式,可由程序设置或改变.
(5)所有输入输出都与TTL兼容.
(6)除具有计数或定时功能外,还可用来作为可编程频率发生器,二进制分频器,数字单稳,以及复杂的电机控制器等.
2.8253的内部结构如图7-21所示.
数据总线缓冲器是8253与CPU数据总线连接的8位双向三态缓冲,CPU用输入输出指令对8253进行读写的 所有信息都是通过这个缓冲器传送的.如CPU向8253写控制字,写计数初值或从8253读计数值等均通过总线 缓冲器.
读/写逻辑是8253内部操作的控制部件,它接收来自系统总线的输入信号,然后产生控制信号.各控制信号及作用为:
CS:片选信号,当CS为低电平时,8253被选中,允许CPU对8253进行读写操作.否则,数据总线缓冲器处在三态,与系统总线脱开,不能进行读写操作.
RD和WR:读和写信号,RD为低电平时,计数值读入CPU,WR为低电平时,CPU可向8253写入控制字和计数初值,这两个信号是控制三态缓冲器传送方向的.
A0和A1:通常接到地址总线的A0和A1上,用来选择控制字寄存器和三个计数器之一.各个端口的读写操作 选择如表7-2.
CS | RD | WR | A1 | A0 | |
0 | 1 | 0 | 0 | 0 | 写入计数器0 |
0 | 1 | 0 | 0 | 1 | 写入计数器1 |
0 | 1 | 0 | 1 | 0 | 写入计数器2 |
0 | 1 | 0 | 1 | 1 | 写入控制寄存器 |
0 | 0 | 1 | 0 | 0 | 读计数器0 |
0 | 0 | 1 | 0 | 1 | 读计数器1 |
0 | 0 | 1 | 1 | 0 | 读计数器2 |
0 | 0 | 1 | 1 | 1 | 无操作 |
1 | * | * | * | * | 未选中三态 |
0 | 1 | 1 | * | * | 无操作 |
控制字寄存器在8253的初始化编程时,由CPU写入控制字,用来控制通道工作方式,计数方式等.
计数器0,1,2三个计数器/定时器通道,内部逻辑结构相同,每一个都是由一个16位的可预置初值的减法 计数器组成,三个通道操作完全是独立的.每个通道都是按二进制或十进制计数,从预置初值开始减一计数, 当计数器减到0时,从OUT输出端输出一个信号,在计数过程中,计数器受门控信号GATE的控制,计数器的输入 和输出及门控信号之间的关系取决于工作方式.
3.引脚
8253是24引脚双列直插式器件,其引脚如图7-22所示.数据总线D0~D7及控制线RD,WR,A0,A1,CS是与 系统总线相连的.除此之外,每一个通道还有三条引线,它们是CLK,GATE和OUT.CLK是输入计数脉冲线,输入 时钟脉冲周期要大于380ns.GATE是门控信号输入线,GATE为高电平时允许计数器工作.GATE为低电平时,禁 止计数器工作.OUT是输出綫线,当计数器減到0时,OUT线有输出,输出波形决定工作方式.
§7.4.2 8253的初始化编程
使用8253必须首先进行初始化编程,初始化编程的步骤是:先写入每一个计数器的控制字,然后写入每个计数器计数初值.控制字的格式如图7-23所示.控制字占用8位,其各位的意义如图7-23所示。
D7,D6是计数器选择,决定这个控制字是哪个通道的控制字.由于三个通道是独立工作的,所以需三个控制 字寄存器保存三个写入的控制字.但写入时的地址是相同的(A1A0=11),由控制字的D7,D6分别指定不同的通道.
D5,D4是控制数据读写格式.当CPU向计数器写入初值或读出当前值时,可以只读写低8位,或只读写高8位, 或读写16位,这些功能由D3,D4控制.
D3,D2,D1是工作方式选择,由这三位可选择16种不同的工作方式.
D0位用于数制选择,当D0=0时,计数器按二进制计数,计数范围是0000H~FFFFH.当D0=1时,计数器按二-十 进制计数,计数范围为0000~9999.
§7.4.3 8253的工作方式
1、方式0,完成计数时中断
在这种方式下,当把控制字写入控制寄存器后,OUT输出端变低,计数初值装入该计数器后,OUT仍为低, 也不计数.当GATE输入高电平时,计数器开始递减计数.并在计数过程中OUT一直为低电平,当计数器减到0 时,OUT输出变高,其工作波形见图7-24,图中写入的初始值为4.方式0有如下特点:
(1)计数器只计一遍,当计数到0时,计数器不再装入初始值重新计数,输出保持高电平,直到CPU又写入 一个新计数值,OUT变低开始新的计数.
(2)计数过程中,可由GATE信号控制暂停计数,即GATE=0时暂停计数,GATE=1时又接着计数,但GATE不 影响OUT的状态.
(3)计数过程中可重新装入计数初值,若是按8位计数,在写入新的计数初值后,计数器按新的计数初值 重新开始计数.如果是16位计数,在写入第一个字节后,计数器停止计数,写入第二个字节后,计数器按新的 计数值开始计数.
(4)8253内部是在CPU写计数值时WR的上升沿写入时常寄存器,在WR上升沿的下一个CLK脉冲,才将计数值 从时常寄存器装入计数器,计数器才开始计数.所以若设置初值为N,则输出OUT是在N+1个CLK脉冲之后才变高 的.这个特点在方式1,方式2,方式4和方式5也是同样的.
2、方式1,可编程单稳
在这种方式下,CPU写入控制字后,OUT变为高电平,CPU写入计数值后,计数器并不计数,在GATE信号的 上升沿的下一个CLK的下降沿开始计数,OUT变为低电平,直至递减计数器全为0时,OUT变为高电平,输出一个 单脉冲,若GATE信号再由低变高,可以再产生一个单脉冲,相当于一个单稳,图7-25是方式1的工作波形.方式 1的特点是:
(1)输出单脉冲的宽度是计数初值N乘以输入脉冲周期.
(2)当计数到0后,可再次由外部触发启动,可再输出一个同样宽度的单脉冲,而不需要重新输入一个计数 初值.
(3)计数过程中,CPU可改写计数值,但计数过程不受影响,计数将按原来的计数值减到0,若再次启动,则 后写入计数值起作用.
3.方式2,分频脉冲产生器
在这种工作方式下,8253相当于一个分频脉冲产生器,如计数值为N,则每输入N个CLK脉冲,输出一个脉冲,脉冲宽度等于CLK的周期.其计数过程如图7-26所示.方式2的主要特点是:
(1)不要重新设置计数值,通道能连续工作,输出固定频率的脉冲.
(2)计数过程可由GATE信号控制,当GATE为0时,暂停计数,当GATE变为高电平的下一个CLK脉冲又重新计数
(3)在计数过程中,CPU可随时改变计数值,当计数器减到0后,又按新的计数值分频.
4.方式3,分频方波产生器
方式3输出的是周期性方波,若计数值为N,则输出方波的周期是N个CLK脉冲周期.所以称为方波产生器. 在这种情况下,CPU写入控制字后OUT变高,写完计数值后自动开始计数,输出保持为高.当计到一半计数值时 输出变低,直至计数到0,输出又变高,重新开始计数,工作波形如图7-27所示.方式3的主要特点是:
(1)当计数为偶数时,装入计数值后,每一个CLK脉冲使计数器减2,计到0后,一方面使OUT状态改变,另外 计数值又装入计数器,这样反复工作.若计数值为奇数第一个CLK脉冲使计数器减1,以后与偶数时的工作情形 相同.所以N值为奇数时,OUT有(N+1)/2个CLK脉冲周期为高,有N/2个CLK脉冲周期为低.
(2)GATE信号可以控制计数.GATE=0时停止计数,GATE=1时,允许计数.
(3)在计数期间装入新计数值不影响原来的计数过程.
5.方式4,软件触发选通
当写入控制字后,OUT变高,写入计数值后,立即开始计数(相当于软件触发启动),计数器计到0时,OUT变 低,经过一个脉冲周期后,OUT又变高,计数器停止计数,所以是一次性的,当写入新的计数值后才开始新的计数, 工作波形见图7-28.方式4的特点为:
(1)要求GATE一直为高电平才能软件触发.
(2)若在计数过程中改变计数值,则按新计数值重新开始计数.
6.方式5,硬件触发选通
在这种方式下,写入控制字后,OUT变高,写入计数值后,计数器不计数,而由GATE信号上升沿触发计数.直到 0后,输出变低,经过一个CLK周期后,OUT又变高,并停止计数,等下次GATE触发器才能计数,如图7-29所示.
§7.4.4 8253在IBM PC/XT中的应用
通道0用作定时器,为系统提供一个恒定的时间标准.初始编程使通道0按方式3工作,每秒产生198.2次 输出信号,该信号送到8259中断控制器的IRQ0输入端.每55MS产生一次中断请求,8088对其计数,用来计算时间. 通道1用在动态RAM刷新定时,每隔15.12微秒产生一次输出信号,请求动态RAM刷新.OUT1输出产生DMA请求信号 送8237,由8237对动态RAM刷新.通道2编程为方波产生器,输出方波送到扬声器,用程序可改变方波频率和延续 时间,就可改变扬声器的声调和发声时间.
图7-30是8253在PC/XT的接线图,三个计数器的输入脉冲都是PLCK的二分频,而PCLK是8284时钟发生器, 频率为2.38MHZ,所以三个计数器的输入脉冲频率均为1.19MHz.GATE0和GATE1都接在5V上,使通道0和1写入 计数值后开始计数.GATE2接在并行接口8255的PB0上,由并行接口控制其工作.
在PC/XT计算机中,8253分配地址为40~~43H,BIOS对8253进行初始化编程,各通道工作状态为:
通道0:地址为40H,控制字为36H,即工作方式3,二进制计数,计数初值为0.
通道1:地址为41H,控制字为54H,工作方式2,二进制计数,计数初值为12H.
通道2:地址为42H,控制字为B6H,工作方式3,二进制计数,计数初值为533H,输出方波频率为1KHZ.