计算机接口与通信第二章3.ppt_第1页
计算机接口与通信第二章3.ppt_第2页
计算机接口与通信第二章3.ppt_第3页
计算机接口与通信第二章3.ppt_第4页
计算机接口与通信第二章3.ppt_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

2.5 8254可编程定时计数器,计算机系统中经常要用到定时信号。 可以用软件和硬件两种方法来获得。 1:用软件方法,一般都是根据所需要的时间常数来设计一个延迟子程序。 2:用硬件方法,要用到计数器定时器(简称T/C),并令其在简单的软件控制下,产生准确的时间延迟。 后者最突出的优点:计数时不占用CPU的时间。,2.5.1 8254可编程计数定时器的功能与结构,8254是8253的提高型(Super Set), 它具备8253的全部功能。凡是用8253的地方都可用8254代替,而原来的硬件连接和驱动软件都不必做任何修改。 在Intel815EP芯片组的82801BA中也集成了8254,它除了工作的最高频率有所不同外,其功能和编程等均与8253和8254完全一样。 在微机方面, PCXT机中用的是8253,而PCAT及以后的系统中用的是8254。,(3)8254的外部引脚,面向系统总线的信号有: 1.数据总线D7D0 :三态输出/输入线。用于将8254与系统数据总线相连,是8254与CPU接口数据线,供CPU向8254进行读/写数据、传送命令和状态信息。 2.片选线CS:输入信号,低电平有效。当CS为低电平时,CPU选中8254,可以向8254进行读/写;当CS为高电平时,CPU未选中8254。CS由CPU输出的地址码经译码产生。 3.读、写信号RD和WR:输入信号。它们由CPU发出,用于对8254寄存器进行读/写操作。,4.地址线A1和A0:它们一般分别接到系统地址总线的A1和A0上。用于选择8254内部寄存器,以便对它们进行读/写操作。 8254内部寄存器与地址线A1和A0的关系如表2-10所示,表2-10 8254内部寄存器与外部端口的关系,2.5.2 8254的操作方式和编程,2.5.2.1 控制字的设置 3个计数器的控制寄存器公用一个IO地址,即TIM十3 (A1A011时)。 控制字节的格式为:,对8254的3个控制寄存器设置控制字,需对相同地址TIM十3执行3条OUT指令才能完成。假设INIC0、INICl和INIC2分别是要置入计数器0、1和2的控制字节,设置时要用下列指令: MOV DX,TIM十3 MOV AL,INIC0 OUT DX,AL MOV AL,INICl OUT DX, AL MOV AL,INIC2 OUT DX,AL,RLl和RL0指明对CR(计数寄存器)写和对OL(输出锁存器)读的规则: RLl、RL000 :命令,将CE(工作计数器)的内容锁存于OL (将进一步讨论); RL1、RL001 :只读(OL)、写(CR)的低位字节; RL1、RL010 :只读(OL)、写(CR)的高位字节; RL1、RL011 :先读(OL)、写(CR)的低位字节,后读、写其高位字节。,例如,向计数器0置入的控制字节的高4位为0011,那么以后向CR预置初值时,每次必须写两条输出指令,如下: MOV DX,TIM MOV AL,INIOL OUT DX,AL MOV AL,INIOH OUT DX,AL 其中INIOL和INIOH分别是要置入计数器0中计数寄存器CR的低位字节和高位字节的初值。TIM是计数器0的CR和OL地址。,同样,从OL读数时,也必须相继安排两条输入指令,如下: MOV DX,TIM IN AL,DX MOV AH,AL IN AL,DX XCHG AH,AL 这样,AX内容就是l 6位的OL值。 如果控制字节的RL l和 RL0两位设置为只读写低位字节或只读写高位字节,每次只需用一条OUT指令或IN指令来写入或读出指定的一个字节的内容。,控制字节的M2、M1和M0组合指明工作方式。组合与工作方式的对应关系是: 000 方式0 001 方式l 10 方式2 11 方式3 100 方式4 101 方式5 BCD位为0表示读写的是二进制代码,为1表示读写的是BCD码。,2.5.2.2 8254的工作方式,每N个CLK脉冲,OUT输出重复一次,其中N一1个CLK周期输出高电平,1个CLK周期输出低电平。 这种方式相当于一个对CLK信号进行N次分频的分频器。,上述操作是以GATE输入端加高电平为条件的。如果GATE端加低电平,则不进行计数操作。 在计数期间,如果送入新的计数值,而GATE端一直维持高电平,那么输出端OUT将不受影响。但在下一个输出周期中,将按新的计数值进行计数。,6种方式的共同的特点:,当用输出指令设置方式控制字时,对相应计数器的控制逻辑起立即复位作用,OUT输出端可立即变为应进入的初始输出状态。 GATE端的输入信号,对方式0和4,是信号电平起控制作用;对方式1和5,是信号上升边起触发作用;对方式2和3,信号的上升边沿和电平都起控制作用。 对GATE信号是否有效则,在CLK脉冲的上升边瞬间测试。如果GATE端上是电平信号起作用,则在CLK脉冲上升边测试时,GATE信号此瞬间的电平值就被认定。,如果GATE上是上升沿起作用,则GATE上的上升沿信号使一个依靠上升沿置1的触发器置1,然后在CLK脉冲上升沿瞬间测试这个触发器状态,测试后这个触发器立即复位为0。这样就保证了无论触发信号什么时间出现,总可在CLK的上升沿瞬间检测到。 最后,初值从CR向CE装入操作和减1计数操作都发生在CLK脉冲的下降沿瞬间。 初值的最大值为0,等效于二进制计数的216或BCD码计数的104。计数值达到0值后,计数操作没有停止,在方式2和方式3情况下,初值装入和计数将周期性地进行下去;对于方式0、1、4和5,计数值将从FFFF(十六进制)或9999(BCD)继续计数。,2.5.2.3 计数瞬时值和状态信息的读取,计数锁存命令 计数过程中,读取某一瞬间的计数值。不允许破坏计数的正常进行,而且要保证不能因在计数时读而出错。 读数分两步完成: 一是把计数工作单元CE的值锁存入OL锁存器,CE继续计数; 二,用输入指令读入OL锁存器的内容。8254的控制逻辑为实现它。第一步要可用输出指令向控制寄存器的地址(即置方式字的地址TIM十3)发“计数锁存命令”字来实现。,“计数锁存命令”字格式如下: D7 D6 D5 D4 D3 D2 D1 D0 SCl SC0 0 0 其中: SCl、SC0的3种组合00、0l和10分别指向计数器0、1和2; D5、D4位的00是计数锁存命令字的特征标志位; 其余4位可为任意值。,例如:下列3条指令执行后,将把计数器1的CE内容锁存入OL: MOV DX,TIM3 MOV AL,01000000B OUT DX,AL 若前面初始化时,置计数器1为先读写低字节后读写高字节方式,那么,完成了上述操作之后,要用下列两条IN指令读入锁存器OL的内容: MOV DX,TIM1 IN AL,DX MOV AH,AL IN AL,DX XCHG AH,AL 这时,AX的内容就是发出计数锁存命令瞬间的计数值。,读回命令:向控制寄存器地址发读回命令(Read-Back Command)可以锁存计数值和状态信息,比计数锁存命令功能更强。 读回命令的格式如下: D7 D6 D5 D4 D3 D2 D1 D0 1 1 COUNT STATUS CNT2 CNT1 CNT0 0 D7D611是读回命令的特征标志。 CNT2、CNT1和CNT0分别对应计数器2、1和0,将指定该位对应的计数值和或状态信息锁存待读。这3位是互相独立的,可以同时l位、2位或3位为l,意味着可以同时命令1个以上的计数器和或状态信息锁存待读。,COUNT位:“计数值锁存”命令标志位。该位为0表示由D3D2D1指明的计数器的计数值分别在对应的OL内锁存。 CPU对相应的计数器执行输入指令不仅能读入锁存的值,还可对这个锁存器起到“解锁”的作用。 STATUS (D4) 位:对每个计数器的状态寄存器读状态,0有效。读回命令还可用于对计数器状态信息的锁存。,状态信息经读回命令锁存后,CPU对相应的计数器执行输入指令可以读回一个字节的状态信息,格式如下: D7 D6 D5 D4 D3 D2 D1 D0 其中:D5D0位应与写入的方式控制字相同。 D7:该计数器的OUT端的状态(1为高电平)。 D6:指明置入CR(计数寄存器)的初值是否已装入CE(减法计数器)。如果CR值已装入CE,则该位为0。,允许在读回命令字中设置D5和D4位同时为0。这意味着计数值和状态信息都要读回。这时,计数值和状态信息都被锁存起来。 计数值的读入和状态字节的读入都用输入指令,而且IO地址相同,都是对应的计数器地址。 区别它们的方法是输入次序:第1次读入的一定是状态字节;接着的一条或两条输入指令(取决于置方式字时指定的是一个字节还是两个字节的读写)将读入锁存的计数值。,表2-11 6条读回命令按次序发出的操作,2.5.3 8254的应用实例,【例1】利用8254为AD子系统提供可编程的采样控制信号,设8254的地址为0070H0073H,即控制寄存器端口地址为73H,3个计数器的端口地址分别为0070H、0071H、 0072H。将初始值L,M、N分别用标号LCNT、MCNT和NCNT表示,其中L、 N为二进制数,并且都小于256,M为BCD码。初始化程序段: MOV AL,14H ;00010100b OUT 73H,AL ;将计数器0设置为模式2 MOV AL,LCNT OUT 70H,AL ;对计数器0设置计数初始值L(二进制),MOV AL,73H ;01110011b OUT 73H,AL ;将计数器1设置为模式1 MOV AX,MCNT OUT 71H,AL ;对计数器1设置初始值M(BCD码) MOV AL,AH OUT 71H,AL MOV AL,96H ;10010110b OUT 73H,AL ;将计数器2设置为模式3 MOV AL,NCNT OUT 72H,AL ;对计数器2设置初始值N(二进制),作业:按目前的电路设计及编程运行,不能实现题目要求,无法正常工作。经检查,是8254芯片设计出错,请找出原因并正确完成设计。,【例2】利用8254对某一脉冲进行计数。原理如图。将计数器0设置为方式3,计数初值为十进制5,开关K作为CLK0时钟输入,OUT0连接IRQ。8254初始化后,每按5次开关K(即向CLK0输入5个脉冲),OUT0向CPU发出一次中断请求信号。中断服务程序将在屏幕上显示计数完毕的提示。,8254初始化编程: MOV DX,TIM+3 MOV AL,00010110B ;设置计数器0 为方式3 OUT DX, AL MOV DX,TIM MOV AL,00000101B ;设置计数初值为05 OUT DX, AL,【例3】设系统提供一个10MHZ的时钟信号,试用8254-2的计数器2输出周期为1秒的标准时钟。 解:将计数器2设置为方式2,使其在1秒钟内产生一个负脉冲。,将计数器2设置为方式2,使其在1秒钟内产生一个负脉冲。那么, 计数初值fclkfout2=100000001=10000000 此值大于216,因此必须使用两个计数器级连,其中,第一个计数器为第二个计数器产生较低频的CLK信号。 先把计数器0设置为方式3,为计数器2的CLK2提供5KHZ时钟。 fclkfout0=100000005000=2000 计数器0的初值是2000。 fout0fout2=50001=5000 计数器2的初值是5000,初始化程序如下: MOV DX,TIM+3 MOV AL,001101101 ;设计数器0为方

温馨提示

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

评论

0/150

提交评论