定时器介绍和定时器0定时1ms
文章目录
- 定时器介绍和定时器0定时1ms
- 1. 定时/计数器的概念
- 2. 定时/计数器的模式
- 3. 任务:定时1ms
- 3.1 细谈原理
- 3.2 代码实现过程:
- 3.2.1 定时器0设置并申请中断
- 3.2.2 CPU处理中断
1. 定时/计数器的概念
.
2. 定时/计数器的模式
16位手动重装模式1
即定时时间到,重新为TL0,TH0赋值
3. 任务:定时1ms
3.1 细谈原理
由下方定时器工作图,可总结出涉及的寄存器控制位:
- AUXR.7:分频系数设置,不同分频值使产生单个脉冲的速度不一
- TMOD.2:定时/计数模式设置
- TR0与其相关的“与”逻辑
- TMOD.3:在定时模式下,=0并取反再经过“或”逻辑,确保最终结果=1
附:若TMOD.3=1,取反=0,则外部输入INT0=1/=0,两者“或”逻辑运算结果=0/=1,将控制定时器开关,得到运行时间(使用案例:超声波测距)
- TH0,TL0:定时值设置
- ET0:中断允许位
- EA:总中断开关
注:
图中INT0仅仅是单片机INT0的脚,定时器运用与外部中断INT0无关,仅仅是引脚重合
除了打开应打开的位,手动重装定时1ms还需在定时器T0的中断服务函数给TL0,TH0赋初值
外部晶振执行时间0.4us,1ms即是产生2500个脉冲
TL0,TH0共16位,最大值65535
故应赋初值=65536-2500=63036
则TH0=0xf6;TL0=0x3c
每个脉冲来时+1,当定时器值到65536时溢出,向CPU申请中断
3.2 代码实现过程:
3.2.1 定时器0设置并申请中断
- AUXR.7
使用按位与操作,仅b7位写0,其余位写1
- TMOD.GATE
定时器0低4位清0 TMOD&=0xf0;
- 定时器 0模式选择
M0写1 TMOD|=0x01;
- TR0
- TH0,TL0装初值
初值从63036++,时钟每个脉冲进入便+1
- ET0=1;EA=1;
至此,定时器0已经可以向CPU申请中断
3.2.2 CPU处理中断
有些单片机只有1个中断号,要判断是串口中断,还是定时器中断,则需要判断中断标志位
定时器T0的中断服务函数 void Timer0_Rountine(void) interrupt 1
本次测试是手动重装,需要在函数里重装初值
另
测试1
测试2
测试3
定时器0模式1非自动重装
不重装初值,定时器从0开始计数,计到65536溢出清0,申请中断,定时器再从0开始计数
测试4
16位自动重装
省去重装初值时间,则精准1ms定时
手动重装赋初值,定时时间不精确,有误差
注:STC-ISP软件内置定时器计算器
可根据相应要求选择自动计算给出设置值