《第8章.计数器和定时器.ppt》由会员分享,可在线阅读,更多相关《第8章.计数器和定时器.ppt(69页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第8 8章章 计数器和定时器计数器和定时器Intel Intel 8253/82548253/82548.1 概述 8.2 8253的控制字8.3 8253的工作方式8.4 8253的初始化8.5 8253的读操作8.6 Intel 82548.7 8253在PC机中的应用8.8 定时计数器的应用实例8.1 概述8.1.1 8253的主要功能Intel 8253具有以下主要功能:(1)一个芯片上有3个独立的16位计数器通道。(2)每个计数器都可以按照二进制或二十进制计数。(3)每个计数器的计数速率可高达2MHz。(82C54-2计数频率可达到10MHz)。(4)每个通道有6种工作方式,可由程
2、序设置和改变。(5)所有的输入输出都与TTL电平兼容。8.1.2 8253的内部结构8253的内部结构如图8-1所示。1数据总线缓冲器8位双向三态缓冲器。CPU用I/O指令对8253进行读写的所有信息,都是通过这8条总线传送的。包括:(1)CPU在初始化编程时,写入8253的控制字。(2)CPU向某一通道写入的计数值。(3)CPU从某一个通道读取的计数值。n2读/写控制逻辑接受来自系统总线的输入信号,然后产生整个器件的工作控制信号。3控制字寄存器它接受来自CPU的方式控制字,可以分别控制三个计数器的工作方式。它只能写入,不能读出。4计数器0,计数器1,计数器2这是3个独立的计数器/定时器通道,
3、每个通道的结构完全相同,如图8-2所示。每一个通道由一个16位的可预置值的减法计数器,一个16位预置寄存器,一个16位的输出锁存器构成。这3个通道的操作是完全独立的。在计数过程中,减法计数器的值不断递减,而预置寄存器的预置数不变。输出锁存器则用于写入锁存命令时锁定当前计数值。每个通道的减法计数器从预置值开始减1计数。当减法计数器的值减到零时,从OUT输出端输出一个信号。8.1.3 8253的引脚nIntel 8253的引脚如图8-3所示。nD7D0数据线、双向、三态,用于连接CPU的数据总线。n 片选信号、输入、低电平有效。只有当为0,选中8253。通常,接地址译码信号。nA1、A0片内寄存器
4、选择信号(端口选择),输入。用于读写8253三个通道的计数器和1个控制寄存器n 读信号、输入、低电平有效。当有效时,CPU可以从8253中读取数据。n _写信号、输入、低电平有效。当有效时,CPU可以向8253写入数据或命令字。每一个通道有3个引脚。nCLK:输入脉冲引脚。计数器就是对这个引脚上的脉冲进行计数。8253规定,加在CLK引脚的输入时钟周期不能小于380ns。nGATE:门控信号输入引脚。这是控制计数器工作的一个外部信号。当GATE引脚为低电平(无效)时,通常都是禁止计数器工作;只有当GATE为高电平时,才允许计数器工作。nOUT:输出引脚。当计数到0时,OUT引脚上必然有输出,输
5、出信号的波形取决于工作方式。8253内部端口的选择是由引线A1和A0决定的,它们通常接至地址总线的A1和A0。各个通道的读/写操作的选择,如表8-1所示。8.2 8253的控制字1计数器选择(D7D6)控制字的最高两位决定这个控制字是哪一个通道的控制字。由于三个通道的工作是完全独立的,所以需要有3个控制字寄存器分别规定相应通道的工作方式。但它们的地址是同一个,即A1A0=11。因此,对三个通道的编程需要向这个地址写入3个控制字,它们的D7D6位分别指定不同的通道。2数据读/写格式(D5D4)nCPU向计数通道写入初值和读取它们的当前状态时,有几种不同的格式。n例如,写数据时,是写入8位数据还是
6、16位数据,若是8位计数,可以令D5D4=01,只写入低8位,则高8位自动置0;若是16位计数,而低8位为0,则可令D5D4=10,只写入高8位,而低8位就自动为0;若是16位计数,高8位与低8位都不是0,就先写入低8位,后写入高8位。则可令D5D4=11。n在读取计数值时,可令D5D4=00,则把写控制字时的计数值锁存,以后再读取。3工作方式(D3D2D1)8253的每个通道可以有6种不同的工作方式,由这3位决定。每一种方式的特点,随后介绍。4数制选择(D0)8253的每个通道有两种计数制:二进制和二十进制,由这位决定。在二进制计数时,写入的初值的范围为0000HFFFFH,其中0000H是
7、最大值,代表65536;在二十进制时,写入的初值的范围为00009999,其中0000是最大值,代表10000。8.3 8253的工作方式8.3.1 方式0计数完成时中断n在这种方式,当控制字CW写入控制字寄存器,则使OUT输出端变低,计数器还没有赋予初值,也不开始计数。n要开始计数,GATE信号必须为高电平。则在写入计数初值以后,通道开始计数,在计数过程中,OUT信号线一直维持为低电平,直到计数到0时,OUT输出信号线才变为高电平。方式0过程如图8-5所示。其中,LSB=4表示计数值为4,只写低8位,最底下一行是计数器中的数值。方式0的主要特点是:(1)计数器只计数一遍。当计数到0时,并不恢
8、复计数初值,不开始重新计数,且输出保持为高。只有在写入另一个计数值时,OUT变低,开始新的计数。(2)8253内部是在CPU写计数值的WR信号上升沿,将此值写入通道的预置寄存器,在WR信号上升沿后的下一个CLK脉冲,才将计数值由预置寄存器送至减1计数器作为初值,开始计数。所以,8253是在写计数值命令后经过一个输入脉冲,才将计数值装入减1计数器,下一个脉冲才开始计数。因此,如果设置计数初值为N,则输出信号OUT是在N+1个CLK脉冲之后才变高的。这个特点在方式1、方式2、方式4和方式5时也是同样的。(3)在计数过程中,可由门控制信号GATE控制暂停。当GATE=0时,计数暂停;当GATE变高后
9、,就接着计数,其波形如图8-6所示。(4)在计数过程中可以改变计数值。若是8位计数,则在写入新的计数值后,计数器将按新的计数值重新开始计数,如图8-7所示。如果是16位计数,在写入第一个字节后,计数器停止计数,在写入第二个字节后,计数器便按照新的数值开始计数,即改变计数值是立即有效的。(5)8253内部没有中断控制电路,也没有专用的中断请求引线,所以若要用于中断,则可以用OUT信号作为中断请求信号,但是,需要有外接的中断优先权排队电路与中断向量产生电路。若8253的地址为04H07H,要使计数器1工作在方式0,仅用8位二进制计数,计值为128,初始化程序为:MOV A1,50H;设控制字OUT
10、 07H,AL;输出至控制字寄存器MOV AL,80H;设置计数值OUT 05H,AL;输出至计数通道18.3.2 方式1可编程序的单拍脉冲n在这种方式下,当CPU写控制字后(的上升沿),输出OUT信号将保持为高电平(若原为低,则由低变高)。当CPU写完计数值后,计数器并不开始计数,直到外部门控制脉冲GATE启动之后的下一个输入CLK脉冲的下降沿开始计数,输出OUT变为低电平。n在整个计数过程中,OUT都维持为低电平,直到计数到0,输出变为高电平,因此输出为一个单拍脉冲。若外部GATE再次触发启动,则可以再产生一个单拍脉冲,如图8-8所示。方式1的主要特点是:(1)若设置的计数值为N,则输出的
11、单拍脉冲的宽度即为N个输入脉冲间隔。(2)当计数到0后,可再次由外部GATE触发启动,于是可再输出一个同样宽度的单拍脉冲,而不用再次送入一个计数值。(3)在计数过程中,外部可发出门控脉冲进行再触发。在再触发脉冲上升沿之后的一个CLK脉冲的下降沿,计数器将重新开始计数。如图8-9所示。(4)在计数过程中,CPU可改变计数值,这时计数过程不受影响,计数到0后输出为高。若再次触发启动,则计数器将重按新输入的计数值计数,即计数值是下次有效。如图8-10所示。若要使计数器0工作在方式1,按BCD计数,计数值为3000H。则初始化程序为:MOV AL,23H ;设方式控制字OUT 07H,AL ;输出至控
12、制字寄存器MOV AI,30H;设计数值OUT 04H,AL ;输出至计数器0的高8位注意:虽然计数值是16位的,但在控制字中规定为只写高8位,故低8位自动设置为0。8.3.3 方式2频率发生器在这种方式下,当CPU输出控制字后,输出OUT信号将变为高电平。在写入计数值后,计数器将立即自动对输入时钟CLK计数。在计数过程中输出始终保持为高电平,直至计数器减到l时,输出才变为低电平,经过一个CLK周期,输出又恢复为高电平,且计数器开始重新计数,如图8-11所示。方式2的一个突出特点是能够连续工作。如果计数值为N,则每输入N个CLK脉冲,输出一个脉冲。因此,这种方式可以作为一个脉冲速率发生器或用于
13、产生实时时钟中断。方式2的主要特点是:(1)不用重新设置计数值,通道能够连续工作,输出固定频率的脉冲。(2)计数过程可由GATE控制脉冲。当GATE变低时,就暂停计数;在GATE变高后的下一个CLK脉冲使计数器恢复初值,重新开始计数,如图8-12所示。图8-13 方式2在计数过程中改变计数值(3)在计数过程中可以改变计数值,这对正在进行的计数过程没有影响,但在计数到l时输出变低,过一个CLK周期输出又变高,计数器将按新的计数值计数,所以改变计数值是下次有效的,如图8-13所示。若要使计数器2工作在方式2,按二进制计数,计数值为02F0H。则初始化程序为:MOV AL,84H;写入控制字OUT
14、07H,ALMOV AI,0FOHOUT 06H,AL;写计数值的低8位MOV AL,02HOUT 06H,AL;写计数值的高8位8.3.4 方式3方波发生器方式3和方式2的输出都是周期性的,它们的主要区别是:方式3在计数过程中输出有一半时间为高,另一半时间为低。所以,若计数值为N,则方式3的输出为方波,周期是N个CLK脉冲。在这种方式,当CPU设置控制字后,输出将为高,在写完计数值后就自动开始计数,输出保持为高;当计数到一半计数值时,输出变为低,直至计数到0,输出又变高,重新开始计数。如图8-14所示。n方式3的主要特点是:n(1)若计数值为偶数,在装入计数值后,每一个CLK脉冲都使计数值减
15、2,当计数值减到0时,一方面使输出改变状态,另一方面又重新装入计数值开始新的计数,该过程就这样周而复始地进行 n若计数值为奇数,则在装入计数值后的第一个CLK脉冲使计数器减1,其后每一个CLK脉冲使计数器减2。当计数到0时,改变输出状态,同时重新装入计数值。这以后的第一个CLK脉冲使计数器减3,以后每一个CLK脉冲,计数器仍减2,直到计数器再次到0时,输出恢复为高,重复上述的过程,如图8-15所示。所以,如果计数值N是奇数,则输出有(N+1)/2个CLK脉冲周期为高,而在(N-1)/2脉冲周期为低。即OUT为高将比其为低多一个CLK周期时间。图8-15 方式3在计数值为奇数时的波形n(2)GA
16、TE信号能使计数过程重新开始。GATE=1允许计数,GATE=0禁止计数。如果在输出OUT为低期间,GATE=0,OUT将立即变高,停止计数。当GATE变高以后,计数器将重新装入初始值,重新开始计数。如图8-16所示。n(3)若在计数期间写入一个新的计数值,并不影响现行的计数过程。但是若在方波半周期结束之前和新计数值写入之后收到GATE脉冲,计数器将在下一个CLK脉冲时装人新的计数值并以这个计数值开始计数。否则,新计数值将在现行半周结束时装入计数器。8.3.5 方式4软件触发选通n在这种方式,当写入控制字后,输出OUT信号为高电平(原为高则保持为高,原为低则变为高)。当写入计数值后立即开始计数
17、(相当于软件启动),当计数到0后,输出变低,经过一个输入时钟周期,输出又变高。计数器停止计数。故这种方式计数也是一次性的,只有在输入新的计数值后,才能开始新的计数,如图8-17所示。方式4有如下特点:n(1)CPU写入计数值后的下一个CLK脉冲,把计数值写入计数器,再下一个CLK脉冲开始减数。因此,若设置的计数值为N,则是在写了计数值后的N+1个脉冲,才输出一个负脉冲。n(2)当GATE=1时允许计数,而GATE=0时禁止计数。所以,要做到软件启动,则GATE应保持为1。GATE信号不影响输出,如图8-18所示。n(3)若在计数过程中,改变计数值,则按新的计数值重新开始计数,如图8-19所示。
18、n若计数值是双字节,则在设置第一字节时停止计数,在设置第二字节后,按照新的计数值开始计数。8.3.6 方式5硬件触发选通n在这种方式,设置了控制字后,输出OUT信号为高电平。在设置了计数值后,计数器并不立即开始计数,而是由门控脉冲的上升沿触发启动。当计数到0时,输出变为低电平,经过一个CLK脉冲,输出恢复为高电平,停止计数。要等到下次门控脉冲的触发才能再计数,如图8-20所示。n方式5有如下特点:n(1)若设置计数值为N,则在门控脉冲触发后,经过N+1个CLK脉冲,才输出一个负脉冲。n(2)若在计数过程中使用门控脉冲,则使计数器重新开始计数,但对输出的状态没有影响,如图8-21所示。n(3)若
19、在计数过程中改变计数值,只要没有门控信号的触发,不影响计数过程。当计数到0后,若有新的门控信号的触发,则按新的计数值计数,如图8-22所示。n但若在写入了新的计数值后,在没有计数到0之前,有新的门控脉冲触发,则立即按新的计数值重新开始计数。8.3.7 8253工作方式小结n8253有6种不同的工作方式,由于它们的特点不同,因而应用的场合也就不同。n1输出OUT信号的初始状态n在6种方式中,方式0在写入控制字后OUT输出为低电平;其他5种方式,都是在写入控制字后OUT输出为高电平。n2计数值的设置n任一种方式,只有在写入计数值后才能开始计数,方式0、2、3和4都是在写入计数值后,计数过程就开始了
20、,而方式1和5需要外部触发启动,才开始计数。在不同工作方式下,计数值N对输出波形的影响是不同的,如表8-2所示。n表8-2 计数值N与输出波形n在6种方式中,只有方式2和方式3是连续计数;其他4种方式都是一次性计数,要继续工作需要重新启动。方式0、方式4由写入计数值(软件)启动;方式1、方式5要由外部信号(硬件)启动。3门控信号的作用 n8253在不同方式下门控输入信号GATE的作用,如表8-3所示。nGATE输入信号总是在CLK输入时钟的上升沿被采样。在方式0、2、3、4中,GATE输入信号是电平起作用,逻辑电平在CIK的上升沿采样。在方式1、2、3、5中,GATE输入信号是上升沿起作用。在
21、这种情况下,GATE信号的上升沿使计数器内部的一个边沿敏感的触发器置位,在下一个CLK脉冲的上升沿采样,采样之后,这个触发器被复位。这样不管GATE的上升沿何时出现总能被检测到,而且对GATE高电平的持续时间没有要求。在方式2和方式3中,GATE信号的上升沿和电平都可以起作用。4在计数过程中改变计数值n8253在不同方式时都可以在计数过程中写入计数值,但它的作用在不同方式时有所不同,如表8-4所示。表中的立即有效是指写入计数值后的下一个CLK脉冲以后,新的计数值开始起作用。5计数到0后计数器的状态n计数器减到0后并不停止不动。在方式0、1、4、5,计数器计到后,都从这个最大计数值(十六进制的0
22、FFFFH和BCD的9999)继续倒计数。方式2与方式3是连续计数,计数器自动装入计数值继续计数。8.4 8253的初始化n要使用8253必须首先进行初始化编程,初始化编程的内容为:必须先写入每一个通道的控制字,然后写入通道的计数值。如前所述,在有些方式下,写入计数值后此计数通道就开始工作了,而有的方式需要外界门控信号的触发启动。n在初始化编程时,某一通道的控制字和计数值,是通过两个不同的端口地址写入的。任一个通道的控制字都写入至控制字寄存器(地址总线低两位A1A0=11),由控制字中的D7D6来确定是哪一个通道的控制字;而计数值是由各个通道的端口地址写入的。n初始化编程的步骤为:n(1)写入
23、通道控制字,规定通道的工作方式。n(2)写入计数值。n1)若规定只写低8位,则写入的为计数值的低8位,高8位自动置0。n2)若规定只写高8位,则写入的为计数值的高8位,低8位自动置0。n3)若是16位计数值,则分两次写入,先写入低8位,再写入高8位。n例如,若要用通道0,工作在方式1,按二十进制计数,计数值为5080H。则初始化编程的步骤如下。(1)确定通道控制字,控制字格式如下:(2)计数值的低8位为80H。(3)计数值的高8位为50H。若端口地址为F8HFBH,则初始化程序为:nMOV AL,33HnOUT 0FBH,ALnMOV AL,80HnOUT 0F8H,ALnMOV AL,50H
24、 nOUT 0F8H,AL8.5 8253的读操作nCPU可用输入指令读取8253任一个通道的计数值。CPU读到的是执行输入指令瞬间计数器的现行值。但8253的计数器是16位的,所以要分两次读至CPU,因此,若不设法锁存,则在输入过程中,计数值可能已经变化了。要锁存有两种办法:n(1)利用GATE信号使计数过程暂停,然后读取计数值。n(2)向8253控制字地址送一个计数值锁存命令,然后读取计数值。n计数值锁存命令是控制字的一种特殊形式。锁存命令的D7D6编码,决定所要锁存的计数通道。而锁存命令的D5D4必须为00,这是锁存命令的标志。锁存命令的低4位可以为全0,因此,3个计数器的锁存命令分别为
25、:通道0为00H,通道1为40H,通道2为80H。n若要读取通道1的计数值,其程序段为:nMOV AL,40H;计数器1的锁存命令nOUT 0FBH,AL;写入至控制字寄存器nIN AL,0F9H;读低8位nMOV CL,AL ;存于CL中nIN AL,0F9H;读高8位nMOV CH,AL ;存于CH中8.6 Intel 8254nIntel 8254是Intel 8253的改进型,因此它的操作方式以及引脚与8253完全相同。它的改进主要反映在两个方面:n(1)8254的计数频率更高。8254计数频率可达到6MHz,8254-2频率可高达10MHz。n(2)8254多了一个读回命令,需要时可
26、以写入控制字寄存器,其格式如下:这个命令可以令3个通道的计数值都锁存(在8253中要3个通道的计数值都锁存,需写入3个命令)。n另外,8254中每个计数器都有一个状态字可由读回命令令其锁存,然后由CPU读取。n状态字的格式如下:n其中,D5D0即为写入此通道的控制字的相应部分。D7反映了该计数器的输出引脚OUT信号的状态,输出(OUT)为高电平,则D7=1;输出为低电平,则D7=0。D6反映预置寄存器中的计数值是否已经写入计数单元中。当向通道写入控制字以及计数值后,则状态字节中的D6=1;只有当计数值已经写入计数单元后,D6=0。8.7 8253在PC机中的应用nIBMPC/XT机中使用了1个
27、8253,系统中8253的端口地址为40H43H,3个通道的时钟输入频率为1.19318MHz(系统时钟PCLK的二分频)。3个计数通道分别用于日时钟计时,DRAM刷新定时和扬声器的音调控制。8253在PC/XT机中的定时逻辑如图8-23所示 n1计数器0n门控GATE0接+5V为常启状态。OUT0输出接8259A的IRQ0,用作XT中日时钟的中断请求信号。设定计数器0为方式3,计数值写入0,产生最大的计数初值65536,因而输出信号频率为1.19318MHz65536=18.206Hz,即每秒产生18.2次中断请求,或称为每隔55ms(54.925493ms)申请一次日时钟中断。nMOV A
28、L,36H;设定计数器0为工作方式3,采用二进制计数,以先低字节后高字节顺序n 写入计数值。nOUT 43H,AL;写入控制字nMOV AL,0;计数值 nOUT 40H,AL;写入低字节计数值nOUT 40H,AL;写入高字节计数值n2计数器1n门控GATE1接+5V为常启状态。输出OUT1从低变高使触发器置1,Q端输出一正电位信号,作为内存刷新的DMA请求信号DRQ0,DMA传送结束(一次刷新),由DMA响应信号将触发器复位。nDRAM每个单元要求在2ms内必须被刷新一次。实际芯片每次刷新操作完成512个单元的刷新,故经128次刷新操作就能将全部芯片的64KB刷新一遍。由此可算出每隔2ms
29、128=15.6ms进行一次刷新操作,将能保证每个单元在2ms内实现一遍刷新。这样,将计数器1置成方式2,计数初值为18,每隔180.838ms=15.084ms产生一次DMA请求,满足刷新要求。nMOV AL,54H;定计数器1为工作方式2,采用二进制计数,只写入低8位nOUT 43H,AL;写入控制字nMOV AL,18;数值为18nOUT 41H,AL;写入计数值n3计数器2n微型计算机系统中,计数通道2的输出加到扬声器上,控制它发声,作为机器的报警信号或伴音信号。门控GATE2接并行接口PB0位(TIM2 GATE SPK),用它控制通道2的计数过程。PB0受I/O端口地址61H的D0
30、位控制,在XT机中是并行接口电路8255的端口PB0位。输出OUT2经过一个与门,这个与门受PB1位(SPK DATA)控制。PB1受I/O端口地址61H的D1位控制,XT机中是8255的PB1位。所以,扬声器可由PB0或PB1分别控制发声。n(1)由PB1位控制发声。此时计数器2不工作,因此OUT2为高电平,由PB1产生振荡信号控制扬声器发声。但由于它会受系统中断的影响,使用不太方便。n(2)由PB0位控制发声。由PB0通过GATE2控制计数器2的计数过程,输出OUT2信号产生扬声器的声音音调。n例如,ROM-BIOS中有一个声响子程序BEEP,它将计数器2编程为方式3,作为方波发生器输出约
31、1KHz的方波,经滤波驱动后推动扬声器发声。nBEEP PROCn MOV AL,10110110B;设定计数器2为方式3,采用二进制计数n OUT 43H,AL ;按先低后高顺序写入16位计数值n MOV AX,0533H ;初值为0533H=1331,1.19318MHz1331=896Hzn OUT 42H,AL ;写入低8位n MOV AL,AHn OUT 42H,AL ;写入高8位n IN AL,61H ;读8255的B口原输出值n MOV AH,AL ;存于AH寄存器n OR AL,03H ;使PB1和PB0位均为1n OUT 61H,AL ;输出以使扬声器能够发声n SUB CX
32、,CXnG7:LOOP G7 ;延时n DEC BL ;BL为发声长短的入口条件n JNZ G7 ;BL=6为长声,BL=1为短声n MOV AL,AHn OUT 61H,AL ;恢复8255的B口值,停止发声n RETnBEEP ENDP ;返回8.8 定时计数器的应用实例n1利用扩展芯片实现对外部事件的计数n通过PC机系统总线在外部扩展一片Intel 8253,利用其通道0记录外部事件的发生次数,每输入一个高脉冲表示事件发生一次。当事件发生100次后就向CPU提出中断请求(边沿触发)。假设此片8253片选信号I/O地址范围为200H207H,如图8-24所示。n;8253初始化程序段nMO
33、V DX,203H;设置方式控制字nMOV AL,10H;设定为工作方式0,二进制计数,只写低字节计数值nOUT DX,ALnMOV DX,200H ;设置计数初值nMOV AL,64H ;计数初值为100nOUT DX,ALn2为A/D转换电路提供可编程的采样信号n使用一片8253为A/D转换电路提供采样信号,可以设置采样频率,可以决定采样信号的持续宽度,如图8-25所示。n让计数器0工作在方式2,计数器1工作在方式1,计数器2工作在方式3。3个计数器的计数初值分别为cnt0、cnt1、cnt2,且都小于256。设时钟频率为F,3个计数器和控制I/O地址依次为70H、72H、74H、76H。
34、n从图中可以看出,由于将OUT2输出作为CLK1时钟,所以CLK1的频率为Fcnt2;输出OUT1的脉冲周期为(cnt1cnt2)F:输出OUT0的脉冲频率为Fcnt0,门控信号GATE0又受OUT1的控制。n当对3个计数器设置好之后,将手动开关(或继电器)从低电平接到+5V,计数器开始工作,输出OUT0送A/D转换电路。A/D转换器便按Fcnt0的采样频率进行工作,每次采样的持续时间为(cnt1cnt2)F。n;计数器0的编程n MOV AL,14HA/D转换器时钟+5VCLK0nGATE0nOUT0CLK1nGATE1nOUT1CLK2nGATE2nOUT2n OUT 76H,ALn MO
35、V AL,cnt0n OUT 70H,ALn;计数器1的编程n MOV AL,52Hn OUT 76H,ALn MOV AL,cnt1n OUT 72H,ALn;计数器2的编程n MOV AL,96Hn OUT 76H,ALn MOV AL,cnt2n OUT 74H,ALn38253定时功能的应用n设某应用系统中,系统提供一个频率为10KHz的时钟信号,要求每隔10ms完成一次扫描键盘的工作。为了提高CPU的工作效率,采用定时中断的方式进行键盘扫描。n在系统中,采用8253定时器的通道0来实现这一要求。将8253芯片的CLK0接到系统的10KHz时钟上,OUT0输出接到CPU的中断请求线上,
36、8253的端口地址为10H13H,如图8-26所示。n(1)选择工作方式。由于系统每隔10ms完成一次动作,则扫描键盘的动作频率为100Hz,可选用工作方式2来实现。当8253定时器工作在方式2时,在写入控制字与计数初值后,定时器就启动工作,每到10ms时间,即计数器减到l时,输出端0UT0输出一个CLK周期的低电平,向CPU申请中断,完成键盘扫描,同时按原设定值重新开始计数,实现了计数值的自动重装。n(2)确定计数初值。已知CLK0=10KHz,则TCLK0=0.1ms,n所以,计数初值N=TOUT0/TCLK0=10ms/0.1ms=100,即64H。n(3)初始化编程。根据以上要求,可确定8253通道0的方式控制字为00010100B,n初始化程序段如下:nMOV AL,14H;通道0,写入初值低8位,高8位置0,方式2,二进制计数nOUT 13H,AL;写入方式字到控制字寄存器nMOV AL,64HnOUT 10H,AL;写入计数初值低8位到通道0