1,第六章 计数器/定时器,在微机系统或微机应用系统,特别是控制系统中,经常有计数和计时的要求如汽车里程表 的公里计数,通话时间计时等这些应用在计算机中的处理方法不外乎两种:硬件方法和软件方法软件定时就是根据所需要的时间常数来设计一个延迟子程序,这样作的优点是节 省硬件,但耗费CPU的资源较多,降低了CPU效率,且编写软件略显麻烦,通常延迟时间较小且重复 次数有限的情况下,使用该方法硬件定时就要用到计数器/定时器,其优点是不占用CPU时间,且利用计数器/定 时器产生中断信号,就可以建立多作业环境,以提高CPU效率,由于计数器/定时器开销不大,因此的 到了广泛应用2,第一节 计数与定时,一. 计数与定时的概念 在计算机处理计数问题时,首先要将计数量转化为电脉冲的形式,计数的任务即是对某电脉冲的出现次数进行度量的工作引发计数工作的电脉冲称为计数脉冲 在进行计数时,计数脉冲的出现与否受外界控制,不具有一定的规律性,所以要求计数系统具有良好的实时性,即无论计数脉冲出现的快慢,计数系统必须准确记录计数脉冲的出现 在计算机系统中,更常用的是定时工作(计时和延时) 计时即对两事物发生的时间间隔进行计量; 延时是对某事件发生后的时间进行计量,直到某个时间间隔后发生另一事件。
时间计量 是在统一的时间标准上进行的,这个标准时间通常由振荡器一类电路提供的恒定频率的电脉冲来担 当,这样定时的工作就可转化为对具有恒定频率的计数脉冲进行技术的工作3,二. 计数方法与计数器 通常按计数的实现方法可将计数器操作分为增量计数器和减量计数器两种增量计数器是指当计数脉冲到来后,计数的计数值加“1”;减量计数器反之 增量计数器常用于对事件的累计,而减量计数常用于限量计数增量计数关心的是当前计数的量,减量计数 关心的是计数终到的时刻 如人们为了了解汽车行驶的里程而为汽车设置了里程表,使用里程表是为了了解当前汽车以运行的公里数, 这时就需要增量计数器;在控制药片装瓶的药品包装机中,需要记录药片装入的数量,我们关心的是药品装 满的时刻,以便换瓶,此时可采用减量计数器4,在计算机系统中,计数操作可采用软件实现也可采用硬件实现,或者将二者结合使用软件实现计数的方法是将计数脉冲直接锁存到计算机的输入引脚,查到了计数脉冲后便进行计数处理,并清除锁存器,否则继续查询,在软件中即可采用增量计数也可采用减量计数,灵活性很大,但这样CPU的占 用率太大也可以利用计数脉冲引发中断进行计数,可解决CPU占用率的问题,但由于CPU响应中断的周期 的限制,当计数脉冲的频率很高时,可能发生漏计。
5,由于以上原因,实际应用系统中多采用硬件方法进行计数操作利用多个级联的触发器构成计数器,将计数脉冲接到计数器的时钟输入端,则随着计数脉冲的到来,触发器的状态输出可反映计数的二进制 或十进制的值如果使用可预置初值的计数器,则可控制计数器的计数总量,当计数达到这个量时,可输出计数终到脉冲如果使用可重载计数器,则可实现连续计数将这种计数器连到计算机系统中,由CPU来设置初值,由CPU启动计数,并由CPU来读取计数器的当前值, 计数终到后向CPU发出中断请求,由CPU处理计数终到后的工作,则构成一种可编程计数器这种计数器的计数过程自动进行不需CPU的干预,仅在CPU需要时提供计数的当前值,或在计数终到后向CPU发出中断请求,因而CPU占用率极低,在实际应用系统中被广泛应用6,三. 定时方法与定时器 计算机系统中的,定时操作又分成延时操作和计时操作两种延时操作只关心时间间隔和延时终到的时刻,而计时操作则要求随时了解现在时刻的标准时间延时操作的 实现方法很多,而计时操作的实现方法则很单一在模拟电路中,延时操作多是利用电子器件本身的特性来实现的,最常用的延时器件是电容器如单稳态触 发器,延时线等,这类电路的设计安装一旦完毕,其延时的时间就已经固定(或仅可在小范围内手工调节), 仅适用于延时间隔较为固定的场合。
在数字电路中,实现延时操作则借用于计数器,给计数器输入一故定频率的计数脉冲(也称为定时脉冲),并 给计数器输入一定的初始计数值,给计数器发一个启动脉冲后,计数器以固定频率进行计数,延时一定时刻 后,计数器计数终到,发出终到脉冲这种方法,只要改变计数器的初始值,就可一改变延时的时间长度, 适当增加计数器的位数,就可以实现较大时间内的可调延时7,软件延时是利用CPU的指令周期进行的延时在程序中设计一种循环,循环的内部仅进行空操作(NOP),只 要准确的计算指令周期和循环次数,就可以在CPU执行该循环程序时延时指定的时间这种方法的优点是不 需要附加的硬件,且延时范围灵活;缺点是一方面占用CPU资源,降低了CPU的利用率,另一方面是当CPU 的指令中期不固定时(如发生DMA操作或插入数个Tw状态时);延时的时间可能发生较大的变化如为8086 编写的程序中使用的延时,在80486系统下,延时的时间明显缩短8,计算机中实现延时的另一种方法是利用硬件,借助于可编程的计数器进行延时在电路上给计数器输入恒定 的定时脉冲,新要延时时,首先由CPU给计数器赋以初值,然后CPU给计数器发出启动脉冲,计数器就开始 工作了,计数器终到时,计数器输出终到脉冲,或者用以引发CPU中断,进行延时后的处理,或者直接将计 数脉冲输出到外设,驱动外设工作。
这种方法延时准确,占用CPU时间少,且不会因系统升级而改变延时时 间,故被广泛采用当计算机系统中配置有定时时钟的情况下,还可以利用查询系统时钟的方法来进行软件延时,系统时钟由计 时机构产生,这样可保证延时的准确性,但仍需占用较多的CPU时间9,,在计算机系统中,计时的工作一般是由计数器来进行的首先在系统中设置一个计数器,给这个计数器输入 稳定频率的定时脉冲作为计数脉冲,并使其工作在可重载的状态,使其输出连续的终到脉冲,这个脉冲是定 时脉冲的N分频,用这个脉冲引发CPU的定时中断,CPU根据这个定时脉冲来修改内部的时钟,就可以进行 计时操作 在采用了计数器定时后,可从事就成为计数的一种特例,是对标准频率的定时脉冲进行的计数 因此,把具有计数终到输出的可重载计数器称为计数器/定时器 Intel公司生产的可编程计数器/定时器8253就是一种典型的专用计数器/定时器芯片,是PC系列微机的标准设备之一10,四. 计数/定时的工作原理,计数/定时的功能 对外部事件发生次数进行计数 计算机系统经常用到定时信号,如DRAM刷新定时,计数和计时本质上是相同的,它们都是对一个输入脉冲进行计数,如果输入脉冲的频率一定,那么记录脉冲的个数与所需的时间是一一对应的关系。
例如输入脉冲频率为2MHz,那么计数2106 计时1秒,,因此,使用同一个芯片,既能计数,又能计时——计时器/计数器,11,,控制寄存器,,初始值寄存器,,计数器,,计数输出寄存器,,状态寄存器,,,CLK,,GATE,,OUT,组成:,控制寄存器——决定工作模式 状态寄存器——反应工作状态 初值寄存器——计数的初值 计数输出寄存器——CPU从中读当前计数值 计数器——执行计数操作,CPU不能访问,12,工作原理:对CLK信号进行减1计数首先,CPU把控制字写入控制寄存器,计数初始值写入初值寄存器计数从初值开始,每当CLK信号出现一次,计数值减1当计数值减到0,从OUT端输出规定的信号CLK信号出现时,计数器是否减1,由门控信号GATE控制,13,CLK是计数输入信号,计数器对CLK端出现的脉冲个数进行计数 CLK端可以输入外部事件 CLK端可以接入固定频率的时钟信号,从而实现计时OUT信号在计数结束时发生变化 可将OUT作为外部设备的控制信号 可将OUT作为向CPU申请中断的信号CPU可以从计数输出寄存器读出当前计数值 读前,应向控制寄存器发送锁存命令,14,第二节 可编程计数器/定时器 8253,8253芯片上集成有3个独立的16位计数器,可用来进行二进制或BCD码计数,计数速率可达1.6MHz;每个计数器(或称计数通道)有独立的计数脉冲输入引脚CLK,独立的计数启动控制引脚GATE和独立的计数终到 输出引脚OUT。
可由程序设置和改变各计数器的工作方式,共有6种工作方式供选择通过对8253的控制寄存器编程,可以控制每个计数器的工作方式,计数制式以及计数初值的装入8253设有数据总线缓冲器,用来实现与系统数据总线的连接有读写控制逻辑,可接收来自系统总线的控制信号,并产生输出信号15,一. 8253的编程结构,8253 是24引脚双列直插式芯片,它与CPU的接口引线除了没有RESET引脚外,其他与8255相同其中: D7~D0是数据线引脚,RD和WD分别是读写控制引脚,CS是片选信号A1,A0是片内地址选择引脚8253的三个计数通道在结构上和功能上完全一样,每个通道均有两个输入引脚CLK和GATE,一个输出信号 引脚OUT16,17,8253的计数过程是由其硬件电路独立完成的使用时,使用时只需在计数开始前由CPU通过程序向8253写入 控制字和计数初值,确定它的计数方式和计数范围即可,而计数过程完全不需CPU干预,计数器可以和CPU同时工作,当计数完成后,8253可以向CPU申请中断显然,这种独立于CPU的计数/定时器,可以使CPU开销最小,并可通过适当分配优先级的办法实现延时 由于8253的读/写操作对系统时钟没有特殊要求,因此,它可以应用于任何一种微处理器组成的系统当中,作为可编程的方波频率发生器,分频器,实时时钟,事件计数器,单脉冲发生器等。
18,数据总线缓冲器,8253与数据总线的接口部件,是8位的三态双向缓冲器,CPU对8253读写的数据,控制及状态信息 都通过这8条数据线传送,读写的内容包括: CPU向8253传送的确定8253工作方式的控制字 CPU向某一计数器装入计数初值 CPU从某一计数器读出计数初值,19,读/写逻辑电路,8253内部操作的控制电路,它从系统控制总线上接收控制信号,然后产生8253内部操作的各种控制 信号,具体接收的控制信号为: CS片选信号,低电平有效,有效时可以访问8253,为高电平时,数据总线缓冲器 处在高阻状态,与系统数据总线脱离,故不能进行数据总线编程,也不能进行读写操作,但不影 响计数器的工作 RD,WR读写控制信号,控制数据的传送方向,当RD有效时,数据由8253传向CPU (读当前计数值);当WR有效时,数据由CPU传向8253(写控制字和计数初值) A1,A0接系统总线的A1,A0,用于选择8253那的计数器和控制寄存器 A1 A0 计数器 0 0 计数器0 0 1 计数器1 1 0 计数器2 1 1 控制寄存器,20,控制寄存器,21,计数器0,1,2,8253有3个独立的计数器/定时器,计数器0,1,2,每个计数器的内部结构相同,操作完全相同。
每个通道的外部均有两个输入信号CLK和GATE,一个输出信号OUT. CLK时钟脉冲输入 GATE门控制信号输入 OUT输出信号,22,每个计数器内部都有三个16位寄存器CR,CE和OL CR计数初值寄存器存放CPU写入的计数初值(也称时间常数)CPU可以写,但 不能读CR寄存器CPU向CR写入计数初值后的第一个CLK脉冲下降沿,CR寄存器的内容被送到CE计数器 单元内,随后CE开始工作如果是在非重载方式下(方式0,方式1,方式4,方式5),CR的内容只向CE 写入一次;在重载方式下(方式2,方式3),当计数终到后,CR的内容又重新写入CE,一维持CE以同样的 计数初值连续工作CE计数执行部件接收CR送来的计数初值,在GATE的控制下决CLK进行减1计数, 当计数终到时减1到0,该计数通道的OUT引脚发出OUT信号CPU不能访问CE寄存器OL输出锁存器用来锁存某一时刻CE中的计数值由于8253的数据总线只有8 位,而CE是16位的,不可能在一个总线周期内将CE的内容全部读入CPU,因此用OL将不断变化的CE值保 持住,以便CPU读到正确的CE值CPU可随时用IN指令读出该寄存器的当前计数值,但不能写该寄存器。