第七章 计数器_第1页
第七章 计数器_第2页
第七章 计数器_第3页
第七章 计数器_第4页
第七章 计数器_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

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

文档简介

第七章计数器和定时电路18253的控制字2可编程定时/计数器的工作方式1可编程计数/定时器8253/8254定时/计数器的作用生产线上统计产品的数目----计数器系统的动态存储器刷新----定时器系统时钟计时----定时器扬声器的频率源----定时器如何定时软件定时,优点是节省硬件;缺点是执行程序期间CPU一直被占用,降低了CPU效率硬件定时,要用额外的硬件—计数/定时器,但可提高CPU的利用率8253基本功能具有三个相互独立的16位计数器通道每个通道都可设定以6种工作方式之一进行计数/定时每个计数器都可设为按二进制或BCD码计数具有计数和定时功能,基于减1计数工作定时器减为0后,可自动装入定时常数初值,并产生输出信号在减1操作中,任何时刻计数器的值都可由CPU经计数输出寄存器读取8253引脚8253引脚8253与CPU的接口

8位数据线:D0~D7

寻址控制线:A0、A0、/CS

读写控制线:/RD、/WR8253与外设的接口

注:三个独立的计数器/定时器时钟输入:CLK

输入门控:GATE

波形输出:OUT

8253寄存器选择表8253内部结构数据总线缓冲器8D0~D7内部总线CLK0计数器0GATE0OUT0计数器1CLK1GATE1OUT1计数器2CLK2GATE2OUT2读/写逻辑A0A1WRRDCS控制字寄存器内部的各计数器的结构&CLKGATE16位当前计数值锁存器16位减一计数器16位计数初值寄存器OUT(减1至0时)MSBLSB装入初值LSBMSB锁存后读出当前值9.28253的控制字例将计数器2初始化为工作方式3,计数初值为533H,为二进制计数方式,设寄存器地址为40H~43H控制字10110110B6HMOV AL,0B6H ;计数器2,先低后高字节OUT 43H,AL ;写命令字MOV AX,533H ;计数初值OUT 42H,AL ;写计数值低位MOV AL,AHOUT 42H,AL ;写计数值高位例8253工作为计数器1,方式3,初值为4020D0111011177H编程

MOVAL,77HOUT43H,AL;写计数器1的控制字

MOVAL,20HOUT41H,AL

;写计数器1的低8位初值

MOVAL,40HOUT41H,AL

;写计数器1的高8位初值例2:计数器0,工作在模式2,计数初值和输出锁存器仅使用低8位,初值为100,计数值为二进制格式。

MOVAL,00010100B;控制字

OUT73H,AL

MOVAL,100;计数初值

OUT70H,AL例3.计数器1,工作在模式1,CR和OL使用16位,初值为1234,先写入低8位,再写高8位,计数值为BCD。

MOVAL,01110011B;控制字

OUT73H,AL

MOVAX,1234H

BCD1234

OUT71H,AL;计数初值低8位

MOVAL,AH

OUT71H,AL;计数初值高8位因8253是减计数器,故计数初值越大,则计数减至0所用时间(即定时时间)就越长,但由于8253是先减1,再判是否到0,故最长的定时时间是设置计数初值为0,代表65536。十进制计数时范围是0001~10000,其中当计数初值寄存器为0000H代表十进制数10000。计数取值范围在二进制计数时是0001H~10000H,其中10000H代表65536,在计数初值寄存器中的值是0000H。可以从8253中读出当前计数值,但其读出过程是:先将当前计数初值写入到输出锁存器,然后再从输出锁存器中读出,在这同时,8253还在不停地进行减计数,虽然输出锁存器中的值不变,但减计数单元却在不断地减计数,因此,从输出锁存器中读出的值并不一定是真正的当前计数值。3工作方式与功能方式0:计数结束产生中断输出(软件控制)方式1:重复触发的单稳输出(硬件控制)方式2:分频器(软件控制)方式3:方波发生器(软件控制)方式4:选通信号发生器(软件触发)方式5:选通信号发生器(硬件触发)8253各工作方式的共同点控制字写入计数器时,所有控制逻辑立即复位,输出端OUT进入初始态写入初值后,要经过一个时钟周期后计数执行部件CE才开始工作时钟脉冲CLK的上升沿,门控信号GATE被采样图7.218253的6种工作方式时序图18方式0—计数结束产生中断预置初值之后,OUT仍保持低电平。只有当计数器中计数值减为0时,OUT才会输出高电平并维持计数初值寄存器CR在延迟一个CLK脉冲后传到CE中,因此N+1个CLK脉冲后计数值才变为0GATE=0,计数停止;1,继续计数计数过程中可重写或改变计数值方式0特点:(1)计数器只计数一遍(2)输出信号OUT会在N+1个CLK脉冲后变高

(3)GATE变低电平可以停止计数过程(4)改变计数立即有效n=4432222210CWCLKOUTGATEn=343213210CWn=4CLKOUTGATE=1方式0初始化设计数器0工作于方式0,8位二进制计数,初值为9。端口地址为0E0H~0E3H初始化程序MOV AL,10H;设计数器0,工作方式0OUT 0E3H,AL;写入控制寄存器MOV AL,9 ;设计数初值OUT 0E0H,AL;写初值入计数器0的CR方式1—可重触发的单稳触发器门控信号GATE正脉冲启动定时/计数允许当前计数未完时的多次重触发,GATE再触发后,OUT输出会保持N个CLK脉宽的低电平下个GATE正脉冲触发信号到来时,会将新初值装入CE中,使计数单元从新初值开始计数方式1特点:(1)计数到0后,如果有外部触发,就可以按原来的计数初值工作(2)计数过程中GATE信号可以用作重新触发,计数器重新计数(3)改变计数初值并不是立即有效,只有等到下一个GATE上升沿,才将新初值装入计数单元并按新初值启动计数。43210CWn=4n=5CLKOUTGATE方式1初始化设计数器1工作于方式1,BCD码计数,计数值为十进制4000。设端口地址为0E0H~0E3H16位计数初值,但由于计数值低8位为0,所以可以设定读/写操作控制段只写高8位,CR低8位自动清0。控制字为01100011B,初始值40HMOV AL,63H ;设控制字OUT 0E3H,ALMOV AL,40H ;设初值40H(高8位)OUT 0E1H,AL方式2—分频器计数器减到1时,OUT仅输出一个CLK脉宽的低电平,然后自动装入重新计数GATE由低变高会重新装入初值新初值在下次计数才起作用方式2特点:(1)不用重新设置计数值,通道可以连续工作

(2)以GATE信号停止计数。在GATE变成高电平后的下一个CLK脉冲,计数器恢复原来的初值,重新计数

(3)改变计数值不是立即有效,只有当计数值减至0时,下一轮计数过程按新初值进行。方式2初始化设计数器工作于方式2,二进制计数,计数初值0304H。端口地址0E0H~0E3HMOV AL,0B4H ;控制字OUT 0E3H,ALMOV AL,04H ;计数器低字节OUT 0E2H,ALMOV AL,03H ;计数器高字节OUT 0E2H,AL方式3—方波发生器与方式2类似,但其输出方波或准方波计数值完成一半时,使OUT变低,直到计数任务全部完成为止,OUT恢复为高初值为偶数时,每次减1,直至n/2时OUT输出变为低电平,然后又从初值开始,每次减1,直至n/2时OUT输出变为高电平初值为奇数时,每次减1,减(n+1)/2次时,OUT输出变为低电平,然后从(N-1)/2开始,每次减一,直至为0,所以有(N+1)/2个脉宽的高电平,(N-1)/2个脉宽的低电平。GATE由低变高时,重新开始计数方式3特点:(1)GATE信号由低变高可以使计数过程重新开始

(2)改变计数初值并不影响现行的计数过程

方式3初始化计数器0工作于方式3,二进制计数,初值为4。端口地址为0E0H~0E3HMOV AL,16H ;控制字OUT 0E3H,ALMOV AL,4 ;初值OUT 0E0H,AL方式4—软触发的选通发生器计数减到0时输出一个脉宽的低电平GATE由低到高时,计数器恢复工作,而不重置初值计数过程中,新初值立即起作用方式4特点:(1)如果设置计数初值为N,则输出信号OUT会在N+1个CLK脉冲后输出一个负脉冲。

(2)改变计数值为立即有效方式4初始化设计数器1工作于方式4,二进制计数,计数初值为3。端口地址为0E0H~0E3HMOV AL,58H ;控制字OUT 0E3H,ALMOV AL,3 ;初值OUT 0E1H,AL方式5—硬触发的选通发生器如方式1,方式5也是硬件触发计数器到0,输出一个脉宽的负脉冲允许当前计数未完时的多次重触发GATE触发,按新初值计数6、方式5WRCLKCW=1ALSB=3GATEOUT3210FF3方式5特点:(1)若设置计数值为N,则经过N+1个CLK脉冲后OUT引脚输出一个负脉冲(2)GATE信号重新触发,可以令计数器重新计数

(3)改变计数初值并不是立即有效方式5初始化设计数器2工作于方式5,二进制计数,计数初值为3,端口地址为0E0H~0E3HMOVAL,9AH ;控制字OUT 0E3H,ALMOVAL,3 ;初始值OUT0E2H,AL工作方式总结初始化编程的原则:先写入控制字,后设置计数初值;设置初值的过程必须符合控制字中规定的格式。计数----输入信号为外部计数脉冲。定时----输入信号为已知准确的、固定周期时钟。定时时间t=n×TCK;n为计数初值,TCK为时钟周期

编程命令读出命令----读输出锁存器内容写入命令设置控制字(工作方式)发锁存命令设置计数初值控制字方式0与方式4的比较(软件控制)

相同点 都是软触发,无自动重装入能力 写入控制字及初值后,若GATE=H,CE开始减计数当CE=0时,OUT改变电平状态不同点方式0在计数期间OUT=L,计数结束OUT=H方式4在计数期间OUT=H,计数结束OUT=负脉冲OUTOUT方式1与方式5的比较(硬件触发)

相同点写入控制字及初值后,若GATE输入上升沿脉冲触发,CE开始减计数,当CE=0时,OUT改变电平状态不同点方式1在计数期间OUT=L,计数结束OUT=H方式5在计数期间OUT=H,计数结束OUT=负脉冲计数期间GATEOUT计数期间GATEOUT方式2与方式3的比较(波形输出)

相同点均输出连续周期波形,预置初值可自动重装入

不同点方式2输出连续负脉冲周期波形方式3输出连续方波周期波形方式3方式2第7章常用接口器件图7.26初始化编程顺序

438253读出命令MOVAL,00000000B;锁存

OUT73H,AL

INAL,70H;当前计数值低8位

MOVBL,AL

INAL,70H;当前计数值高8位

MOVBH,AL;读取后,OL的值又随计数执行部件变化8253应用举例采用8253作定时/计数器,其接口地址为0120H~0123H。输入8253的时钟频率为2MHz。计数器0:每10ms输出1个CLK脉冲宽的负脉冲计数器1:产生10KHz的连续方波信号计数器2:启动计数5ms后OUT输出高电平。画线路连接图,并编写初始化程序。8253应用举例(续)确定计数初值:

CNT0:10ms/0.5us=20000CNT1:2MHz/10KHz=200CNT2:5ms/0.5us=10000确定控制字:

CNT0:方式2,16位计数值00110100CNT1:方式3,低8位计数值01010110CNT2:方式0,16位计数值101100008253应用举例(续)CLK0GATE0OUT1D0~D7WRRDA1A0CSDBIOWIORA1A0译码器8253CLK2GATE1GATE2+5VCLK12MHzOUT0OUT2?线路连接图:8253应用举例初始化程序CNT0:MOVDX,0123HMOVAL,34HOUTDX,ALMOVDX,0120HMOVAX,20000OUTDX,ALMOVAL,AHOUTDX,ALCNT1:

……CNT2:

……*如何读出当前计数值第1种方法——在计数过程中读计数值先锁存当前计数值,再用两条输入指令将16位计数值读出。第2种方法——停止计数器再读用GATE信号使计数器停止,再规定RL1和RL0的读写格式,然后读出。8253应用举例在IBMPC/XT机中,8253-5是CPU外围支持电路之一,为系统电子钟提供时间基准,为动态RAM刷新提供定时信号以及作为扬声器的声源等功能。

1.硬件结构

2.计数器的预置程序硬件结构从8253-5在IBMPC/XT机中的连线图中可知,8253-5芯片的3个计数器使用相同的时钟脉冲。CLK0~CLK2的频率是由8284时钟发生器输出的外部时钟PCLK(2.38MHz)的1/2,即1.19MHz,这由U22分频实现。8253-5的3个计数器端口地址为:40H、41H、42H; 控制寄存器端口 地址为43H。计数器的预置程序8253-5的3个计数器的预置程序如下:PR0: MOVAL,36H ;选择计数器0,写双字节计数值,方式3,二进制计数

OUT43H,AL ;写控制字

MOVAL,0 ;预置计数值65536 OUT40H,AL ;先送低字节计数值

OUT40H,AL ;后送高字节计数值PR1: MOVAL,54H ;选择计数器1,读/写低字节计数值,方式2,二进制计数

OUT43H,AL MOVAL,12H ;预置计数器初值18 OUT41H,ALPR2: MOVAL,0B6H ;选择计数器2,读/写双字节计数值,方式3,二进制计数

OUT43H,AL MOVAX,533H ;送分频数1331 OUT42H,AL ;先送低字节

MOVAL,AH OUT42H,AL ;后送高字节3个计数器如下:1.计数器02.计数器13.计数器2计数器0

计数器0为系统电子钟提供时间基准,即向系统日历时钟提供定时中断,其输出端OUT0作为系统的中断源接中断控制器8259A的中断请求端IRQ0。它选用方式3工作,以产生周期性的方波信号。为此,对计数器0编程时应设置的控制字为36H。计数器初值预置为0(即最大值65536),GATE0接+5V,允许计数。因此,OUT0输出方波的时钟频率为1.19MHz/65536=18.21Hz。它直接接到中断控制器8259A的中断请求端IR0(即图中IRQ0),即0级中断,每秒出现18.2次。因此,每间隔55ms产生一次0级中断请求。并且,每一个输出脉冲均以其正跳变产生一次中断。CPU根据这一中断可在中断服务程序中进行计时。

计数器1

计数器1用作定时器,为动态RAM刷新提供定时信号,即向DMA控制器定时发动态存储器刷新请求。它选用方式2工作,相当于一个分频器。编程时,设置的控制字为54H,计数器初始值为18。GATE1接+5V,允许计数。因此,OUT1输出的分频脉冲频率为1.19MHz/18=66.1KHz,相当于周期为15.1μs。这样,计数器1每隔15.1μs经由U21产生一个动态RAM刷新的请求信号DRQ0。由DRQ0请求一次DMA,由DMA控制器8237A执行DMA操作,以完成对动态RAM的刷新。

计数器2计数器2是系统的扬声器的声源,其输出信号送往扬声器,并根据OUT2端输出信号的频率来控制扬声器的音调。而扬声器发声的长短取决于OUT2信号延续时间的多少,也即门控信号GATE2延续时间的长短。GATE2是接在并行接口芯片8255A的PB0的,所以PB0控制了计数器的计数时间长短。在初始化编程时,计数器2用方式3工作,应设置的控制字为B6H,计数器的初值置533H(即1331),OUT2输出方波频率为1.19MHz/1331=894Hz。该计数器的工作由主机板上8255A的PB0端控制。当PB0输出的TIME2GATESPK信号使8253-5的GATE2为高电平时,计数器2方能工作。第7章常用接口器件

例7.6

电源掉电检测我们目前使用的220V电源为50Hz交流电(国外通常使用110V、60Hz交流电),它通常作为微机系统的系统电源。当系统电源因各种原因出现故障时,为了保护系统的工作状态,需要在备用电源的支持下对重要信息进行保护等处理,以便系统恢复正常供电后能够继续原来的工作,这就需要进行电源掉电检测。57第7章常用接口器件利用8253实现电源掉电检测的设计思想是,利用电源信号经检波、整流生成8253的GATE,这样GATE信号每20ms/16.67ms(对应50Hz/60Hz)产生一次脉冲。只要使计数值N取得足够大,在方式1下,使得计数器在20ms(16.67ms)内始终不能减到0,这样,不断出现的GATE脉冲上升沿就会使8253计数器不断被重启计数,使OUT输出一直维持为0,从而不能对8086CPU产生NMI。当电源出现故障时,GATE信号不再产生,计数器最终会计数到0,从而使OUT输出为1,产生对8086CPU的掉电中断NMI。58第7章常用接口器件若CLK为2.4576MHz,GATE在20ms内产生一个触发信号,即GATE信号周期为49152个时钟周期,则应取计数值N>C000H=49152。使图7.27电路有效工作的8253初始化程序如下(设8253的I/O地址为200H~207H中的偶地址):MOVDX,0206HMOVAL,00110010B

;选计数器0,16位计数长度,方式1,二进制计数OUTDX,ALMOVDX,0200HMOVAL,02H;取计数值N=C002HOUTDX,ALMOVAL,C0HOUTDX,AL59第7章常用接口器件图7.27电源掉电检测电路

60*扩展定时/计数范围

当定时长度不够时,可把2个或3个计数通道串联起来使用,甚至可把多个8253串联起来使用。例如:CLK频率为1MHz,要求在OUT1端产生频率1Hz的脉冲。这时可将计数器0、1串

温馨提示

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

评论

0/150

提交评论