但是
看看
妇科
指南
第八章 可编程接口芯片8.1计数器/定时器电路8253-PIT,一.8253的结构和功能,计算机系统中,实现定时或延时有三种方法:软件定时、不可编程的硬件定时、可编程的硬件定时器。8253为可编程的硬件定时/计数器。,1.主要功能A、具有3个独立的16位计数器通道;B、每个计数器均可按二进制或十进制BCD计数;C、每个计数器的计数速率高达2MHz;D、每个通道有6种工作方式,可由程序设置和改变;E、所有的输入输出都与TTL(晶体管-晶体管逻辑电路的英文缩写,Transister-Transister-Logic)兼容。,第一页,共五十九页。,二.8253 的引线,1、数据线D7D02、地址线:选择内部寄 存器;3、控制线:完成片选和 读写操作。,CLK:输入脉冲线;GATE:门控信号输入线;GATE=0 禁止计数,GATE=1 允许工作;OUT:输出引脚;当计数到“0时,OUT 端输出一信号。,8253引脚排列图,8253,GATE1,Vcc,WR,RD,CS,A1,CLK2,OUT2,GATE2,CLK1,OUT1,GATE0,D7,D6,D5,D4,D3,D2,D1,D0,CLK0,OUT0,GND,A0,第二页,共五十九页。,三.8253的内部结构书283页,4、三个计数器减法器计数器的3个引脚 3个独立的16位减法器,可作定时/计数器使用;计数器按二/BCD方式减法计数,从预常减到零时,OUT端输出一信号。,数据总线缓冲器,计数器0,读/写逻辑,控制字存放器,计数器1,计数器2,CLK0,CLK1,CLK2,GATE0,GATE1,GATE2,OUT0,OUT1,OUT2,D7 D0,RDWRA0A1,CS,8253内部结构,内部数据总线,1、数据总线缓冲器(传送信息)写控制字,写时常,读计数值,2、读写逻辑幻灯片 3,3、控制字存放器(存放控制字),第三页,共五十九页。,8253输入信号组合的功能表书284页表8.1,第四页,共五十九页。,计数器的3个引脚,CLK时钟输入信号在计数过程中,此引脚上每输入一个时钟信号下降沿,计数器的计数值减1GATE门控输入信号控制计数器工作,可分成电平控制和上升沿控制两种类型OUT计数器输出信号当一次计数过程结束计数值减为0,OUT引脚上将产生一个输出信号,第五页,共五十九页。,四.8253-PIT的控制字书285页,0=二进制1=BCD,在8253的初始化编程中,由CPU向8253的控制字存放器写入一个控制字来规定8253的工作方式。,第六页,共五十九页。,计数器结构示意图,计数初值存于预置存放器;在计数过程中,减法计数器的值不断递减,而预置存放器中的预置不变。输出锁存器用于写入锁存命令时,锁定当前计数值,第七页,共五十九页。,五、8253的工作方式,8253有6种工作方式,由方式控制字确定熟悉每种工作方式的特点才能根据实际应用问题,选择正确的工作方式每种工作方式的过程类似:设定工作方式 设定计数初值 硬件启动 计数初值进入减1计数器 每输入一个时钟计数器减1的计数过程 计数过程结束,第八页,共五十九页。,方式0 计数结束中断,设定工作方式,设定计数初值,计数值送入计数器,计数过程,计数结束,第九页,共五十九页。,计数开始的时刻,需要注意:处理器写入8253的计数初值只是写入了预置存放器,之后到来的第一个CLK输入脉冲需先由低电平变高,再由高变低才将预置存放器的初值送到减1计数器。从第二个CLK信号的下降沿,计数器才真正开始减1计数。,第十页,共五十九页。,方式1 可编程单稳脉冲,设定工作方式,设定计数初值,硬件启动,计数值送入计数器,计数过程,计数结束,第十一页,共五十九页。,*CW写入,OUT=0;*写入时常,通道开始计数;*计数到零,OUT=1;,*计数器只计数一遍;*OUT是N+1个CLK后变高;*计数过程中,GATE=0,计数暂停;*计数过程中可改变计数值;书图96,1.方式0(书上287页),第十二页,共五十九页。,方式1可编程单拍脉冲书上288页,*写入控制字OUT=1,写入常数不计数;*GATE启动计数,OUT=0;*计数到,OUT=1。,*单拍脉冲宽度为N;*由GATE重新启动;*计数中,可重新启动;*计数中,可改变计数值,再次启动有效。,第十三页,共五十九页。,方式2速率发生器分频工作方式,*写入控制字OUT=1;*写入常数立即对CLK计数;*计数到1,OUT=0;*一个CLK周期后,OUT=1,重新计数。,*通道连续工作不需重置时常;*计数过程中,GATE=0,计数暂停,GATE变高后重新计数;*计数过程中可改变计数值;新的计数值在下一次有效。,第十四页,共五十九页。,方式3方波速率发生器,*与方式2的区别在于:输出为周期是N个CLK脉冲的方波。*假设计数值为偶数,每个CLK使计数值减2,计到0,OUT改变状态,重装计数值开始新的计数。,*假设计数值为奇数,第一个脉冲先减1,以后,每个CLK使计数值减2,计到0 时,OUT改变状态,重装计数值后,第一个脉冲减3,以后,每个CLK使计数值减2,计到0时,OUT改变状态。,*GATE信号控制计数过程;*计数过程中写入新的计数值将在半周期结束时装入计数器。,第十五页,共五十九页。,例:要求计数器0工作于方式3,输出方波的频率为2KHz,计数脉冲的频率为2.5MHz,采用BCD计数,试写出初始化程序段。,1.常数计算:n=TOUT/TCLK=fCLK/Fout=2.5MHz/2KHz=12501250HBCD,MOV AL,37HOUT 83H,AL,能看出:8253的端口地址为:80H,81H,82H,83H。,3.初始化程序段:,37H,MOV AL,50HOUT 80H,AL,MOV AL,12HOUT 80H,AL,第十六页,共五十九页。,方式4软件触发选通,*写入控制字OUT=1;*写入常数立即对CLK计数;*计数到0,OUT=0;*一个CLK周期后,OUT=1,计数器停止计数。,*计数器只计数一遍;*OUT是N+1个CLK后变低;*计数过程中,GATE=0,计数暂停;*假设在计数过程中,改变计数值,那么按新的计数值重新开始计数。,第十七页,共五十九页。,方式5硬件触发选通,*写入控制字OUT=1;*写入常数后,由GATE的上升沿启动计数;*计数到0,OUT=0;*一个CLK周期后,OUT=1,计数器停止计数。,*计数器只计数一次;*OUT是N+1个CLK后变低;*在 计数过程中出现的GATE脉冲,将使 计数器重新开始计数,对输出状态没有影响;*假设在计数过程中改变计数值,只要没有GATE信号触发,不影响计数过程。有新的GATE信号触发那么按新的计数值开始计数。,第十八页,共五十九页。,六.8253-PIT工作方式小结,1.输出端OUT的初始状态 只有方式0是在写入控制字后输出为低,其它均为高;,2.计数值的设置 任一种方式,只有在写入计数值后才能开始计数,方式0、2、3、4在写入计数值后,计数自动开始,方式1、5需外部触发,才开始计数。,第十九页,共五十九页。,计数值N与输出波形的关系,第二十页,共五十九页。,各种工作方式的输出波形291,第二十一页,共五十九页。,3.门控信号的作用-GATE输入总是在CLK输入时钟的上升沿被采样。在方式0,2,3,4中,GATE输入是电平起作用。在方式1,2,3,5中 GATE输入是上升沿起作用的。(书300页表93),3,方波速率发生器,禁止计数,立即使输出为高,启动计数,允许计数,4,软件触发选通,禁止计数,-,允许计数,5,硬件触发选通,-,启动计数,-,第二十二页,共五十九页。,4.在计数过程中改变计数值立即有效是写入计数值后的下一个CLK脉冲后,新的计数值开始起作用。,5.计数到0后计数器的状态计数器减到0后并不停止,在方式0,1,4,5,计数器减到0后从FFFF/9999继续计数。方式2,3是连续计数,计数器自动装入计数值后,继续计数。,第二十三页,共五十九页。,七.8253-PIT的编程,8253-PIT初始化编程的步骤:,1.写入通道控制字,规定通道的工作方式;8253的A1A0=112.写入计数值由控制字的最高两位D7D6确定通道号。假设规定只写入低8位,那么写入的为计数值的低8位,高8位自动置0;假设规定只写入高8位,那么写入的为计数值的高8位,低8位自动置0;假设是16位计数值,那么分两次写入,先写入低8位,再写入高8位。,定时系数计数初值n=定时时间t 时钟频率fc=定时时间t/时钟脉冲周期Tc,第二十四页,共五十九页。,8253的控制字编程,;某个8253的计数器0、1、2端口和控制端口地址依次是40H43H;设置其中计数器0为方式0,采用二进制计数,先低后高写入计数值mov al,30h;方式控制字:30H00 11 000 0Bout 43h,al;写入控制端口:43H,第二十五页,共五十九页。,8253的计数初值编程,;某个8253的计数器0、1、2端口和控制端口地址依次是40H43H;设置计数器0采用二进制计数,写入计数初值:1024400Hmov ax,1024;计数初值:1024400H;写入计数器0地址:40Hout 40h,al;写入低字节计数初值mov al,ahout 40h,al;写入高字节计数初值,第二十六页,共五十九页。,例:8253的地址为04H07H,要使计数器1工作在方式0,仅用8位二进制计数,计数值为128,编制初始化程序。,编程步骤:1、确定计数值及数制。1280128H(BCD)=80H(二进制),2、确定工作方式及使用的计数器。方式0,计数器1,3、确定读写格式。如果用0128H那么即写高位又写低位,用80H只写低位,高位自动置0,0080H。,4、确定控制字。,01 选择计数器1,01 只读/写低位有效字节低八位,000 方式0,0=二进制,50H,5、确定端口地址。控制口07H,计数器1的端口地址05H,MOV AL,50HOUT 07H,AL,MOV AL,80HOUT 05H,AL,思考:如果用BCD数制呢?,6、编写初始化程序。先写控制字,再写计数值。针对每个计数器。这里只用计数器1,第二十七页,共五十九页。,01 选择计数器1,先写低位有效字节低八位 再写高位有效字节高八位,000 方式0,1=BCD,71H,MOV AL,71HOUT 07H,AL;先写控制字,MOV AL,28HOUT 05H,AL;再写低八位,计数值:1280128H(BCD),MOV AL,01HOUT 05H,AL;最后写高八位,思考:如果端口地址255呢?例如200H203H。,MOV DX,203HMOV AL,71HOUT DX,AL;先写控制字,MOV DX,201HMOV AL,28HOUT DX,AL;再写低八位,MOV AL,01HOUT DX,AL;最后写高八位,第二十八页,共五十九页。,例:8253的地址为04H07H,要使计数器0工作在方式1,BCD计数,计数值为3000,编制初始化程序。,00 选择计数器0,10只写高位有效字节高八位,001 方式1,23H,1=BCD,MOV AL,23HOUT 07H,AL;先写控制字,MOV AL,30HOUT 04H,AL;再写高八位,计数值3000D3000HBCD,只写高位,第二十九页,共五十九页。,例:8253的地址为04H07H,要使计数器2工作在方式2,二进制计数,计数值为02F0H,编制初始化程序。,10 选择计数器2,010 方式2,0B4H,0=二进制,MOV AL,0B4HOUT 07H,AL;先写控制字,计数值02F0H,先写低位0F0H,再写高位02H,先写低位有效字节低八位 再写高位有效字节高八位,MOV AL,0F0HHOUT 06H,AL;再写低八位,MOV AL,02HOUT 06H,AL;最后写高八位,第三十页,共五十九页。,习题1、某系统中,8253芯片的计数器0,计数器1,计数器2及控制端口地址分别为7