定时器介绍和定时器0定时1ms


文章目录

  • 定时器介绍和定时器0定时1ms
  • 1. 定时/计数器的概念
  • 2. 定时/计数器的模式
  • 3. 任务:定时1ms
  • 3.1 细谈原理
  • 3.2 代码实现过程:
  • 3.2.1 定时器0设置并申请中断
  • 3.2.2 CPU处理中断


1. 定时/计数器的概念

定时器每两小时执行一次java注解 定时器定时2ms_单片机

.

2. 定时/计数器的模式

定时器每两小时执行一次java注解 定时器定时2ms_初值_02

16位手动重装模式1

即定时时间到,重新为TL0,TH0赋值

3. 任务:定时1ms

3.1 细谈原理

由下方定时器工作图,可总结出涉及的寄存器控制位:

  1. AUXR.7:分频系数设置,不同分频值使产生单个脉冲的速度不一
  2. TMOD.2:定时/计数模式设置
  3. TR0与其相关的“与”逻辑
  4. TMOD.3:在定时模式下,=0并取反再经过“或”逻辑,确保最终结果=1

附:若TMOD.3=1,取反=0,则外部输入INT0=1/=0,两者“或”逻辑运算结果=0/=1,将控制定时器开关,得到运行时间(使用案例:超声波测距)

  1. TH0,TL0:定时值设置
  2. ET0:中断允许位
  3. EA:总中断开关

注:

图中INT0仅仅是单片机INT0的脚,定时器运用与外部中断INT0无关,仅仅是引脚重合

定时器每两小时执行一次java注解 定时器定时2ms_定时器每两小时执行一次java注解_03

定时器每两小时执行一次java注解 定时器定时2ms_初值_04

除了打开应打开的位,手动重装定时1ms还需在定时器T0的中断服务函数给TL0,TH0赋初值

外部晶振执行时间0.4us,1ms即是产生2500个脉冲

TL0,TH0共16位,最大值65535

故应赋初值=65536-2500=63036

定时器每两小时执行一次java注解 定时器定时2ms_初值_05

则TH0=0xf6;TL0=0x3c

每个脉冲来时+1,当定时器值到65536时溢出,向CPU申请中断

3.2 代码实现过程:

3.2.1 定时器0设置并申请中断

定时器每两小时执行一次java注解 定时器定时2ms_初值_04

  1. AUXR.7

定时器每两小时执行一次java注解 定时器定时2ms_代码实现_07

使用按位与操作,仅b7位写0,其余位写1

  1. TMOD.GATE

定时器0低4位清0 TMOD&=0xf0;

定时器每两小时执行一次java注解 定时器定时2ms_代码实现_08

  1. 定时器 0模式选择

M0写1 TMOD|=0x01;

定时器每两小时执行一次java注解 定时器定时2ms_单片机_09

  1. TR0

定时器每两小时执行一次java注解 定时器定时2ms_代码实现_10

  1. TH0,TL0装初值

初值从63036++,时钟每个脉冲进入便+1

定时器每两小时执行一次java注解 定时器定时2ms_定时器每两小时执行一次java注解_11

  1. ET0=1;EA=1;

定时器每两小时执行一次java注解 定时器定时2ms_单片机_12

定时器每两小时执行一次java注解 定时器定时2ms_初值_13

至此,定时器0已经可以向CPU申请中断

3.2.2 CPU处理中断

定时器每两小时执行一次java注解 定时器定时2ms_单片机_14

有些单片机只有1个中断号,要判断是串口中断,还是定时器中断,则需要判断中断标志位

定时器每两小时执行一次java注解 定时器定时2ms_定时器每两小时执行一次java注解_15

定时器T0的中断服务函数 void Timer0_Rountine(void) interrupt 1

本次测试是手动重装,需要在函数里重装初值

测试1

定时器每两小时执行一次java注解 定时器定时2ms_代码实现_16

定时器每两小时执行一次java注解 定时器定时2ms_定时器每两小时执行一次java注解_17

测试2

定时器每两小时执行一次java注解 定时器定时2ms_代码实现_18

定时器每两小时执行一次java注解 定时器定时2ms_代码实现_19

测试3

定时器每两小时执行一次java注解 定时器定时2ms_代码实现_20

定时器每两小时执行一次java注解 定时器定时2ms_定时器每两小时执行一次java注解_21

定时器0模式1非自动重装

不重装初值,定时器从0开始计数,计到65536溢出清0,申请中断,定时器再从0开始计数

定时器每两小时执行一次java注解 定时器定时2ms_初值_22

测试4

16位自动重装

定时器每两小时执行一次java注解 定时器定时2ms_初值_23

定时器每两小时执行一次java注解 定时器定时2ms_单片机_24

定时器每两小时执行一次java注解 定时器定时2ms_代码实现_25

定时器每两小时执行一次java注解 定时器定时2ms_初值_26

省去重装初值时间,则精准1ms定时

手动重装赋初值,定时时间不精确,有误差

注:STC-ISP软件内置定时器计算器

可根据相应要求选择自动计算给出设置值