小5带你飞(10)—AVR(ATmega 328P)单片机定时器的原理和使用(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
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嵌入式
小5带你飞(11)—AVR(ATmega 328P)单片机定时器的原理和使用(2)
在上一篇文章中,我们以timer1为例讲解了普通模式,这一篇我们主要来讲解CTC模式。
作用:
用于输出1/2占空比的方波信号(高电平持续的事件和低电平持续的时间是相等的)
用于产生准确的连续定时信号
时序图如下:
时序图
首先来看一下计数器波形产生模式位的描述列表:
其中Mode4和Mode12为CTC模式,注意一下几点:
当计数器TCNT1达到预先设定的OCR1A或者ICR1的时候,TCNT1被自动的清0,OCR1A或ICR1定义了计数器的最大计数值。
说到这里,先来看一下OCR1A和ICR1寄存器
输出比较寄存器1A
输入捕捉寄存器1
对于这两个寄存器其实没啥好说的,很简单的,就是一个16bit的存数据的地方。这个数据就是计数最大的值。
利用OCF1A或者ICF1标志可以在计数器达到预设值的时候产生中断,在中断服务程序里面更新预设值。
为了在CTC模式下得到输出的波形,可以预设OC1A引脚在每次比较匹配发生时改变逻辑电平。来看TCCR1A寄存器的高4位,他们就是来控制这个功能的。具体看这个。
CTC模式的使用方法:
如果要输出波形,需设置端口为输出
设置波形发生模式及时钟源(TCCR1A TCCR1B)
设置输出模式(TCCR1A)
根据需要设置上限值(OCR1A)
频率的计算公式为:
好了,再附上一个demo程序:在PB1和PB2上分别输出一个1k的方波
再来一个中断的demo:使PB5管脚每隔0.5s实现电平的变换。
更多内容请关注头条号:小5嵌入式
相关问答
单片机 和ARM有什么区别?欢迎大家关注狗哥,学习更多单片机干货1、单片机指单芯片上集成了控制器、存储器以及如定时器、SPI、IIC等外部设备于一体的片上系统,可以用来执行复杂的功能,...
单片机 应该怎么学?c语言基础不好,不知道从何入手?说一下我学习AVR单片机的过程吧,从这个过程中也许会给一些单片机初学者一些启示。第一阶段:知识准备在学习AVR单片机之前,我对单片机已经有所了解,并且写过...
新手如何学习 单片机 ,用那些软件模拟比较好?关于如何学习单片机,你可以看看《如何学好单片机?》这个问答,里面有关于怎么学习的详细解读。今天重点说说你的第二个问题:用那些软件模拟比较好?一、单片...
STM32是什么啊,是32位的 单片机 吗 - Jackson周嘉诚 的回答 -...STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARMCortex-M内核(ST'sproductportfoliocontainsacomprehensiv...
单片机 用C语言编程很好学,为什么还要用汇编呢?现在一般单片机都支持C语言和晦涩难懂的汇编语言,在许多介绍单片机应用技术的教材中有相当一部分是用汇编语言编写的这说明汇编语言在学习单片机和编写单片机程...
学 单片机 对嵌入式有哪些帮助吗?学习单片机对学习嵌入式的帮助是全方位的,因为单片机本身就是嵌入式的一部分。既然说到了单片机和嵌入式系统,今天我们就来简单了解一下单片机与嵌入式系统的...
帮个忙哪位老铁急需,宜昌售后完善的高晶板,高晶板价格高吗??[回答]武汉格力邦建材有限公司有限公司是一家很不错的公司,价格和效果都无可挑剔,公司的服务也很好武汉格力邦建材有限公司做出的效果一直很好,也在不断的...
高压133低压93正常吗_千问健康高压133低压93正常吗_千问健康
天龙功放屏显一会就不亮了?显示屏不亮要先检测显示屏的电路供电电压是否正常,若电压正常,按键功能也正常,有可能就是显示屏坏了。显示屏和功能按键是显示板主IC控制的,其它功能正常多数...
编一个 单片机 程序要学些什么软件,怎么样用一个 单片机 接一个...恩初学者可以考虑用proteus仿真单片机。经济实惠,还能看到生动的现象。呵呵51和AVR在proteus里都有仿真模型,好像PIC也有。我最初就是这样过来的。然后再学...