资源描述
第八章 可编程计数器/定时器8253及其应用,Intel 8253是一种完成计数/定时的芯片,被 称为可编程间隔定时器。它内部具有3个独立的 16位计数器通道,通过对它进行编程,每个通 道均可按6种不同的方式工作,并且都可以按2 进制或10进制格式进行计数,最高计数频率能 达到2MHz。8253还适用于许多其他的场合,如 用作可编程方波频率产生器、分频器、程控单 脉冲发生器等等。,8-1 8253的工作原理,一、8253的内部结构和引脚信号,1.数据总线缓冲器,数据总线缓冲器是8253与系统数据总线相连接时用的接口电路,它由8位双向三态缓冲器构成,CPU用输入/输出指令对8253进行读/写操作的信息,都经过8位数据总线D7 D0传送,这些信息包括:,(1)CPU在对8253进行初始化编程时,向它写入的控制字。,(2)CPU向某一计数器写入的计数初值。,(3)从计数器读出的计数值。,2.读/写控制逻辑,读/写控制逻辑接收系统控制总线送来 的输入信号,经组合后形成控制信号,对各部分操作进行控制。可接收的信号有:,下面我们来讨论一下8253与8086 CPU的 连接问题以及端口地址的选择。,3. 计数器02,8253内部包含3个完全相同的计数器/定时器通道,对3个通道的操作完全是独立的。每个通道都包含一个8位的控制字寄存器、一个16位的计数初值寄存器、一个计数器执行部件(实际的计数器)和一个输出锁存器。,(1)计数,计数是指对CLKx引脚输入的脉冲个数进行计数。这些脉冲的间隔可以不相等。可以按2进制或10进制(BCD码)格式进行计数,采用减法计数法。即从设定的初始值开始,每输入一个脉冲信号,计数器就减1,当减到0时,便从OUTx引脚输出一个脉冲信号。输出信号的波形可由程序设置,同时GATEx引脚上的门控信号可以控制是否允许计数器开始计数。,(2)定时,定时是指设定的定时时间到来时,便从OUTx引脚输出一个脉冲信号。 定时也是通过对CLKx引脚输入的脉冲个数进行计数而实现的。但这些脉冲信号必须是精确的时钟脉冲。 定时时间时钟脉冲周期tc计数初值n,输入到8253引脚CLKx的时钟频率不能大 于2MHz!,4. 控制字寄存器,控制字寄存器是一个8位的寄存器,由CPU通过输出指令对它进行写入控制字,用来选择计数器通道、工作方式、读写格式和数制。,二、初始化编程步骤和门控信号的功能,对8253芯片进行初始化编程时,需按下 列步骤进行:,(1)写入控制字,用输出指令向控制字寄存器写入一个控 制字,以选定计数器通道,规定计数器的工 作方式和计数格式。写入控制字还起到复位 作用,使输出端OUT变为规定的初始状态, 并使计数器清0。,(2)写入计数初值,通过输出指令向指定通道写入计数初始 值,数值要符合控制字有关格式的规定。它可以是8位或16位。若是8位,用一次输出指令即可完成设置;若是16位数据,则必须用两次输出指令完成设置,先送低8位,后送高8位。 当计数初值为0时,也要分成两次写入,因为在2进制计数时,0表示65536;在BCD码计数时,0表示10000。,由于端口地址独立,3个通道的编程次序没有规定,可任意设置。,例如,在某微机系统中,8253的3个计数器的端口地址分别为3F0H、3F2H、3F4H,控制字寄存器的端口地址为3F6H,要求8253的通道0工作于方式3,并已知对它写入的计数初值n1234H,采用BCD码格式进行计数,则初始化程序为:,在计数初值写入8253后,还要经过一个时钟脉冲的上升沿和下降沿,才能将计数初值装入实际的计数器,然后在门控信号GATE的控制下,对从CLK引脚输入的脉冲进行递减计数。,2. 门控信号控制功能,三、8253的工作方式(6种),1. 方式0计数结束中断方式,2. 方式1可编程单稳态输出方式,3. 方式2比率发生器,4. 方式3方波发生器,5. 方式4软件触发选通,6. 方式5硬件触发选通,8-2 8253的应用举例,一、8253定时功能的应用例子,1. 用8253产生各种定时波形,在某个以8086为CPU的系统中使用了一块 8253 芯片,通道的基地址为 310H,所用的时钟脉冲频率为1MHz。要求3个计数通道分别完成以下功能:,(1)通道0工作于方式3,输出频率为2KHz 的方波; (2)通道1产生宽度为480s的单脉冲; (3)通道2用硬件方式触发,输出单脉冲, 时间常数为26。, 通道0工作于方式3,即构成一个方波发生器,它的控制端GATE0需接5V,为了输出2kHz的连续方波,应使时间常数N0 : N01MHz/2kHz500=1F4H,MOVDX,316H MOVAL,00110111B OUTDX,AL MOVDX,310H MOVAL,00H OUTDX,AL MOVAL,05H OUTDX,AL, 通道1工作于方式1,即构成一个单稳态电路,由GATE0的正跳变触发,输出一个由时间常数决定的负脉冲,时间常数N1 : N1480s/1s480,MOVDX,316H MOVAL,01110011B OUTDX,AL MOVDX,312H MOVAL,80H OUTDX,AL MOVAL,04H OUTDX,AL,控制字, 通道2工作于方式5,即由GATE0的正跳变触发减1计数,在计到0时形成一个宽度与时钟周期相同的负脉冲,此后若再次出现正跳变,又能产生一个负脉冲。(N226),MOVDX,316H MOVAL,10011011B OUTDX,AL MOVDX,314H MOVAL,26H OUTDX,AL,二、8253计数功能的应用例子,8253可以用于各种需要进行计数的场合。下面,我们用一个具体的例子来说明它在这方面的应用。假设一个自动化工厂需要统计在流水线上所生产的某种产品的数量,可采用8086微处理器和8253等芯片来设计实现这种自动计数的系统。下面介绍这种自动计数系统的电路和控制软件的设计方法。,1. 硬件电路设计,这个自动计数系统由8086 CPU控制,用8253 作计数器。此外,还要用到一片 8259A中断控制器芯片和若干其他电路。图 8-12 仅给出了计数器部分的电路图。,2. 初始化编程,对计数器1: 工作于方式0,按BCD码计数,先读/写低字节,后读/写高字节,则 控制字01110001B,如选取计数初值n499,则经过n1个脉冲,也就是500个脉冲,OUT1端输出一个正跳变。它作用于8259A的IR0端,通过8259A的控制,向CPU发出一次中断请求,表示计满了500个数,在中断服务程序中使工件总数加上500。,3. 计数值的读取,在许多用到8253计数功能的场合,常常需要读取计数器的现行计数值。在读取计数器现行值时,计数过程仍在进行,而且不受CPU的控制。因此在CPU读取计数器的输出值时,可能计数器的输出正在发生改变,即数值不稳定,可能导致错误的读数。为了防止发生这种情况,必须在读数前设法终止计数或将计数器输出端的现行值锁存。这可以采用下面两种方法:,一种方法是在读数前用外部硬件计数脉冲信号,或者使门控信号变为低电平,迫使8253停止计数。这种方法的缺点是需要硬件电路配合。此外,由于外部事件源被切断或正常的计数过程被禁止,干扰了实际的计数过程。因此,一般不宜采用。,另一种方法是先用计数器锁存命令锁存现行计数值,然后将它读出。这种方法完全由软件来实现,并可随时读取计数值,而且不会干扰正常的计数过程和引起错误,是常用的方法。此方法的程序段如下:,练习,设在8086系统中,8253A的控制口地址为36H,三个计数通道的端口地址为30H、32H和34H。,1、假定8253A的计数器2工作在方式0,按二进制计数,计数初值为4 ,对其初始化编程。,2、假设8253A的计数器1工作在方式3,按二进制计数,计数初值为7265H ,对其初始化编程。,2、 MOV AL,76H ;设置控制字 OUT 36H,AL ;控制字写入计数器1的控制单元 MOV AL,65H ;设置计数器低字节 OUT 32H,AL ;低字节写入计数器1的CR MOV AL,72H ;设置计数器高字节 OUT 32H,AL ;高字节写入计数器1的CR,1、 MOV AL,90H ;设置控制字 OUT 36H,AL ;写入计数器2的控制单元CU MOV AL,4 ;设置计数初值 OUT 34H,AL ;初值写入计数器2的CR,3、某一计算机应用系统采用8253芯片的计数器0作频率发生器,输出频率为500Hz;用计数器1产生1000H z的连续方波信号,输入8253的时钟频率为1.19MHs。 试问:初始化时送到计数器0和计数器1的计数初值分别为多少?计数器1工作于什么方式下?,
展开阅读全文