定时计数控制接口教学重点8254的引脚内部结构6种工作方式8254的编程定时器和计数器定时控制在微机系统中极为重要定时器由数字电路中的计数电路构成,通过记录高精度晶振脉冲信号的个数,输出准确的时间间隔计数电路如果记录外设提供的具有一定随机性的脉冲信号时,它主要反映脉冲的个数(进而获知外设的某种状态),常又称为计数器定时功能的实现方法软件延时——利用微处理器执行一个延时程序段实现不可编程的硬件定时——采用分频器、单稳电路或简易定时电路控制定时时间可编程的硬件定时——软件硬件相结合、用可编程定时器芯片构成一个方便灵活的定时电路Intel8254主要特性:(1)3个独立的16位定时/计数通道。(2)每个通道有6种工作方式。(3)最高计数频率为10MHz。(4)可以按二进制或BCD码两种方式计数。(5)定时时间长短可用软件设置,可由软件或硬件控制开始计数或停止计数。(6)可以同时锁存1~3个计数器的计数值和状态值,供CPU读取。图5-88254的内部结构计数器0#计数器1#计数器2#CLK0GATE0OUT0数据总线缓冲器读/写逻辑控制寄存器WRRDA1A0CSGNDVCCD0~D7CLK1GATE1OUT1CLK2GATE2OUT21.数据总线缓冲器8254与系统数据总线相连的接口电路。通过数据总线缓冲器,CPU用指令对8254进行读/写:(1)8254初始化编程时,写入控制字。(2)CPU向某一计数器写入计数初值。(3)CPU读出计数器的当前计数值。2.读/写控制逻辑接收来自CPU的控制信号:读信号RD#写信号WR#片选信号CS#芯片内部寄存器寻址信号A1A03.计数器0~28254有3个结构完全相同的定时器/计数器通道:0,1,2每个通道包含:一个8位的控制字寄存器三个16位的初值寄存器、减1计数器和结果输出锁存器。每个通道有3根专用的信号线:CLK:计数/定时脉冲输入端,每输入一个脉冲,减1操作OUT:计数值减到零时,由输出端OUT输出结束信号GATE:门控信号,允许或停止计数图5-10CLK脉冲:8254作外部事件计数器时,CLK引脚上的计数脉冲从外部输入,这些脉冲的间隔可以不相等。8254用作定时器时,CLK引脚的输入信号是精确的时钟脉冲。8254的定时时间T=时钟脉冲周期tc×计数初值n4.控制寄存器控制寄存器是一个只能写入的寄存器,它接收从CPU来的控制字,并由控制字的D7、D6位的编码决定控制字写入哪个计数器的控制寄存器。在对8254进行编程时,CPU用输出指令向它写入控制字,由此确定各计数器通道的工作方式、读写格式和计数的数制。计数器的3个引脚CLK时钟输入信号——在计数过程中,此引脚上每输入一个时钟信号(下降沿),计数器的计数值减1GATE门控输入信号——控制计数器工作,可分成电平控制和上升沿控制两种类型OUT计数器输出信号——当一次计数过程结束(计数值减为0),OUT引脚上将产生一个输出信号8254的工作方式每个通道有六种可选择的工作方式:1.方式0-软件启动计数器方式0方式0①②⑤④⑥GATEOUTCLK031244方式0WR①设定工作方式②设定计数初值④计数值送入计数器⑤计数过程⑥计数结束GATE信号作用计数期间写入新初值.方式0-程序启动计数器写入方式0控制字后,输出OUT立即变为低电平,且在计数过程中一直维持低电平。赋初值后,在每个CLK时钟下降沿,计数器进行减1计数。计数值减到零时,OUT输出变为高电平,并且一直保持到该通道重新装入计数初值或重新设置工作方式为止。GATE用于控制计数过程。GATE为高电平,允许计数;GATE为低电平,暂停计数。方式1-单稳态触发器方式1可编程单稳脉冲①②⑤④⑥①设定工作方式②设定计数初值③③硬件启动④计数值送入计数器⑤计数过程⑥计数结束GATEOUTCLK031244方式1WR基本时序GATE作用计数期间写入新初值2.方式1-硬件启动计数器门控信号GATE上升沿触发后,输出一个负脉冲信号,脉冲宽度由计数初值N决定写入控制字后,OUT输出高电平;GATE上升沿到达后,OUT输出低电平,并在CLK脉冲下降沿进行减1计数;计数值减到0时,输出OUT恢复为高电平。计数结束后,若再来一个GATE信号上升沿,则下一个时钟周期的下降沿又以上次写入的初值开始计数,不需要重新写入初值。在计数过程中可以写入新的初值,它不会影响正在进行的计数过程。在下一个门控信号到来后,按新值开始计数。方式0方式1都是一次方式2循环方式2-分频器方式2-分频器03124GATEOUTCLK4方式2031240312403124WRGATE作用计数期间写入新初值.方式2-分频器写入控制字后,OUT变成高电平。写入计数初值后,计数器开始减1计数(GATE=1)。减到1时,输出端OUT变为低电平,维持一个CLK周期,然后输出OUT又变成高电平,同时从初值开始新的计数过程。这种方式工作时,计数初值自动重装,计数器能连续工作,输出固定频率的脉冲,因此称为分频器。方式2中,GATE信号为低电平时终止计数。GATE的上升沿使计数器恢复初值,并从初值开始计数。方式3-方波方式3方波发生器03124GATEOUTCLK4方式3031240312403124WRGATE作用对本次没有影响,下次开始4.方式3-方波发生器(1)计数初值为偶数写入控制字后,输出端OUT变成高电平写入计数初值后计数器开始进行减2计数减到0时,输出端OUT改变输出极性,从初值开始新的计数过程。(2)计数初值为奇数写入控制字后输出端OUT变成高电平写入计数初值后开始减1计数减到(N+1)/2以后,输出端OUT变为低电平减到0时,OUT又变成高电平,从初值开始新的计数过程。GATE=1,允许计数,GATE=0,禁止计数。GATE信号能使计数过程重新开始。方式4-软件选通计数期间写入新初值方式4-软件触发选通写入方式控制字后,OUT输出高电平。写入初值,经过一个CLK脉冲开始减1计数,计到0时OUT输出为低电平,持续一个CLK脉冲周期后再恢复到高电平。GATE=1时,允许计数;GATE=0,禁止计数,并把输出维持在当时的电平。如果GATE=1时在计数过程中改变计数值,则在写入新值后的下一个时钟下降沿计数器立即按新的初值开始计数。方式5-硬件选通方式5硬件触发选通信号GATEOUTCLK031244方式522333110WRGATE作用计数期间写入新初值写入8254方式字后,OUT输出高电平。写入计数初值后,计数器并不立即开始计数,在GATE端输入上升沿触发信号后,计数开始。计数器减到0时,输出一个持续时间为一个时钟周期的负脉冲,然后输出恢复为高电平,并自动装入初值,等待下一个GATE触发信号。总结:(1)写入控制字,设定工作方式(2)写入初值寄存器,设定计数初值(3)对于方式1和方式5,需要硬件启动,即GATE端出现一个上升沿信号;对于其他方式,不需要这个过程,直接进入下一步,即设定计数后软件启动。(4)CLK的下一个下降沿,将初值寄存器之值送入计数器。(5)计数开始,每一个CLK(GATE为高电平),计数器减1,当GATE为低电平时,不进行技术(6)当技术减至0时,一次计数过程结束,通常OUT端在计数值减为0发生改变,一次计数结束(7)对于方式0、1、4和5不重新设定初值或提供硬件启动信号,计数器就此停止计数,方式2和3循环计数。思考题1.8254的方式控制字(1)D7、D6:通道选择位D7D6两位为00,01,10分别选择三个计数通道,为11选择控制寄存器,用于读出控制寄存器内容。(2)D5、D4:读/写方式选择位D5D4=00,锁存计数器的当前计数值,以便读出。D5D4=01,写入时,只写入计数初值低8位,高8位置0;读出时,只读出低8位的当前计数值。D5D4=10,写入时,只写入计数初值高8位,低8位置0;读出时,只读出高8位的当前计数值。D5D4=11,计数初值为16位,分两次读/写入计数初值寄存器,先读/写低8位,后读/写高8位。(3)D3D2D1:工作方式选择位•D3D2D1取值000到101分别代表方式0到方式5。(4)D0:计数格式选择位•D0=0,按二进制格式计数;•D0=1,按BCD码格式计数。4.8254初始化编程初始化分为两步:向控制寄存器写入方式控制字,确定所要使用的计数器的工作方式;向使用的计数器写入计数初值。例1:某微机系统中8254的端口地址为40H~43H,要求计数器0工作在方式0,计数初值为0DEH,按二进制计数;计数器1工作在方式2,计数初值为1000D,按BCD码计数。试写出初始化程序段。按要求计数器0的控制字为:计数器1的控制字为:D7=0D6=1D5=1D4=0D3=0D2=1D1=0D0=1计数器1只写高8位选工作方式2BCD计数初始化程序如下:MOVAL,10H;写通道0控制字OUT43H,ALMOVAL,0DEH;写通道0计数初值OUT40H,ALMOVAL,65H;写通道1控制字OUT43H,ALMOVAL,10H;写通道1计数初值OUT41H,AL例2:设8254端口地址为3FF0H~3FF3H,要求计数器2工作在方式5,二进制计数,初值为2F30H。初始化程序如下:MOVDX,3FF3H;DX指向控制端口MOVAL,0BAH;控制字OUTDX,ALMOVDX,3FF2H;DX指向通道2MOVAL,30H;写初值低8位OUTDX,ALMOVAL,2FH;写初值高8位OUTDX,AL