1、第八章 可编程接口芯片(xn pin)8.1计数器/定时器电路8253-PIT,一.8253的结构(jigu)和功能,计算机系统中,实现(shxin)定时或延时有三种方法:软件定时、不可编程的硬件定时、可编程的硬件定时器。8253为可编程的硬件定时/计数器。,1.主要功能A、具有3个独立的16位计数器通道;B、每个计数器均可按二进制或十进制(BCD)计数;C、每个计数器的计数速率高达2MHz;D、每个通道有6种工作方式,可由程序设置和改变;E、所有的输入输出都与TTL(晶体管-晶体管逻辑电路的英文缩写,Transister-Transister-Logic)兼容。,第一页,共五十九页。,二.8
2、253 的引线(ynxin),1、数据线(D7D0)2、地址线:选择(xunz)内部寄 存器;3、控制线:完成片选和 读写操作。,CLK:输入脉冲线;GATE:门控信号输入线;GATE=0 禁止计数,GATE=1 允许(ynx)工作;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个引脚 3个独立的16位减法器,可作定时/计数器使用;计数器按二/BCD方式减法(jinf)计数,从预常减到零时,OUT端输出一信号。,数据总线缓冲器,计数(j sh)器0,读/写逻辑(lu j),控制字寄存器,计数器1,计数器2,CLK0,CLK1,CLK2,GATE0,GATE1,GATE2,OUT0,OUT1,OUT2,D7 D0,RDWRA0A1,CS,8253内部结构,内部数据总线,1、数据总线缓冲器(传送信息)写控制字,写时常,读计数值,2、读写逻辑幻灯片 3,3、控制字寄存器(存放控制字),第三页,共五十九页。,8253输入信号(xnho)组合的功能表(书284页表8.1
4、),第四页,共五十九页。,计数器的3个引脚,CLK时钟输入信号在计数过程中,此引脚上每输入一个时钟信号(下降沿),计数器的计数值减1GATE门控输入信号控制计数器工作,可分成电平控制和上升沿控制两种类型OUT计数器输出信号当一次计数过程结束(jish)(计数值减为0),OUT引脚上将产生一个输出信号,第五页,共五十九页。,四.8253-PIT的控制(kngzh)字(书285页),0=二进制1=BCD,在8253的初始化编程中,由CPU向8253的控制字寄存器写入一个控制字来规定8253的工作(gngzu)方式。,第六页,共五十九页。,计数器结构(jigu)示意图,计数初值存于预置寄存器;在计数
5、过程中,减法(jinf)计数器的值不断递减,而预置寄存器中的预置不变。输出锁存器用于写入锁存命令时,锁定当前计数值,第七页,共五十九页。,五、8253的工作(gngzu)方式,8253有6种工作方式(fngsh),由方式控制字确定熟悉每种工作方式的特点才能根据实际应用问题,选择正确的工作方式每种工作方式的过程类似:设定工作方式 设定计数初值 硬件启动 计数初值进入减1计数器 每输入一个时钟计数器减1的计数过程 计数过程结束,第八页,共五十九页。,方式(fngsh)0 计数结束中断,设定工作方式,设定计数初值,计数值送入计数器,计数过程,计数结束,第九页,共五十九页。,计数开始(kish)的时刻
6、,需要注意:处理器写入8253的计数初值只是写入了预置寄存器,之后到来的第一个CLK输入脉冲(需先由低电平变高,再由高变低)才将预置寄存器的初值送到减1计数器。从第二个CLK信号(xnho)的下降沿,计数器才真正开始减1计数。,第十页,共五十九页。,方式(fngsh)1 可编程单稳脉冲,设定工作方式,设定计数初值,硬件启动,计数值送入计数器,计数过程,计数结束,第十一页,共五十九页。,*CW写入,OUT=0;*写入时常,通道(tngdo)开始计数;*计数到零,OUT=1;,*计数(j sh)器只计数(j sh)一遍;*OUT是N+1个CLK后变高;*计数过程中,GATE=0,计数暂停;*计数过
7、程中可改变计数值;(书图96),1.方式(fngsh)0(书上287页),第十二页,共五十九页。,方式(fngsh)1(可编程单拍脉冲)(书上288页),*写入控制字OUT=1,写入常数不计数(j sh);*GATE启动计数,OUT=0;*计数到,OUT=1。,*单拍脉冲宽度为N;*由GATE重新启动;*计数中,可重新启动;*计数中,可改变(gibin)计数值,再次启动有效。,第十三页,共五十九页。,方式2(速率(sl)发生器分频工作方式),*写入控制字OUT=1;*写入常数立即对CLK计数;*计数到1,OUT=0;*一个CLK周期(zhuq)后,OUT=1,重新计数。,*通道连续工作不需重置
8、时常(shchng);*计数过程中,GATE=0,计数暂停,GATE变高后重新计数;*计数过程中可改变计数值;新的计数值在下一次有效。,第十四页,共五十九页。,方式(fngsh)3(方波速率发生器),*与方式2的区别在于:输出为周期是N个CLK脉冲的方波。*若计数值为偶数(u sh),每个CLK使计数值减2,计到0,OUT改变状态,重装计数值开始新的计数。,*若计数值为奇数,第一个脉冲先减1,以后,每个CLK使计数值减2,计到0 时,OUT改变状态(zhungti),重装计数值后,第一个脉冲减3,以后,每个CLK使计数值减2,计到0时,OUT改变状态(zhungti)。,*GATE信号控制计数
9、过程;*计数过程中写入新的计数值将在半周期结束时装入计数器。,第十五页,共五十九页。,例:要求(yoqi)计数器0工作于方式3,输出方波的频率为2KHz,计数脉冲的频率为2.5MHz,采用BCD计数,试写出初始化程序段。,1.常数(chngsh)计算:n=TOUT/TCLK=fCLK/Fout=2.5MHz/2KHz=12501250H(BCD),MOV AL,37HOUT 83H,AL,已知:8253的端口地址为:80H,81H,82H,83H。,3.初始化程序段:,37H,MOV AL,50HOUT 80H,AL,MOV AL,12HOUT 80H,AL,第十六页,共五十九页。,方式4(软
10、件(run jin)触发选通),*写入控制(kngzh)字OUT=1;*写入常数立即对CLK计数;*计数到0,OUT=0;*一个CLK周期后,OUT=1,计数器停止计数。,*计数器只计数一遍;*OUT是N+1个CLK后变低;*计数过程中,GATE=0,计数暂停;*若在计数过程中,改变计数值(shz),则按新的计数值(shz)重新开始计数。,第十七页,共五十九页。,方式(fngsh)5(硬件触发选通),*写入控制字OUT=1;*写入常数后,由GATE的上升沿启动计数;*计数到0,OUT=0;*一个(y)CLK周期后,OUT=1,计数器停止计数。,*计数器只计数一次;*OUT是N+1个CLK后变低
11、;*在 计数过程中出现的GATE脉冲,将使 计数器重新开始计数,对输出状态没有影响(yngxing);*若在计数过程中改变计数值,只要没有GATE信号触发,不影响计数过程。有新的GATE信号触发则按新的计数值开始计数。,第十八页,共五十九页。,六.8253-PIT工作方式(fngsh)小结,1.输出(shch)端OUT的初始状态 只有方式0是在写入控制字后输出为低,其它均为高;,2.计数值(shz)的设置 任一种方式,只有在写入计数值后才能开始计数,方式0、2、3、4在写入计数值后,计数自动开始,方式1、5需外部触发,才开始计数。,第十九页,共五十九页。,计数值N与输出波形(b xn)的关系,
12、第二十页,共五十九页。,各种(zhn)工作方式的输出波形(291),第二十一页,共五十九页。,3.门控信号的作用-GATE输入(shr)总是在CLK输入(shr)时钟的上升沿被采样。在方式0,2,3,4中,GATE输入(shr)是电平起作用。在方式1,2,3,5中 GATE输入(shr)是上升沿起作用的。(书300页表93),3,方波速率(sl)发生器,禁止(jnzh)计数,立即使输出为高,启动计数,允许计数,4,软件触发选通,禁止计数,-,允许计数,5,硬件触发选通,-,启动计数,-,第二十二页,共五十九页。,4.在计数过程中改变(gibin)计数值立即有效是写入计数值后的下一个CLK脉冲后
13、,新的计数值开始起作用。,5.计数到0后计数器的状态(zhungti)计数器减到0后并不停止,在方式0,1,4,5,计数器减到0后从FFFF/9999继续计数。方式2,3是连续计数,计数器自动装入计数值后,继续计数。,第二十三页,共五十九页。,七.8253-PIT的编程,8253-PIT初始化编程的步骤(bzhu):,1.写入通道控制字,规定(gudng)通道的工作方式;(8253的A1A0=11)2.写入计数值(由控制字的最高两位D7D6确定通道号)。若规定只写入低8位,则写入的为计数值的低8位,高8位自动置0;若规定只写入高8位,则写入的为计数值的高8位,低8位自动置0;若是16位计数值,
14、则分两次写入,先写入低8位,再写入高8位。,定时系数(计数(j sh)初值)n=定时时间t 时钟频率fc=定时时间t/时钟脉冲周期Tc,第二十四页,共五十九页。,8253的控制(kngzh)字编程,;某个8253的计数器0、1、2端口和控制端口地址依次是40H43H;设置其中(qzhng)计数器0为方式0,采用二进制计数,先低后高写入计数值mov al,30h;方式控制字:30H00 11 000 0Bout 43h,al;写入控制端口:43H,第二十五页,共五十九页。,8253的计数(j sh)初值编程,;某个8253的计数器0、1、2端口和控制(kngzh)端口地址依次是40H43H;设置
15、计数器0采用二进制计数,写入计数初值:1024(400H)mov ax,1024;计数初值:1024(400H);写入计数器0地址:40Hout 40h,al;写入低字节计数初值mov al,ahout 40h,al;写入高字节计数初值,第二十六页,共五十九页。,例:8253的地址为04H07H,要使计数器1工作在方式0,仅用8位二进制计数,计数值(shz)为128,编制初始化程序。,编程步骤:1、确定(qudng)计数值及数制。1280128H(BCD)=80H(二进制),2、确定(qudng)工作方式及使用的计数器。方式0,计数器1,3、确定读写格式。如果用0128H则即写高位又写低位,用
16、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 选择(xunz)计数器1,先写低位有效(yuxio)字节(低八位)再写高位有效字节(高八位),000 方式(fngsh)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,01H