资源描述
,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,第5章-定时-计数技术,软件定时,通过软件编程,,循环执行,一段程序来实现。,优点,:无需专用硬件,方法简单、灵活。,缺点,:CPU开销大,效率低;定时不精确。,适用于定时时间不长、精度要求不高的场合。,2,MOV CX,,,0FFFFH,L1,:,LOOP L1,LOOP,指令的作用:,执行一次,,CX-1,送,CX,,同时检测,CX,是否等于零,不等于零就转到指定的,LP,去执行,否则顺序执行下一条指令。,(3),微机中的定时方法,不可编程的硬件定时,采用,分频器,、,单稳电路,或简易定时电路控制定时时间。,例:简易定时炸弹、空调遥控器。,优点,:不占用处理器时间,电路也不复杂。,缺点,:缺少灵活性,电路一旦设计好,其定时时间和范围就不能改变。,3,可编程的硬件定时,用,可编程定时器芯片,构成一个定时电路,,定时时间软件可调,。,优点:软、硬件相结合,克服了纯软件和纯硬件定时的缺点。,不占用CPU资源,、,定时准确,、,定时时间长,、,使用灵活,。,常用的可编程定时芯片:,8253-5:5MHz。8253:2MHz,8254-2:10MHz。8254:8MHz,4,两者在芯片功能、外形和引脚上大同小异,,8254,附加功能:,读当前计数单元,;,读状态寄存器内容,。,(1),总体结构,5.2 8253/8254 定时/计数器,5,数据总线缓冲器,三态双向,8位,寄存器,是系统数据总线与8253/8254的接口,与D,7,D,0,相连,可寄存以下3种数据:,CPU向8253/8254写入的工作,方式命令字,;,CPU向计数寄存器写入的,计数初值,;,从计数器,读出,的当前计数值。,读/写控制逻辑,用来接收CPU发来的读写信号、片选信号和地址信号,选择相应的寄存器,并确定数据传输的方向(写入、读出)。,6,控制字寄存器,接收CPU发来的,控制字,。控制字只能写入,其功能为:,选择计数器;,确定计数器的工作方式;,确定写入计数初值的格式(高低8位或16位);,确定计数格式:二进制或BCD格式。,计数器 02,3个结构完全相同、相互独立的计数器。,每个计数器包含一个16位初值寄存器、一个16位减1计数器和一个16位输出锁存器。,7,注意,它们都是减,1,计数器。,24引脚、DIP双列直插封装,单一+5V供电。,内含3个独立的定时/计数器(T/C),各自具有独立的时钟信号CLK、门控信号GATE和输出信号OUT。,可通过编程,分别设定各定时/计数器的工作方式。,8,(2),8253/8254,外部引脚定义,数据总线 D,7,D,0,用于将8253/8254与系统总线相连,供CPU向8253/8254读写数据、命令和状态信息。,内部端口地址译码信号A,1,A,0,用于片内端口选择。,A,1,A,0,=00,选择计数器0,A,1,A,0,=01,选择计数器1,A,1,A,0,=10,选择计数器2,A,1,A,0,=11,选择,控制端口,9,片选信号CS,输入信号,低有效,由CPU输出的地址线译码产生。,读写信号RD和WR,输入信号,低有效。分别连接系统总线的IOR和IOW。,时钟信号CLK,0,CLK,2,各自独立。作用:定时或计数时,每个CLK,下降沿,,计数减1。,10,门控信号 GATE,0,GATE,2,作用:,允许或禁止,计数过程。,计数输出信号 OUT,0,OUT,2,计数减为0(或设置值)时,OUT端输出一个电平或脉冲信号,指示定时或计数已到。,OUT 的用途,:,可作为外部定时、计数,控制信号,,控制或启动I/O设备的某种操作。,可作为定时、计数已到的,状态信号,,供CPU监测。,可作为,中断请求信号,使用,。,11,OUT,12,CS,RD,WR,A,1,A,0,操 作,地址,0,1,0,0,0,向计数器0写入“计数初值”,40H,0,1,0,0,1,向计数器1写入“计数初值”,41H,0,1,0,1,0,向计数器2写入“计数初值”,42H,0,1,0,1,1,向控制寄存器写入“方式控制字”,43H,0,0,1,0,0,从计数器0读出“当前计数值”,40H,0,0,1,0,1,从计数器1读出“当前计数值”,41H,0,0,1,1,0,从计数器2读出“当前计数值”,42H,0,0,1,1,1,无操作(三态),1,禁止(三态),0,1,1,无操作(三态),(3),8253/8254,读写操作及端口地址,8253/8254 的每个计数器有6种工作方式:,方式0计数期间低电平输出(GATE高电平时计数),方式1计数期间低电平输出(单稳态,GATE上升沿重新计数),方式2周期性输出负脉冲(不对称分频),分频器,方式3周期性输出方波(对称分频)方波发生器,方式4,软件触发,输出单脉冲,方式5,硬件触发,输出单脉冲,6种工作方式的区别在于:,输出波形,不同。,启动计数器的,触发方式,不同,。,计数过程中门控信号,GATE,对计数操作的影响不同。,5.3 8253/8254 工作方式,13,写方式字和初值(,基本计数过程,),向计数器写入方式字0后,WR的上升沿使OUT信号变低。,写入计数初值后,WR的上升沿将初值写入初值寄存器,在下一个CLK下降沿,才将计数初值写入减1计数器。,之后每个CLK下降沿,计数减1。减为0时,OUT变高。,14,(1),方式0,计数期间输出低电平(GATE,高电平计数,),门控信号,GATE为高时允许计数;为低时,暂停,计数,其计数值保持不变。当GATE再次变高时,计数器从暂停处,继续,计数。,GATE信号的变化不影响OUT信号的状态。,15,重新计数,计数期间,若再次写入计数初值,则计数器,立即,按,新的初值,重新计数,。,16,写方式字和初值,写入方式字2后,WR的上升沿使OUT信号变高。,写入初值后,计数器在CLK下降沿的作用下进行减1计数。,当减为1时,OUT变低并维持一个CLK周期,,然后又变高,并,自动装入初值,重新进行计数。,17,(3),方式2,周期性输出负脉冲,该方式能连续工作,且输出固定频率的脉冲,因此称之为,频率发生器,或,分频器,。,门控信号,GATE为高,允许计数;否则,,终止计数,。待GATE恢复为高后,计数器将,从初值重新,进行计数。,18,重新计数,计数期间,若重新写入计数初值,则不会影响正在进行的计数过程,必须,等到计数器减到1之后,才装入新的初值,,并按照新的初值进行计数。,19,与方式2基本相同,都具有,自动装入,计数初值、,连续计数,的功能。不同在于:方式3下OUT端连续输出比例为1:1 或近似1:1的方波,因此称为,方波发生器,。,相同点回顾,写入方式字后,OUT信号变高。写入初值后,计数器进行减1计数。,方式2:,当减为1时,OUT输出一个周期负脉冲后变高,重新装入初值继续计数,。,GATE,同前,:高时计数;低时停止计数;恢复后重新计数。,重新计数同前,:重装初值后,必须等上轮计数完成后再按新的初值计数。,20,(4),方式3,周期性输出方波,初值为,偶数,时,写入方式字后,OUT信号变高。,写入初值后开始减1计数;减到 n/2 时,OUT变低,继续减1计数;减到0时,OUT变高,并自动装入初值,重新计数。,21,OUT,端连续输出占空比为,1/2,的方波。,占空比,:脉冲序列中,正脉冲的持续时间与脉冲总周期的比值。,初值为,奇数,时,写入方式字后,OUT信号变高。,写入初值后开始减1计数;减到(n-1)/2 时,OUT变低,继续减1计数;减到0时,OUT变高,并自动装入初值,重新计数。,22,6种工作方式比较,23,方式,功能,门控情况,OUT 输出波形,0,计数期间低电平输出(GATE高电平计数),高电平,写入初值后OUT变低,且开始减1计数,经过n个CLK后,OUT变高。(不连续),1,计数期间低电平输出(GATE 重新计数),上升沿,输出宽度为n个周期的低电平。(不连续),2,周期性输出负脉冲,高电平,连续输出周期为n个CLK、宽度为1个CLK的负脉冲。(自动连续),3,周期性输出方波,高电平,连续输出比例为1:1或近似1:1的方波。(自动连续),4,软件触发输出单脉冲,高电平,写入初值后OUT变高,经n个CLK后,输出1个CLK的负脉冲。(软件触发才继续),5,硬件触发输出单脉冲,上升沿,写入初值后OUT变高,有门控信号后才计数,经n个CLK后输出1个CLK的负脉冲。(GATE上升沿才可再次触发),6,种模式中,,2,、,3,两种是重复多次的,其它是单次的,实质都是计数,都受,GATE,控制,用的较多的是,0,、,1,、,2,、,3,四种。,【5-1】如图所示,计数器1工作在方式3,计数初值为十进制数15。请计算OUT1上的输出波形的周期。,24,2MH,解:输出波形特性,本题中计数初值 n=15 为奇数,故输出波形的一个周期中,高电平的持续时间为(n+1)/2 个CLK,低电平的持续时间为(n-1)/2 个CLK。所以有:,T,clk1,=1/2MHz=0.50,s,T,1,=(n+1)/2,T,clk1,=8 0.5 4 s,T,2,=(n-1)/2,T,clk1,=7 0.5 3.5 s,T=T,1,+T,2,=7.5s,故输出波形特性为:输出,总周期,为7.5 s的方波,其中一个周期中,高电平,的持续时间约为 4 s,,低电平,的持续时间约为3.5 s。,25,【5-2】计数器0工作在方式0,计数初值为100,采用BCD计数。GATE,0,和CLK,0,信号的时间关系如图所示。试计算T,0,的输出端出现正跳变时的延迟时间T,D,。,26,2MH,解:OUT,0,的持续时间计算,正常情况下(GATE,0,保持高电平),OUT,0,持续为低的时间共为N个时钟脉冲宽度。N为计数初值。,实际计数期间,GATE,0,禁止计数了2个时钟周期,故输出端OUT,0,持续低电平的总宽度为:,T,D,=(N+2),T,clk0,=102,(,1/2MHz,),=102,1/(210,6,),=51 s,27,5.4 8253 编程与应用,28,AB,控制寄存器,高,8,位,低,8,位,CR,高,8,位,低,8,位,CE,OL,高,8,位,低,8,位,1,2,3,地址,译码,CLK0,GATE0,OUT0,CLK1,GATE1,OUT1,CLK2,GATE2,OUT2,Vcc,GND,DB,RD,WR,READY,M/IO,A0,A1,CS,CR:Count Register CE:Count Executor OL:Output Latch Register,方式字的作用,指定使用哪个计数器。,指定某个计数器的工作方式。,指定计数初值的长度、装入顺序以及计数值的码制。,指定是向计数器,写入初值,,还是,锁存,其当前计数值。,29,(1),方式字,8253 方式命令字的格式,30,D,7,D,6,D,5,D,4,D,3,D,2,D,1,D,0,00:,计数器,0,01:,计数器,1,10:,计数器,2,11:8253,不用,计数器,00:,锁存当前值,01:,只读写初值低,8,位,高,8,位置,0,10:,只读写高,8,位,低,8,位置,0,11:,先读写低,8,位,然后高,8,位,读写格式,000:,方式,0,001:,方式,1,x10:,方式,2,x,11:,方式,3,100:,方式,4,101:,方式,5,工作方式,0:,二进制编码,1:BCD,编码,数制,计数初值的计算,8253/8254是一种减1计数器,,计数初值,决定了定时的长短与计数的多少。,已知:,定时时间T,out,=计数时钟周期T,CLK,计数初值,故,举例,已知8253的计数脉冲频率为1MHz,若要定时1ms时间,则计数初值 n=1M/(1/10,-3,)=1000。,31,(2)计数初值,写方式字,将方式字送入,控制端口,,其对应的,A,1,A,0,=11,。,写计数初值,将计数初值写入,相应,的计数器端口。,计数器0的初值写入 A,1,A,0,=00对应的端口。,计数器1的初值写入 A,1,A,0,=01对应的端口。,计数器2的初值写入 A,1,A,0,=10对应的端口。,32,(3)8253 初始化编程与应用,33,CS,RD,WR,A,1,A,0,操 作,地址,0,1,0,0,0,向计数器0写入“计数初值”,40H,0,1,0,0,1,向计数器1写入“计数初值”,41H,0,1,0,1,0,向计数器2写入“计数初值”,42H,0,1,0,1,1,向控制寄存器写入“方式控制字”,43H,0,0,1,0,0,从计数器0读出“当前计数值”,40H,0,0,1,0,1,从计数器1读出“当前计数值”,41H,0,0,1,1,0,从计数器2读出“当前计数值”,42H,0,0,1,1,1,无操作(三态),1,禁止(三态),0,1,1,无操作(三态),【5-3】设计数器的端口地址为40H43H。已知:选择2号计数器,工作在方式3,计数初始值为533H,采用二进制计数。请写出初始化程序段。,34,MOV AL,,,10,11,011,0,B,;计数器,2,的初始化命令字,OUT 43H,,,AL,;写入命令寄存器,MOV AX,,,533H,;计数初值,OUT 42H,,,AL,;先送,低字节,到计数器,2,MOV AL,,,AH,;取高字节送入,AL,OUT 42H,,,AL,;后送,高字节,到计数器,2,【5-4】设8253计数器的端口地址为40H43H。请编写程序,实现读出并检查1号计数器的当前值是否为全1(假定计数值只有低8位)。,注:要遵循“,先锁存、后读取当前值,”的原则。,35,L:,MOV AL,,,01,00,0000B,;计数器,1,的,锁存,命令,OUT 43H,,,AL,;写入命令寄存器,IN AL,,,41H,;读计数器,1,的当前计数值,CMP AL,,,0FFH,;比较,JNE L,;不是全“,1”,,再读,HLT,;是全“,1”,,暂停,【5-5】设计数器的端口地址为40H43H。计数器T,2,工作在方式1,进行8位二进制计数,计数初值低8位为BYTEL。请写出初始化程序段。,36,MOV DX,,,43H,;命令口,MOV AL,,,10,01,001,0,B,;方式字,OUT DX,,,AL,MOV DX,,,42H,;,T,2,数据口,MOV AL,,,BYTEL,;低,8,位,,高,8,位自动补,0,OUT DX,,,AL,当地址,0FFH,时,也可用,间接寻址,方式。,【5-6】设计数器的端口地址为40H43H。计数器T,1,工作在方式4,进行8位二进制计数,并且只装入高8位计数初值BYTEH。请写出初始化程序段。,37,MOV AL,,,01,10,100,0,B,;方式字,OUT 43H,,,AL,MOV AL,,,BYTEH,;高,8,位,,低,8,位自动补,0,OUT 41H,,,AL,当地址,0FFH,时,直接寻址更明了。,【5-7】设某微机系统8253计数器的端口地址为60H63H。已知:,计数器0:方式0,计数初值0A8H,按二进制计数;,计数器1:方式1,计数初值为2000,按BCD码计数;,计数器2:方式3,初值为1B3CH,按二进制计数。,请写出初始化程序段。,38,解:,写方式字,:控制端口,A,1,A,0,=11,T,0,:方式0,初值0A8H,二进制计数。,T,1,:方式1,初值2000,BCD码计数;,T,2,:方式3,初值1B3CH,二进制计数。,写计数初值:,写入对应端口,T,0,:将初值A8H写入端口60H;(,高8位自动补0,),T,1,:将初值20H写入端口61H;(,低8位自动补0,),T,2,:将初值1B3CH写入端口62H。(,先低8位,后高8位,),39,00,01,000,0,B=,10H,01,10,001,1,B=,63H,10,11,011,0,B=,B6H,40,MOV AL,,,10H,;写,T,0,控制字,OUT 63H,,,AL,MOV AL,,,0A8H,;向,T,0,写低,8,位计数初值,OUT 60H,,,AL,MOV AL,,,63H,;写,T,1,控制字,OUT 63H,,,AL,MOV AL,,,20H,;向,T,1,写高,8,位计数初值,OUT 61H,,,AL,MOV AL,,,0B6H,;写,T,2,控制字,OUT 63H,,,AL,MOV AL,,,3CH,;向,T,2,写低,8,位计数初值,OUT 62H,,,AL,MOV AL,,,1BH,;向,T,2,写高,8,位计数初值,OUT 62H,,,AL,【5-8】针对下图,按要求编写初始化程序段。,计数器0:方式0,计数初值1234H,按二进制计数;,计数器1:方式2,计数初值为100,按BCD码计数;,计数器2:方式3,初值为1FFFH,按二进制计数。,41,RD#,WR#,M/IO#,解:(1)首先确定8253的端口地址,。,计数器0、1、2的地址分别是40H、44H 和 48H;,方式字的端口地址是4CH。,42,A,15,A,14,A,13,A,12,A,11,A,10,A,9,A,8,A,7,A,6,A,5,A,4,A,3,A,2,A,1,A,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,(2)确定8253三个计数器的工作方式,T,0,:方式0,初值1234H,二进制计数。,T,1,:方式2,初值100,BCD码计数;,T,2,:方式3,初值1FFFH,二进制计数。,43,00,11,000,0,B=,30H,01,10,010,1,B=,65H,10,11011,0,B=,B3H,(3)编写程序段,44,MOV AL,,,30H ;,写,T,0,的方式字,OUT,4CH,,,AL,MOV AL,,,34H ;,写,T,0,的计数初值,1234H,OUT,40H,,,AL,MOV AL,,,12H,OUT 40H,,,AL,45,MOV AL,,,0B3H ;,写,T,2,的方式字,OUT,4CH,,,AL,MOV AL,,,0FFH ;,写,T,2,的计数初值,1FFFH,OUT,48H,,,AL,MOV AL,,,1FH,OUT,48H,,,AL,MOV AL,,,65H ;,写,T,1,的方式字,OUT 4CH,,,AL,MOV AL,,,01H ;,写,T,1,的计数初值,0100H,OUT,44H,,,AL,【5-9】请采用8253设计一个可以,重复,进行的计数系统,按下开关,LED开始亮,按到100下,LED则熄灭。如此反复。,解:(1)硬件电路分析与设计,8253中某个计数器的CLK端接,开关,,每按一下产生一个CLK下降沿,用其进行计数。初值可设为100。,该计数器的OUT端可用于控制LED发光二极管亮或灭。,该计数器的工作方式采用,方式0,的外脉冲计数。,该计数器的GATE端可恒接高电平。,该8253芯片的CS端应接一个译码电路,译码范围为40H43H。,46,47,RD#,WR#,M/IIO#,(2)软件编程,48,MOV AL,,,00,10,000,1,H ;T,0,方式,0,BCD,计数,OUT,43H,,,AL,MOV AL,,,01H ;,初值,100,,高位为,1,OUT,40H,,,AL,【5-10】,分频器应用,。某微机系统中8253的端口地址为250H253H,使用该定时/计数器接口芯片将2MHz的脉冲变成1Hz的脉冲。,解:(1)计数初值,N=200 0000 2,16,=65535,超出了一个计数器的计数范围,故用一个计数器无法实现。,可考虑用2个,计数器级联,来实现。第一个计数器的分频结果作为第2个计数器的输入,如图所示。,49,50,T,0,可工作方式,3,,它输出的方波作为,T,1,的时钟输入;,T,1,可工作在方式,2,或方式,3,。只要设计好计数初值,它即可输出,1Hz,的脉冲。,51,(2),计数初值的拆分,设,T,0,和,T,1,的计数初值分别为,N,0,和,N,1,,则有:,即:总的计数初值,N=20 0000,可拆分为两个计数器初值,N,0,和,N,1,的乘积。可任意拆分,只要保证,N,0,,,N,1,6 5535,即可。这里可拆分为,N,0,=400,,,N,1,=5000,,并采用,BCD,计数。,(3)程序代码段,52,MOV AL,,,27H ;T,0,的方式字:,00,10,011,1,MOV DX,,,253H,OUT DX,,,AL,MOV AL,,,04H ;,T,0,的计数初值,400,MOV DX,,,250H,OUT DX,,,AL,MOV AL,,,65H ;T,1,的方式字:,01,10,010,1,MOV DX,,,253H,OUT DX,,,AL,MOV AL,,,50H ;,T,1,的计数初值,5000,MOV DX,,,251H,OUT DX,,,AL,53,此课件下载可自行编辑修改,仅供参考!感谢您的支持,我们努力做得更好!谢谢,
展开阅读全文