由于定时器是一种可编程部件,使用前应先确定它的工作方式、计数初值、启停操作等功能,也就是定时器的初始化。
1.定时/计数器的初始化步骤
①根据定时时间要求或计数要求计算计数器初值。
②填写工作方式控制字送TMOD寄存器。
③送计数初值的高八位和低八位到THi和TLi(i=0或1)寄存器中。
④启动定时(或计数),即将TRi(i=0或1)置位。
注:如果工作于中断方式,还需置位EA(中断总开关)及ETi(允许定时/计数器中断,i=0或1),并编写中断服务程序。
2.定时/计数器计数初值的确定
定时/计数器计数初值的确定与两个因素有关。
①功能:有定时和计数之分。
②工作方式:有方式0、1、2、3之分。工作方式不同,其最大计数值M不同,定时器的最大定时时间也不一样。
·定时功能下的初值:
X=M-N=M-(fosc×t)/12
式中,N=定时时间/机器周期=(fosc×t)/12;模式0时M=213=8192,模式1时M=216=65536,模式2、模式3时M=28=256。
·计数功能下的初值:
X=M-N
式中,N=计数值;模式0时M=213=8192,模式1时M=216=65536,模式2、模式3时M=28=256。
例7-1 编写初始化程序,要求设置定时器T1为定时功能,定时50ms,选择工作方式1,允许中断,软启动(设晶振频率为6MHz)。
解 定时初值为
X=M-(fosc×t)/12=65536-(6×50×1000)/12=40536=0x9E58
初始化程序如下:(www.xing528.com)
TMOD=0x10; //确定T1工作方式、功能及启动方式
TH1=0x9E; //定时器初值高8位置入TH1
TL1=0x58; //定时器初值低8位置入TL1
TR1=1; //定时器启动
EA=1; //开总中断
ET1=1; //开定时器T1中断
例7-2 编写定时器初始化程序,要求T1作定时器使用,工作于方式1,定时时间10ms;T0作计数器使用,工作于方式2,计数值为1,即外界发生一次事件就溢出(设晶体振荡频率为12MHz)。
解 先计算这两个定时器的初值。对于T1,工作于定时功能,方式1,其初值为
X=M-(fosc×t)/12=65536-(12×10×1000)/12=55536=0xD8F0。
对于T0,工作于计数功能,方式2,其初值为
X=M-N=256-1=255=0xFF
初始化程序如下:
TMOD=0x16;
TH0=0xFF;
TL0=0xFF;
TH1=0xD8;
TL1=0xF0;
TR0=1;
TR1=1;
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。