《可变程计数器8253及其应用.ppt》由会员分享,可在线阅读,更多相关《可变程计数器8253及其应用.ppt(51页珍藏版)》请在三一办公上搜索。
1、第8章 可编程计数器/定时器8253及其应用,2、可编程计数器/定时器(1).计数器:(2).定时器,1、微机定时方法(1).软件定时延迟子程序,占用CPU时间(2).硬件定时用计数器/定时器8253,一、微机定时方法 1.软件定时延迟子程序 2.硬件定时用计数器/定时器8253 二、可编程计数器/定时器的工作原理 功能:一是为计数;一是为定时。8253的用处:1)在多任务的分时系统中用来作为中断信号实 现程序的切换;2)可以往I/O设备输出精确的定时信号;3)作为一个可编程的波特率发生器;4)实现时间延时。,第8章 可编程计数器/定时器8253及其应用,计数器/定时器8253特点 三个通道,
2、可单独使用片内寻址 A1 A0=00、01、10、11 对应:通道0、1、2和控制口地址工作方式:6种,8-1 8253的工作原理,一、8253的内部结构和引脚信号,1.数据总线缓冲器 往计数器设置计数初值;从计数器读取计数值;往控制寄存器设置控制字。2.读/写逻辑电路 A1 A0:端口选择 0 0:通道0(0号计数器)0 1:通道1(1号计数器)1 0:通道2(2号计数器)1 1:控制字寄存器,3.通道0、通道1、通道2 计数器0:CLK0计数器0的时钟输入。GATE0计数器0的门脉冲控制输入。OUT0计数器0的输出。计数器1:CLK1,GATE1,OUT1 计数器2:CLK2,GATE2,
3、OUT2,8253 编程结构,4.控制寄存器 8253控制寄存器的格式,SC1 SC0 RW1 RW0 M2 M1 M0 BCD,1-计数值为BCD码格式0-计数值为二进制格式,M2 M1 M0 模式选择 0 0 0 模式0 0 0 1 模式1 x 1 0 模式2 x 1 1 模式3 1 0 0 模式4 1 0 1 模式5,0 0-对计数器进行锁存0 1-只读/写低8位字节 1 0-只读/写高8位字节1 1-先读/写低8位字节,再读/写高8位字节.,0 0-选计数器00 1-选计数器11 0-选计数器21 1-无意义,8253内部包含3个完全相同的计数器定时器通道,对3个通道的操作完全是独立的
4、。每个通道都包含一个8位的控制字寄存器、一个16位的计数初值寄存器、一个计数器执行部件(实际的计数器)和一个16位的输出锁存器。执行部件实际上是一个16位的减法计数器,不能直接对其进行读写操作。,对计数器02的写入操作实际是写各自的计数初值寄存器。对计数器02的读出操作实际是读各自的计数输出锁存器,计数输出锁存器的值常跟随计数执行部件变化。计数初值寄存器和输出锁存器都是16位寄存器,它们均可被分成高8位和低8位两个部分来读写。执行部件自身能够从初值寄存器获得计数初始值,并能把当前的计数值锁存到输出锁存器中,必要时CPU可对它执行读操作,以了解某个时刻计数器的瞬时值。,每个通道工作时,都是对输入
5、到CLK引脚上的脉冲按二进制或十进制(BCD码)格式进行计数。计数采用倒计数法,先对计数器预置一个初值,再把初值装入实际的计数器。装入初始值的方法有两种:在门控信号GATE从低电平变为高电平的上升沿时刻,会把初值寄存器的内容送到执行部件;而当GATE保持不变时,在对初值寄存器进行写入操作后,在下一个CLK的下降沿把初值寄存器的内容送到执行部件。,然后,开始递减计数。即每输入一个时钟脉冲,计数器的值减1,当计数器的值减为预定的数值时,便从OUT引脚输出一个脉冲信号。输出信号的波形主要由工作模式决定,同时还受到从外部加到GATE引脚上的门控信号控制,它决定是否允许计数。,当用8253作外部事件计数
6、器时,在CLK脚上所加的计数脉冲是由外部事件产生的,这些脉冲的间隔可以是不相等的。如果要用它作定时器,则CLK引脚上应输入精确的时钟脉冲。这时,8253所能实现的定时时间,决定于计数脉冲的频率和计数器的初值,即:定时时间t 时钟脉冲周期T 所计时钟脉冲个数 时钟脉冲周期T 预置的计数初值n,例如:在某系统中,8253所使用的计数脉冲频率为0.5MHz,即脉冲周期T2s,如果给8253的计数器预置的初值n500,则当计数器计到数值为0时,定时时间t2s5001ms。,二、初始化编程步骤和门控信号的功能,1、8253的初始化编程步骤,(1)写入控制字用输出指令向控制字寄存器写入一个控制字,以选定计
7、数器通道,规定该计数器的工作模式和计数格式。写入控制字还起到复位作用,使输出端OUT变为初始状态,并使计数器清0。三个计数通道共用同一个控制字端口地址:A1 A0=1 1,用控制字的标志位SC1 SC0 区别不同通道。,对3个计数器通道的编程没有先后顺序的规定。对每个计数器的编程先写入控制字,后写入计数初值。,(2)写入计数初值用输出指令向选中的计数器端口地址中写入一个计数初值,初值设置时要符合控制字中有关格式的规定。初值可以写入8位数据,也可以写入16位数据。若是8位数,只要用一条输出指令就可完成初值的设置。如果是16位数,则必须用两条输出指令来完成,规定先送低8位数据,后送高8位数据。由于
8、计数器是先减1,再判断计数值是否为零,所以写入计数初值为0,实际就等于10000H,在二进制计数时,它表示65536,BCD计数时,它表示10000。,例:在某微机系统中,8253的3个计数器的端口地址分别为3F0H、3F2H和3F4H,控制字寄存器的端口地址为3F6H,要求8253的通道0工作于模式3,并已知对它写入的计数初值n1234H,则初始化程序为:MOV AL,00110111B;控制字;选择通道0,先读写低字节,后高字节MOV DX,3F6H;指向控制口OUT DX,AL;送控制字MOV AL,34H;计数值低字节MOV DX,3FDH;指向计数器0端口0UT DX,AL;先写入低
9、字节MOV AL,12H;计数值高字节OUT DX,AL;后写入高字节,三、8253的工作模式(1)方式0计数结束产生中断 一次定时或计数,重写初值,启动新一轮的计数(2)方式1可编程的单脉冲(单稳)触发器 GATE边沿触发,启动新一轮计数(3)方式2分频器(速度波发生器)具有计数初值重装能力(4)方式3方波发生器 具有计数初值重装能力(5)方式4软件触发的选通信号发生器 一次定时,重写初值,启动新一轮的计数(6)方式5硬件触发的选通信号发生器 GATE边沿触发新一轮计数,方式0计数结束产生中断,模式0 注:计数结束产生中断,在GATE=1时,执行部件获得初值之后便开始计数。在计数过程中,如果
10、GATE=0,则暂停计数,但不影响OUT的状态;当GATE=01,执行部件从刚才暂停的计数值继续计数,直到计数结束,OUT=1;在计数过程中,如果写入新的计数初值,则停止计数,在下一个CLK脉冲下降沿后,新的初值送到计数执行部件,此后,计数器按新的初值重新计数。按模式0进行计数时,计数器只计一遍。当计数器计到0时,不会自动再装入初值重新开始计数,其输出将保持高电平。,方式1单稳态输出,高,在计数过程中,若GATE产生负跳变或等于低电平,不会影响计数过程的进行。但若在计数器回零前,GATE又产生从低到高的正跳变,则8253又将初值N装入计数器执行部件,重新开始计数,其结果会使输出的单脉冲宽度加宽
11、。在计数过程中,写入新的计数初值,不影响当前计数过程,除非再来一个GATE上升沿,则就会装入新的初值,重新开始计数。可以通过GATE上升沿多次触发计数过程。,模式1 注:单脉冲(单稳)触发器,方式2分频器,模式2 注:分频器,在计数过程中,当GATE变为低电平时,将迫使OUT变为高电平,并禁止计数;GATE从低电平变为高电平,也就是GATE端产生上升沿时,则在下一个时钟脉冲时,把预置的计数初值装入计数器,从初值开始递减计数。门控信号GATE可用来使多个计数器同步。在操作过程中,任何时候都可由CPU重新写入新的计数值,它不会影响当前计数过程的进行。模式2具有自动重装初值功能,当计数器计数到0的同
12、时把初值寄存器的内容重新装入计数执行部件,自动重新计数。该过程自动循环,直到GATE=0或改变计数器的模式。,方式3方波发生器,模式3 注:方波发生器,在计数过程中,当GATE变为低电平时,将迫使OUT变为高电平,并禁止计数;GATE从低电平变为高电平,也就是GATE端产生上升沿时,则在下一个时钟脉冲时,把预置的计数初值装入计数器,从初值开始递减计数。门控信号GATE可用来使多个计数器同步。在操作过程中,任何时候都可由CPU重新写入新的计数值,它不会影响当前计数过程的进行。只有下一个计数周期才会按新写入的初值计数。模式3具有自动重装初值功能,当计数器计数到0的同时把初值寄存器的内容重新装入计数
13、执行部件,自动重新计数。该过程自动循环,直到GATE=0或改变计数器的模式。,方式4软件触发的选通信号发生器,模式4 注:软件触发选通模式,在计数的过程中GATE变为低电平,则停止计数,当GATE变为高电平后,又重新将初值装入计数器,从初值开始计数,直至计数器的值减为0时,从OUT端输出一个负脉冲。在操作过程中,重新写入新的计数初值,在下一个时钟脉冲时,将新的计数初值装入执行部件,并从新的计数值开始计数。模式4不具有自动重装初值功能,当计数器计数到0输出负脉冲以后,该过程结束。要重新开始计数,必须再次写入初值。由于计数过程是由软件把计数初值装入计数寄存器来触发的,所以模式4称为软件触发选通模式
14、。,方式5硬件触发的选通信号发生器,模式5 注:硬件触发选通模式,在计数过程中,GATE又产生从低到高的正跳变,经过一个CLK周期,初值送入执行部件,然后再进行减1计数直到为0,输出负脉冲。在计数过程中,写入新的计数初值,没有GATE触发信号,不影响当前计数过程。模式5不具有自动重装初值功能,当计数器计数到0输出负脉冲以后,该过程结束。要重新开始计数,必须再次给出门控信号上升沿。由于计数过程是由GATE上升沿来触发的,所以模式5称为硬件触发选通模式。,例如,设定计数器为先读低字节、后读高字节方式,当前计数值为0300H,则读到的低字节为00H,在读低字节的过程中,又来一个脉冲,使得当前计数值变
15、为02FFH,这时读取高字节便得到02H,结果便得到当前值为0200H,出现错误。为了防止这种情况发生,可以采用两种方法:暂停计数或者锁存计数器的当前值。,暂停计数可以用外部硬件切断计数脉冲信号,或者使门控信号变为低电平,迫使8253停止计数。这种方法的缺点是需要硬件电路配合。此外,由于外部事件源被切断或正常的计数过程被禁止,干扰了实际的计数过程,可能出现漏计情况。因此,这不是一种好的方法。但这种方法可以实现多个计数器的同步比较。,8253计数值的读取,在许多用到8253的计数功能的场合,常常需要读取计数器的当前计数值。在计数初值设为N的情况下,如果当前计数器的计数值为M,则在计数模式下(模式
16、0),已经完成的个数等于N+1-M。在读计数器当前值时,计数过程仍在进行,而且不受CPU的控制。因此,在CPU读取计数器的输出值时,可能计数器的输出正在发生改变,可能导致错误的读数。,另一方法是在读出数据之前,先锁存当前计数值。当需要读取计数器的现行值时,先向8253送一个锁存命令,即把RL1RL0=00的控制字写入8253的控制字端口,锁存命令字中的SC1SC0用来确定要锁存的是哪一个计数器,锁存命令字的低4位对锁存命令无影响,可以将它们置为0。8253立即把指定计数器的当前计数值锁存到输出锁存器中。,然后就可从相应的计数器的输出所存器中读取当前计数值。读取计数值的方法由对8253进行初始化
17、编程时所写入的控制字中的RL1RL0位来确定,当RL1RL001时,只读取计数器的低字节,RL1RL010时,只读取计数器的高字节,RL1RL011时,先读写计数器低字节,后读写高字节。,8253初始化方法:控制字计数初值:已知:CLK 的频率fc与定时的时间t.计数初值:n=fc t 例1:fc=1MHZ,最大计数初值:65536 一个定时器最大定时时间:N/fc=65536/106=0.065536s,8-2 8253应用举例,例2:设定时器0、定时器1工作于方式2,外部提供一个时钟,频率f=2MHZ。要求定时器1每5ms产生一个脉冲,定时器0每5s产生一个脉冲。1).一个定时器的最大定时
18、时间:65536/(2*106)=0.032768 s=32.768ms2).将定时器1的CLK1接2MHZ时钟,计数初值:3).将定时器1的OUT1端接到定时器0的CLK0端,定时器0的计数初值:,1用8253产生各种定时波形在某个以8086为CPU的系统中使用了一块8253芯片,通道的基地址为310H,所用的时钟脉冲频率为1MHz。要求3个计数通道分别完成以下功能:(1)通道0工作于方式3,输出频率为2kHz的方波;(2)通道l产生宽度为480s的单脉冲;(3)通道2用硬件方式触发,输出单脉冲,时间常数为26。,通道0工作于方式3,即构成一个方波发生器,它的控制端GATE0须接+5V,为了
19、输出2kHz的连续方波,应使时间常数N0lMHz2kHz=500。通道1工作于方式l,即构成一个单稳态电路,由GATE1的正跳变触发,输出一个宽度由时间常数决定的负脉冲。此功能一次有效,需要再形成一个脉冲时,不但GATE1脚上要有触发,通道也需重新初始化。需输出宽度为480s的单脉冲时,应取时间常数N1480sls=480。通道2工作于方式5,即由GATE2的正跳变触发减1计数,在计到0时形成一个宽度与时钟周期相同的负脉冲。此后,若GATE2脚上再次出现正跳变,又能产生一个负脉冲。,;通道0初始化程序 MOV DX,316H;控制口地址 MOV AL,00110111B;通道0控制宇,先读写低
20、字节,后高字节,方式3,BCD计数 OUT DX,AL;写人方式字 MOV DX,310H;通道0口地址 MOV AL,00H;低字节 OUT DX,AL;先写入低字节 MOV AL,05H;高字节 OUT DX,AL;后写入高字节,;通道1初始化程序 MOV DX,316H MOV AL,01110011B 通道1方式字,先读写低字节,后高字节,方式1,BCD计数 OUT DX,AL MOV DX,312H;通道1口地址 MOV AL,80H;低字节 OUT DX,AL MOV AL,04H;高字节 OUT DX,AL,;通道2初始化程序 MOV DX,316H MOV AL,1001101
21、1B;通道2控制字,只读写低字节,方式5,BCD计数 OUT DX,AL MOV DX,3l4H;通道2口地址 MOV AL,26H;低字节 OUT DX,AL;只写入低字节,8253计数功能的应用例子,8253计数功能的应用例子,选择计数器1工作于方式0,按BCD码计数,先读写低字节,后读写高字节,则控制字为?如要求每500个脉冲,通过通过8259A向CPU发出一次中断请求,则选取计数韧值n?每次中断表示计满了500个数,在中断服务程序中使工件总数加上500。中断服务程序执行完后,返回主程序,这时需要由程序把计数韧值499再次装入计数器1,才能继续进行计数。,8253计数功能的应用例子,设8
22、253的4个端口地址分别为F0H,F2H,F4H和F6H,则初始化程序为MOV AL,01110001B;控制字OUT0F6H,ALMOVAL,()OUT0F2H,ALMOVAL,04HOUT0F2H,AL,8253在PC/XT机中的应用,1计数器0实时时钟计数器0用作定时器,为系统提供时间基准。选用方式3(方波发生器),二进制计数。计数器初值n0,相当于65536,这样在输出端OUT可以得到序列方波,其频率为fn1.19318MH26553618.2 Hz。它经系统板上的总线IRQ0被直接送到8259A中断请求输入端,使计算机每秒钟产生18.2次中断,也就是每隔55毫秒请求一次中断。,2计数
23、器1动态RW刷新定时器计数器1它定时向DMA控制器提供动态RAM刷新请求信号。初始化设置成方式2(比率发生器),计数器预置的初值为18。这样,从OUT1端可输出负脉冲序列,其频率为1.19318MHz1866.2878kHz,周期为15.09s,OUT1输出的负脉冲的上升沿使D触发器U73置l,从Q端输出DRQ0信号,它被送到DMA控制器8237A-5的DREQ0端,作为通道0的DMA请求信号。在通道0执行DMA操作时对动态RAM进行刷新,8237A-5的回答信号使D触发器U73清0,这样每隔15.09s向8237A-5DMA控制器提出一次DMA请求由DMA控制器实施对动态RAM的刷新操作。,3.计数器2扬声器音调控制计数器2工作于方式3,对计数器预置的初值为n533H1331,OUT2输出方波频率为1.19318MHz1331896Hz。该计数器的GATE2不是接+5V而是受并行接口8255A-5的PB0端控制。当PB0送来高电平时,允许计数器2计数,使OUT2输出方波。该方波与8255A-5的PB1信号相与后,送到扬声器驱动电路,驱动扬声器发声。发声的频率由预置的初值n决定,发声时间的长短受PB1控制,当PB1=1时,允许发声,当PB1=0时,禁止发声。通过控制PB1与PB0的电平,就可以发出各种不同音调的声音。,作业,p.324:1,3,