可编程定时器计数器8253及其应用.docx
《可编程定时器计数器8253及其应用.docx》由会员分享,可在线阅读,更多相关《可编程定时器计数器8253及其应用.docx(19页珍藏版)》请在冰豆网上搜索。
![可编程定时器计数器8253及其应用.docx](https://file1.bdocx.com/fileroot1/2023-2/6/15f43c9a-1dbb-45e4-8c8d-b8fdfed26f42/15f43c9a-1dbb-45e4-8c8d-b8fdfed26f421.gif)
可编程定时器计数器8253及其应用
第八章可编程定时器/计数器8253及其应用
【回顾】可编程芯片的概念,端口的概念。
【本讲重点】定时与计数的基本概念及其意义,定时/计数器芯片Intel8253的性能概述,内、外部结构及其与CPU的连接。
8.1定时与计数
1.定时与计数
在微机系统或智能化仪器仪表的工作过程中,经常需要使系统处于定时工作状态,或者对外部过程进行计数。
定时或计数的工作实质均体现为对脉冲信号的计数,如果计数的对象是标准的内部时钟信号,由于其周期恒定,故计数值就恒定地对应于一定的时间,这一过程即为定时,如果计数的对象是与外部过程相对应的脉冲信号(周期可以不相等),则此时即为计数。
2.定时与计数的实现方法
(1)硬件法
专门设计一套电路用以实现定时与计数,特点是需要花费一定硬设备,而且当电路制成之后,定时值及计数范围不能改变。
(2)软件法
利用一段延时子程序来实现定时操作,特点,无需太多的硬设备,控制比较方便,但在定时期间,CPU不能从事其它工作,降低了机器的利用率。
(3)软、硬件结合法
即设计一种专门的具有可编程特性的芯片,来控制定时和计数的操作,而这些芯片,具有中断控制能力,定时、计数到时能产生中断请求信号,因而定时期间不影响CPU的正常工作。
8.2定时/计数器芯片Intel8253
Intel8253是8086微机系统常用的定时/计数器芯片,它具有定时与计数两大功能。
一、8253的一般性能概述
1.每个8253芯片有3个独立的16位计数器通道;
2.每个计数器通道都可以按照二进制或二—十进制(BCD码)计数;
3.每个计数器的计数速率可以高达2MHz;
4.每个通道有6种工作方式,可以由程序设定和改变;
5.所有的输入、输出电平都与TTL兼容。
二、8253内部结构
8253的内部结构如图8-1所示,它主要包括以下几个主要部分:
图8-18253的内部结构
1.数据总线缓冲器
实现8253与CPU数据总线连接的8位双向三态缓冲器,用以传送CPU向8253的控制信息、数据信息以及CPU从8253读取的状态信息,包括某时刻的实时计数值。
2.读/写控制逻辑
控制8253的片选及对内部相关寄存器的读/写操作,它接收CPU发来的地址信号以实现片选、内部通道选择以及对读/写操作进行控制。
3.控制字寄存器
在8253的初始化编程时,由CPU写入控制字,以决定通道的工作方式,此寄存器只能写入,不能读出。
4.计数通道0#、1#、2#:
这是三个独立的,结构相同的计数器/定时器通道,每一个通道包含一个16位的计数寄存器,用以存放计数初始值,一个16位的减法计数器和一个16位的锁存器,锁存器在计数器工作的过程中,跟随计数值的变化,在接收到CPU发来的读计数值命令时,用以锁存计数值,供CPU读取,读取完毕之后,输出锁存器又跟随减1计数器变化。
三、8253的外部引脚
8253芯片是具有24个引脚的双列直插式集成电路芯片,其引脚分布如图8-2所示。
8253芯片的24个引脚分为两组,一组面向CPU,另一组面向外部设备,各个引脚及其所传送信号的情况,介绍如下:
1.D7~D0:
双向、三态数据线引脚,与系统的数据线连接,传送控制、数据及状态信息。
2.
:
来自于CPU的读控制信号输入引脚,低电平有效。
3.
:
来自于CPU的写控制信号输入引脚,低电平有效。
4.
:
芯片选择信号输入引脚,低电平有效。
图8-28253的引脚
5.A1、A0:
地址信号输入引脚,用以选择8253芯片的通道及控制字寄存器。
、
的状态与8253端口地址的对应关系如下表所示。
A1
A0
0
0
0#通道
0
1
1#通道
1
0
2#通道
1
1
控制端口
6.VCC及GND:
+5V电源及接地引脚
7.CLKi:
i=0,1,2,第i个通道的计数脉冲输入引脚,8253规定,加在CLK引脚的输入时钟信号的频率不得高于2.6MHZ,即时钟周期不能小于380ns。
8.GATEi:
i=0,1,2,第i个通道的门控信号输入引脚,门控信号的作用与通道的工作方式有关。
9.OUTi:
i=0,1,2,第i个通道的定时/计数到信号输出引脚,输出信号的形式由通道的工作方式确定,此输出信号可用于触发其它电路工作,或作为向CPU发出的中断请求信号。
四、8253的控制字
8253有一个8位的控制字寄存器,其格式如下:
图8-38253的控制字
其中:
D0:
数制选择控制。
为1时,表明采用BCD码进行定时/计数;否则,采用二进制进行定时/计数。
D3~D1:
工作方式选择控制。
000,0;001,1;X10,2;X11,3;100,4;101,5;
D5、D4:
读写格式。
00,计数锁存命令;01,读/写高8位命令;10,读/写低8位命令;11,先读/写低8位,再读写高8位命令。
D7、D6:
通道选择控制。
000通道;01,1通道;10,2通道;11,非法
1.8253的初始化编程
要使用8253,必须首先进行初始化编程,初始化编程包括设置通道控制字和送通道计数初值两个方面,控制字写入8253的控制字寄存器,而初始值则写入相应通道的计数寄存器中。
初始化编程包括如下步骤:
(1)写入通道控制字,规定通道的工作方式
(2)写入计数值,若规定只写低8位,则高8位自动置0,若规定只写高8位,
则低8位自动置0。
若为16位计数值则分两次写入,先写低8位,后写高8位。
D0:
用于确定计数数制,0,二进制;1,BCD码
【例1】设8253的端口地址为:
04H~0AH,要使计数器1工作在方式0,仅用8位二进制计数,计数值为128,进行初始化编程。
控制字为:
01010000B=50H
初始化程序:
MOVAL,50H
OUT0AH,AL
MOVAL,80H
OUT06H,AL
【例2】设8253的端口地址为:
F8H~FEH,若用通道0工作在方式1,按二——十进制计数,计数值为5080H,进行初始化编程。
控制字为:
00110011B=33H
初始化程序:
MOVAL,33H
OUT0FEH,AL
MOVAL,80H
OUT0F8H,AL
MOVAL,50H
OUT0F8H,AL
【例3】设8253的端口地址为:
04H~0AH,若用通道2工作在方式2,按二进制计数,计数值为02F0H,进行初始化编程。
控制字为:
10110100B=0B4H
初始化程序:
MOVAL,0B4H
OUT0AH,AL
MOVAL,0F0H
OUT08H,AL
MOVAL,02H
OUT08H,AL
2.读取8253通道中的计数值
8253可用控制命令来读取相应通道的计数值,由于计数值是16位的,而读取的瞬时值,要分两次读取,所以在读取计数值之前,要用锁存命令,将相应通道的计数值锁存在锁存器中,然后分两次读入,先读低字节,后读高字节。
当控制字中,D5、D4=00时,控制字的作用是将相应通道的计数值锁存的命令,锁存计数值在读取完成之后,自动解锁。
如要读通道1的16位计数器,编程如下:
地址F8H~FEH。
MOVAL,40H;
OUT0FEH,AL;锁存计数值
INAL,0FAH
MOVCL,AL;低八位
INAL,0FAH;
MOVCH,AL;高八位
五、8253在系统中的典型连接
8253在系统中的连接如图8-4所示。
图8-4Intel8253在系统中的连接
六、8253的工作方式
8253共有6种工作方式,各方式下的工作状态是不同的,输出的波形也不同,其中比较灵活的是门控信号的作用。
由此组成了8253丰富的工作方式、波形,下面我们逐个介绍:
1.几条基本原则
(1)控制字写入计数器时,所有的控制逻辑电路立即复位,输出端OUT进入初始状态。
初始状态对不同的模式来说不一定相同。
(2)计数初始值写入之后,要经过一个时钟周期上升沿和一个下降沿,计数执行部件才可以开始进行计数操作,因为第一个下降沿将计数寄存器的内容送减1计数器。
(3)通常,在每个时钟脉冲CLK的上升沿,采样门控信号GATE。
不同的工作方式下,门控信号的触发方式是有具体规定的,即或者是电平触发,或者是边沿触发,在有的模式中,两种触发方式都是允许的。
其中0、2、3、4是电平触发方式,1、2、3、5是上升沿触发。
(4)在时钟脉冲的下降沿,计数器作减1计数,0是计数器所能容纳的最大初始值。
二进制相当于216,用BCD码计数时,相当于104
2.方式0—计数结束产生中断
方式0的波形如图8-5所示,当控制字写入控制字寄存器后,输出OUT就变低,当计数值写入计数器后开始计数,在整个计数过程中,OUT保持为低,当计数到0后,OUT变高;GATE的高低电平控制计数过程是否进行。
图8-5方式0波形
从波形图中不难看出,工作方式0有如下特点:
计数器只计一遍,当计数到0时,不重新开始计数保持为高,直到输入一新的计数值,OUT才变低,开始新的计数;
计数值是在写计数值命令后经过一个输入脉冲,才装入计数器的,下一个脉冲开始计数,因此,如果设置计数器初值为N,则输出OUT在N+1个脉冲后才能变高;
在计数过程中,可由GATE信号控制暂停。
当GATE=0时,暂停计数;当GATE=1时,继续计数;
在计数过程中可以改变计数值,且这种改变是立即有效的,分成两种情况:
若是8位计数,则写入新值后的下一个脉冲按新值计数;若是16位计数,则在写入第一个字节后,停止计数,写入第二个字节后的下一个脉冲按新值计数。
3.方式1—可编程的硬件触发单拍脉冲
方式1的波形如图8-6所示,CPU向8253写入控制字后OUT变高,并保持,写入计数值后并不立即计数,只有当外界GATE信号启动后(一个正脉冲)的下一个脉冲才开始计数,OUT变低,计数到0后,OUT才变高,此时再来一个GATE正脉冲,计数器又开始重新计数,输出OUT再次变低,…,因此输出为一单拍负脉冲。
图8-6方式1波形
从波形图不难看出:
方式1有下列特点:
①输出OUT的宽度为计数初值的单脉冲;
②输出受门控信号GATE的控制,分三种情况:
✧计数到0后,再来GATE脉冲,则重新开始计数,OUT变低;
✧在计数过程中来GATE脉冲,则从下一CLK脉冲开始重新计数,OUT保持为低;
✧改变计数值后,只有当GATE脉冲启动后,才按新值计数,否则原计数过程不受影响,仍继续进行,即新值的改变是从下一个GATE开始的。
③计数值是多次有效的,每来一个GATE脉冲,就自动装入计数值开始从头计数,因此在初始化时,计数值写入一次即可。
4、方式2—速率发生器
方式2的波形如图8-7所示,在这种方式下,CPU输出控制字后,输出OUT就变高,写入计数值后的下一个CLK脉冲开始计数,计数到1后,输出OUT变低,经过一个CLK以后,OUT恢复为高,计数器重新开始计数,…,因此在这种方式下,只需写入一次计数值,就能连续工作,输出连续相同间隔的负脉冲(前提:
GATE保持为高),即周期性地输出,方式2下,8253有下列使用特点:
①通道可以连续工作;
②GATE可以控制计数过程,当GATE为低时暂停计数,恢复为高后重新从初值;(注意:
该方式与方式0不同,方式0是继续计数)
③重新设置新的计数值即在计数过程中改变计数值,则新的计数值是下次有效的,同方式1。
图8-7方式2波形
5.方式3—方波速率发生器
方式3的波形如图8-8所示,这种方式下的输出与方式2都是周期性的,不同的是周期不同,CPU写入控制字后,输出OUT变高,写入计数值后开始计数,不同的是减2计数,当计数到一半计数值时,输出变低,重新装入计数值进行减2计数,当计数到0时,输出变高,装入计数值进行减2计数,循环不止。
在方式3下,8253有下列使用特点:
计数值为偶数
计数值为奇数
图8-8方式3时计数器的工作波形
①通道可以连续工作;
②关于计数值的奇偶,若为偶数,则输出标准方波,高低电平各为N/2个;若为奇数,则在装入计数值后的下一个CLK使其装入,然后减1计数,(N+1)/2,OUT改变状态,再减至0,OUT又改变状态,重新装入计数值循环此过程,因此,在这种情况下,输出有(N+1)/2个CLK个高电平,(N-1)/2个CLK个低电平;
③GATE信号能使计数过程重新开始,当GATE=0时,停止计数,当GATE变高后,计数器重新装入初值开始计数,尤其是当GATE=0时,若OUT此时为低,则立即变高,其它动作同上;
在计数期间改变计数值不影响现行的计数过程,一般情况下,新的计数值是在现行半周结束后才装入计数器。
但若中间遇到有GATE脉冲,则在此脉冲后即装入新值开始计数。
6.方式4—软件触发的选通信号发生器
方式4的波形如图8-9所示,在这种方式下,也是当CPU写入控制字后,OUT立即变高,写入计数值开始计数,当计数到0后,OUT变低,经过一个CLK脉冲后,OUT变高,这种计数是一次性的(与方式0有相似之处),只有当写入新的计数值后才开始下一次计数。
图8-9方式4波形
方式4下,8253有下列使用特点:
①当计数值为N时,则间隔N+1个CLK脉冲输出一个负脉冲(计数一次有效);
②GATE=0时,禁止计数,GATE=1时,恢复继续计数;
③在计数过程中重新装入新的计数值,则该值是立即有效的(若为16位计数值,则装入第一个字节时停止计数,装入第二个字节后开始按新值计数)。
7.方式5—硬件触发的选通信号发生器
方式5的波形如图8-10所示,在这种方式下,当控制字写入后,OUT立刻变高,写入计数值后并不立即开始计数,而是由GATE的上升沿触发启动计数的,当计数到0时,输出变低,经过一个CLK之后,输出恢复为高,计数停止,若再有GATE脉冲来,则重新装入计数值开始计数,上述过程重复。
方式5下,8253有下列使用特点:
①在这种方式下,若设置的计数值是N,则在GATE脉冲后,经过(N+1)个CLK才一个负脉冲;
②若在计数过程中又来一个GATE脉冲,则重新装入初值开始计数,输出不变,即计数值多次有效;
③若在计数过程中修改计数值,则该计数值在下一个GATE脉冲后装入开始按此值计数。
图8-10方式5波形
尽管8253有6种工作模式,但是从输出端来看,仍不外乎为计数和定时两种工作方式。
作为计数器时,8253在GATE的控制下,进行减1计数,减到终值时,输出一个信号。
作为定时器工作时,8253在门控信号GATE控制下,进行减1计数。
减到终值时,又自动装入初始值,重新作减1计数,于是输出端会不断地产生时钟周期整数倍的定时时间间隔。
8.8253的工作方式小结
下面,我们对8253的6种工作模式的特点,作一番比较和总结。
(1)方式2、4、5的输出波形是相同的,都是宽度为一个CLK周期的负脉冲,但方式2连续工作,方式4由软件触发启动,方式5由硬件触发启动。
(2)方式5与方式1工作过程相同,但输出波形不同,方式1输出的是宽度为N个CLK脉冲的低电平有效的脉冲(计数过程中输出为低),而方式5输出的为宽度为一个CLK脉冲的负脉冲(计数过程中输出为高)。
(3)输出端OUT的初始状态,方式0在写入方式字后输出为低,其余方式,写入控制字后,输出均变未能高。
(4)任一种方式,均是在写入计数初值之后,才能开始计数,方式0、2、3、4都是在写入计数初值之后,开始计数的,而方式1和方式5需要外部触发启动,才开始计数。
(5)6种工作方式中,只有方式2和方式3是连续计数,其它方式都是一次计数,要继续工作需要重新启动,方式0、4由软件启动,方式1、5由硬件启动。
(6)门控信号的作用;通过门控信号GATE,可以干预8253某一通道的计数过程,在不同的工作方式下,门控信号起作用的方式也不一样,其中0、2、3、4是电平起作用,1、2、3、5是上升沿起作用,方式2、3对电平上升沿都可以起作用。
(7)在计数过程中改变计数值,它们的作用有所不同。
(8)计数到0后计数器的状态,方式0、1、4、5继续倒计数,变为FF、FE。
。
。
。
。
。
,而方式2、3、,则自动装入计数初值继续计数。
七、8253的编程应用
【例4】在IBMPC/XT中,8253作为定时计数器电路,它的三个通道的作用分别为:
计数器0编程为方式3,GATE0固定为高电平,OUT0作为中断请求信号接至8259A中断控制器的第0级IRQ0。
这个定时中断(约55ms)用于报时时钟的时间基准。
计数器1编程为方式2,GATE1固定为高电平,OUT1的输出经过一个D触发器后作为8237A-5DMA控制器通道0的DMA请求DREQ0,用于定时(约15us)启动刷新动态RAM,这样在2ms内可以有132次刷新,大于128次(128次是系统的最低要求)。
计数器2编程为方式3,1KHZ的方波输出,通过滤波,去除高频分量后送扬声器,GATE2是8255的PB0,OUT输出经一与门控制,控制信号为8255的PB1,这样利用PB0、PB1同时为高的时间来控制发长音还是发短音。
时钟频率F为1.19MHZ,T=1/F
8253-5的地址为040H~043H,ROM-BIOS对8253-5的编程如下:
计数器0用于定时中断。
MOVAL,00110110B;00110110――二进制
OUT43H,AL
MOVAL,0;计数初值为0000,即为
OUT40H,AL
OUT40H,AL;定时为:
,即频率为
――每秒产生
次时钟中断(CLK周期为:
)
计数器1用于定时DMA请求。
MOVAL,01010100B;01010100――二进制
OUT43H,AL
MOVAL,12H;计数初值为18D,定时:
OUT41H,AL
计数器2用于产生1KHZ的方波送至扬声器发声,声响子程序为BEEP,入口地址为FFA08H。
BEEPPROCNEAR
MOVAL,10110110B;10110110——二进制
OUT43H,AL
MOVAX,0533H;计数初值为1331
OUT42H,AL
MOVAL,AH
OUT42H,AL
INAL,61H;取8255B端口
MOVAH,AL;存在AH
ORAL,03H;使
OUT61H,AL;输出至82255的B端口,使扬声器发声
SUBCX,CX;循环计数
G7:
LOOPG7
MOVBH,0
DECBX;BL的值为控制长短声,BL=6(长),BL=1(短)
JNZG7
MOVAL,AH;恢复8255B端口值,停止发声
OUT61H,AL
RET
BEEPENDP
【例5】CPU为8086,用8253的CH0(通道0),每隔2ms输出一个负脉冲,设CLK为2MHZ,完成软件设计。
分析:
时间常数的计算:
已知时钟频率F及定时时间t,求计数初值N:
设用方式2,时间常数:
控制字:
00110100——二进制
端口地址:
CH0――00H;控制端口——06H
初始化编程:
MOVAL,34H;00110100B
OUT06H,AL
MOVAX,4000
OUT00H,AL;先送低八位
MOVAL,AH
MOVAL,02H
OUT00H,AL;再送高八位
思考:
若定时20ms(即输出50HZ的方波,设为工作方式2),CLK改为4MHZ,CPU为8086,软硬件设计又该如何?
分析:
(超过65536,必须考虑用两个通道级连)即将第一级的OUT输出作为第二级的CLK输入,取第二级的OUT输出为最后结果,超过二级,依次类推。
此时只需将计算出的N分别为N1、N2、…作为各级的计数初值即可。
如本例可分解成
。
程序从略。
【习题与思考】
1.8253芯片共有几种工作方式?
每种方式各有什么特点?
2.某系统中8253芯片的通道0~2和控制端口地址分别为FFF0H~FFF3H。
定义通道0工作在方式2,CLK0=2MHz,要求输出OUT0为1kHz的速率波;定义通道l工作在方式CLKl输入外部计数事件,每计满100个向CPU发出中断请求。
试写出8253通道0和通道1的初始化程序。
3.试编写一程序,使IBMPC机系统板上的发声电路发出200Hz至900Hz频率连续变化
的报警声。
4.已知:
PC/XT微机系统中用作定时及计数的8253芯片的通道为40H,其主频率为1.19MHz,请参阅P239~240,对三个通道进行初始化设置。
(CNT2的输出方波频率设为2kHz).
5.设8253的通道2工作在计数方式,外部事件从CLK2引入,通道2每计500个脉冲向CPU发出中断请求,CPU响应这一中断后继续写入计数值,重新开始计数,保持每1秒钟向CPU发出中断请求。
假设条件如下:
①8253的通道2工作在方式4;
②外部计数事件频率为1kHz;
③中断类型号为54H;
④8253各端口地址如上题;
⑤用8212芯片产生中断类型号;(注:
8212为带8位输入锁存器和8位输出缓冲器的总线接口电路)。
试编写程序完成以上任务,并画出硬件连接图。
6.试说明定时和计数在实际系统中的应用?
这两者之间有和联系和差别?
7.定时和计数有哪几种实现方法?
各有什么特点?
8.试说明定时/计数器芯片Intel8253的内部结构。
9.定时/计数器芯片Intel8253占用几个端口地址?
各个端口分别对应什么?