单片机定时器在线使用方法(小5带你飞10)
单片机定时器在线使用方法(小5带你飞10)位CS12:0 看表如下:作用时钟的选择我们还需要来设置3个重要的位:1.TCCR1A:控制寄存器 A2.TCCR1B:控制寄存器 B这个位WGM13:0 就是波形发生模式的设置,我们设置为普通模式,那么WGM13:0均设置为0即可
以前写过一个关于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
2.TCCR1B:控制寄存器 B
这个位WGM13:0 就是波形发生模式的设置,我们设置为普通模式,那么WGM13:0均设置为0即可
我们还需要来设置3个重要的位:
位CS12:0 看表如下:作用时钟的选择
3.TCNT1H 与 TCNT1L:数据寄存器。
这是一个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 :中断屏蔽寄存器
这只要置位bit0就好了,即开中断使能。
有了这些知识,普通模式下的定时器就可以跑起来了,是不是特别的简单。
再附上demo程序:
更多内容请关注头条号:小5嵌入式