第十七章定时及音响程序设计17.1概述17.28253/8254可编程定时/计数器17.3时钟程序设计17.4音响程序设计17.1概述CPU通过接口电路产生时间符合要求的信号的过程,称为定时。该接口电路称为定时器。CPU通过接口电路对外部事件的数量进行统计的过程称为计数。实现计数的接口电路称为计数器。在微型机里,把定时器和计数器做成一片大规模集成电路,称为定时器/计数器。17.1概述输入脉冲输出(分频)声音的产生:对输出方波整形变成正弦波,经放大处理接到扬声器上,产生不同声音的波形。若选择标准输入脉冲,例1KHz,则当输入1000个标准输入脉冲,需要1s,则当计数值为1000时,输出端每隔1s输出一个脉冲,实现了定时。17.1概述实现定时/计数有三种不同的方法:(1)软件定时:执行一个具有固定延迟时间的循环程序。优点:不需外加硬件,灵活,定时较准确。缺点:在定时过程中CPU不能做任何其它工作。总结:适用于定时时间短的场合。(2)硬件定时:采用中规模TTL或CMOS芯片外家阻容件来实现的。不同的时间间隔主要是通过配接不同的阻容值达到的。优点:不占用CPU时间。缺点:变换定时较难。总结:适用于定时时间间隔固定的场合。(3)可编程的定时:综合了上述两种方法的优点,采用固定的硬件,通过编程(写控制字)实现不同的要求。既不占用CPU的时间,又有灵活性。17.28253/8254可编程定时/计数器17.2.18253/8254的基本功能和内部结构17.2.28253的工作方式17.2.38253/8254在IBMPC系列机中的应用17.2.18253/8254的基本功能和内部结构(1)8253的基本功能8253有3个独立的16位计数器。每个计数器的主要功能有:1)按照二进制或二—十进制计数;2)计数速率可高达2MHz;3)可以由程序确定按照6种不同的方式工作;4)所有的输入输出都与TTL兼容。17.2.18253/8254的基本功能和内部结构(2)8253的内部结构8253主要由一个控制寄存器和三个计数器及相应的控制电路所组成。控制寄存器负责对三个计数器设定工作方式。三个计数器的操作是完全独立的,每个计数器都可以对其时钟输入端的始终脉冲按照二进制或二—十进制从预置的初值开始减1计数。当预置的初值减到0时,从OUT输出端输出一个脉冲信号。在计数开始和计数的过程中,计数器可以受门控输入端输入的门控信号的控制。计数器的初始值必须在开始计数之前,由CPU用输出指令预置。在计数过程中,CPU随时可以用输入指令将任意一个计数器的当前数值读出,而不必中断计数器的时钟输入,也不会影响计数器的继续计数。控制寄存器MSBLSB锁存器0计数器0#0OUT0时钟0门控0MSBLSB锁存器1计数器1#0OUT1时钟1门控1MSBLSB锁存器2计数器2#0OUT2时钟2门控2锁存器用来保存写入到计数器的初始值。计数器是16位的,然而,系统只给其分配一个地址,因此只能按字节进行存取,写入计数值时,要分两次写。在我们对计数器进行读写时,实际上是读写锁存器的值。因此,当计数到某一时刻时,若想要了解计数器的值,则要先把计数器的值送到锁存器中,然后再读写锁存器的值。17.2.18253/8254的基本功能和内部结构(3)8253的控制字765432100=二进制,1=BCD码工作方式000=方式0001=方式1010=方式2011=方式3100=方式4101=方式5读/写锁存器00=锁存计数器值01=读/写MSB10=读/写LSB11=先读/写LSB,后读/写MSB00=编写通道001=编写通道110=编写通道217.2.28253的工作方式8253有6种工作方式:方式0~方式5。对于每一种工作方式,由时钟输入信号CLK确定计数器递减的速率。门控信号GATE用于允许或禁止计数器计数。计数结束时在输出线OUT上产生一个信号。无论采用哪一种工作方式,都会遵循下面几条原则:(1)控制字写入计数器时,所有的控制逻辑电路立即复位,输出端OUT进入初始态(高电平或低电平)。(2)计数初值写入后,要经过一个时钟上升沿和一个下降沿,计数执行部件才开始计数。(3)在时钟脉冲CLK的上升沿时,门控信号被采样。(4)在时钟脉冲CLK的下降沿时,计数器作减1计数,输出端OUT的波形也都是在时钟周期的下降沿时产生电平的变化。17.2.28253的工作方式(1)方式0—计数结束时中断当控制字写入控制寄存器后,计数器的输出OUT立即变低,即使未给计数器赋予初值,也未开始计数,只要方式0一确定,输出就为低。计数值送入计数器且门控信号为高时,计数器开始计数。在计数器开始计数和整个计数过程中,OUT都保持为低,直到计数到0,OUT才变高。时钟写计数值=5543210门控OUT停止计数17.2.28253的工作方式方式0的工作特点是:(1)计数器只计一遍。当计数到0时,计数器并不恢复初始值重新开始计数(输出保持为高),直到CPU又写入一个新的计数值,输出立即变低,计数器按照新的数值开始计数。(2)方式0的计数过程可由门控信号控制暂停。当门控信号为低时,计数器暂停计数。门控信号变高后,计数器继续计数。在计数过程中,GATE信号的变化不影响OUT输出的状态。(3)在计数的过程中,可重写或改变计数值,写入新的计数值后,计数器将按新的计数值重新开始计数,改变计数值立即有效。17.2.28253的工作方式(2)方式1—可编程的单拍脉冲这种方式是由外部门控脉冲(硬件)触发启动定时或计数,使输出变低,单拍脉冲开始,在经过固定的时间间隔或计数之后,输出变高,单拍脉冲结束,硬件再次触发,输出可再发一个同样的单拍脉冲。门控信号变低,可停止计数,门控信号变高后,重新开始计数。时钟写计数值=554543210门控OUT重新计数17.2.28253的工作方式方式1的工作特点是:(1)写入控制字后,输出端OUT立即变低,知道外部门控信号GATE的上升沿启动之后的CLK下降沿开始计数,OUT变低,并在计数到达0之前一直维持低电平。当计数到0时,OUT变为高电平,并在下一次门控信号触发启动后的第一个时钟脉冲到来之前一直保持高电平。若外部再次触发启动,则可在OUT上再次产生一个单拍脉冲。(2)当计数到0后,可再次由外部门控信号GATE的上升沿触发启动。(3)即使在计数的过程中,也可用门控脉冲进行再触发,在再触发脉冲上升沿之后的一个CLK脉冲的下降沿,计数器将重新开始计数,而不管原来计数到什么地方。在再触发时,输出的状态将保持不变。在任何一次再触发之后,输出OUT都将继续保持低电平。(4)在计数的过程中,CPU可改变计数值,这时候计数过程和输出都不受影响,计数到0后,输出为高。若再次触发计数器,计数器将按新输入的计数值计数。17.2.28253的工作方式(3)方式2—速率发生器这种方式的功能如同一个N分频计数器,输出是输入时钟按照N计数值分频后的一个连续脉冲。如果计数值为N,结果是输入N个脉冲,输出一个脉冲。时钟写计数值=443210(4)3210(4)3210(4)门控OUT重新计数17.2.28253的工作方式方式2的工作特点是:(1)当CPU输出控制字后,OUT将为高。在写入计数值后的下一个CLK开始减1计数。在计数过程中,OUT保持为高。直到计数值减至1时,OUT变为低,保持一个CLK周期,又恢复为高,重新开始计数。(2)不用重新设置计数值,通道能够连续工作,输出端送出固定频率的脉冲。(3)计数过程可以由门控脉冲GATE控制。当GATE变低时就暂停计数,OUT仍保持高电平,在GATE变高后的下一个时钟脉冲,使计数器恢复初值,重新计数。这种利用门控信号使计数器开始工作(即同步)的方法成为硬件同步。(4)在计数过程中可以改变计数值,这对计数过程没有影响,但在计数变到1时,输出变低,过一个CLK周期输出又变高,计数器将按新的计数值开始计数,可见改变计数值是在下一次有效。17.2.28253的工作方式(4)方式3—方波速率发生器方式3和方式2都是周期性的,但方式3输出的是对称的方波。输入时钟脉冲与输出脉冲频率之比等于加载的计数值。时钟写计数值=443210(4)3210(4)3210(4)门控OUT重新计数17.2.28253的工作方式方式3的工作特点是:(1)设置控制字后,OUT将为高。在写入计数值后的下一个CLK开始减1计数。当计数到一半计数值时,OUT变为低,直到计数值变为0,输出又为高,再重新开始计数。(2)当计数值N为偶数时,输出端的高低电平持续时间相等,为完全对称的方波。当计数值N为奇数时,则输出端的高电平持续时间比低电平持续时间多一个时钟周期,即高电平持续(N+1)/2,而低电平持续(N-!)/2,输出为矩形波,整个输出周期仍为N个时钟脉冲周期。(3)GATE信号能使计数过程重新开始,GATE=1时,计数进行;GATE=0时,计数停止。如果在OUT为低期间,GATE变低,则OUT会立即变为高电平,此时计数停止。在GATE又变为高电平后,下一个时钟脉冲来到时,重新开始计数。(4)若在计数其间写入一个新的计数值,并不影响现行的计数过程。但是如果在输入新的计数值后,又受到门控信号上升沿的触发,就会结束当前输出的周期,而在下一个时钟周期时,计数的执行部件按新值开始计数。17.2.28253的工作方式(5)方式4—软件触发选通当控制字写入控制寄存器后输出开始为高,当设置完计数值后,计数器立即开始计数。当计数到0后,输出变低,持续一个输入时钟周期,然后又恢复为高,计数器停止计数。这种计数也是“一次性有效”,每次计数都要靠这种重新设置计数值进行“软件触发”。时钟写计数值=5重新计数543210门控OUT停止计数17.2.28253的工作方式方式4的工作特点是:(1)门控信号变低,可暂停计数,门控信号变高后,继续计数。(2)若在计数过程中改变计数值,新值写入后的下一个CLK周期开始从新的计数值开始重新计数。通过写入新的计数值使计数器从头工作,叫软件再触发。17.2.28253的工作方式(6)方式5—硬件触发选通方式5输出初始状态为该。在设置计数值之后,计数器并不立即开始计数,而是要等到门控脉冲的上升沿出现才开始计数,即靠硬件触发选通计数。。当计数到0时,输出变低,持续一个输入时钟周期,然后又恢复为高,计数器停止计数。下次门控脉冲触发后才能再重新开始计数。时钟OUT写计数值=554543210门控重新计数17.2.28253的工作方式方式5的工作特点是:(1)若在计数过程中使用门控脉冲,则使计数器重新开始计数,但对输出状态没有影响。(2)若在计数过程中改变计数值,只要没有门控信号的触发,则当前输出周期不受影响。当计数到0后,若有新的门控信号出发,见按新的计数值开始计数。如果在写入了新的计数值后,在未计到0之前,又有新的门控信号触发,则立即按新的计数值开始计数。17.2.28253的工作方式(7)8253各种工作方式小结①几种方式比较方式2,4,5输出的波形是一样的,都是宽度为一个CLK时钟周期的低有效脉冲。主要区别是:方式2连续不停地计数和输出;方式4每次都要由程序设置计数值才能计数;方式5不用每次设置,但每次都要由门控脉冲触发启动才能计数。即:计到0后,方式2不用触发,方式4要软件触发,方式5要硬件触发,才能继续计数。方式1与方式5中的门控脉冲的作用和计数中改变计数值的结果都是相同的,只是输出波形不同。方式1的输出信号从开始计数的整个过程都为低,而方式5的输出从开始计数的整个过程都为高;方式1输出的低有效脉冲宽度为N个输入时钟脉冲的宽度,而方式5输出的低有效脉冲宽度为一个输入时钟脉冲的宽度。②输出端OUT的初始状态只有方式0在置入控制字后,OUT立即变低,其它5种方式OUT初始态均为高电平。17.2.28253的工作方式③启动计数与重复计数的条件计数值写入后,并不立即开始工作,需要一定的条件才能开始工作。有些方式计数到0后,则停止工作,要重复计数同样也需要某些条件。8253启动计数和重复计数的条件方式功能启动条件重复条件0计完最后一