1、Page 1,皖西学院 机械与电子工程学院,微机原理与接口技术,第八章 可编程计数器/定时器 8253及其应用,Page 2,8253工作原理:结构、引脚、工作方式 8253应用举例:定时功能、计数功能,内 容 提 要,第八章 可编程计数器/定时器 8253及其应用,Page 3,第八章 可编程计数器/定时器 8253及其应用,概 述,在微型计算机系统中,常需要用到定时功能。例如,按一定的时间间隔对动态RAM进行刷新;扬声器的发声;在计算机实时控制和处理系统中,按一定的采样周期对处理对象进行采样,或定时检测某些参数,对外部事件进行计数,等等,都需要定时信号。,实现定时功能主要有三种方法: 软件
2、定时 不可编程的硬件定时 可编程的硬件定时,第八章 可编程计数器/定时器8253及其应用 概述,Page 4,软件定时是最简单的定时方法,它不需要硬件支持,只要让机器循环执行某一条或一系列指令,这些指令本身并没有具体的执行目的,但由于执行每条指令都需要一定的时间,重复执行这些指令就会占用一段固定的时间。 利用这种方法定时,完全由软件编程来控制相改变定时时间,灵活方便,而且节省费用。 但CPU的利用率太低,在定时循环期间,CPU不能再去做任何其它有用的工作,而仅仅是在反复循环,等待预定的定时时间的到来,这在许多情况下是不允许的。比如,对动态存储器的定时刷新操作,只要处于开机状态,就需要一直不停地
3、进行下去,显然不能采用软件定时。,1. 软件定时,第八章 可编程计数器/定时器8253及其应用 概述,Page 5,555芯片是一种常用的不可编程器件,加上外接电阻和电容就能构成定时电路。这种定时电路结构简单,价格便宜,通过改变电阻或电容值,可以在一定的定时范围内改变定时时间。但这种电路在硬件已连接好的情况下,定时时间和范围就不能由程序来控制和改变,而且定时精度也不高。,2. 不可编程的硬件定时,3. 可编程的硬件定时,可编程定时器/计数器电路利用硬件电路和中断方法控制定时,定时时间和范围完全由软件来确定和改变,并由微处理器的时钟信号提供时间基准,这种时钟信号由晶体振荡器产生,故计时精确稳定。
4、,第八章 可编程计数器/定时器8253及其应用 概述,Page 6,用可编程定时器/计数器电路进行定时时,先要根据预定的定时时间,用指令对计数器/定时器芯片设定计数初值,然后启动芯片进行工作。 计数器一旦开始工作后,CPU就可以去做别的工作,等计数器计到预定的时间,便自动形成一个输出信号,该信号可用来向CPU提出中断请求,通知CPU定时时间已到,使CPU作相应的处理。或者直接利用输出信号去启动设备工作。 这种方法不但显著提高了CPU的利用率,而且定时时间由软件设置,使用起来十分灵活方便,加上定时时间又很精确,所以获得了广泛的应用。 系统也可以利用计数器/定时器芯片对外部事件进行计数。,第八章
5、可编程计数器/定时器8253及其应用 概述,Page 7,Intel 8253就是一种能完成上述功能的计数器/定时器芯片,被称为可编程间隔定时器(Programmable Interval Timer,PIT)。,4. 可编程计数器/定时器8253,8253内部具有3个独立的16位计数器通道,通过对它进行编程,每个计数器通道均可按6种不同的方式工作,并且都可以按2进制或10进制格式进行计数,最高计数频率能达到2MHz。 8253还可用作可编程方波频率产生器、分频器、程控单脉冲发生器等。,第八章 可编程计数器/定时器8253及其应用 概述,Page 8,5. 可编程计数器/定时器8254,Int
6、eI 8254是8253的增强型产品,它与8253的引脚兼容,功能几乎完全相同,不同之处在于:,8253的最大输入时钟频率为2MHz,而8254的最大输入时钟频率可高达5MHz,8254-2则为l0MHz。 8254有读回(read-back)功能,可以同时锁存13个计数器的计数值及状态值,供CPU读取,而8253每次只能锁存和读取一个通道的计数器,且不能读取状态值。,第八章 可编程计数器/定时器8253及其应用 概述,Page 9,8-1 8253的工作原理,一、8253的内部结构和引脚信号,图81 8253的内部结构,8-1 8253的工作原理 8253的内部结构和引脚信号,图8-2,Pa
7、ge 10,1数据总线缓冲器,数据总线缓冲器是8253与系统数据总线相连接时用的接口电路,由8位双向三态缓冲器构成,CPU用输入/输出指令对8253进行读/写操作的信息,都经8位数据总线D7D0传送,这些信息包括:CPU在对8253进行初始化编程时,向它写入的控制字。CPU向某一计数器写入的计数初值。从计数器读出的计数值。,8-1 8253的工作原理 8253的内部结构和引脚信号,Page 11,2读/写控制逻辑,接收系统控制总线送来的输入信号,经组合后形成控制信号,对各部分操作进行控制。可接收的信号有:CS 片选信号,低电平有效,由地址总线经I/O端口译码电路产生。只有当CS为低电平时,CP
8、U才能对8253进行连写操作。RD 读信号,低电平有效。当RD为低电平时,表示CPU正在读取所选定的计数器通道中的内容。WR 写信号,低电平有效。当WR为低电平时,表示CPU正在将计数初值写入所选中的计数通道中或者将控制字写入控制字寄存器中。A1A0 端口选择信号。在8353内部有3个计数器通道(02)和一个控制字寄存器端口。当A1A000时,选中通道0;A1A001时,选中通道1;A1A010时,选中通道2;A1A011时,选中控制字寄存器端口。,8-1 8253的工作原理 8253的内部结构和引脚信号,Page 12,注意: 如果8253与8位数据总线的微机相连,只要将A1A0分别与地址总
9、线的最低两位A1A0相连即可。 如果系统采用的是8086CPU,则数据总线为16位。CPU在传送数据时,总是将低8位数据送往偶地址端口,将高8位数据送到奇地址端口。反之,偶地址端口的数据总是通过低8位数据总线送到CPU,奇地址端口的数据总是通过高8位数据总线送到CPU。当仅具有8位数据总线的存储器或I/O接口芯片与8086的16位数据总线相连时,既可以连到高8位数据总线,也可以接在低8位数据总线上。在实际设计系统时,为了方便起见,常将这些芯片的数据线D7D0接到系统数据总线的低8位,这样,CPU就要求芯片内部的各个端口都使用偶地址(地址总线的A00)。应改用地址总线中的A2A1实现端口选择,即
10、将A2连到8253的A1引脚,而将A1与8253的A0引脚相连。,8-1 8253的工作原理 8253的内部结构和引脚信号,Page 13,8253输入信号组合的功能表,8-1 8253的工作原理 8253的内部结构和引脚信号,Page 14,3计数器02,包含3个完全相同的计数器/定时器通道,对3个通道的操作完全独立。每个通道都包含:,一个8位的控制字寄存器:只写寄存器。对8253进行编程时,CPU用输出指令向它写入控制字,以选定计数器通道,规定各通道的工作方式,读写格式和数制。 一个16位的计数初值寄存器:存放由CPU送来的计数初值。 一个计数器执行部件(实际的计数器):执行部件实际是一个
11、16位的减法计数器,它的起始值就是初值寄存器的值,该值可由程序设置。 输出锁存器:用来锁存计数器执行部件的值,CPU可对它执行读操作,以了解某个时刻计数器的瞬时值。,构成:,注意:计数初值寄存器、计数器执行部件和输出锁存器都是16位寄存器,它们均可被分成高8位和低8位两个部分。因此也可作为8位寄存器来使用。,8-1 8253的工作原理 8253的内部结构和引脚信号,Page 15,每个通道工作时,都是对输入到CLK引脚上的脉冲按2进制或10进制(BCD码)格式进行计数,计数采用倒计数法,先对计数器预置一个初值,再把初值装入实际的计数器。 然后,开始递减计数。即每输入一个时钟脉冲,计数器的值减1
12、,当计数器的值减为0时,便从OUT引脚输出一个信号。输出信号的波形主要由工作方式决定,同时还受到从外部加到GATE引脚上的门控信号控制,它决定是否允许计数。 当用8253作外部事件计数器时,在CLK脚上所加的计数脉冲是由外部事件产生的,这些脉冲的间隔可以是不相等的。 如果要用它作定时器,则CLK引脚上应输入精确的时钟脉冲。这时,8253所能实现的定时时间,决定于计数脉冲的频率和计数器的初值,即定时时间时钟脉冲周期tc预置的计数初值n,工作原理,8-1 8253的工作原理 8253的内部结构和引脚信号,Page 16,8253的3个计数器都各有3个引脚,它们是: CLK0CLK2:计数器02的输
13、入时钟脉冲从这里输入。频率不能大于2MHz。 OUT0OUT2:计数器02的输出端。 GATE0GATE2:计数器02的门控脉冲输入端。,引脚,8-1 8253的工作原理 8253的内部结构和引脚信号,Page 17,4控制字寄存器,8-1 8253的工作原理 8253的内部结构和引脚信号,Page 18,二、初始化编程步骤和门控信号的功能,18253的初始化编程步骤,刚接通电源时, 8253处于未定义状态,在使用之前,必须用程序把它们初始化为所需的特定模式,这个过程称为初始化编程。初始化编程按下列步骤进行: (共2步)写入控制字,用输出指令向控制字寄存器写入一个控制字,以选定计数器通道,规定
14、该计数器的工作方式和计数格式。 写入控制字还起到复位作用,使输出端OUT变为规定的初始状态,并使计数器清0。,8-1 8253的工作原理 初始化编程步骤和门控信号的功能,Page 19,写入计数初值 用输出指令向选中的计数器端口地址中写入一个计数初值,初值可以是8位数据,也可以是16位数据。 若是8位数,只要用一条输出指令就可完成初值的设置。 如果是16位数,则必须用两条输出指令来完成,且先送低8位数据,后送高8位数据。注意,计数初值为0时,也要分成两次写入,因为在二进制计数时,它表示65536,BCD计数时,它表示10000。,说明:由于3个计数器分别具有独立的编程地址,而控制字寄存器本身的
15、内容又确定了所控制的寄存器的序号,因此对3个计数器通道的编程没有先后顺序的规定,可任意选择某一个计数器通道进行初始化编理,只要符合先写入控制字,后写入计数初值的规定即可。,8-1 8253的工作原理 初始化编程步骤和门控信号的功能,Page 20,例如,某微机系统的8253的3个计数器的端口地址分别为3F0H、3F2H和3F4H,控制字寄存器的端口地址为3F6H,要求8253的通道0工作于方式3,计数初值n1234H,则初始化程序为:,MOV AL, 00110111B ;控制字:选择通道0,先读/写低字节, ;后高字节,方式3,BCD计数 MOV DX, 3F6H ;指向控制口 OUT DX
16、, AL ;送控制字 MOV AL, 34H ;计数值低字节 MOV DX, 3F0H ;指向计数器0端口 OUT DX, AL ;先写入低字节 MOV AL, 12H ;计数值高字节 OUT DX, AL ;后写入高字节,注意:初值写入后,经过一个时钟脉冲的上升沿和下降沿,才能将初值装入实际计数器,再在GATE的控制下,对CLK引脚输入的脉冲递减计数。,8-1 8253的工作原理 初始化编程步骤和门控信号的功能,Page 21,2门控信号控制功能,表82 门控信号GATE的控制功能,8-1 8253的工作原理 初始化编程步骤和门控信号的功能,0,1,2,3,4,5,Page 22,三、825
17、3的工作方式,1方式0计数结束中断方式(Interrupt on Terminal Count),8-1 8253的工作原理 8253的工作方式,GATE,Page 23,方式0计数结束中断方式(Interrupt on Terminal Count),当对8253的任一个通道写入控制字,并选定工作于方式0时,该通道的输出端OUT立即变为低电平。 要使8253能够进行计数,门控信号GATE必须为高电平。 若CPU利用输出指令向计数通道写入初值n(4)时,WRn变成低电平。在WRn的上升沿时,n被写入8253内部的计数器初值寄存器。在WRn上升沿后的下一个时钟脉冲的下降沿时,才把n装入通道内的实
18、际计数器中,开始进行减1计数。也就是说,从写入计数器初值到开始减1计数之间,有一个时钟脉冲的延迟。 此后,每从CLK引脚输入一个脉冲,计数器就减1。总共经过n十1个脉冲后,计数器减为0,表示计数计到终点,计数过程结束,这时OUT引脚由低电平变成高电平。这个由低到高的正跳变信号,可以接到8259A的中断请求输入端,利用它向CPU发中断请求信号。,8-1 8253的工作原理 8253的工作方式,Page 24,OUT引脚上的高电平信号,一直保持到对该计数器装入新的计数值,或设置新的工作方式为止。 在计数的过程小,如果GATE变为低电平,则暂停减1计数,计数器保持GATE有效时的值不变,OUT仍为低
19、电平。待GATE回到高电平后,又继续往下计数。 按方式0进行计数时,计数器只计一遍。当计数器计到0时,不会再装入初值重新开始计数,其输出将保持高电平。若重新写入一个新的计数初值,OUT立即变成低电平,计数器按照新的计数值开始计数。,8-1 8253的工作原理 8253的工作方式,Page 25,2方式1可编程单稳态输出方式(Programmable One-short),8-1 8253的工作原理 8253的工作方式,GATE,Page 26,方式1可编程单稳态输出方式(Programmable One-short),当CPU用控制字设定某计数器工作于方式1时,该计数器的输出OUT立即变为高电
20、平。 在这种方式下,在CPU装入计数值n后,无论GATE是高电平还是低电平,都不进行减1计数,必须等到GATE由低电平向高电平跳变,形成一个上升沿后,才能在下一个时钟脉冲的下降沿,将n装入计数器的执行部件,同时,输出端OUT由高电平向低电平跳变。 以后,每来一个时钟脉冲,计数器就开始减1操作。 当计数器的值减为零时,输出端OUT产生由低到高的正跳变。这样,就可在OUT引脚上得到一个负的单脉冲,单脉冲的宽度可由程序来控制,它等于时钟脉冲的宽度乘以计数值n。,8-1 8253的工作原理 8253的工作方式,Page 27,在计数过程中,若GATE产生负跳变,不会影响计数过程的进行。但若在计数器回零
21、前,GATE又产生从低到高的正跳变,则8253又将初值n装入计数器执行部件,重新开始计数,其结果会使输出的单脉冲宽度加宽。因此,只要计数器没有回零,利用GATE的上升沿可以多次触发计数器从n开始重新计数,直到计数器减为0时,OUT才回到高电平。,8-1 8253的工作原理 8253的工作方式,Page 28,3方式2比率发生器(Rate Generator),8-1 8253的工作原理 8253的工作方式,GATE,Page 29,方式2比率发生器(Rate Generator),当对某一计数通道写入控制字,选定工作方式2时,OUT端输出高电平。 如果GATE为高电平,则在写入计数值后的下一个
22、时钟脉冲时,将计数值装入执行部件。 此后,计数器随着时钟脉冲的输入而递减计数。当计数值减为1时,OUT端由高电平变为低电平,待计数器的值减为0时,OUT引脚又回到高电平,即低电平的持续时间等于一个输入时钟周期。与此同时,还将计数初值重新装入计数器,开始一个新的计数过程,并由此循环计数。 如果装入计数器的初值为n,那么在OUT引脚上,每隔n个时钟脉冲就产生一个负脉冲,其宽度与时钟脉冲的周期相同,频率为输入时钟脉冲频率的n分之一。,8-1 8253的工作原理 8253的工作方式,Page 30,在操作过程中,任何时候都可由CPU重新写入新的计数值,不影响当前计数过程的进行。当计数值减为0时,一个计
23、数周期结束,8253将按新写入的计数值n进行计数。 在计数过程中,当GATE变为低电平时,使OUT变为高电平,禁止计数;当GATE从低电平变为高电平, GATE端产生上升沿,则在下一个时钟脉冲时,把预置的计数初值装入计数器,从初值开始递减计数,并循环进行。需要产生连续的负脉冲序列信号时,可使8253工作于方式2。,8-1 8253的工作原理 8253的工作方式,Page 31,4方式3方波发生器(Square Wave Generator),8-1 8253的工作原理 8253的工作方式,GATE,Page 32,方式3方波发生器(Square Wave Generator),方式3和方式2的
24、工作相类似,但从输出端得到的不是序列负脉冲,而是对称的方波或基本对称的矩形波。,当输入控制字后,OUT端输出变为高电平。 如果GATE为高电平,则在写入计数值后的下一个时钟脉冲时,将计数值装入执行部件,并开始计数。 如果写入计数器的初值为偶数,则当8253进行计数时,每输入一个时钟脉冲,均使计数值减2。 计数值减为0时,OUT输出引脚由高电平变成低电平,同时自动重新装入计数初值,继续进行计数。当计数值减为0时,OUT引脚又回到高电平,同时再一次将计数初值装入计数器,开始下一轮循环计数;,8-1 8253的工作原理 8253的工作方式,Page 33,如果写入计数器的初值为奇数,则当输出端OUT
25、为高电平时,第一个时钟脉冲使计数器减1,以后每来一个时钟脉冲,都使计数器减2,当计数值减为0时,输出端OUT由高电平变为低电平,同时自动重新装入计数初值继续进行计数。这时第一个时钟脉冲使计数器减3,以后每个时钟脉冲都使计数器减2,计数值减为0时,OUT端又回到高电平,并重新装入计数初值后,开始下一轮循环计数。 在计数过程中,若GATE变成低电平时,就迫使OUT变为高电平,并禁止计数,当GATE回到高电平时,重新从初值n开始进行计数。,8-1 8253的工作原理 8253的工作方式,Page 34,如果希望改变输出方波的速率,CPU可在任何时侯重新装入新的计数初值,在下一个计数周期就可按新的计数
26、值计数,从而改变方波的速率。 从OUT端输出的方波频率都等于时钟脉冲的频率除以计数初值。 注意:当写入的计数初值为偶数时,输出完全对称的方波,写入初值为奇数时,其输出波形的高电平宽度比低电平多一个时钟周期。,8-1 8253的工作原理 8253的工作方式,Page 35,5方式4软件触发选通(Software Triggered Strobe),8-1 8253的工作原理 8253的工作方式,GATE,Page 36,方式4软件触发选通(Software Triggered Strobe),当对8253写入控制字,进入工作方式4后,OUT端输出变为高电平。 如果GATE为高电平,那么,写入计数
27、初值后,在下一个时钟脉冲后沿将自动把计数初值装入执行部件,并开始计数。 当计数值成为0时,OUT端输出变低,经过一个时钟周期后,又回到高电平,形成一个负脉冲。 用这种方法装入的计数初值n仅一次有效,若要继续进行计数,必须重新装入计数初值。 若在计数过程中写入一个新的计数值,则在现行计数周期内不受影响,但当计数值回0后,将按新的计数初值进行计数,同样也只计一次。 如果在计数的过程中GATE变为低电平,则停止计数,当GATE变为高电平后,又重新将初值装入计数器,从初值开始计数,直至计数器的值减为0时,从OUT端输出一个负脉冲。,8-1 8253的工作原理 8253的工作方式,Page 37,6方式
28、5硬件触发选通(Hardware Triggered Strobe),8-1 8253的工作原理 8253的工作方式,GATE,Page 38,方式5硬件触发选通(Hardware Triggered Strobe),编程进入工作方式5后,OUT端输出高电平。 当装入计数值n后,不管GATE是高电平还是低电平,减1计数器都不会工作。一定要等到从GATE引脚上输入一个从低到高的正跳变信号时,才能在下一个时钟脉冲后沿把计数初值装入执行部件,并开始减1计数。 当计数器的值减为0时,输出端OUT产生一个宽度为一个时钟周期的负脉冲,然后OUT又回到高电平。 计数器回0后,8253又自动将计数值n装入执行
29、部件,但并不开始计数,要等到GATE端输入正跳变后,才又开始减1计数。,8-1 8253的工作原理 8253的工作方式,Page 39,计数器在计数过程中,不受门控信号GATE电平的影响,但只要计数器未回0,GATE的上升沿却能多次触发计数器,使它重新从计数初值n开始计数,直到计数值减为0时,才输出一个负脉冲。 如果在计数过程中写入新的计数值,但没有触发脉冲,则计数过程不受影响。当计数器的值减为0后,GATE端又输入正跳变触发脉冲时,将按新写入的初值进行计数。,8-1 8253的工作原理 8253的工作方式,Page 40,7各种方式的主要特点,方式0:在写入控制字后,输出端即变低,计数结束后
30、,输出端由低变高,常用该输出信号作为中断源。也可实现定时或对外部事件进行计数。其余5种方式写入控制字后,输出均变高。 方式1:用来产生单脉冲。 方式2:用来产生序列负脉冲,每个负脉冲的宽度与CLK脉冲的周期相同。 方式3:用于产生连续的方波。方式2和方式3都实现对时钟脉冲进行n分频。,8-1 8253的工作原理 8253的工作方式,Page 41,方式4、方式5:波形相同,都在计数器回0后,从OUT端输出一个负脉冲,其宽度等于一个时钟周期。但方式4由软件(设置计数值)触发计数,而方式5由硬件(门控信号GATE)触发计数。 这6种工作方式中,方式0、1和4,计数初值装进计数器后,仅一次有效。如果
31、要通道再次按此方式工作,必须重新装入计数值。对于方式2、3和5,在减1计数到0值后,8353会自动将计数值重装进计数器。,8-1 8253的工作原理 8253的工作方式,Page 42,8-2 8253的应用举例,一、8253定时功能的应用例子,1用8253产生各种定时波形,在某个以8086为CPU的系统中使用了一块8253芯片,通道的基地址为310H,所用的时钟脉冲频率为1MHz。要求3个计数通道分别完成以下功能:通道0工作于方式3,输出频率为2kHz的方波;通道1产生宽度为480us的单脉冲;通道2用硬件方式触发,输出单脉冲,时间常数为26。,8-2 8253的应用举例 8253定时功能的
32、应用例子,Page 43,用8253产生各种定时波形,8-2 8253的应用举例 8253定时功能的应用例子,C B A,Page 44,分析:,由图可见,8253芯片的片选信号CS由74LS138构成的地址译码电路产生,只有当M/IO0,A9A8A7A6A511000时,译码器才能工作,当A4A3A0100时,Y40,使8253的片选信号CS有效,选中偶地址端口,端口基地址为310H。CPU的A2A1分别与8253的A1A0相连,用于8253芯片内部寻址,使8253的4个端口地址分别为310H、312H、3l 4H和316H。8253的8根数据线D7D0必须与CPU的低8位数据总线D7D0相
33、连。另外,8253的RD、WR脚分别与CPU的相应引脚相连。3个通道的CLK引脚连在一起,均由频率为1MHz(周期为1s)的时钟脉冲驱动。,8-2 8253的应用举例 8253定时功能的应用例子,Page 45,通道0:工作于方式3,即构成一个方波发生器,它的控制端GATE0须接+5V,为了输出2kHz的连续方波,应使时间常数:N01MHz2kHz500。 通道1:工作于方式1,即构成一个单稳态电路,由GATE1的正跳变触发,输出一个宽度由时间常数决定的负脉冲。此功能一次有效,需要再形成一个脉冲时,不但GATE1脚上要有触发,通道也需重新初始化。需输出宽度为480us的单脉冲时,应取时间常数:
34、N1480us1us480。 通道2:工作于方式5,即由GATE2的正跳变触发减1计数,在计到0时形成一个宽度与时钟周期相同的负脉冲。此后,若GATE2脚上再次出现正跳变,又能产生一个负脉冲。这里假设预置的时间常数为26。,8-2 8253的应用举例 8253定时功能的应用例子,Page 46,对3个通道的初始化程序如下:;通道0初始化程序MOV DX,316H ;控制口地址MOV AL,00110111B ;通道0控制字,先读写低字节,;后高字节,方式3,BCD计数 OUT DX,AL ;写入方式字 MOV DX,310H ;通道0口地址 MOV AL,00H ;低字节 OUT DX,AL
35、;先写入低字节 MOV AL,05H ;高字节 OUT DX,AL ;后写入高字节,8-2 8253的应用举例 8253定时功能的应用例子,Page 47,;通道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 ;后写入高字节,8-2 8253的应用举例 8253定时功能的应用例子,Page 48,;通道2
36、初始化程序 MOV DX,316H ;控制口地址 MOV AL,10011011B ;通道2控制字,只读写低字节,;方式5,BCD计数 OUT DX,AL ;写入方式字 MOV DX,314H ;通道2口地址 MOV AL,26H ;低字节 OUT DX,AL ;只写入低字节,8-2 8253的应用举例 8253定时功能的应用例子,Page 49,2控制LED的点亮或熄灭,用8253来控制一个LED发光二极管的点亮和熄灭,要求点亮10秒钟后再让它熄灭10秒钟,并重复上述过程。加上适当的驱动电路后,便可以用在交通红绿灯控制和灯塔等场合 。,8-2 8253的应用举例 8253定时功能的应用例子,
37、2MHz,Page 50,分析:,假设这是一个8086系统,8253的各端口地址为81H、83H、85H和87H。8253的8根数据线D7D0与CPU的高8位数据线D15D8相连,这样选中奇地址瑞口。 通道1的OUT1与LED相连,当它为高电平时,LED点亮,低电平时LED熄灭。只要对8253编程,使OUT1输出周期为20秒,占空比为1:1的方波,就能使LED交替地点亮和熄灭10秒钟。若将频率为2MHz(周期为0.5us)的时钟直接加到CLK1端,则OUT1输出的脉冲周期最大只有32.768ms,达不到20秒的要求。为此,需用几个通道级连的方案来解决问题。 如图所示,将频率为2MHz的时钟信号
38、加在CLK0输入端,并让通道0工作于方式2。若选择计数初值N05000,则从OUT0端可得到序列负脉冲,其频率为2MHz/5000400Hz,周期为2.5ms。再把该信号连到CLK1输入端,并使通道1工作于方式3。为了使OUT1输出周期为20秒(频率为1/200.05Hz)的方波,应取时间常数N1400Hz/0.05Hz8000。,8-2 8253的应用举例 8253定时功能的应用例子,Page 51,初始化程序如下:,MOV AL,00110101B ;通道0控制字,先读写低字节,;后高字节,方式2,BCD计数OUT 87H,AL ;写入方式字MOV AL,00H ;低字节OUT 81H,A
39、L ;先写入低字节MOV AL,50H ;高字节OUT 81H,AL ;后写入高字节MOV AL,01110111B ;通道1控制字,先读写低字节,;后高字节,方式3,BCD计数OUT 87H,AL ;写入方式字MOV AL,00H ;低字节OUT 83H,AL ;先写入低字节MOV AL,80H ;高字节OUT 83H,AL ;后写入高字节,8-2 8253的应用举例 8253定时功能的应用例子,Page 52,二、8253计数功能的应用例子,1硬件电路设计,假设一个自动化工厂需要统计在流水线上所生产的某种产品的数量,可采用8086微处理器和8253等芯片来设计实现这种自动计数的系统。这种自
40、动计数系统的电路和控制软件的设计如下:,8-2 8253的应用举例 8253计数功能的应用例子,Page 53,自动计数系统由8086CPU控制,8253作计数器,8259A作中断控制器,若干其它电路。图8-12仅给出了计数器部分的电路图。 计数电路:一个红外LED发光管,一个复合型光电晶体管,两个施密持触发器74LS14,一片8253芯片。用8253的通道1计数。 工作过程:当LED发光管与光电管之间无工件通过时,LED发出的光能照到光电管上,使光电晶体管导通,集电极变为低电平。此信号经施密特触发器驱动整形后,送到8253的CLK1,使CLK1端变成低电平。当LED与光电管之间有工件通过时,
41、LED发出的光被挡住,照不到光电管上,使光电管截止,其集电极输出高电平,从而使CLK1端变成高电平。待工件通过后, CLK1端又回到低电平。即每通过一个工件,就从CLK1端输入一个正脉冲,8253对此脉冲计数,就可统计出工件个数。两个施密持触发反相器74LS14的作用,是将光电晶体管集电极上的缓慢上升信号,变换成满足计数电路要求的TTL电平信号。,8-2 8253的应用举例 8253计数功能的应用例子,分析:,Page 54,8253的片选输入CS端接到I/O端口地址译码器的一个输出端,RD和WR端分别与CPU的RD和WR信号相连。8253的数据线D7D0与CPU的低8位地址线相连,这时I/O
42、端口地址必须是偶地址,所以把A1和A0分别与CPU地址总线的A2和A1相连。8253通道1的门控输入端GATE1接+5V高电平,即始终允许计数器工作。通道1的输出端OUT1接到8259A的一个中断请求输入端IR0。,8-2 8253的应用举例 8253计数功能的应用例子,Page 55,2初始化编程,编程时,可选择计数器1工作于方式0,按BCD码计数,先读/写低字节,后读/写高字节,根据图8-3可得到控制字为01110001B。 如选取计数初值n499,则经过n+1个脉冲,也就是500个脉冲OUT1端输出一个正跳变。它作用于8259A的IR0端,通过8259A的控制,向CPU发出一次中断请求,
43、表示汁满了500个数,在中断服务程序中使工件总数加上500。中断服务程序执行完后,返回主程序,这时需要由程序把计数初值499再次装入计数器1,才能继续进行计数。,8-2 8253的应用举例 8253计数功能的应用例子,Page 56,设8253的4个端口地址分别为F0H,F2HF4H和F6H,则初始化程序为:MOV AL,01110001B ;控制字OUT 0F6H,AL MOV AL,99HOUT 0F2H,AL ;计数值低字节送计数器1MOV AL,04HOUT 0F2H,AL ;计数值低字节送计数器1,8-2 8253的应用举例 8253计数功能的应用例子,Page 57,3计数值的读取
44、,在读计数器现行值时,计数过程仍在进行,而且不受CPU的控制。因此,在CPU读取计数器的输出值时,可能计数器的输出正在发生改变,即数值不稳定,可能导致错误的读数。为了防止这种情况发生,必须在读数前设法终止计数或将计数器输出端的现行值锁存。可采用下面两种方法:方法一:在读数前用外部硬件切断计数脉冲信号,或者使门控信号变为低电平,迫使8253停止计数。这种方法的缺点是需要硬件电路配合。此外,由于外部事件源被切断或正常的计数过程被禁止,干扰了实际的计数过程。方法二:先用计数器锁存命令锁存现行计数值,然后将它读出。由于每个计数通道都有一个16位输出锁存器,可在任何时刻将计数器的现行值锁住。,8-2 8
45、253的应用举例 8253计数功能的应用例子,Page 58,计数值的读取方法二:,当需要读取计数器的现行值时,先向8253送一个控制字,并使控制字中的RL1RL000,现行计数值立即被锁存起来。 该控制字中的SC1SC0用来确定要锁存的是3个计数器中的哪一个。 控制字的低4位对锁存命令无影响,可以将它们置为0。 读取计数值的方法由对8253进行初始化编程时所写入的控制字中的RL1RL0位来确定,当RL1RL0=01时,只读取计数器的低字节,RL1RL010时,只读取计数器的高字节,RL1RL011时,先读写计数器低字节,后读写高字节。比较起来,第二种方法完全由软件实现,并可随时读取计数值,而
46、且不会干扰正常的计数过程和引起错误,是常用的方法。,8-2 8253的应用举例 8253计数功能的应用例子,Page 59,上例中,在要读取箱子中的现行工件数时,可执行下面的程序段:,MOV AL,01000000B ;锁存计数器1命令MOV DX,0F6H ;控制口OUT DX,AL ;发锁存命令MOV DX,0F2H ;计数器1IN AL,DX ;读取计数器1的低8位MOV AH,AL ;保存低8位数IN AL,DX ;读取计数器1的高8位XCHG AH,AL ;将计数值置于AX中,8-2 8253的应用举例 8253计数功能的应用例子,Page 60,注意:,在计数器的锁存命令发出后,锁
47、存的计数值将保持不变,直至被读出为止。计数值从锁存器读出后,数值锁存状态即被自动解除,输出锁存器的值又将随计数器的值而变化。利用这种方法读取8253的计数器值时,每执行一次锁存命令,只能锁存一个通道的计数值。如果想读取8253的3个计数器的值,就要向8253送3个锁存命令字。同样,用这种方法也可以读取8254的内部计数器的数值。但对于8254来说,还有另外一种读回功能,一次可以锁存多个计数器的值,从而可连续读取13个计数器的值。,8-2 8253的应用举例 8253计数功能的应用例子,Page 61,48254的读回功能,8254的读回命令功能,每次可锁存13个通道的计数值。 利用8254的读
48、回功能,还可锁存13个计数通道的状态字,供CPU读取。 通过读取状态字,可以核对向8254写入的控制字是否正确,了解当前输出引脚的电平状态,计数值是否已写入执行单元等。,8-2 8253的应用举例 8253计数功能的应用例子,Page 62,8254的读回命令字格式,8-2 8253的应用举例 8253计数功能的应用例子,Page 63,8254的计数状态字,读回命令字中,若D4位置0,将锁存计数器的状态信息。状态信息被锁存后,也可以由CPU用输入指令读回。用户通过读取状态信息,可核查所选中通道的计数值、工作方式、输出引脚OUT的现行状态及计数器是否已写入计数通道等信息。状态字的格式如图8-14所示。其中D5D0位即为写入该通道的控制字的相应部分,RW1RW0相当于8253的RL1RL0位。,8-2 8253的应用举例 8253计数功能的应用例子,Page 64,计数状态字的具体意义如下:RW1RW0读/写操作位,反映对该通道的计数器所设置的读/写操作方式。BCD反映通道所设置的计数方式。M2M1M0 反映通道所设置的工作方式。D7通道输出状态位。当D71时,表示输出高电平,D70时,输出为低电平。D6无效计数位(NULL COUNT),反映计数值是否已写入计数器执行单元。当向通道写入控制字和计数值后,D61;当计数值写入计数器执行单元后,D60。,