1、,第16章 计数/定时技术,16.1 概述,实现定时的三种方法: 1. 软件定时 由CPU执行指令序列所花费的时间来构成一定的时间间隔,从而达到定时的目的。例如: MOV CX , HHERE: LOOP HERE 优点:不需要专门的硬件设备。 缺点: 浪费了宝贵的CPU资源。,2.不可编程的硬件定时,时序波形稳态td 触发信号 暂稳态,3. 可编程计数器/定时器,可用软件的方法(通过初始化编程)设定或调整定时范围。 典型产品: Zilog Z80-CTCIntel 8253(8254),16.2 可编程计数器/定时器8253,16.2.1 8253 的主要功能(1)具有三个独立的16位计数通
2、道;(2)每个计数通道可按二进制或二十进制计数;(3)每个计数通道的计数速率可达2MHz;(4)每个计数通道有六种工作方式;(5)全部输入输出都与TTL电平兼容。,16.2.2 8253的结构8253的内部结构框图如图16.1所示。由图可见,它由与CPU的接口、内部控制电路以及三个计数器通道所组成。,控制字 寄存器,D7D0,RD,WR,A0,A1,CS,内部总线,图16.1 8253内部结构框图,1. 数据总线缓冲器 这是8253与CPU的数据总线(DD)连接的8位双向三态缓冲器。CPU用输入输出指令对8253进行读写操作时的所有信息都通过这个缓冲器传送。2. 读/写逻辑这是8253内部操作
3、的控制电路,它从系统控制总线上接收输入信号,然后转换成8253内部操作的各种控制信号。,3. 控制字寄存器 当地址信号A1和A0都为1时,访问控制字寄存器。 控制字寄存器从数据总线上接收CPU送来的控制字,并由控制字的D7、D6两位的编码决定控制字写入哪个通道的控制寄存器中去。 由寄存在每个通道内的控制寄存器的内容决定该通道的工作方式,选择计数器是按二进制还是BCD数计数,并确定每个计数器初值的写入顺序。,4. 计数器0、计数器1、计数器2 这是三个计数器/定时器通道,每一个都由16位的可设置计数初值的减法计数器构成。 三个通道的操作是完全独立的。每个通道都有两个输入引脚CLK和GATE以及一
4、个输出引脚OUT。 从编程的角度看,8253的结构框图如图16.2所示。,数据总线,IO/M,VCC,GND,D7D0,A1,A0,控制寄存器(8位),高8位,低8位,计数器0,计数初值寄存器 (CR),计数执行部件 (CE),输出锁存器(OL),计数器1,计数器2,图16.2 8253计数通道结构,“控制寄存器”及“计数初值寄存器(CR)”可由CPU写入; “输出锁存器(OL)”可由CPU读出。,16.2.3 8253的引脚,8253的引脚如图16.3所示。,8253,1,2,3,4,5,6,7,8,9,10,11,12,Vcc,WR,RD,CS,A1,A0,CLK2,GATE2,OUT2,
5、16.3 8253的引脚图,16.2.4 8253 的工作方式,8253的每个通道均可以通过编程选择6种工作方式之一: 方式0计数到零产生中断请求(Interrupt on Terminal Count) 方式0的操作时序图如图16.4所示。,CLK,GATE(高),0,1,2,3,4,CW,N4,WR,N1个,OUT,图16.4 方式0的时序图,方式0的主要特点是:,计数器只计一遍而不能自动重复工作。 当减1计数到零时,并不自动恢复计数初值重新开始计数,且OUT输出保持为高电平。 只有CPU再次写入一个新的计数值(即使计数值相同也需再次写入),OUT才变为低电平,计数器按新写入的计数值重新开
6、始计数。 或者CPU重新对8253设置方式0控制字,它的OUT输出也可以立即变为低电平,并等再次写入计数初值后重新开始计数。,(2) CPU向CR寄存器写入计数初值后的第一个CLK脉冲(即图中用斜线标出的那个脉冲),将CR的内容送入CE,从此之后计数器才开始减1计数。 这第一个CLK脉冲不包括在减1计数过程中。 如果设置计数初值为N,则输出OUT是在N+1个CLK脉冲之后才变为高电平。 (3) 在计数过程中,可由GATE信号控制暂停计数。 当GATE变低时,计数暂停; 当GATE变高后又接着计数。 其工作波形如图16.5所示。,CLK,GATE,1,2,2,2,3,N3,CW,WR,OUT,图
7、16.5 方式0计数过程中改变GATE信号,0,(4) 在计数过程中也可改变计数值。在写入新的计数值后,计数器将立即按新的计数值重新开始计数,即改变计数值是立即有效的。 当按新的计数值减1计数到0时,输出OUT变为高电平。其工作波形如图16.6所示。,CLK,GATE(高),1,2,1,2,3,CW,N3,WR,OUT,图16.6 方式0计数过程中改变计数值,0,N2,2. 方式1硬件可重复触发的单稳态触发器( Programmable one-shot)方式1的时序图如图16.7所示。,CLK,GATE,图16.7 方式1的时序图,CW,N2,WR,1,1,2,OUT,0,2,0,在方式1,
8、当CPU输出控制字后(WR的上升沿),OUT输出变为高电平(若原为高电平,则保持为高电平);在CPU写入计数初值后,计数器并不开始计数,直至门控信号GATE上升沿(即门控触发信号)出现,并在其下一个CLK脉冲的下降沿,CR的内容送入CE,同时使OUT输出变为低电平,然后开始对随后的CLK脉冲进行减1计数。,在计数过程中,OUT一直维持为低电平,直至减1计数到0时,OUT输出变为高电平。 即由于GATE上升沿的触发,使OUT输出端产生一个宽度为N个CLK周期的负脉冲。此后,若再次由GATE上升沿触发,则输出再次产生一个同样宽度的负脉冲。,方式1的主要特点是:,(1) 若设置计数初值为N,则输出负
9、脉冲的宽度为N个CLK脉冲周期。 (2) 当计数到零时,可再次由GATE上升沿触发,输出同样宽度的负脉冲,而不必重新写入计数初值。,(3) 在计数过程中(输出负脉冲期间),可由GATE上升沿再触发。并使计数器从计数初值开始重新作减1计数,减至0时,OUT输出变为高电平。 其效果是使输出负脉冲的宽度比原来加宽了。(4) 在计数过程中,CPU可改变计数初值,这时计数过程不受影响,计数到零后输出变高。当再次触发时,计数器才按新输入的计数值计数。 即改变计数值是下次有效的。,3. 方式2分频器 (Rate Generator),在方式2,当CPU输出控制字后,OUT输出为高。在写入计数初值后,计数器将
10、自动对输入时钟CLK计数。 在计数过程中OUT输出为高,直至计数器减到1(注意,不是减到0)时,OUT输出变低,经过一个CLK周期,输出恢复为高,且计数器将自动重新开始计数。这种方式可作脉冲速率发生器或用来产生实时时钟中断信号。方式2的时序图如图16.8所示。,CLK,GATE(高),2,3,1,2,3,CW,N3,WR,OUT,图16.8 方式2时序图,1,3,方式2的主要特点是:,(1) 不用重新设置计数值,通道能连续工作,输出固定频率的脉冲。 如果计数初值为N,则每输入N个CLK脉冲,输出一个负脉冲。 负脉冲宽度为1个CLK周期,重复周期为N倍的CLK周期。 (2) 计数过程可由GATE
11、信号控制。 当GATE信号变低时,立即暂停现行计数; 当GATE信号又变高后,从计数初值开始重新计数。 (3) 如果在计数过程中,CPU重新写入计数值,则对于正在进行的计数无影响,而是从下一个计数操作周期开始按新的计数值改变输出脉冲的频率。,4. 方式3方波发生器 (Square Wave Rate Generator),方式3和方式2的工作情况类似,两者的主要区别是输出波形的形式。 对于方式3,OUT输出是对称方波或基本对称的矩形波。即在一个计数周期内,若计数初值N为偶数,则OUT输出将有N/2个CLK周期为高电平,N/2个CLK周期为低电平,输出为对称方波,其周期为N个CLK周期; 若N为
12、奇数,则OUT输出将有(N+1)/2个CLK周期为高电平,(N-1)/2个CLK周期为低电平,输出为基本对称的矩形波,其周期也为N个CLK周期。,在方式3,当CPU设置控制字后,输出将为高,在写完计数初值N后计数器就自动开始计数,输出保持为高。 当计数到N/2(或(N+1)/2)时,输出变低,直至计数到0,使输出变高。同时又重新装入计数值开始新的计数。 计数过程周而复始重复进行。 这种方式常用来产生一定频率的方波。 方式3的时序图如图16.9所示。,CW,N4 (N=5),GATE(高),2,4,1,2,4,OUT(N4时),1,3,3,4,1,2,3,5,3,5,4,OUT(N5时),图16
13、.9 方式3时序图,WR,CLK,方式3的主要特点是:,(1) 若计数初值N为偶数,则输出波形是周期为N个CLK周期的对称方波;若计数初值N为奇数,则输出波形是周期为N个CLK周期的基本对称矩形波,其高电平持续时间比低电平持续时间多一个CLK周期。 (2) 如果在计数过程中,GATE信号变低,则暂停现行计数过程,直到GATE再次有效,将从计数初值开始重新计数。 (3) 如果要求改变输出方波的频率,则CPU可在任何时候重新写入新的计数初值,并从下一个计数操作周期开始改变输出方波的频率。,5. 方式4软件触发选通 (Software Triggered Strobe),在方式4,当写入控制字后,O
14、UT输出为高。当写入计数初值后计数器即开始计数(相当于软件触发启动),当计数到0后,输出变低,经过1个CLK周期,输出又变高。方式4不能自动重复计数,即这种方式计数是一次性的。每次启动计数都要靠重新写入计数值,所以称为“软件触发选通”。当8253工作于方式4时,可用作软件触发的选通信号发生器。方式4的时序图如图16.10所示。,GATE(高),CLK,WR,0,1,2,3,OUT,图16.10 方式4时序图,方式4的主要特点是:,(1)若设置计数初值为N,则在写入计数初值后的N+1个CLK脉冲,才输出一个负脉冲。负脉冲的宽度为1个CLK周期。 (2) GATE为高时,允许计数;GATE为低时,
15、禁止计数。所以,要实现软件启动,GATE应为高。 (3) 若在计数过程中改变计数值,则按新的计数值重新开始计数,即改变计数值是立即有效的。,方式4可应用于这样一种情况: CPU经输出端口发送并行数据给接收系统,经过一段时间延迟后,再发送一个选通信号,利用该选通信号将并行数据打入到接收系统的缓冲寄存器中。 通过改变计数初值N,可以方便地调整发出选通信号的延迟时间。,6. 方式5硬件触发选通 (Hardware Triggered Strobe),在方式5,设置了控制字后,输出为高。在设置了计数初值后,计数器并不立即开始计数,而是由门控信号GATE的上升沿触发启动。 当计数到0时,输出变低,经过一
16、个CLK周期,输出恢复为高,并停止计数。要等到下次门控GATE信号的触发才能再计数,即方式5的计数是一次性的。 方式5的时序图如图16.11所示。,CLK,GATE,0,1,2,3,CW,N3,WR,OUT,图16.11 方式5时序图,方式5的主要特点是:,(1) 若设置计数初值为N,则在门控GATE上升沿触发后,经过N+1个CLK脉冲,才输出一个负脉冲。 (2) 若在计数过程中再次出现门控GATE触发信号,则将使计数器从计数初值开始重新计数,但OUT输出的高电平不受影响。,(3) 若在计数过程中改变计数值,只要在计数到0之前不出现新的门控触发信号,则原计数过程不受影响;等计数到0并出现新的门
17、控发信号后,再按新的计数值计数。若在写入了新的计数值后,在未计数到0之前有门控触发信号出现,则立即按新的计数值重新开始计数。,7. 8253工作方式小结,(1) 方式2(分频器)、方式4(软件触发选通)和方式5(硬件触发选通),它们的输出波形相同,都是宽度为1个CLK周期的负脉冲。区别是,方式2是自动重复工作的,而方式4需由软件(设置计数值)触发启动,方式5需由门控GATE信号触发启动。,(2) 方式5(硬件触发选通)与方式1(硬件触发单稳),触发信号相同,但输出波形不同. 方式1输出为宽度是N个CLK周期的负脉冲(计数过程中输出为低); 方式5输出为宽度是1个CLK周期的负脉冲(计数过程中输
18、出为高)。,(3) 在6种工作方式中,只有方式0,在写入控制字后输出为低;其余5种方式,都是在写入控制字后输出为高。,(4) 6种工作方式中的任一种方式,只有在写入计数初值后才能开始计数。 方式0、2、3、4都是写入计数初值后,计数过程就开始了。 方式1、5在写入计数初值后,需由外部GATE信号的触发启动,才能开始计数过程。,(5) 6种工作方式中,只有方式2(分频器)和方式3(方波发生器)为自动重复工作方式,其他4种方式都是一次性计数,要继续工作需要重新启动。,16.2.5 8253的初始化编程,1. 内部寄存器的寻址 8253有三个独立的计数器通道,每个通道可以被CPU访问的部件有:8位的
19、控制寄存器,它只能写入,不能读出; 16位的计数初值寄存器CR,它只能写入,不能读出;16位的输出锁存器OL,它只能读出,不能写入。8253芯片是否被选中,决定于片选信号CS,通常CS接自地址译码器输出。,一片8253占用四个连续的端口地址,分别对应于三个计数初值寄存器端口和一个控制寄存器端口。 由输入信号A1和A0的四种编码来选择四个端口之一。 每个通道都各自有独立的控制寄存器,但三个通道的控制寄存器都共用一个端口地址,即A1和A0都为1时的端口地址。它是三个通道共同使用的控制寄存器端口地址。,为了能够将每个通道的控制字写入它们各自的控制寄存器中,使用控制字的D7和D6的编码,来标志此控制字
20、是写入哪个通道的控制寄存器中。8253内部寄存器的寻址如表16-1所示 。(P558),2.初始化编程顺序注意:必须按控制字D5,D4位规定的格式进行写入。,3. 8253的控制字,00 通道0,01 通道1,02 通道2,11 无效,通道选择:,00 计数器锁存命令,01 只读/写计数器低8位,10 只读/写计数器高8位,11 先读/写计数器低8位,后读/写计数器高8位,读/写格式:,计数制:,0 二进制计数,1 十进制计数,工作方式:,000 方式0,001 方式1,x10 方式2,x11 方式3,100 方式4,101 方式5,图16.12 8253 控制字格式,需要说明的是:当采用二进
21、制计数时,如果是8位二进制计数(计数值256),则在8253初始化编程的传送指令“MOV AL, n”中,n可以写成任何进制数(二进制、十进制或十六进制)的形式;如果是16位二进制计数(计数值65536),一种方法是先把计算得到的十进制计数初值n转换成4位十六进制数(即16位二进制),然后分两次写入8253的指定端口。,另一种方法是先把该十进制计数初值n直接传送给AX,然后分两次写入8253指定端口,即: MOV AX , n OUT PORT, AL ;先写低8位(PORT为端口号)MOV AL, AH OUT PORT, AL ; 后写高8位,当采用十进制(BCD码)计数时,必须在8253
22、初始化编程中把计算得到的十进制计数初值n加上后缀H, 以便在相应的传送指令执行后能够在AL(或AX)中得到十进制数n的BCD码表示形式。例如n=50,则应按如下方式写入: MOV AL, 50H OUT PORT, AL,如果n=1250, 则需分两次写入,即: MOV AL, 50H OUT PORT, AL ; 先写低8位 MOV AL, 12H OUT PORT, AL ; 后写高8位也可按如下方法两次写入: MOV AX, 1250H OUT PORT, AL ; 先写低8位MOV AL, AH OUT PORT, AL ; 后写高8位,4.初始化编程举例,例16.1 若用8253的计
23、数通道1,工作在方式0,按8位二进制计数,计数初值为128,则初始化编程如下: (1) 确定通道控制字-50H(2) 8位计数初值-80H设8253的端口地址为48H4BH,则初始化程序段为:MOV AL, 50HOUT 4BH, AL ; 设置通道1控制字MOV AL, 80H OUT 49H, AL ; 写通道1计数初值,只写低8位,例16.2 若用通道0,工作在方式1,按十进制(BCD码)计数,计数初值为2010,则初始化编程如下: (1) 确定通道控制字-33H(2) 计数初值低8位为10,高8位为20。若8253的端口地址同例1,则初始化程序段为:MOV AL, 33H OUT 4B
24、H,AL ; 设置通道0控制字MOV AL,10H OUT 48H,AL ; 写通道0计数初值低8位MOV AL,20HOUT 48H,AL ; 写通道0计数初值高8位,16.2.6 8253的读出操作,1.读之前先暂停计数2.读之前先发锁存命令,16.3 8253的应用,例16.4 8253用作脉冲信号发生器。可用8253产生如图16.14(a)所示的周期性脉冲信号,其重复周期为5s,脉冲宽度为1s。设CLK信号频率为2MHz。,1s,5s,(a) 信号波形图,8253,CLK1,GATE1,OUT1,方式1,方式2,5V,时钟,F=2MHz,(b) 连接图,图16.14 8253用作脉冲信
25、号发生器,MOV AL,00010010B ; 设置计数器0为方式1(单稳),只写低8位,二进制计数 OUT 86H,AL ; MOV AL,02H ; 设置计数器0的计数初值为2 OUT 80H AL ; MOV AL,01010100B ; 设置计数器1为方式2(分频器),只写低8位,二进制计数 OUT 86H,AL ; MOV AL,0AH ; 设置计数器1的计数初值为10 OUT 82H,AL ;,例16.3 用8253实现生产流水线上的工件计数,每通过100个工件,扬声器便发出频率为1000Hz的音响信号,持续时间为5秒。,INTR,(中断请求),5V,时钟,2MHz,8255A P
26、A0,GATE1,CLK1,GATE0,OUT0,8253,CLK0,OUT1,驱动电路,扬声器,5V,光敏电阻,工件,光源,图16.13 8253用于工件计数,设8253的端口地址为40H43H, 8255A的端口地60H63H, 则实现本例功能的程序段如下: 主程序: MOV AL, 00010001B ; 8253计数通道0初始化: 方式0,只 写低8位,BCD计数.OUT 43H, AL MOV AL, 99H ; 写计数通道0的计数初值OUT 40H, AL MOV AL, 10000000B ; 8255A初始化: A口方式0输出OUT 63H, AL STI ; CPU开中断 H
27、ERE:JMP HERE ; 等待中断,中断服务程序: MOV AL, 01H ;8255A的PA0输出高电平,启动8253计数通道1工作 OUT 60H, AL MOV AL, 01110111B ;8253计数通道1初始化: 先写低8位,后写高8位 OUT 43H, AL ; 方式3,BCD计数 MOV AL, 00H OUT 41H, AL ;写计数初值低8位 MOV AL, 20H OUT 41H, AL ; 写计数初值高8位 Call DELAY5S ; 延迟5秒 MOV AL, 00H ; 8255A的PA0输出低电平,停止8253计数通道1工作 OUT 60H, AL MOV A
28、L, 99H ;写8253计数通道0的计数初值(为下次工作做准备) OUT 40H, AL IRET,例16.5 8253为模/数转换(A/D)子系统提供可编程采样频率发生器。,8255A,Data,STBA,中断请求,PA7PA0,PC4,PC3,8253,时钟,CONVERT,BUSY,READY,INPUT,A/D转换器,S/H,采样/保持,模拟输入,5V,图16.15 8253用于A/D子系统,如图16.15所示,在模/数转换(A/D)子系统中,利用8253的3个计数通道,不仅可设置采样频率,而且还能决定采样持续时间。设计数器0工作于方式2(分频器);计数器1工作于方式1(单稳态);计
29、数器2工作于方式3(方波发生器); L、M、N分别为计数器0、计数器1、计数器2的计数初值; F为时钟脉冲频率。,由图16.15可见,由于将计数器2的输出OUT2作为计数器1的时钟脉冲输入,所以计数器1的时钟脉冲CLK1的频率为F/N; 由于计数器1工作于方式1(单稳),因此输出信号OUT1的负脉冲宽度(即单稳的输出宽度)为MN/F; 计数器0工作于方式2(分频器),它的输出信号OUT0的脉冲频率为F/L;另外,计数器0的门控输入GATE0又受到OUT1的控制。,将OUT0信号和A/D转换器的CONVERT端相连. 当三个计数器已设置好计数初值后,将手动开关(或继电器)合上,A/D转换器将以F/L的采样频率进行工作. 采样的持续时间为MN/F。,需注意的是,合上手动开关(或继电器吸合)所产生的正跳边沿对于工作在方式1(单稳态)的计数器1来说,仅是一个触发信号. 单稳输出负脉冲的宽度决定于该计数器的计数初值M,而不是开关合上的持续时间。,第16章 作业,P569 7题;8题,
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1