定时与计数器课件_第1页
定时与计数器课件_第2页
定时与计数器课件_第3页
定时与计数器课件_第4页
定时与计数器课件_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

定时与计数器一、基本概念二、定时/计数器Intel8253三、IBMPC/XT中的定时/计数器电路四、应用举例一、基本概念

1.定时信号的需求:

在计算机系统中,经常要用到定时信号,比如:

在许多个人计算机中,动态存储器的刷新定时;系统日历时钟的计时;喇叭的声源;都是用定时信号来产生的。

在计算机实时控制与处理系统中,计算机需要每隔一段时间采样一次,再对采样的数据处理、控制,也要用到定时信号。

2.定时信号的产生

定时信号的产生有两种方式:

软件方法:延时子程序;

DELAY:PUSHAXPUSHDX

MOVDX,3FFH

TIME1:MOVAX,0FFFFH

TIME2:DECAXNOPJNETIME2

DECDXJNETIME1POPDXPOPAXRET•

硬件方法:不可编程的硬件定时;可编程的硬件定时——用定时/计数器(简单的软件控制,产生准确的时间延迟)。

可编程计数/定时器的主要思路:首先由CPU(通过编程)设定好它的工作方式。其开始工作后,CPU不必过问它的工作而去做其它的事情,当它计数或定时到确定值时,可以自动产生一个输出。

优点:不占用CPU。3.可编程定时/计数器的工作原理4.可编程定时/计数器的功能计数——在设定好计数初值后,做减1计数,减为0时,输出一个信号。定时——在设定好计数初值后,做减1计数,并按定时常数不断输出为时钟周期整数倍的定时间隔。二、可编程定时/计数器Intel8253原理主要功能

芯片上有三个独立的16位计数器通道;

每个计数器可以按照二进制或BCD码格式计数;

每个计数器的计数速率可达2MHZ;

每个通道有6种工作方式,可有程序设置和改变;

所有的输入输出都与TTL兼容。(2)结构数据总线缓冲器读/写逻辑控制字寄存器计数器0号计数器1号计数器2号8位双向三态。用于与CPU交换信息。•

初始化时,CPU向其写入命令字,计数值;•

CPU读取计数值。

接收来自系统总线的控制信号,以产生控制整个芯片工作的控制信号初始化时,由CPU写入控制字以决定某通道的工作方式。计数器/定时器通道。由16位的可预置值的减法计数器构成。管脚信号D7~D0

数据总线(双向)RD

读输入WR

写输入A0,A1

选择内部寄存器地址CS

片选CLK输入脉冲(计数器即对此脉冲计数)GATE

门控信号输入(控制计数器工作的外部信号,为低时,禁止计数器工作)OUT输出引脚(计数到0

时,OUT上必有输出,

输出信号的波形由工作方式决定)端口选择控制字——在8253的初始化编程时,由CPU向8253的控制字寄存器写入一个控制字,它规定了8253的工作方式。2.工作方式——8253共有六种工作方式(1)方式0——计数结束中断(2)方式1——可编程的单拍脉冲(3)方式2——频率发生器(4)方式3——方播频率发生器(5)方式4——软件触发选通(6)方式5——硬件触发选通3.8253编程(1)方式0——计数结束中断

当控制字写入控制字寄存器时,即使OUT输出端变低,在写入计数初值后,计数器开始计数(此时GATE信号必须为高),计数结束后OUT输出端变高。1.计数器只计一遍。当计数到0时,并不恢复计数初值,不开始重新计数,且输出一直保持为高。只有在写入下一个计数值时,OUT变低,开始新的计数。数据总线缓冲器读/写逻辑控制字寄存器计数器0号计数器1号计数器2号MOVAL,18HOUT53H,ALMOVAL,13HOUT50H,AL特点:特点:3.在计数过程中,可改变计数值。在写入新的计数之后,计数器按新的值重新开始计数。特点:2.在计数过程中,可由门控信号GATE控制暂停。GATE=0,计数暂停,GATE变高后,接着计数。特点:4.8253内部没有中断控制电路,也没有专用的中断请求引线,因此,要用于中断,则可用OUT信号作为中断请求信号,但需要有外接的中断优先权排队电路与中断向量产生电路。在PC机中,用8259A作中断优先权排队电路与中断向量产生电路。(2)方式1——可编程的单拍脉冲

当控制字写入控制字寄存器后,OUT输出保持为高,当CPU写完计数值后,计数器并不开始计数,直到GATE信号启动之后的下一个输入CLK脉冲的下降沿开始计数),OUT输出端变低。在整个计数过程中,OUT都维持为低,直到计数为0时,输出变为高,输出一个单脉冲。特点:1.若设置的计数值为N,则输出的单脉冲宽度即为N个输入脉冲间隔。

2.当计数到0后,可再次由外部触发启动,输出一个同样宽度的单拍脉冲,而不用再次送计数值。

特点:3.在计数过程中,外部可发门控信号进行再触发,在触发脉冲上升沿后的下一个CLK脉冲的下降沿,计数器将重新开始工作。特点:4.在计数过程中,CPU可改变计数初值,这时计数过程不受影响,计数到0后输出为高。若再次触发启动,则计数器将按新的计数值计数。所以改变计数值是下次有效的。(3)方式2——频率发生器

当控制字写入控制字寄存器后,OUT输出为高。在写入计数值后,计数器将立即自动对输入脉冲CLK计数。在计数过程中,OUT一直保持为高,直到计数器减到1时,OUT变低,经过一个CLK后,OUT恢复为高,计数器重新开始工作。特点:1.不用重新设置计数值,计数器能够连续工作,输出固定频率的脉冲。特点:2.计数过程可由门控信号GATE控制。当GATE变低时,暂停计数;在GATE变高后的下一个CLK脉冲使计数器恢复初值,重新开始计数。特点:3.在计数过程中可以改变计数值,这对正在进行的计数过程没有影响,但在计数到1输出变低后,下一个计数周期,计数器将按新的计数值计数。所以改变计数值是下次有效的。(4)方式3——方波频率发生器

同频率发生器,区别在于,方波频率发生器在计数过程中输出一半时间为高,一半时间为低。即其输出是N(N为计数值)个CLK脉冲的方波。特点:1.若计数值为偶数,在装入计数值后,每个CLK脉冲使计数值减2,当计数到0时,一方面输出改变状态,一方面重新装入计数值开始新的计数。若计数值为奇数,装入计数值后,第一个CLK脉冲使计数器减1,以后每个CLK使计数器减2。

所以,若计数值N为奇数,则(N+1)/2个CLK脉冲为高电平,(N-1)/2个CLK脉冲为低电平。特点:2.GATE信号能使计数过程重新开始。GATE=0,计数停止,当GATE=1后,计数器将重新装入计数初值,重新开始计数。特点:3.若在计数期间写入新的计数值,并不影响现行计数过程。但若此时收到GATE信号,则计数器将在下一个CLK脉冲时装入新的计数值并开始计数.例:计数器工作模式3,计数器初值15,时钟脉冲频率为2MHz,确定

OUT端输出方波的特性。解:TCLK=1/2MHz=500ns

计数器初值15为奇数,输出方波高电平宽度:TCLK(N+1)/2=4000ns =4s

输出方波低电平宽度:TCLK(N-1)/2=3.5s(5)方式4——软件触发选通

在这种方式下,当写入控制字后,输出为高,当写入计数值后立即开始计数。计数到0后,输出变低,经过一个CLK周期,输出又变高,计数器停止计数。这种计数方式是一次性的,当输入新的计数值后,才能开始新的计数。特点:1.CPU写入计数值的下一个CLK脉冲,将计数值装入计数器,在下一个CLK脉冲开始计数,即在装入计数值后的第N+1个脉冲,才输出一个负脉冲。特点:3.若在计数期间写入新的计数值,则按新的计数值重新开始计数。特点:2.GATE=0,禁止计数,GATE=1,允许计数。因此要做到软件触发,

GATE必须保持为高。例:计数器0工作模式4,初始化计数器,使装入计数器10s后产生选通信号(设时钟频率2MHz,8253端口地址为50H~53H)。00011000

通道0只写低8位方式4二进制计数

解:n+1=T/TCLK=10/0.5=20n=19=13HMOVAL,18HOUT53H,ALMOVAL,13HOUT50H,AL(6)方式5——硬件触发选通

在这种方式下,当写入控制字后,输出为高,当写入计数值后,计数器并不立即开始计数,而是由门控信号的上升沿触发启动。计数到0后,输出变低,经过一个CLK周期,输出又变高,计数器停止计数。等到下一次门控信号的触发才能开始新的计数。特点:1.CPU写入计数值的下一个CLK脉冲,将计数值装入计数器,再下一个CLK脉冲开始计数,即在装入计数值后的第N+1个脉冲,才输出一个负脉冲。特点:2.若在计数过程中使用GATE信号,则使计数器重新开始计数。但GATE不影响输出。特点:3.若在计数期间改变计数值,只要没有门控信号的触发,不影响计数过程,计数到0后,若有门控信号触发,则按新的计数值开始计数;若未计数到0,即有门控信号触发,则立即按新的计数值重新开始计数。3.8253编程

要使用8253必须首先对其进行初始化编程。初始化编程的步骤是:(1)写入通道控制字,规定通道的工作方式;

(2)写入计数值

若规定只写低8位,则写入的为计数值的低8位,高8位自动置0;

若规定只写高8位,则写入的为计数值的高8位,低8位自动置0;

若是16位计数值,则分两次写入,先写入低8位,在写入高8位。4.8253编程举例(1)初始化编程:使用通道0,工作在方式1下,按二——十进制计数,计数值为5080H。假设8253的地址为04H~07H。•

通道控制字

计数值的低8位为80,高8位为50。

MOVAL,33H

OUT07H,AL

MOVAL,80

OUT04H,AL

MOVAL,50

OUT04H,AL00110011

通道0先写低8位方式1BCD计数再写高8位CPU读取计数器的计数值。因为计数值在不断地变化,故读取计数值时,必须将当前计数值锁存。通常的做法是:向8253送一个控制字,令通道中的锁存器将计数值锁存,然后由CPU读取。01000000通道1计数器锁存例:读取通道1中的计数值。

MOVAL,40HOUT07H,ALINAL,05HMOVCL,ALINAL,05HMOVCH,AL通道控制字三、IBMPC/XT中的定时/计数器电路PC机中,8253的三个计数器都得到使用,三个计数器的时钟脉冲都是1.1931816MHZ,即时钟信号发生器8284A的PCLK外围设备用时钟信号。1.计数器0

计数器0工作在方式3(方波频率发生器)下,在系统运行期间:

GATE恒接于+5V,处于开启状态,当装入一个初值后,即开始计数。

计数初值为0(65536),输出的方波频率为18.2HZ。

输出OUT0

接于8259的中断请求线IRQ0

上,这样便每隔1/18.2=55ms产生一次0级中断,

当0级中断发生时,系统便进入BIOS日时钟中断子程序,产生日时钟计数;此外,还作为软盘驱动器的马达开启时间管理,当开启一定的时间后,令其自动关闭。方式31.1931816MHZ06553618.2HZ18.2HZ6553602.计数器1计数器1工作在方式2(频率发生器方式)下,在系统运行期间:

GATE恒接+5V,处于常启状态;

OUT1接DMA控制器8237的0通道DREQ0,

计数初值定为18,输出频率=1.1931816MHZ/18=66.287KHZ的一系列负脉冲,即:每隔1/66.287=15.0857μs向DMA控制器提出DMA请求,由DMA控制器的0通道完成对动态存储器的刷新。用于定时的向DMA控制器提出请求,以对动态存储器刷新。方式21.1931816MH287KHZ66.287KHZ66.287KHZ3.计数器2计数器3工作在方式3(方波频率发生器方式)下,在系统运行期间:

预置初值为533H,

GATE2

信号受系统并行接口芯片8255PB0

的控制;

OUT2受系统并行接口芯片8255PB1

的控制。用于提供系统喇叭发声的音调。8255PB口765432108253计数器2CLKGATE喇叭驱动电路喇叭PCLK1.1931816MHZ4.8253的BIOS功能调用INT1AH——

读当前时钟;设置当前时钟。

INT1CH——

在时钟中断处理程序(INT8)中有一条软中断指令INT1CHINT1CH的处理程序只是一条返回指令(IRET指令),用户可在此程序中加入自己的程序,当发生时钟中断时则可执行此程序,以实现实时控制。5.8253的DOS功能调用INT21H的AH=2AH——

设置日期

2BH——

读日期

2CH——

设置时间

2DH——

读时间四、应用举例例1:以2MHz输入8253,实现每5秒定时中断(设8253端口地址40H~43H)分析:8253最大初值65536,CLK=2MHz可实现最大时间间隔为:

2*106/65536=30.518Hz1/30.518=32.768ms所以需要两个计数器串联:一个计数器的输出作为另一个计数器的输入。方式22MHZ65536065536065536030.518HZ30.518HZ30.518HZ计数器1:模式2,OUT1每5ms输出一个脉冲初值(2106)/(1/0.005)=10000计数器0:模式2,OUT0每5s输出一个脉冲初值10000/(1/5)=1000OUT0GATE0CLK0OUT1GATE1CLK1+5V+5V2MHz每5秒产生一个脉冲MOVAL,74H;计数器1,方式2OUT43H,ALMOVAX,10000OUT41H,ALMOVAL,AHOUT41H,ALMOVAL,74HMOVAL,34H;计数器0,方式2OUT43H,ALMOVAX,1000OUT40H,ALMOVAL,AHOUT40H,AL01110100

通道0先写低8位方式2BCD

再写高8位计数例2:编写时钟中断处理程序——日时钟CLK0CLK1CLK2OUT0IRQ0INTINTRINTAD7~0类型码0000591F0000000020000231F59:0000中断向量表中断服务程序825382598086内存INTA时间常数的计算要求8253每隔10ms发一次定时中断。计数初值=PCLK/计数器输出频率

=PCLK*计数器输出周期

=1.1931816*106*(*10*10-3)=11932地址寄存器40H计数器141H计数器242H计数器343H控制寄存器PC机中8253地址分配方式31.1931816MHZ011932Stacksegmentparastack‘stack’db256dup(?)StackendsDatasegmentpublic‘data’Count100db100;100计数器Tenhourdb0;时的十位数

Hourdb0;时的个位数

db‘:’Tenmindb0;分的十位数

Minutedb0;分的个位数

db‘:’Tensecdb0;秒的十位数

Seconddb0;秒的个位数

hh:mm:ssDataends

Codesegmentparapublic‘code’Startprocfarassumecs:code,da:data,es:data,ss:stackBegin:pushdsxorax,axpushaxmovax,datamovds,ax

movah,0;键盘功能调用——等待按键

int16h

cli;关中断

movbx,4*8hmovax,offsettimermov[bx],axintbxintbxmovax,settimermov[bx],ax

;将中断向量存入中断向量表

moval,36h

;设8253控制字—选计数器0,双字节写,方式2,

out43h,al;二进制计数

movbx,11932;送计数值

moval,bl

out40h,al

moval,bh

out40h,al

moval,fch;设8259屏蔽寄存器——允许时钟和键盘中断

out21h,al

sti

;开中断

Forever:movbx,offsettenhour;取hh:mm:ss8个字串进行显示

movcx,8Dispclk:moval,[bx]calldispcharincbxloopdispclkmoval,second;取秒数

Wait:cmpal,secondjzwait;等待变化

jmpforever;变了则重新显示

deccount100;计数值减1,

jnztimerx

;不到0,返回

incsecond;到0,秒加1cmpsecond,‘9’;处理秒

温馨提示

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

评论

0/150

提交评论