快捷搜索:  汽车  科技

单片机定时器在线使用方法(小5带你飞10)

单片机定时器在线使用方法(小5带你飞10)位CS12:0 看表如下:作用时钟的选择我们还需要来设置3个重要的位:1.TCCR1A:控制寄存器 A2.TCCR1B:控制寄存器 B这个位WGM13:0 就是波形发生模式的设置,我们设置为普通模式,那么WGM13:0均设置为0即可

单片机定时器在线使用方法(小5带你飞10)(1)

以前写过一个关于ATmega328p的定时/计数器的文章,但是写的不够详细,这一次我将详细的介绍一下ATmega328p的3个片内定时/计数器的相关知识。

328p 有3个定时计数器,分别是8bit的 T/C0 16bit的 T/C1和8bit的 T/C2。我们来看这个16bit的T/C2。

我们先看看最简单的普通模式。定时器的基本原理其实就是根据设定的时钟频率,每过一个时钟,计数计时器的值加1。即16位计数器TCNT1一直累加,当计数到0xFFFF之后,由于计数器溢出,TCNT1返回到最小值0x0000重新开始计数。

普通模式涉及到的寄存器有:(对于每一个位,我也只写出在普通模式下面涉及到的)

1.TCCR1A:控制寄存器 A

单片机定时器在线使用方法(小5带你飞10)(2)

2.TCCR1B:控制寄存器 B

单片机定时器在线使用方法(小5带你飞10)(3)

这个位WGM13:0 就是波形发生模式的设置,我们设置为普通模式,那么WGM13:0均设置为0即可

我们还需要来设置3个重要的位:

位CS12:0 看表如下:作用时钟的选择

单片机定时器在线使用方法(小5带你飞10)(4)

3.TCNT1H 与 TCNT1L:数据寄存器。

单片机定时器在线使用方法(小5带你飞10)(5)

这是一个16位的,分高八位和低八位,

主要来看一下这个数据在普通模式下怎么计算:

假如现在要做一个定时1s的计数器,即1s产生一个中断,timer1是一个16位的计数器,能够存放的最大值为0xFFFF

有这样一个公式: TCNT1=0Xffff - 定时时间/(分频数* (1/晶振频率))

再假设分频数为设置为1024,328p的晶振频率为12MHz,那么

TCNT1= 0XFFFF - 1 / (1024 *(1/16000000))= 0xFFFF –0x3D09=0XC2F6

在程序中TCNT1的赋值写法有很多,

  • TCNT1=0xC2F6

  • TCNT1H = 0xC2 TCNT1L = 0xF6 均是正确的。

4.TIMSK1 :中断屏蔽寄存器

单片机定时器在线使用方法(小5带你飞10)(6)

这只要置位bit0就好了,即开中断使能。

有了这些知识,普通模式下的定时器就可以跑起来了,是不是特别的简单。

再附上demo程序:

单片机定时器在线使用方法(小5带你飞10)(7)

更多内容请关注头条号:小5嵌入式

猜您喜欢: