单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,10,章 定时器,/,【内容简介】,首先简要介绍微型计算机中定时器的作用,然后重点介绍可编程定时器/计数器8254的组成原理、工作方式及编程使用重点难点】,重点是8254的组成原理、工作方式及编程使用难点是8254的方式控制字及编程使用10.1 概 述,10.2 可编程定时器/计数器8254,10.3 8254编程使用,第10章 定时器/计数器,10.1 概 述,在计算机中经常用到定时信号,比如动态存储器刷新、系统日历计时等,在自动控制中的定时控制等定时方法可采用软件/硬件方式软件定时是设计延时子程序,以达到定时的目的硬件定时是用专门的定时器/计数器来实现,主要优点是不占用CPU的时间可与CPU并行工作硬件定时器实质上是一个可加1或者减1的计数器,可上升沿或者下降沿计数在早期的PC机中使用8253作为定时器/计数器,以后的PC/AT使用的是8254另外在PC/AT及以后的一些兼容机中,使用MC146818作为定时芯片10.2 可编程定时器/计数器8254,8254包含有3个16位计数器,可按二进制或十进制计数,有6种工作方式。
10.2.1 内部结构与引脚功能,10.2.2 工作方式,部,表,10.1 8254,内部地址分配,CS,A,1,A,0,RD,WR,功,能,0,0,0,0,0 0,0 1,1 0,1 1,1,1,1,1,0,0,0,0,写计数器,0,写计数器,1,写计数器,2,写方式控制字,0,0,0,0,0 0,0 1,1 0,1 1,0,0,0,0,1,1,1,1,读计数器,0,读计数器,1,读计数器,2,无效,在8254内部设置有4个寄存器,由地址A,1,A,0,选择和片选信号 确定,如,表10.1,所示表10.1 8254内部地址分配,CS,A,1,A,0,RD,WR,功能,0,0,0,0,0 0,0 1,1 0,1 1,1,1,1,1,0,0,0,0,写计数器0,写计数器1,写计数器2,写方式控制字,0,0,0,0,0 0,0 1,1 0,1 1,0,0,0,0,1,1,1,1,读计数器0,读计数器1,读计数器2,无效,2.引脚信号,8254有24个引脚,采用双列直插式封装,其信号分布如,图10.1(b),所示,功能如下:,D,7,-D,0,:数据总线,双向,8位,与外部数据总线连接WR:写信号输入,低电平有效。
RD:读信号,输入,低电平有效CS:片选信号,输入,低电平有效A,1,A,0,:地址信号,输入,用于选择内部寄存器CLK,2,CLK,0,:3个计数器计数信号输入OUT,2,OUT,0,:3个计数器计数回零输出,高电平有效GATE,2,GATE,0,:3个计数器外部门控信号输入端,高电平或上升沿有效VCC:5 V电源GND:地2)GATE1,允许计数;GATE0,禁止计数如果在计数过程中修改计数初值,则在下一时钟脉冲新写入的计数初值送入减1计数器,然后按新值计数2.方式1-可重复触发的单稳态触发器,(1)写入控制字后OUT输出高电平,写入计数初值后必须由GATE的上升沿触发计数计数开始OUT变为低电平,直到计数回0时再输出高电平若要再次计数,必须用GATE上升沿重新触发方式1时序如,图10.4,所示2)在计数过程中写入新的计数初值,当前计数状态不受影响若有GATE上升沿触发,则按新的计数初值重新计数,直到计数回0,OUT变为高电平,低电平宽度为两次计数值之和3.方式2-分频器,是一种(n-1):1的分频器工作方式,特点如下:,(3)GATE1时,允许计数;GATE0时,停止计数GATE的上升沿启动重新计数。
若在计数过程中写入新的计数初值,则在下一时钟周期按新值计数5.方式4-软件触发的选通信号发生器,(1)写入控制字后OUT输出高电平,写入计数初值后的下一时钟送入减1计数器,减1计数计数回0时输出低电平,持续1个时钟周期后又变为高电平,即一个负脉冲信号,如,图10.7,所示由于需要GATE的上升沿触发,故称硬件触发的脉冲发生器,时序如,图10.8,所示2)计数过程中若GATE 有上升沿出现,则在下一时钟脉冲计数初值重新送入减1计数器,重新减1计数3)计数过程中若写入新的计数初值,而无GATE上升沿触发,当前计数状态不受影响如果有GATE 上升沿触发,则重新按照新的计数初值计数10.3 8254编程使用,10.3.1 控制字,10.3.2 编程使用,10.3.3 8254在PC机中的应用,10.3.2 编程使用,8254的编程主要是设置工作方式,写入计数初值,在计数过程中读取计数值和状态信息1.写操作,写操作主要是写入控制字和计数初值,即初始化8254有3个计数器,初始化时可以一个一个地进行,也可以先设置3个计数器的工作方式,然后写入各自的计数初值前者如,图10.12,,后者如,图10.13,所示。
但是必须先写入方式控制字,再写入计数初值对于16位计数初值,先写入低字节,再写入高字节2.读操作,读操作有两种方式,一种是直接读,读取计数初值;另一种是先发锁存命令,然后再读,读取当前计数值16位时,先读低字节,再读高字节在发锁存命令时可以使用读回控制字,也可以使用方式控制字若用方式控制字,其中D,5,D,4,00,D,7,D,6,用来选择计数器,其余低4位任意若设控制字端口地址为TIM,计数器1按双字节计数,读取当前计数值的程序如下:,MOVDX,TIM,MOVAL,01000000B,OUTDX,AL ;发锁存命令,INAL,DX ;读取低字节,MOV AH,AL,IN AL,DX ;读取高字节,XCHG AH,AL,图10.14 8254在PC机中的应用,在中断服务程序中,时间值保存在BIOS数据区的两个变量TIMER-LO和TIMER-HI中计数器0初始化程序如下:,MOV AL,36H ;计数器0双字节,方式3,二进制计数,OUT 43H,AL ;写入控制寄存器,MOVAL,0,OUT40H,AL ;写低字节,OUT40H,AL ;写高字节,(2)计数器1,计数器1用来向主机定时提出动态RAM刷新请求,GATE,1,接5V,处于常启状态。
选择工作方式2,以字节计数,初始化程序如下:,MOVAL,54H ;计数器1写入低字节,方式2,,;二进制计数,OUT43H,AL ;写入控制寄存器,MOVAL,18 ;设置低字节计数值18,OUT41H,AL ;将18写入计数器1,启动工作后,由OUT1产生连续负脉冲,其频率为1.1931816MHz/1866.2878KHz,周期为15.0857sOUT,1,连接到D触发器的触发脉冲输入端,而D触发器的数据输入端接+5V,这样可利用负脉冲的上升沿将触发器置1,输出高电平,定时请求DRAM刷新。