使用定时器/计数器中断,需要将满足以下的条件。
1)中断总允许打开 EA = 1;
2)中断源允许打开 ET0 = 1或者 ET1= 1;
3)设置定时器计/计数器的工作方式(设置TMOD)
4)装载定时器,设置计数器的初始计算值。
5)开启定时器(TCON中的TR0 = 1或者TR1 = 1)
6)中断服务函数
在满足上面的条件后,就使用定时器了,但为了对定时器的4种方式更深入的了解,下面从逻辑图上讲解4种方式。
方式0:
逻辑结构图
从上面的逻辑结构图中,逻辑结构主要分为三个部分;
1)计数源:计数源可以选择振荡器12分频(机器周期);计数源也可以选择T0(P3.4)引脚。当C/T = 0,选择机器周期;当C/T = 1,选择P3.4引脚。
2)定时器启动控制:T0启动控制关系为TR0&((!GATE)+INT0),当GATE=0,启动仅有TR0控制,TR0=1启动定时器;当GATE=1,需要启动定时器启动,需要保证TR0 = 1,还需要保证INT0=1。
3)计数器位数,TL0(5)+TH0(8) = 13,因此方式0为13位的定时器/计数器。
注:
1)选择T0引脚计数,是负跳变(下降沿)的计数;
2)T1的启动控制关系为TR1&((!GATE)+INT1);
3) 方式0中,TL有8位,只有低5位起作用。
4)当数据溢出时,TF0/TF1置1,响应中断后(TF0/TF1复位),进入定时器中断服务函数(因为数据溢出已经TH与TL清空,需要再次重装初值)。
方式1的逻辑结构与方式0的相似,方式1是16位的定时器/计数器,因此TL的8位数据全部用完 TL0(8)+TH0(8) = 16
方式2:
逻辑结构图:
从逻辑结构图上看,计数源选择、定时器/计数器启动控制与方式0(1)是一样的。TL0的8位,用于计数;TH0的(8位)用于自动重装。也就是说设置的时候TL0 = TH0,当TL0计数时,CPU响应响应中断,TH0重新自动复制给TL0,不需要在函数中再设置TL的数值。
方式3:
逻辑结构图:
从方式3中,可以看到蓝色区域与与绿色区域的构成的定时器/计数器与方式0、1的一致,不过它是TL0是8位定时器/计数器。
而红色区域则是当使用方式3,定时器/计数器T0的TH0将会占用T1的中断标记TF1与TR1控制定时器启动,TH0只能对机器周期进行计数。
总结:
1)除了方式2,以外其余的方式都要在定时器中断函数中,对TH0与TL0重新赋值;
2)方式3,将会占用T0将会占用T1的TR1与TF1。而且TH0构成的定时器/计数器只用于机器周期的计数。
---------------------------------------------------------
如果觉得文章还不错,那就扫码关注吧!