定时器也可以做为计数器,其实他们本质上的原理是一样的,定时器是计数单片机内部的系统时钟,每1个或者12个时钟脉冲,就加一。计数器则是记录外部输入脉冲。
1. 定时器0有四种工作模式,这里使用的是定时器0的16位可重新装载模式,16位(0x0000~0xFFFF)即可以从0数到65535共计65536个,区别8位(0x00~0xFF)的256个,可重装载指的是初始化设置的起始数,在溢出中断后会重新装载。
TMOD = 0x00;//配置工作模式
2.配置定时器0的工作频率,手上的设备是工作在35MHz,设置1T模式,定时器0也工作35MHz,计数间隔就是1/35 us, 如果设置12T模式,那么定时器0就会工作在35/12 MHz,计数间隔就是12/35 us。
AUXR |= 0x80; //工作时钟不分频
3. 计算初始置,以定时1ms为例,1ms = 1000us 计数间隔是1/35 us,那么需要1000/(1/35) = 35000个间隔 ,就是说经过35000个计数后,时间间隔为1ms,那么就设置初始置为65536 - 35000 = 30536,转换16进制就是 0x7748 ,按高低为分给TL0,TH0.
TL0 = 0x48;
TH0 = 0x77;
4.使能定时中断,还有总中断
ET0 = 1; //使能定时器0中断
EA = 1; //打开总中断