590 likes | 883 Views
第七章 计数/定时技术. 第一节 概 述. 1、定时与计数 控制系统与计算机中,常常需要有定时信号,以实现定时或延时控制。如定时中断,动态存储器的定时刷新等。此外,还需要有计数功能,以实现对外部事件的计数,当外部事件发生的次数达到规定值后,向计算机发出中断请求,进而实现相应的控制或处理。 定时的本质就是计数,当计数信号是周期信号时,计数就可以用于定时。例如以秒为单位计数,则计数60次就是1分,计满60分就是1小时,计满24小时就是1天。. 2、实现定时和计数的三种方法
E N D
第一节 概 述 • 1、定时与计数 • 控制系统与计算机中,常常需要有定时信号,以实现定时或延时控制。如定时中断,动态存储器的定时刷新等。此外,还需要有计数功能,以实现对外部事件的计数,当外部事件发生的次数达到规定值后,向计算机发出中断请求,进而实现相应的控制或处理。 • 定时的本质就是计数,当计数信号是周期信号时,计数就可以用于定时。例如以秒为单位计数,则计数60次就是1分,计满60分就是1小时,计满24小时就是1天。
2、实现定时和计数的三种方法 • 软件方法:采用软件定时,让计算机执行一个专门的指令序列,由执行指令序列中每条指令所花费的时间构成一个固定的时间间隔,从而达到定时或延时的目的。 • 不可编程的硬件定时:采用电子器件构成定时或延时电路,通过调整电路中定时元件的数值,可实现调整定时或延时的数值和范围。 • 可编程的硬件定时:在微机系统中采用软硬件结合的方法,即采用可编程定时的电路器件实现定时。如:Intel 8253/8254,Zilog CTC,MC6840等。8253-5(5MHz)和8254-2(10MHz)的引脚和功能都是兼容的。
第二节 可编程计数器/定时器8253-5 一、8253-5的主要功能 Intel 8253-5是具有3个16位计数器通道的可编程 计数器/定时器芯片,主要功能如下: (1) 具有3个独立的16位计数通道; (2) 每个计数通道都可按2进制或2—10进制计数; (3) 8253-5每个计数通道的计数速率最高可达5MHz, 8253(2MHz), 8254-2(10MHz); (4) 每个计数器通道由6种工作方式,可由程序设置改变; (5) 全部输入输出都与TTL电平兼容。
二、8253的结构框图 如图7.1所 示 8253由 与CPU接口、 内部控制电 路以及三个 计数器通道 组成。
1、数据总线缓冲器:CPU用输入输出指令对8253进行读写操作时的所有信息都通过该缓冲器传送。1、数据总线缓冲器:CPU用输入输出指令对8253进行读写操作时的所有信息都通过该缓冲器传送。 • 2、读/写逻辑:这是8253内部操作的控制电路,它 从系统控制总线上接收输入信号,然后转换成8253内 部操作的各种控制信号。 • 3、控制字寄存器:通过该寄存器CPU可以设置三个 计数器通道的工作方式。 • 4、计数器0,1,2:这是3个独立的计数/定时通道, 是16位的可设置计数初值的减法计数器。 如图7.2所示, 是每个计数通道的结构。内有计数初值寄存器CR,计 数执行部件CE和输出锁存器OL及控制字寄存器。其中 CE作减法计数。
计数器0 计数器1 计数器2
三、8253的引脚 8253与CPU接口 的引脚,除了没有 复位信号RESET引 脚外,其他与8255 相同。如图7.3所 示,(a)是引脚图, (b)是8253的功能 结构。
1、CLK CLK为时钟输入引脚,用以输入计数执行部件CE(减法计数器)的计数脉冲信号。 • 2、OUT 它是通道输出信号引脚,从功能上来说也可称为“计数到零/定时时间到”输出引脚。8253的基本功能就是对外部输入到CLK引脚的脉冲进行减法计数。 • 3、GATE 它是门控输入信号引脚,当GATE为低电平时禁止计数器工作, 只有GATE为高电平时计数器才能工作。
四、8253的工作方式 • 8253的每个通道均可以通过编程选择6种工作方式之一,这6种工作方式是: (1) 方式0: 计数到零产生中断请求 (2) 方式1: 硬件可重复触发的单稳态触发器 (3) 方式2: 分频器 (4) 方式3: 方波发生器(用得最多的方式) (5) 方式4: 软件触发选通 (6) 方式5: 硬件触发选通
1、方式0计数到零产生中断请求 ⑴ 方式0的时序图 ①如图7.4所示,CPU写入控制字CW,在WR的上升沿, OUT输出变低或保持低。 初值由CR到CE
② CPU将计数初值N写入计数初值寄存器CR (图中初值为4),在WR上升沿之后的第一个 CLK脉冲的下降沿将CR的内容送入计数执行部件 CE。 ③ 当GATE=1时,在CR内容送入CE后的每一个 CLK脉冲下降沿使CE减1计数,在计数过程中 OUT一直保持低直到计数为零。 ④ 计数器减到0时,OUT由低跳到高电平,此输 出信号可作为中断请求。
⑵ 方式0的特点 ① 计数器只计一遍,而不能重复工作。当减法计数器 计到0时,并不自动恢复计数器初值而重新开始计数,且 OUT输出保持为高电平。只有CPU再次写入一个新的初值 ,OUT才变为低电平,计数器按新的初值重新开始计数。 或者CPU重新对8253设置方式0控制字,它的OUT输 出也可以立即变为低电平,并等再次写入计数初值后重 新开始计数。 ② CPU向CR写入计数初值后的第一个CLK脉冲将CR的内 容送入CE,从此之后,计数器才开始减1计数。因此这第 一个CLK脉冲不包括在减1计数过程中,所以如果计数初 值设置为N,则输出OUT是在N+1个CLK脉冲之后才变为 高电平,见图7.4。
③ 在计数过程中,可由GATE信号控制暂停。当GATE变 为低时,计数暂停;当GATE信号变高后又接着计数,参 见图7. 5。 ④ 在计数过程中也可改变计数初值。在写入新的计数初 值后,计数器将立即按新的计数值重新开始计数,即改 变计数初值是立即有效的,参见图7.6。
2、方式1 硬件可重复触发的单稳态触发器 ⑴ 方式1的原理 如图7.7所示,当CPU输出控制字后,OUT输出变为高 电平。在CPU写入计数初值后,计数器并不开始计数,直 至门控信号GATE的上升沿出现,并在下一个CLK的下降 沿将CR的内容送到CE,同时OUT输出变低,然后开始对 后面的CLK脉冲进行减1计数。在计数过程中,OUT一直 保持低,直至减1计数器计到0时,OUT输出变高。 由于GATE上升沿的触发,使OUT输出产生一个宽度为 N个CLK周期的负脉冲。以后GATE上升沿再次出发,则再 输出一个同样宽度的负脉冲。 因为门控信号GATE通常有硬件产生,所以该方式称为 硬件可重复触发的单稳态触发器。
⑵ 方式1的特点 ① 若设置初值为N,则输出为N个CLK周期宽度的负脉冲。 ② 计数到零时,可再次由GATE上升沿触发,输出同样宽 度的负脉冲,而不必重新写入初值,即可重复触发。
③ 在计数过程中(输出负脉冲期间),可由GATE上升沿 再触发,如图7.8所示。 ④ 在计数过程中,CPU可改变初值,这时计数过程不受影响 ,计数到0后输出变高。当再次触发时,计数器才开始按新的计数初值计数。即改变计数初值是下次有效的。
⑵方式2的特点 ① 不用重新设置计数初值,通道能连续工作。如果初值为 N,则每输入N个CLK脉冲,输出一个负脉冲,负脉冲的宽度
为1个CLK周期,重复周期为N倍的CLK周期。 ② 计数过程中可由GATE信号控制,当GATE信号变低时, 立即暂停现行计数;当GATE信号变高后,从计数初值开 始重新计数。 ③ 如果在计数过程中,CPU重新写入计数初值,则对于 正在进行的计数无影响,而是从下一个计数操作周期开 始按新的计数值改变输出脉冲的频率。 下面是初值N=4的输出波形:若CLK=1微秒,则输出 1微秒 4微秒 脉冲周期T=4微秒,脉冲宽度=1微秒
在方式3,当CPU写入控制字后,输出变高。在写完计数在方式3,当CPU写入控制字后,输出变高。在写完计数 初值N 后,计数器自动开始计数,输出保持高,当计数到N/2 (或N+1/2)时输出变低,直至计数器减到0输出变高。同 时又重新装入初值开始新的计数,如此周而复始进行。 ⑵ 方式3的特点 ① 注意初值N为偶数或奇数时,输出信号的差别。N为偶数 时,输出对称方波,周期为N个CLK宽度;N为奇数时,输出 有N+1/2个CLK周期的高电平和N-1/2个CLK周期的低电平。 ② 在计数过程中,GATE信号变低则暂停现行计数过程,直 到GATE变高,将从计数初值开始重新计数。 ③ 如果要求改变输出方波的频率,则CPU可在任何时候重 新写入初值,并从下一个计数操作周期开始改变输出方波的 频率。
⑵ 方式4的特点 ① 若初值为N ,则写入初值后的N+1个CLK脉冲才输出 一个负脉冲,负脉冲的宽度为一个CLK周期。 ② 当GATE=1时,允许计数;GATE=0时,禁止计数。 ③ 在计数过程中改变初值,则按新的初值重新计数, 即改变初值是立即有效的。
6、方式5 硬件触发选通 ⑴ 方式5的工作原理
⑵ 方式5的特点 ① 初值为N,则在门控GATE上升沿触发后。经过N+1 个CLK脉冲,才输出一个CLK周期的负脉冲。 ② 若在计数过程中再次出现门控GATE触发信号。则将 从初值开始重新计数,但OUT输出的高电平不受影响。 ③ 若在计数过程中改变初值,只要在计数到0之前不出 现新的门控触发信号,则原计数过程不受影响;等计数 到0并出现新的门控触发信号后,再按新的计数初值计数 。若在写入了新的计数初值后,在未计数到0之前有门控 触发信号出现,则立即按新的计数初值重新开始计数。 7、8253工作方式小结 如下表所示,总结了6种工作方式的特点:
方式0 方式1 方式2 方式3 方式4 方式5 功能 计最后一个数中断 硬件触发单稳触发器 分频器 方波发生器 软件触发选通 硬件触发选通 启动条件 写入计数值 外部触发 写入计数值 写入计数值 写入计数值 外部触发 重复条件 写计数值 外部触发 自动重复 自动重复 写计数值 外部触发 N与CLK和OUT关系 写入N后过N+1个CLK后输出变高 单个输出脉冲宽度为N个CLK 每N个CLK输出一个CLK宽度脉冲 写入N后(偶)输出N/2个CLK高N/2个CLK低 写N后过N+1个CLK后输出一个CLK宽度的脉冲 门控触发后过N+1个脉冲输出一个CL宽度的脉冲 改变计数值 立即有效 外部触发后有效 下一计数操作周期有效 下一计数操作周期有效 立即有效 外部触发后有效 写入控制字后的OUT 立即为低 高 高 高 高 高 GATE 低或变低 禁止计数 禁止计数输出变高 禁止计数输出变高 禁止计数 上升沿 从初值开始重新计数 从初值开始重新计数 从初值开始重新计数 硬件触发信号启动计数 高 允许计数 允许计数 允许计数 允许计数 计数器最小值 1 1 2 2 1 1 计数器最大值 0 0 0 0 0 0 计数到0后状态 继续减1计数 继续减1计数 自动装初值后计数 自动装初值后计数 继续减1计数 继续减1计数
⑴ 方式2(分频器)、方式4(软件触发选通)和 方式5( 硬件触发选通),它们的输出波形相同, 都是宽度为 1个CLK周期的负脉冲。区别是:方式2 是自动重复工作的,而方式4需要由软件(设置计数 初值)触发启动,方式5需要由硬件(门控GATE信 号)触发启动。 ⑵ 方式5(硬件触发选通)与方式1(硬件触发单 稳),触发信号相同,但输出波形不同:方式1输出 为宽度是N个CLK周期的负脉冲(计数过程中输出为 低) ,而方式5输出为宽度是1个CLK周期的负脉冲 (计数过程中输出为高) 。
⑶ 在6种工作方式中,只有方式0,在写入控制字后输 出为低;其余5种方式,都是在写入控制字后输出为高。 ⑷ 6种工作方式中的任何一种方式,只有在写入计数 初值后才能开始计数。方式0、2、3、4都是写入计数 初值后,计数过程就开始了。而方式1和方式5在写入计 数初值后,需由外部GATE信号的触发启动,才能开始 计数过程。 ⑸ 6种工作方式中,只有方式2(分频器)和方式3 (方波发生器)为自动重复工作方式,其他4种方式都 是一次 性计数,要继续工作需要重新启动。 图7.20是8253六种工作方式下的输出波形图。
五、8253的初始化编程 1、内部寄存器寻址 一片8253占用四个连续的端口地址,分别对应于三个计数初值寄存器端口和一个控制寄存器端口。由于3个通道共用一个控制寄存器,因此需要使用控制字来表示作用于哪个通道,使用D7和D6来表示。 8253内部寄存器的寻址如下表所示:
2、8253的控制字:如图7.16所示 D7 D6 D5 D4 D3 D2 D1 D0
3、初始化编程顺序 对于每个计数通道进行初始化时,必须先写入控制字, 然后写入计数初值。这是因为计数初值的写入格式是由 控制字的D5和D4两位编码决定的。写入计数初值时,必 须按控制字规定的格式写入。 例1:若用8253的计数通道1,工作在方式0,按8位二进 制计数,初值为128,试编写初始化程序,设口地址为 48H- 4BH。 解:控制字为01010000=50H, 8位计数初值为80H mov al,50H ;设置通道1控制字 out 4BH, al mov al, 80H ;写通道1计数初值,只写低 out 49H, al ;8位
例2:若用8253通道1,工作在方式1,按二-十进制计数,例2:若用8253通道1,工作在方式1,按二-十进制计数, 计数初值为2010,口地址同上,试编写初始化程序。 解:通道控制字为01110011=73H 计数初值高8位为20,低8位为10(注意:实际编程 时要写20 H和10H) mov al, 73H ;写通道1控制字 out 4BH, al mov al, 10H ;写通道1计数初值低8位 out 49H, al mov al, 20H ;写通道1计数初值高8位 out 49H, al 当执行完上述程序后,8253通道1工作于方式1。经GATE上 升沿触发后,输出产生一宽度为2010个CLK周期的负脉冲。
六、8253的读操作 由CPU访问每个通道的输出锁存器OL,即可实现读出每 个通道的计数值。如果是8位计数只需读一次;如果是16位 计数,则要读两次,先读低8位,后读高8位。 由于通道计数器在不停的计数过程中,而锁存器的值是 跟随计数器的值变化的,为使读得的数正确,有下面两种 方法: 1、读之前先暂停计数 此法是利用GATE信号使计数器暂停计数,或由外部逻辑 暂时封锁CLK的输入,然后进行读出。这要求硬件和软件配 合。设8253口地址为48H-4BH,要读通道0的计数值,可编 程如下:
mov al, 30H ;写控制字00110000 out 4BH,al in al, 48H ;读计数通道0的低8位 mov bl, al ;存于寄存器BL in al, 48H ;读计数通道0的高8位 mov bh, al ;存于寄存器BH 注意在读之前,应先写控制字,其中控制字的D5D4=11 2、读之前先送计数值锁存命令 锁存命令由控制字的D5D4位决定, D5D4=00是锁存 命令,锁存哪一个寄存器由控制字的D7D6位决定。此时 控制字的低4位可设定为全0。 设8253的口地址为E8H-EBH,现要求读计数通道1的 16位计数值,并假设在读之前已设置控制字为先读/写低 8位,再读/写高8位,则可编程如下:
mov al, 40H ;锁存命令为40H out 0EBH, al ;写入通道1控制字寄 存器 in al, 0E9H ;读低8位 mov bl, al ;存于BL in al, 0E9H ;读高8位 mov bh, al ;存于BH 这种方法,必须先执行一次锁存操作,但 省去了需要硬件的配合。
第三节 8253的应用 例1:8253用作脉冲发生器 如图7.17所示,产生重复周期为5µs,脉冲宽度为1µs 的输出脉冲。设时钟CLK的频率为2MHz
CLK ……… OUT1 0.5 µs 1 µs OUT0 5 µs 例1的波形图
解:设想用计数器1作分频器(工作于方式2),以决定脉冲信解:设想用计数器1作分频器(工作于方式2),以决定脉冲信 号的周期。计数器0作单稳(工作于方式1),用于决定脉冲的 宽度。计数器1的输出接至计数器0 的GATE0,用作单稳的触发 信号。由于CLK的周期T=0.5µs,所以计数器1的初值设为10, 即10分频,输出OUT1是周期为5 µs的,脉冲宽度为0.5µs信号。 计数器0的计数初值设定为2,使其输出信号负脉冲的宽度为 1 µs,再经反相后即为所要求的脉冲信号。设8253的端口地址 为80H-86H(偶地址),具体编程如下。 mov al, 00010011B;设置控制字,计数器0为方式1, out 86H, al ;只写低8位,BCD计数 mov al, 2 ;设置计数器0的计数初值为2 out 80H, al mov al, 01010101B;计数器1为方式2,只写低8位, out 86H, al ;BCD计数 mov al, 10H ;设置计数器1的计数初值为10H out 82H, al
例2:图7.18是8253-5在PC/XT机中的应用,PCLK=2.38MHz,例2:图7.18是8253-5在PC/XT机中的应用,PCLK=2.38MHz, 经分频后得1.19MHz给CLK0、CLK1和CLK2。设口地址为40H- 43H。三个计数器的用途如下:
⑴ 计数器0作定时中断,选用方式3,控制字为36H,初值为0 (即65536),GATE0接+5V。因此输出时钟频率为 1.19MHz/65536=18.21Hz。它接到8259的IRQ0,即0级中断, 每秒出现18.2次。因此每秒间隔55ms产生一次0级中断请求。 ⑵ 计数器1向DMA控制器定时发出动态存储器刷新请求,它选 用方式2,控制字为54H,计数初值为18,GATE1接+5V。因此 OUT1输出分频脉冲,频率为1.19MHz/18=66.1KHz,相当于周 期为15.1 µs。这样允许计数器1每隔15.1 µs经U21产生一个动 态存储器刷新请求信号DRQ0。 ⑶ 计数器2控制喇叭发声,选用方式3,控制字为B6H,计数初 值为533H(即1331),OUT1输出方波的频率为 1.19MHz/1331=894Hz。该计数器的工作由主板上的8255的 PB0端控制。当PB0输出的TIME2 GATESPK为高电平时,
计数器方能工作。OUT2的输出与8255A的PB1产生 喇叭音响信号SPKRDATA在U87相与后送到功放驱 动芯片75477的输入端A,其输出推动喇叭发出声 音。 8253-5的初始化程序如下: PRO:mov al, 36H ;选择计数器0,方 式3,二进制计数 out 43H, al ;写控制字 mov al,, 0 ;预置计数初值0 out 40H, al ;先送低字节 out 40H, al ;后送高字节
PR1:mov al, 54H ;选择计数器1,方式2, 二进制计数 out 43H, al ;写控制字 mov al, 12H ;预置计数初值18 out 41H, al PR2:mov al, 0B6H;选择计数器,方式3, 二进制计数 out 43H, al ;写控制字 mov ax, 533H ;送分频数 out 42H, al ;先送低字节 mov al, ah out 42H, al ;后送高字节
例3:用8253实现日时钟 8253工作在方式3下,其输出是一个周期准确的方波,可 以作为定时单位。如CLK0=1. 1931816MHz,初值为最大值 65536,则计数器0输出的方波频率为 f0=1. 1931816MHz/65536=18.2Hz,周期为T0=54.945ms 1天=24×60 ×60 ×1000ms/54. 945ms=1572482(计时 单位)=0017FE82H;即计满1572482个计时单位,就是1天。 同理计满65520是1个小时,计满1092就是1分钟,计满18.2 就是1秒钟。 具体做法是8253的OUT0输出连到8259的IR0上。8253输出 的方波每隔54.945ms申请一次中断,在中断服务程序中做双 字变量的加1操作。当低字计到65536时,向高字进位,直至 高字计到0017H,低字计到FE82H,就计到24小时。然后清零
开始第二天的计时。其硬件连接如图7.19所示。图中在内存开始第二天的计时。其硬件连接如图7.19所示。图中在内存 开辟了两个字单元,低字TIMER-LO(40H:6CH)和高字 TIMER-HI(40H:6EH)。