定时器是单片机的重要功能模块之一,在检测、控制领域有广泛应用。定时器常用作定时时钟,以实现定时检测,定时响应、定时控制,并且可以产生ms宽的脉冲信号,驱动步进电机。定时和计数的最终功能都是通过计数实现,若计数的事件源是周期固定的脉冲则可实现定时功能,否则只能实现计数功能。因此可以将定时和计数功能全由一个部件实现。
10MS定时器初值的计算
1.晶振12M
12MHz除12为1MHz,也就是说一秒=1000000次机器周期。10ms=10000次机器周期。
65536-10000=55536(d8f0)
TH0=0xd8,TL0=0xf0
2.晶振11.0592M
11.0592MHz除12为921600Hz,就是一秒921600次机器周期,10ms=9216次机器周期。
65536-9216=56320(dc00)
TH0=0xdc,TL0=0x00
50MS定时器初值的计算
1.晶振12M
12MHz除12为1MHz,也就是说一秒=1000000次机器周期。50ms=50000次机器周期。
65536-50000=15536(3cb0)
TH0=0x3c,TL0=0xb0
2.晶振11.0592M
11.0592MHz除12为921600Hz,就是一秒921600次机器周期,50ms=46080次机器周期。
65536-46080=19456(4c00)
TH0=0x4c,TL0=0x00
使用说明
以12M晶振为例:每秒钟可以执行1000000次机器周期个机器周期。而T每次溢出最多65536个机器周期。我们尽量应该让溢出中断的次数最少(如50ms),这样对主程序的干扰也就最小。开发的时候可能会根据需要更换不同频率的晶振(比如c51单片机,用11.0592M的晶振,很适合产生串口时钟,而12M晶振很方便计算定时器的时间),使用插接式比较方便。
对12MHz1个机器周期1us12/fosc=1us
方式013位定时器最大时间间隔=2^13=8.192ms
方式116位定时器最大时间间隔=2^16=65.536ms
方式28位定时器最大时间间隔=2^8=0.256ms=256us定时5ms,计算计时器初值M=2^K-X*Fosc/1212MHz方式0:K=13,X=5ms,Fosc=12MHz则M=2^13-5*10^(-3)*12*10^6/12=3192=0x0C78THx=0CH,TLx=78H,
方式1:K=16,X=5ms,Fosc=12MHz则M=2^16-5*10^(-3)*12*10^6/12=60536=0xEC78THx=ECH,TLx=78H,
50ms12MHzTHx=3CH,TLx=B0H,10msTHx=D8H,TLx=F0H,
方式2:最大时间2^8Fosc/12=0.256ms
十进制数是怎么来的?6MHz一个机器周期12/6=2us定时1ms计数初值x(2^16-x)*2us=1000usx=2^16-500,TH,TL可置-500
12MHz一个机器周期12/12=1us12MHz一个机器周期12/12=1us定时50ms计数初值x(2^16-x)*1us=50000usx=2^16-50000,TH,TL可置-500定时器计内部晶振频率
计数器计外部输入CPU脚上的脉冲个数P3.4(T0)P3.5(T1)负跳变加一
当晶振为6MHz时,最高计数频率500KHz