《微机接口技术及其应用》课件第3章_第1页
《微机接口技术及其应用》课件第3章_第2页
《微机接口技术及其应用》课件第3章_第3页
《微机接口技术及其应用》课件第3章_第4页
《微机接口技术及其应用》课件第3章_第5页
已阅读5页,还剩95页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章可编程定时/计数器接口芯片82533.1定时/计数系统

3.2可编程定时/计数器芯片82533.38253的应用习题与思考题

3.1.1定时/计数的产生

微机系统中的定时可分为内部定时和外部定时两类:内部定时是计算机本身运行的时间基准或时序关系,计算机每个操作都是按照严格的时间节拍来执行的;外部定时是外部设备实现某种功能时,本身所需要的一种时序关系,如打印机接口标准Centronics就规定了打印机与CPU之间传送的信息应遵守的工作时序。计算机内部定时由CPU硬件结构确定,是固定的时序关系,无法更改。3.1定时/计数系统外部定时由于外设或被控对象的任务不同,其功能各异,无一定模式,往往需要用户根据I/O设备的要求进行安排。当然,用户在考虑外设和CPU连接时,不能脱离计算机的定时要求,应以计算机的时序关系为依据来设计外部定时机构,以满足计算机的时序要求,这就叫做时序配合。至于在一个过程控制、工艺流程或监测系统中,各个控制环节或控制单元之间的定时关系,则完全取决于被处理、加工、制造和控制的对象的性质,因梢按各自的规律独立进行设计。本章的重点是讨论外部定时技术。在微型计算机系统中经常要用到定时信号,例如,定时检测、定时中断、定时扫描等。在许多PC机中,动态存储器的刷新定时、系统日历时钟的计时计数以及喇叭的声源等,都是用定时信号来产生的。又如,在计算机定时控制系统中,计算机主机需要每隔一定的时间就对处理对象进行数据采样,再对获得的数据进行处理,这也要用到定时信号。定时信号可以用软件和硬件两种方法来获得。

1.软件定时

软件定时是利用CPU内部定时机构产生的,一般根据所需的时间常数来设计一个延时子程序。延时子程序中包含一定的指令,设计者要对这些指令的执行时间进行周详的计算或精确的测试,以便确定延迟时间是否符合定时的要求,再运用软件编程,循环执行一段子程序,即可产生等待延时。这是一种常用的定时方法,主要用于短时延时。这种方法的优点是不需增加硬设备,只需编制相应的延时程序以备调用即可;缺点是CPU执行延时程序的等待时间增加了CPU的时间开销,延时时间越长,这种等待开销就越大,降低了CPU的效率,浪费了CPU的资源。因为在执行延时程序时,CPU一直被占用,所以降低了CPU的执行效率,也不容易提供多作业环境。另外,设计延时子程序要用指令执行时间来拼凑延时时间,显得比较麻烦。并且,软件延时时间随主机频率的不同而变化,即定时程序的通用性差。在实际中这种方法还是经常被使用的,尤其在已有系统上进行软件开发,以及延时时间较小而重复次数又有限时,常采用软件方法来实现定时。

2.硬件定时

硬件定时采用可编程通用的定时/计数器或单稳态延时电路来产生定时或延时,即将专门的定时/计数器作为主要硬件,在简单的软件控制下,产生准确的时间延迟。

这种方法不占用CPU的时间,定时时间长,使用灵活。尤其是定时准确,定时时间不受主机频率的影响,且定时程序具有通用性,故得到了广泛应用。目前,通用的定时/计数器集成芯片种类很多,如Intel

8253/8254,Zilog的CTC等。这里只对Intel

8253/8254定时/计数器进行详细讨论。这种方法的主要思想是:根据需要的定时时间,用指令设置时间常数,并用指令启动定时/计数器开始计数,计数到确定的值之后,便自动产生一个定时/计数输出。这样,在定时/计数器开始工作以后,CPU就不必去管它,而可以去做别的工作,它与CPU并行工作,不占用CPU的时间,利用定时/计数器产生中断信号,就可能建立多作业的环境,从而大大提高了CPU的利用率。由于定时/计数器本身的开销并不大,因此得到了广泛的应用。定时/计数器分为两种,即不可编程定时/计数器和可编程定时/计数器。3.1.2可编程定时/计数器的工作原理

可编程定时/计数器的功能体现在两个方面:一是作为计数器,二是作为定时器。所谓计数器,是指在设置好计数数值后,每来一个脉冲,计数器便开始减1计数,减为“0”时,输出一个计数结束信号。若计数未结束,而外部没有触发信号,则可以通过读取现行计数器的值来求出一共记了多少个时钟脉冲。所谓定时器,是指设置好定时时间常数后,由时钟脉冲触发开始进行减1计数,并按定时常数不断地输出为时钟周期整数倍的定时间隔。定时时间长度就是计数初值与时钟周期的乘积。计数器和定时器之间的差别是:作为计数器时,在减到“0”后,输出一个信号便结束,而作为定时器时,则不断产生一定时间间隔的信号。这两种情况下的工作过程没有根本差别,都是属于计数器的减“1”工作。

图3-1所示是计数器通道的内部逻辑结构图。

图3-1计数器通道的内部逻辑结构图图3-1中,CLK作为定时/计数脉冲的输入端,它决定了计数的速率;GATE是门控脉冲,作为时钟的控制信号,它对时钟的控制方法有多种,可形成多种工作模式。

图3-1中有四个寄存器,它们都可以被CPU访问(有的芯片内没有状态寄存器)。这些寄存器的功能及工作过程如下:

(1)当确定了工作方式(定时或是计数)后便可通过CPU向该芯片写入一个控制字送入控制寄存器,定时/计数器便根据该控制寄存器的内容进行定时或计数。

(2)再由CPU向该芯片写入一个计数初值或定时初始常数送入初始寄存器,这样便完成了对定时/计数器的初始化工作。

(3)启动该芯片后,计数器便从初始寄存器中获得计数初值,并在CLK端输入的计数脉冲的控制下进行减1计数,直到计数器减到0为止。

在计数过程中,计数器的当前内容可以传送到计数锁存寄存器,以供CPU读取。在读取过程中不会干扰计数器的继续计数。计数到0的状态时便由计数器的OUT端输出或用状态寄存器的某一位表示,以供CPU查询或I/O检测,或作为中断的中断请求信号。

可编程定时/计数器芯片的型号有几种,它们的外形引脚及功能都是兼容的,只是工作的最高频率有所差异,例如8253-5和8254-2,前者的最高频率为5MHz,后者为10MHz。另外,还有8253(2MHz)、8254(8MHz)和8254-5(5MHz)等兼容芯片,8253与8254的区别在于:8254有读回功能,可以同时锁存3个计数器的计数值及状态值,供CPU读取,而8253每次只能锁存一个通道的计数器,且不能读取状态值。下面以8253为例进行分析。3.2可编程定时/计数器芯片82533.2.18253的外部特性与内部逻辑结构

1.外部特性

定时计数器8253是24脚双列直插式芯片,+5V电源供电。每个芯片内部有3个独立的计数器(计数通道),每个计数器都有自己的时钟输入CLK、计数输出OUT和门控制信号GATE。通过编程选择计数器和设置工作方式,计数器既可作计数器用,也可作定时器用,故称定时/计数器,记做T/C。其引脚分配如图3-2所示。

图3-28253引脚分配图

2.内部逻辑结构

8253的内部有6个功能模块,它们是:数据总线缓冲器,读/写逻辑,控制字寄存器和三个结构相同的计数器,其结构框图如图3-3所示。

图3-38253内部逻辑结构图

1)数据总线缓冲器

这是8位双向的三态缓冲器,它直接与CPU的数据总线相连。CPU对8253进行读/写的所有信息都通过这8条总线传送。这些读写信息包括对8253初始化时,CPU写入8253的控制字和计数值,以及CPU从8253读出的计数值等。

2)读/写逻辑

读/写逻辑用来控制8253的内部操作。它根据CPU发来的读/写信号、地址信号以及 信号的高低进行读/写端口的选择和数据传送方向的控制。

3)控制字寄存器

当8253初始化时,控制字寄存器接收CPU写入的控制字,用以控制各个计数器的工作方式。该寄存器是只写寄存器。

4)计数器0、计数器1和计数器2(T/C0、T/C1、T/C2)

这三个计数器结构完全相同,操作完全独立,每个都能以不同的方式工作。每个通道都包含一个8位的控制字寄存器、一个16位的计数初值寄存器、一个计数器执行部件(实际的计数器)和一个输出锁存寄存器。执行部件实际上是一个16位的减法计数器,它的起始值就是初值寄存器的值,该值可由程序设置。输出锁存器用来锁存计数器执行部件的值,必要时CPU可对它执行读操作,以了解某个时刻计数器的瞬时值。计数初值寄存器、计数器执行部件和输出锁存器都是16位寄存器,它们均可被分成高8位和低8位两个部分,因此也可作为8位寄存器来使用。每个通道工作时,都对输入到CLK引脚上的脉冲按二进制或十进制(BCD码)格式进行计数。计数采用倒计数法,先对计数器预置一个初值,再把初值装入实际的计数器。然后开始递减计数,即每输入一个时钟脉冲,计数器的值减l,当计数器的值减为0时,便从OUT引脚输出一个脉冲信号。输出信号的波形主要由工作方式决定,同时还受到从外部加到GATE引脚上的门控信号的控制,它决定是否允许计数。当用8253作外部事件计数器时,在CLK脚上所加的计数脉冲是由外部事件产生的,这些脉冲的间隔可以是不相等的。如果要用它作定时器,则CLK引脚上应输入精确的时钟脉冲。这时,8253所能实现的定时时间取决于计数脉冲的频率和计数器的初值,即

定时时间=时钟周期tc×计数初值n例如,在某系统中,8253所使用的计数脉冲频率为0.5Hz,即时钟周期tc

=

2μs,如果给8253的计数器设置的初值n=500,则当计数器计到数值为0时,定时时间T

=

2μs×500=1ms。

对8253来讲,

外部输入到CLK引脚上的时钟脉冲频率不能大于2MHz。如果大于

2MHz,则必须经分频后才能送到CLK端,使用时要注意。

8253的3个计数器都各有3个引脚,它们是:

(1)

CLK0~CLK2:计数器0~2号的输入时钟脉冲从这里输入。

(2)

OUT0~OUT2:计数器0~2号的输出端。

图3-4计数器通道的结构

(3)

GATE0~GATE2:计数器0~2号的门控脉冲输入端。

因此,CPU可以对输出锁存器读出当前的计数值。每个计数器有两个输入端和一个输出端。从编程的角度来看,计数器通道的结构如图3-4所示。

在计数过程中,CPU随时可以用输入指令将计数器的当前值从输出锁存器OL中读出,读当前计数值时,不用中断计数器的时钟输入,也不会影响计数器的继续计数。3.2.28253的引脚功能

8253的引脚分配如图3-2所示。各引脚功能如下所述。

· :读信号,低电平有效。当它有效时,CPU读取8253中某个计数器的内容(计

数值)。

·

:写信号,低电平有效。当它有效时,CPU向8253传送命令字或计数初值。

·

:片选信号,它为低电平时,选中8253芯片,CPU才能与8253通信,即进行读/写操作。

·

A1A0:地址信号线。这两位地址用来选择片内四个端口地址(三个计数器的端口和一个控制寄存器端口),以便进行读写。对于8088,这两位地址一般接CPU地址线的A1A0;而对于8086,由于系统地址线的A0用于片选译码中奇偶地址的选择,因此要连接在系统地址线的A2A1上。

8253定时器/计数器有3个独立的通道,每个通道可以被CPU访问的部件有:8位的控制寄存器,它只能写入,不能读出;16位的预置计数初值的计数寄存器CR,它只能写入,不能读出;16位的计数器输出锁存器OL,它只能读出,不能写入。是否选中8253芯片由片选信号引脚 的电平来控制。当 为有效低电平时,该8253芯片被选中;反之,当 为高电平时,此芯片被禁止访问。 通常接地址译码器输出,地址译码器负责对地址线A2以上的地址信息进行译码。

一片8253占用4位连续的地址,这4位地址对应于3个通道的3个计数寄存器CR和1个控制寄存器端口。由A1和A0的4种编码来选择4个端口之一。每个通道都各有自己独立的控制寄存器,但3个通道的控制寄存器却只用1个公共的端口地址。为了能将每个通道的控制字写入它们各自的控制寄存器中,可使用控制字D7和D6位的编码来注明此控制字是写入哪个通道的控制寄存器。

根据上述介绍,8253寄存器的寻址可归纳为表3-1。

表3-18253通道地址分配及寄存器读/写操作每一通道有三条引线:CLK、GATE、OUT。

CLK:输入脉冲线。计数器就是对这个脉冲计数。8253规定,加在CLK引脚的输入时钟周期不能小于380ns。

GATE:门控信号输入引脚。这是控制计数器工作的一个外部信号。当GATE引脚为低(无效)时,通常都是禁止计数器工作的,只有当GATE为高时,才允许计数器工作。

OUT:输出引脚。当计数到“0”时,OUT引线上必然有输出,输出信号的波形取决于工作方式。3.2.38253的工作方式

1.方式0

这种方式又称中断信号发生器(InterruptonTerminalCount),其波形如图3-5所示。

图3-5方式0波形图当对8253的任一个通道写入控制字、并选定工作于方式0时,该通道的输出端OUT立即变为低电平。要使8253能够进行计数,门控信号GATE必须为高电平。如图3-4所示,设GATE为高电平。若CPU利用输出指令向计数通道写入初值n(若n=4),变成低电平。在的上升沿,n被写入8253内部的计数器初值寄存器。在上升沿后的下一个时钟脉冲的下降沿,才把n装入通道内的实际计数器中,开始进行减1计数。也就是说,从写入计数器初值到开始减1计数之间,有一个时钟脉冲的延迟。此后,每从CLK引脚输入一个脉冲,计数器就减1。总共经过n+1个脉冲后,计数器减为0,表示计数计到终点,计数过程结束,这时OUT引脚由低电平变成高电平。这个由低到高的正跳变信号,可以接到8259A的中断请求输入端,利用它向CPU发出中断请求信号。OUT引脚上的高电平信号一直保持到对该计数器装入新的计数值或设置新的工作方式为止。

在计数的过程中,如果GATE变为低电平,则暂停减1计数,计数器保持GATE有效时的值不变,OUT端仍为低电平。待GATE回到高电平后,又继续往下计数。

按方式0进行计数时,计数器只计一遍。当计数器计到0时,不会再装入初值重新开始计数,其输出将保持高电平。若重新写入一个新的计数初值,则OUT立即变成低电平,计数器将按照新的计数值开始计数。

2.方式1

方式1又称为可编程单稳负脉冲信号发生器(ProgrammableOneShort)。其波形如图3-6所示。

图3-6方式1波形图当CPU写入控制字时,该计数器的输出OUT立即变为高电平。在CPU装入计数值n后,无论GATE信号是高电平还是低电平,计数器都不进行计数,必须等到GATE由低电平向高电平跳变,形成一个上升沿后,才能在下一个时钟脉冲的下降沿,将n装入计数器的执行部件,同时,输出端OUT由高电平向低电平跳变。以后,每来一个时钟脉冲,计数器就开始减1操作。当计数器的值减为0时,输出端OUT产生由低到高的正跳变。这样,就可在OUT引脚上得到一个负的单脉冲,单脉冲的宽度可由程序来控制,它等于时钟脉冲的宽度乘以计数值n。在计数过程中,若GATE产生负跳变,则不会影响计数过程的进行。但若在计数器回零前,GATE又产生从低到高的正跳变,则8253又将初值n装入计数器的执行部件,重新开始计数,其结果会使输出的单脉冲宽度加宽。因此,只要计数器没有回零,利用GATE的上升沿就可以多次触发计数器从n开始重新计数,直到计数器减为0时,OUT才回到高电平。在方式l时,门控信号的上升沿作为触发信号,使输出变低,当计数值变为0时,又使输出自动回到高电平。所以,这时的8253实际上处于一种单稳态工作方式。单稳态输出脉冲的宽度主要取决于计数初值的大小,但也受门控信号GATE的影响,在单稳态受触发后输出未回稳态(高电平)时,若又受到触发,则会使单稳态输出的负脉冲变宽。

3.方式2

该方式又称为频率信号发生器(RateGenerator),其波形如图3-7所示。图3-7方式2波形图当对某一计数通道写入控制字时,OUT端输出高电平。如果GATE为高电平,则在写入计数值后的下一个时钟脉冲时,将计数值装入执行部件。此后,计数器随着时钟脉冲的输入而递减计数。当计数值减为1时,OUT端由高电平变为低电平,待计数器的值减为0时,OUT引脚又回到高电平,即低电平的持续时间等于一个输入时钟周期。与此同时,还将计数初值重新装入计数器,开始一个新的计数过程,并由此周而复始地循环计数。如果装入计数器的初值为n,那么在OUT引脚上,每隔n个时钟脉冲就产生一个负脉冲,其宽度与时钟脉冲的周期相同,频率为输入时钟脉冲频率的1/n。所以,这实际上是一种分频工作方式。在操作过程中,任何时候都可由CPU重新写入新的计数值,它不会影响当前计数过程的进行。

在计数过程中,当GATE变为低电平时,将迫使OUT变为高电平,并禁止计数;当GATE从低电平变为高电平,即GATE端产生上升沿时,将在下一个时钟脉冲又把预置的计数初值装入计数器,从初值开始递减计数,并循环进行。使用8253的工作方式2可以产生连续的负脉冲序列信号。

4.方式3

该方式又称为方波发生器(SquareWaveGenerator),其波形如图3-8所示。图3-8方式3波形图方式3的工作过程与方式2很相似,都是输出周期性的波形信号,门控信号的控制作用和自动重复计数的功能都与方式2一样,只是OUT端输出的波形不同。

当写入控制字后,OUT端输出变为高电平。如果GATE为高电平,则在写入计数值后的下一个时钟脉冲时,将计数值装入执行部件,并开始计数。如果写入计数器的初值n为偶数,则在OUT端输出的是对称的方波。当8253进行计数时,每输入一个时钟脉冲,均使计数值减2。当计数值减为0时,OUT输出引脚由高电平变成低电平,同时自动重新装入计数初值,继续进行计数。当计数值再次减为0时,OUT引脚又回到高电平,同时再一次将计数初值装入计数器,开始下一轮循环计数。因此,OUT端输出的高电平和低电平的时间均为n/2个CLK时钟周期。如果写入计数器的初值n为奇数,则在OUT端输出的是不对称的方波。当输出端OUT为高电平时,第一个时钟脉冲使计数器减1,以后每来一个时钟脉冲,都使计数器减2,当计数值减为0时,输出端OUT由高电平变为低电平,同时自动重新装入计数初值,继续进行计数。这时,第一个时钟脉冲使计数器减3,以后每个时钟脉冲都使计数器减2。当计数值再次减为0时,OUT又回到高电平,并重新装入计数初值后,开始下一轮循环计数。因此,在OUT端输出的波形是不对称的方波,方波的正半周期时间为(n+1)/2个CLK脉冲周期,方波的负半周期时间为(n-1)/2个CLK脉冲周期。在这两种情况下,从OUT端输出的方波频率都等于时钟脉冲的频率除以计数初值。但要注意:当写入的计数初值为偶数时,输出完全对称的方波;当写入初值为奇数时,其输出波形的高电平宽度比低电平多一个时钟周期。

在计数过程中,当GATE变成低电平时,就迫使OUT变为高电平,并禁止计数;当GATE回到高电平时,重新从初值n开始进行计数。

如果希望改变输出方波的速率,CPU可在任何时候重新装入新的计数初值,在下一个计数周期就可按新的计数值计数,从而改变方波的速率。

5.方式4

方式4又称软件触发的选通信号发生器(SoftwareTriggeredStrobe),其波形如图3-9

所示。图3-9方式4波形图当CPU写入控制字后,OUT输出端为高电平。如果GATE为高电平,那么写入计数初值n后,在下一个时钟脉冲后沿将自动把计数初值装入执行部件,并开始计数。当计数值减为0时,OUT端输出变低,经过一个时钟周期后,又回到高电平,形成一个负脉冲。方式4之所以称为软件触发选通方式,是因为计数过程是由软件把计数初值装入计数寄存器来触发的。用这种方法装入的计数初值n仅一次有效,若要继续进行计数,必须重新装入计数初值。若在计数过程中写入一个新的计数值,则将按新的计数初值进行计数,同样也只计一次。如果在计数的过程中GATE变为低电平,则停止计数;当GATE变为高电平后继续计数,直至计数器的值减为0,从OUT端输出一个负脉冲。因此可用产生的负脉冲作为选通信号。

6.方式5

方式5又称为硬件触发的选通信号发生器(HardwareTriggeredStrobe),其波形如图3-10所示。图3-10方式5波形图当CPU写入控制字后,OUT输出端为高电平。当装入计数值n后,不管GATE是高电平还是低电平,减1计数器都不会工作。而是要等到GATE输入一个从低到高的正跳变信号时,才能在下一个时钟脉冲后沿把计数初值装入执行部件,并开始减1计数。当计数器的值减为0时,输出端OUT产生一个宽度为一个时钟周期的负脉冲,然后OUT又回到高电平。

计数器回0后,8253又自动将计数值n装入执行部件,但并不开始计数,要等到GATE端输入正跳变后,才又开始减1计数。由于从OUT端输出的负脉冲是通过硬件电路产生的门控信号上升沿触发减1计数而形成的,因此这种工作方式称为硬件触发选通方式。计数器在计数过程中,不受门控信号GATE电平的影响,但只要计数器未回0,GATE的上升沿就能多次触发计数器,使它重新从计数初值n开始计数,直到计数值减为0时才输出一个负脉冲。

如果在计数过程中写入新的计数值,但没有触发脉冲,则计数过程不受影响。当计数器的值减为0,GATE端又输入正跳变触发脉冲时,将按新写入的初值进行计数。由上面的讨论可知,6种工作方式各有特点,因而适用的场合也不一样。现将各种方式的主要特点概括如下:

(1)

GATE信号的控制作用如表3-2所示。表3-28253门控信号GATE的控制功能

(2)

8253各种工作方式的比较如表3-3所示。

表3-38253各种工作方式的比较对于方式0,在写入控制字后,输出端即变低,计数结束后,输出端由低变高,常用该输出信号作为中断源。其余5种方式在写入控制字后,输出均变高。

方式0可用来实现定时或对外部事件进行计数。

方式1用来产生单脉冲。

方式2用来产生序列负脉冲,每个负脉冲的宽度与CLK脉冲的周期相同。

方式3用于产生连续的方波。方式2和方式3都实现了对时钟脉冲进行n分频。方式4和方式5产生的波形相同,都在计数器回0后,从OUT端输出一个负脉冲,其宽度等于一个时钟周期。但方式4由软件(设置计数值)触发计数,而方式5由硬件(门控信号GATE)触发计数。

8253是一个可编程接口芯片,它的各种工作方式可以通过编程来设定。每个计数器的工作方式都是通过初始化编程来设置完成的(初始化编程是指CPU向8253写入相应的控制字)。一旦初始化编程完成,8253将按编程所设定的方式进行工作。3.38253的应用3.3.18253控制字的格式

8253控制字可以选择特定的计数通道、工作方式、计数初值类型以及计数方式等,其格式如图3-11所示。

如图3-11所示,在8253控制字的格式中,各位的含义如下所述。

D7D6=SC1SC0为通道选择,二者不同的组合选中不同的计数通道,都为1时非法。

D5D4=RL1RL0为操作类型选择,其不同组合决定了8253的具体操作类型,全为0时表示锁存计数值,这时可以读取计数器来查看现行计数器的计数情况,但锁存计数值并不停止计数,只将当前计数值锁存起来,计数器照常作减法计数。在写初值和读计数器值时,可以有以下三种方式:

(1)只读/写低字节寄存器(RL1RL0=01)。

(2)只读/写高字节寄存器(RL1RL0=10)。

(3)可以读/写16位寄存器(RL1RL0=11),在16位寄存器读/写时必须先读/写低字节寄存器,再读/写高字节寄存器。

D3D2D1=M2M1M0为方式选择位,三位有8种选择,但由于8253只有6种工作方式,因此其具体选择如图3-11所示。

图3-118253控制字的格式

D0=BCD为计数进制选择。8253有两种不同的计数进制:一种是二进制计数(BCD=0),另一种是二-十进制(BCD=1)计数。二进制计数范围为0000H~FFFFH,即0~65535;BCD码计数的计数范围为0000~9999。

由于8253是减法计数,因此这两种计数的最大初始值为0000,而不是FFFFH或9999。对于二进制减法计数,0000H实际表示10000H(65536),而BCD码计数的0000表示10000,除方式3外,最小值都为1。3.3.28253初始化编程

1.一般原则

对8253初始化编程分两步,首先写入控制字,规定8253的计数通道、工作方式、操作类型和计数制式等,然后写入对应通道的计数初值。至于先写哪个通道,则由用户任意选择。每一个通道的控制字都必须写入控制寄存器的对应端口(8253的A1A0=11时所对应的端口),初值必须写入相应计数通道的对应端口。在写初值时,应根据控制字要求的操作类型进行适当的写入。实际上,控制字应该在确定计数初值的类型后方能确定,而计数初值往往与实际应用的要求有关,是通过已知条件计算出来的。

2.计数初值的计算

假设已知8253相应通道的CLK端接入的时钟频率为fCLK,周期记为TCLK=1/fCLK,要求产生的周期性信号频率为f(周期为T)或定时时间为T(f=1/T),则所需计数初值n为

在计算时应注意时间和频率的单位要一致。

3.读计数值操作

8253读操作是指读取计数器当前的值。当要读出计数器当前的计数值时,需用锁存命令和输出命令相配合。在读计数值时,必须先用锁存命令将计数器的当前值输出到锁存寄存器中锁住,再用一个读命令将其锁住的计数值读出。

由于锁存器是跟随计数器工作的,因此锁存器中的值与计数器的当前值一致,锁存命令一到,该计数值被锁住。这时CPU用输入指令就能读出当前的计数值。CPU将这一锁定值读走后,锁存器便自动失锁,锁存器又跟随计数器变化。由此可见,在锁存和读出计数值的过程中,计数器仍然在不断地作减1计数。这样,在读取当前计数值的过程中就不会影响正常计数的进行。3.3.3应用举例

【例3-1】

设端口地址为F8H~FEH,使计数器0工作在方式1,按二进制计数,计数值为3025H。

其初始化程序为

MOV AL,00110010B

OUT 0FEH,AL;写方式控制字

MOV AL,25H

OUT 0F8H,AL;向计数器0写入低8位 计数值

MOV AL,30H

OUT 0F8H,AL;向计数器0再写入高8 位计数值若要读出当前计数值,可利用锁存命令和读出命令来实现。

MOV AL,00H

OUT 0FEH,AL;计数器0的锁存命令 写入控制口,锁存当前计数值

IN AL,0FEH

MOV AH,AL ;读计数器0的低8位计 数值,暂存于AH

IN AL,0FEH;读计数器0的高8位 计数值

XCHG AL,AH ;AX中为计数器0的当 前计数值。

【例3-2】

若8253的计数器0工作在方式1,按BCD码计数,其计数初值为800,8253的端口地址为08H~0EH,写出8253的初始化程序。

其初始化程序如下:

MOV AL,33H ;写入计数器0的控制字

OUT 0EH,AL

MOV AL,00 ;写入计数值低8位

OUT 08H,AL

MOV AL,08 ;写入计数值高8位

OUT 08H,AL

【例3-3】

若在8086系统中有一片8253芯片,用它的计数器0对外部加工工件进行计数,当计数器计满1000次时向CPU发出中断申请。CPU接受该中断请求后并响应,利用计数器1输出频率为1kHz的方波。编写计数器0和计数器1的初始化程序(设8253的端口地址为60H~66H)。要求计数器0对外部加工的工件进行计数,其计数工件数由CLK1输入,这时,让计数器0工作在方式0,当计数到1000次时,由OUT1端向CPU发出中断请求。CPU响应中断后,在中断服务程序中对计数器1进行初始化。根据题意具体的初始化程序如下:

MOV AL,30H

OUT 66H,AL;写入计数器0的方式控制字

MOV AX,1000;计数器0的计数值低8位

OUT 60H,AL

MOV AL,AH;写入计数值高8位

OUT 60H,AL

HLT当计数器0计数满1000次后,CPU发出中断请求,CPU响应中断时,在中断服务程序中对计数器1进行初始化,要求计数器1输出1kHz的方波。因计数器1工作在方式3,若CLK2输入的时钟为2MHz,那么计数器1的计数值应为1ms/0.5μs=2000,用BCD计数。计数器1的控制字应为01100111(只写高8位)。

在对8253备用通道写入计数器初值或读取当前计数值时,既可写入8位,也可写入16位数据。若只写入低8位,则高8位自动置0;若只写入高8位,则低8位会自动为0。下面写出计数器1的初始化程序。中断服务程序:

MOVAL,67H

OUT66H,AL ;写入计数器1的控制字

MOVAL,20H

OUT62H,AL ;计数器1的计数值高8位

【例3-4】

在IBM-PC/XT中用8253定时/计数器产生定时信号或方波输出。8253的三个计数器及控制寄存器的端口地址、工作方式与实现功能如表3-4所示。

表3-48253的三个计数器及控制寄存器的端口地址、工作方式与实现功能计数器0:通过编程作为定时器,从而为系统的电子钟提供一个恒定的时间基准。它的CLK0端加的是1.193

18MHz的脉冲信号,工作在方式3,预置的计数初值为216。因此,在OUT0输出端产生重复频率等于1.19318MHz/216≈18.2Hz的对称方波,该输出信号送至可编程中断控制器8259A的IR0输入端,这样每隔55ms产生一次中断,8088对这个时间基准进行计数,用于计算一天的时间。

计数器1:通过编程工作在方式2,给动态存储器进行刷新提供定时信号,它的CLK2端仍然是加1.19318MHz脉冲,预置的时间常数为18,所以每隔18个脉冲,即15.12μs,计数器1的OUT1端产生输出信号。该输出信号接至DMA控制器8237的DREQ0端,请求DRAM刷新操作。计数器2:通过编程产生方波,传送到扬声器,用于产生扬声器的发声驱动信号。用程序来设定计数器2的输出波形的频率和延续时间,就能控制音调和发音长短,输出波形与8255的PB相与后送至扬声器。根据8253的三个计数器在IBM-PC/XT中的作用,可以写出其初始化程序。

(1)计数器0定时初始化(产生18.2Hz定时):

MOV AL,36H ;计数器0方式3

OUT 43H,AL

MOV AX,0 ;预置计数值65536

OUT 40H,AL

MOV AL,AH

OUT 40H,AL

(2)计数器1初始化程序(18分频,产生DMA定时请求,为动态存储器刷新):

MOV AL,54H ;方式2

OUT 43H,AL

MOV AL,18 ;置分频值18

OUT 41H,AL

(3)计数器2的初始化程序(产生1000Hz方波来发声):

MOV AL,0B6H;计数器2方式3

OUT 43H,Al

MOV AX,533H;确定产生1000Hz的除数

OUT 42H,AL

MOV AL,AH

OUT 42H,AL

IN AL,PORTB;取8253的PB状态

MOV AH,AL

OR AL,03H;接通扬声器发声

OUT PORTB,AL

【例3-5】8253在IBM-PC/XT机中的应用。

IBM-PC/XT机中使用了1个8253,系统中8253的端口地址为40H~43H,3个通道的时钟输入频率为1.19318MHz(系统时钟PCLK的二分频)。3个计数通道分别用于日时钟计时、DRAM刷新定时和扬声器的音调控制。8253在IBM-PC/XT机中的定时逻辑如图3-12所示。

图3-128253在IBM-PC/XT中的应用

(1)计数器0作定时器用来产生实时时钟信号。GATE0端接

+5V,使计数器处于常开状态。开机初始化后,就一直处于计数状态,为系统提供时间基准,CLK0频率为1.19318MHz。工作在方式3,对计数器预置的初值n=0,即相当于65536,这样在OUT0端可得到的频率为CLK/n

=

1.193

18MHz/65

536

=

18.2Hz。该信号经PC总线插槽上IRQ0连到系统主板上8259A的IR0端,使计算机每秒产生18.2次中断,也就是每隔约55ms产生一次0级中断。CPU可以此作为时间基准,在中断服务程序中对该中断次数进行计数,计数单元为16位(两字节),实际初始值为0,每中断一次计数单元加1。因此,当计满产生进位时,表示已产生了65

536次中断,所经过的时间约为65536/18.2

=

3600秒

=

1小时,实际是3599.98155秒。上电后,BIOS对8253计数器0的初始化程序段为

MOV AL,36H ;计数器0的控制字,先写低字 节,后写高字节,方式3,二进 制计数

OUT 43H,AL ;控制字写入控制口

MOV AL,00H ;计数初值设定为65536

OUT 40H,AL ;写入低字节

OUT 40H,AL ;写入高字节

(2)计数器1用于动态RAM刷新定时控制。GATE1端接

+5V,使计数器1也处于常开状态,定时向DMA控制器提供动态RAM刷新请求信号,CLK2与CLK0相同,频率为

1.193

18MHz,初始化时,将计数器1设置为方式2(频率发生器),计数初值预置为18(即0012H),于是OUT1端输出一负脉冲序列,其周期为18/1.19318MHz

=

15.08μs,该信号作为D触发器的时钟信号CP,使之每隔15.08μs产生一个正脉冲,送到系统板上的DMA控制器8237A,由DMA控制器定时地对系统中动态RAM进行一次刷新操作。OUT1端的负脉冲频率为1.193

18MHz/18=66.2878kHz。计数器1的端口地址为41H。上电后,系统BIOS对计数器1的初始化程序段为

MOV AL,54H ;计数器1的控制字,只写低8 位,方式2,二进制计数

OUT 43H,AL ;控制字写入控制口

MOV AL,12H ;预置计数初值低8位

OUT 41H,AL ;低8位写入计数器1

(3)计数通道2的输出加到扬声器上,控制其发声,作为机器的报警信号或伴音信号。门控GATE2接并行接口8255A的PB0位,用它控制通道2的计数过程。输出OUT2经过一个与门,这个与门受8255A的PB1位控制。所以,扬声器可由PB0或PB1分别控制发声。由于8255A还要控制其他设备,因此在控制扬声器发声的程序中要注意保护PB端口原来的状态,以免影响其他设备的工作。

【例3-6】ROMBIOS中有一个

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论