2010-06-04 18:33:21 阅读14 评论0 字号:大中小
8位自动装入时间常数方式。由TLl构成8位计数器,THl仅用来存放时间常数。启动T1前,TLl和THl装入相同的时间常数,当TL1计满后,除定时器回零标志TFl置位,具有向CPU请求中断的条件外,THl中的时间常数还会自动地装入TLl,并重新开始定时或计数。所以,工作方式2是一种自动装入时间常数的8位计数器方式。由于这种方式不需要指令重装时间常数,因而操作方便,在允许的条件下,应尽量使用这种工作方式。当然,这种方式的定时/计数范围要小于方式0和方式1。工作方式2的结构见下图.
当计数溢出后,不是像前两种工作方式那样通过软件方法,而是由预置寄存器TH以硬件方法自动给计数器TL重新加载。变软件加载为硬件加载。
初始化时,8位计数初值同时装入TL0和TH0中。当TL0计数溢出时,置位TF0,同时把保存在预置寄
存器TH0中的计数初值自动加载TL0,然后TL0重新计数。如此重复不止。这不但省去了用户程序中的
重装指令,而且也有利于提高定时精度。但这种工作方式下是8位计数结构,计数值有限,{zd0}只能
这种自动重新加载工作方式非常适用于循环定时或循环计数应用,例如用于产生固定脉宽的脉冲,
例题1: 使用定时器0以工作方式2产生100ms定时,在P1.0输出周期为200ms的连续正方波脉冲。已知
晶振下,一个机器周期为2ms,以TH0作重装载的预置寄存器,TL0作8位计数器,假设计数初
定时器/计数器0为工式方式2,=10;为实现定时功能 C/T=0;为实现定时器/计数器0的运行
MOV TMOD,#;设置定时器0为方式2
LOOP:,;查询计数溢出
由于方式2具有自动重装载功能,因此计数初值只需设置一次,以后不再需要软件重置。
MOV TMOD,#;定时器0工作方式2
MOV TL0,#;设置计数初值
SETB EA ;开中断
;定时器0允许中断
LOOP:;开始定时
HERE:$ ;等待中断
CLP TF0 ;计数溢出标志位清0
CPL P1.0 ;输出方波
例题2: 用定时器1以工作方式2实现计数,每计100次进行累加器加1操作。
=156D=则
=10,C/T=1,GATE=因此
MOV TMOD, #;设置计数器1为方式2
MOV TH1, #;保存计数初值
MOV TL1, #;设置计数初值
;启动计数
DEL:;查询计数溢出
LOOP:;累加器加1