AVR中定时器几种工作模式的总结

发布者:Serene123最新更新时间:2017-11-26 来源: eefocus关键字:AVR  定时器  工作模式 手机看文章 扫描二维码
随时随地手机看文章

AVR有三个定时计数器,其中定时计数器0和定时计数器2是8位的,定时计数器1是16位。

在学习AVR定时计数器时,刚开始被一大堆的寄存器搞的有点晕了,后来认真的把Datasheet中的有关寄存器先看了一遍,再重新看定时计数器的内容才理清了。这里做个总结吧,加深自己的印象。

定时计数器0和定时计数器2基本上是相同的。以定时计数器0来总结它的几种工作模式的不同。

 

普通模式:不做介绍,和51里面是一模一样的。

 

CTC模式:当寄存器TCNT0与OCR0相等时(即匹配),OC0按照COM0[1:0]的值相应的改变(置位,清零或取反)。同时TCNT0清零,TCNT0从0x00重新开始计数,当计数结果和下一个OCR0寄存器中值相等时又发生匹配。发生匹配时,匹配比较标志OCF0置位,即OCF0=1,可申请匹配比较中断。

 

快速PWM模式:当寄存器TCNT0与OCR0匹配相等时,OC0按照COM0[1:0]的值相应的置位或清零。与CTC模式不同的是TCNT0不会清零,而是继续计数,直到计数为0XFF,此时OC0会发生清零或置位。同时TCNT0从0x00重新开始计数,当计数结果和下一个OCR0寄存器中值相等时又发生匹配。与CTC模式不同发生匹配时,OCF0不会置位。TCNT0计数到0XFF时,计数溢出标志TOV0置位,即TOV0=1,此时可申请溢出中断。

 

相位可调PWM模式:此模式下,定时计数器是双向计数器(可加可减),,从0x00一直加到0xff,在下一个计数脉冲到来时从0xff一直减到0x00。当COM0[1:0]=2时,在加的过程中,若发生匹配,清零OC0;在减的过程中,若发生匹配,置位OC0。(当COM0[1:0]=3时,和COM0[1:0]=2的情况相反)。与快速PWM模式不同的是,当TCNT0计数到0xff时不会影响到OC0的输出,而是当从0xff减到0x00的过程中与下一个OCR0寄存器的值匹配时,OC0发生改变(加的过程是清零,那这时应该是置位)。当定时计数器计数到0x00时,计数溢出标志TOV0置位,即TOV0=1,此时可申请溢出中断。

 

以上几种工作模式同时适合定时计数器0,1,2。只是定时计数器1的功能有所增强。下面将会讨论。

 

星期二我看一个程序时候,那个程序是工作在快速PWM模式,选择计数溢出中断。当时我还想为什么不选择匹配中断而要去等到计数溢出才中断岂不是占用时间了,还去问老师了,现在看来是多么的愚蠢!快速PWM模式根本就没有匹配中断!

 

定时计数器0和2,在CTC模式下,频率和相位可调。PWM模式下,频率不可调。由频率计数公司就可以看出。不论是CTC还是PWM都可以通过调节OCRn的值去调节占空比。(关于产生PWM波频率的计算公式将会在后文给出的,关于定时计数器的各种寄存器可自己去查看Datasheet)

 

下面是定时计数器1比0和2的增强功能总结:

1)定时计数器1比0和2有许多增强功能。在PWM模式时,可产生频率和相位都可调的PWM波,这时8位定时计时器0和2所做不到的,因为定时计数器1具备输入捕获功能,即具备输入捕获寄存器ICR1,在PWM模式下,ICR1中可存放一个top值,就是这个top值可以改变PWM波的频率。这点可在频率计算公司看出。

 

2)定时计数器1有两个输出比较单元和两个输出比较寄存器OCR1A和OCR1B,因此可同时产生2路频率相同,占空比不同的PWM波形。占空比的调整当然由OCR1A和OCR1B来确定。波形在OC1A和OC1B引脚输出。

 

3)定时计数器1具有输入捕获单元。可以精确的记录外部事件发生的时间。捕获外部事件的信号由引脚ICP1输入。当输入捕获信号产生,TCNT1中的计数值将被写入输入捕获寄存器ICR1(ICR1H,ICR1L)中去。输入捕获信号也可由模拟比较器的AC0单元的输出信号来触发。关于触发的方式有两种,当定时计数器1的控制寄存器B(即TCCR1B)中的第六位ICESE=0,下降沿触发;ICESE=1,上升沿触发。当满足触发条件时,输入捕获单元开始捕获该事件的发生。利用该功能可以来对输入波形频率的测量。如果我没有记错的话在51里面定时计数器也有这个功能的,可以有GATE门控位的设置来达到这个目的。51里面,把GATE置位,那么此时定时计数器的启动由INTX(X=0或1)引脚和TRX(X=0或1)来决定。可先把TRX置位,让定时计数的启动条件还欠缺INTX为高电平(即先让INTX处于低电平),等待INTX变为高电平,那么此时定时计数器启动了,等到INTX变为低电平时定时计数器又被关闭了,那么此时定时计数器计数值即为一个PWM脉宽了。

 

说到这里突然想到了在AVR里面,定时计数器都有自己的分频器,这里也可以先设置定时计数器的启动条件都满足,但设置为无分频,此时相当于人没有了心脏,定时计数器此时是不工作的。可以在其他什么条件(如一个外部中断里面)满足时,给定时计数器分频,此时定时计数器才工作!

 

刚才说到中断,与51不同的是,AVR对中断标志位清“0”的操作时向该位写“1”。即AVR清除中断标志位是软件写“1”。值得提醒的是在设置中断寄存器的时候,最好先清除中断标志位,然后马上将相应的中断允许控制位值“1”。

 

这里还需要说明的是上文提及到的定时计数器波形输出引脚和输入捕获引脚,在使用之前,必须要先设置好它的方向寄存器是输出还是输入。如果是输入的话还需要考虑是否需要上拉电阻。

 

说了这么多,差点忘记了个人觉得比较重要的一点。定时计数器1是16位的,它的每一个16位的寄存器分别配备了一个8位的TEMP寄存器,用来临时性的保留寄存器的高8位数据。MCU从16位寄存器读数据时时,低8位被送到MCU的同时,高8位被送到TEMP,当MCU读高8位时取的是TEMP中的数据。从MCU写数据16位数据寄存器时,高8位写到TEMP,写低8位的时候,低8位与TEMP中的高8位组成16位数据写到16位寄存器中。即读的时候是先读低8位,再读高8位;写的时候是先写高8位,再写低8位。

 

最后给出定时计数器常用3种工作模式的设置方法(以定时计数器1为例):

普通模式:

1,  根据需要设置时钟源,即设置控制寄存器TCCR1B。

2,  根据定时时间和时钟源确定定时器的初值写入到数据寄存器TCNT1H和TCNT1B。

3,  设置中断时能位。

4,  选择中断号,编写中断服务程序。注意需要在中断服务程序中重载初值写入到TCNT1H和TCNT1B(和51一样的)!

CTC模式:

1,  若输出波形,设置端口OC1A或OC1B为输出方式。

2,  设置波形发生模式,选择需要的时钟源,即TCCR1B。

3,  设置输出模式,即TCCR1A。

4,  根据需要设置上限值top(前面提到过的)写入到输出比较寄存器OCR1A。

5,  根据公式计算频率。

快速PWM模式:

1,若输出波形,设置端口OC1A或OC1B为输出方式。

2,设置PWM波形模式,选择需要的时钟源,即TCCR1A和TCCR1B。

3,设置波形的频率,即OCR1A。

4,设置波形占空比,即OCCR1B。

6,  根据频率公式计算频率。


关键字:AVR  定时器  工作模式 引用地址:AVR中定时器几种工作模式的总结

上一篇:AVR单片机JTAG与ISP的区别
下一篇:ATmega16 熔丝位设定

推荐阅读最新更新时间:2024-03-16 15:46

N76E003 之 定时器0使用
程序说明,定时器0按工作模式1工作,初值为10ms。 #include N76E003.h #include SFR_Macro.h #include Function_define.h #include Common.h #include Delay.h UINT8 u8TH0_Tmp,u8TL0_Tmp; //初始化配置函数 void Init_Timer0(void) { CKDIV=0X0C; TIMER0_MODE1_ENABLE; //Timer 0 and Timer 1 mode configuration clr_T0M; u8TH0_Tm
[单片机]
bascom avr单片机仿真oled显示
仿真原理图如下 rem Main.bas file generated by New Project wizard rem rem Created: 周三 1月 16 2019 rem Processor: ATmega88P rem Compiler: BASCOM-AVR2.0.7.9演示版 rem Write your code here '------------------------------------------------------------------------------- ' SSD1306-I2C.BAS ' (c) MCS
[单片机]
bascom <font color='red'>avr</font>单片机仿真oled显示
avr频率占空比可调波形输出子函数
#ifndef _KPWM_H_ #define _KPWM_H_ /*************avr频率占空比可调波形输出子函数**************/ ///形参:Fclk赋值设定频率(单位为k) 范围: 1K 到 256K /// rat设定占空比(单位为百分比)eg:40 则输出方波占空比为百分之四十 //频率误差小于2%,占空比误差小于5% //PWM频率计算公式为f=fox/N(1+TOP) fox为晶振频率 N为分频系数 TOP为计数计数最大值 //TOP的反算公式为TOP=FOX/NFclk-1 //在15模式下计数最大值为OCR1A //比较值放在OCR1B //15模式下时钟1到达OCR1B时OC1B
[单片机]
AVR单片机无法进入编程模式
做项目用到了AVR单片机ATmega16,学习的过程中编辑编译环境是ICCAVR,采用并口下载器和PonyProg2000软件下载程序。项目做的差不多的时候,考虑到如果要去现场调试程序并且还用并口下载器,那就要带个台式电脑或者买个EXPRESSCARD了,这样就很不方便,那就考虑笔记本电脑吧。后来就买了个深圳市研学电子有限公司的AVR二合一工具。照着光盘资料安装了USB驱动和AVR Studio软件后,将AVR二合一工具和计算机USB口以及目标板相连后,打开AVR Studio软件,单击工具栏上的 按钮,出现如下对话框: 单击Connect按钮,出现如下对话框: 然后单击Flash组中的Program按钮,出现如下对话
[单片机]
<font color='red'>AVR</font>单片机无法进入编程<font color='red'>模式</font>
刚学PIC单片机,分享第一个电子时钟,定时器计时
#define _XTAL_FREQ 4000000 //晶振定义 #include pic.h //头文件包含 //__CONFIG(0x3b31);//芯片配置字定义 // CONFIG1 #pragma config FOSC = XT // Oscillator Selection bits (XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled and can be enabled
[单片机]
刚学PIC单片机,分享第一个电子时钟,<font color='red'>定时器</font>计时
PIC定时器中断
#ifndef __PIC18F4580_h #define __PIC18F4580_h #include p18f4580.h #include stdio.h #include stdlib.h #include string.h #include math.h #define InterruptEnable INTCONbits.PEIE = 1,INTCONbits.GIE = 1 #define InterruptDisable INTCONbits.PEIE = 0,INTCONbits.GIE = 0 extern void IntTimer0(void); #endif ---------
[单片机]
AVR单片机问答
仿真器 ATMEL 的AT IC E30 可适用于实时仿真 C 编译器: 所有的C 编译器均已在ATMEL 网站上有关第三方工具供应商的网页上列出;ATMEL 公司在它的网站:http://www.atmel.com 上还提供了许多自由软件它们可用于对AVR 单片机 的程序进行汇编和模拟这些软件可以自由下载,上述产品也可通过ATMEL 授权的地区分销商和销售代理获得。 问:有哪些支持AVR 的起步工具包 答STK100,SL-AVR,SL-OKAVR,SL-AVRL 支持AVR 的Tiny 系列 单片机 STK200,SL-AVR,SL-OKAVR,SL-AVRL 支持AVR 单片机 即AT90S 系列 STK300,SL-AVR
[单片机]
AVR单片机在蓄电池剩余电量测试仪中的应用
    摘要: 利用一代AVR单片机(AT90S8515)实现蓄电池剩余电量在线测量。该方法通过实时测量蓄电池内阻,推算出剩余电量。最后给出了实验结果。     关键词: 单片机 在线测量 蓄电池 剩余电量 蓄电池作为备用电源,已在计算机网络、通主、电力等领域得到了广泛的应用。蓄电沁的荷电量与整个供电系统的可靠性密切相关,蓄电池剩余电量睦高,系统可靠性越高,否则反之。对于一些重要的用电领域,例如信息处理中心,如果能在既不消耗蓄电池的能量,又不影响用电设备正常工作的条件下,实现蓄电池剩余电量的在线监测,将有重要的实际意义。近几年随着IT产业的迅速发展,电池的重要性越来越突出,对剩余电量精确预测的需求越来越迫切。
[测试测量]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved