AVR定时/计数器应用设计

发布者:gamma14最新更新时间:2016-07-28 来源: eefocus关键字:AVR  定时  计数器 手机看文章 扫描二维码
随时随地手机看文章
定时/计数器(Timer/counter)是单片机芯片中最基本的外围接口,它的用途非常广泛,常用于测量时间、速度、频率、脉宽、提供定时脉冲信号等。相对于一般8位单片机而言,AVR不仅配备了更多的定时/计数器接口,而且还是增强型的,功能非常强大。ATmega128一共配置了2个8位和2个16位,共4个定时/计数器,本小节重点对它的一些增强功能的应用做基本的介绍。 

5.9.1 预分频器 
  定时/计数器最基本的功能就是对脉冲信号计数,当计数器计满后(8位为255,16位为65535),再来一个脉冲它就翻转到0,并产生中断信号。同其他单片机类似,AVR的定时/计数器的计数脉冲可以来自外部的引脚,也可以由从内部系统时钟获得;但AVR的定时/计数器在内部系统时钟和计数单元之间增加了一个预分频器,利用预分频器,定时/计数器可以从内部系统时钟获得不同频率的信号。表5-1为系统时钟为4MHz使用定时/计数器0的最高计时精度和时宽范围。 

表5-1 T/C0计时精度和时宽(系统时钟4MHz) 
分频系数  计时频率  最高计时精度(TCNT0=255)  最宽时宽(TCNT0=0) 
1          4MHz      0.25us                    64us 
8          500KHz    2us                       512us 
32         125KHz    8us                       2.048ms 
64         62.5KHz   16us                      4.096ms 
128        31.25KHz  32us                      8.192ms 
256        15.625KHz 64us                      16.384ms 
1024       3906.25Hz 256us                     65.536ms 

  从表中看出,在系统时钟为4MHz时,8位的T/C0最高计时精度为0.25us,最长的时宽可达到65.536ms。而使用16位的定时/计数器时,不需要辅助的软件计数器,就可以非常方便的设计一个时间长达16.777216秒(精度为256us)的定时器,这对于其它的8位单片机是做不到的。 
  AVR单片机的每一个定时/计数器都配备独立的、多达10位的预分频器,由软件设定分频系数,与8/16位定时/计数器配合,可以提供多种档次的定时时间。使用时可选取最接近的定时档次,即选8/16位定时/计数器与分频系数的最优组合,减少了定时误差。所以,AVR定时/计数器的显著特点之一是:高精度和宽时范围,使得用户应用起来更加灵活和方便。此外,AVR的USART、SPI、I2C、WDT等都不占用这些定时/计数器。 

5.9.2 输入捕捉功能 
  ATmega128的两个16位定时/计数器(T/C1、T/C3)具有输入捕捉功能,它是AVR定时/计数器的又一个显著的特点。其基本作用是当一个事件发生时,立即将定时/计数器的值锁定在输入捕捉寄存器中(定时/计数器保持继续运行)。利用输入捕捉功能,可以对一个事件从发生到结束的时间进行更加精确,如下面的示例中精确测量一个脉冲的宽度。 
  测量一个脉冲的宽度,就是测量脉冲上升沿到下降之间的时间。不使用输入捕捉功能,一般情况往往需要使用两个外围部件才能完成和实现。如使用1个定时/计数器加1个外部中断(或模拟比较器):定时/计数器用于计时;而外部中断方式设置成电平变化触发方式,用于检测脉冲的上升和下降沿。当外部中断输入电平由低变高,触发中断,读取时间1;等到输入电平由高变低时,再次触发中断,读取时间2;两次时间差既为脉冲宽度。这种实现方式不仅多占用了一个单片机的内部资源,而且精度也受到中断响应时间的限制。因为一旦中断发生,MCU响应中断需要时间,在中断中可能要进行适当的中断现场保护,才能读取时间值。而此时的时间值比中断发生的时间已经滞后了。 
  而使用ATmega128的1个定时/计数器,再配合其输入捕捉功能来测量脉冲的宽度就非常方便,下面是实现的程序示例。 

#include  

#define ICP1 PIND.4 //脉冲输入由ICP1(Pind.4)输入 

unsigned char ov_counter; 
unsigned int rising_edge,falling_edge; 
unsigned long pulse_clocks; 

interrupt [TIM1_OVF] void timer1_ovf_isr(void) // T/C1溢出中断 

ov_counter++; //记录溢出次数 


interrupt [TIM1_CAPT] void timer1_capt_isr(void) // T/C1捕捉中断 

if (ICP1) 
{ //上升沿中断 
rising_edge = ICR1; //记录上升沿开始时间 
TCCR1B = TCCR1B & 0xBF; //设置T/C1为下降沿触发捕捉 
ov_counter = 0; //清零溢出计数器 

else 
{ //下降沿中断 
falling_edge = ICR1; //记录下降沿时间 
TCCR1B = TCCR1B | 0x40; //设置T/C1为上升沿触发捕捉 
pulse_clocks = (unsigned long)falling_edge - (unsigned long)rising_edge 
+ (unsigned long)ov_counter * 0x10000 / 500; //计算脉冲宽度 



void main(void) 

TCCR1B=0x42; //初始化T/C1,1/8分频,上升沿触发捕捉 
TIMSK=0x24; //允许T/C1溢出和捕捉中断 
#asm("sei") 

while (1) 
     {……… 
     }; 

  这段程序是在CVAVR中实现的。在T/C1的捕捉中断中,先检查ICP1的实际状态,以确定是出现了上升沿还是下降沿信号。如果中断是由上升沿触发的(ICP1为高电平),程序便开始一次脉冲宽度的测量:记录下上升沿出现的时间,把T/C1的捕捉触发方式改为下降沿触发,并清空溢出计数器。如果中断由下降沿触发(ICP1为低电平),表示到达脉冲的未端,程序记录下降沿出现时间,计算出脉冲的宽度,再将T/C1的捕捉触发方式改为上升沿触发,以开始下一次的测量。 
  脉冲的实际宽度(毫秒格式)是根据T/C1的计数时钟个数来计算的。本例中T/C1的计数时钟是系统时钟(4MHz)的8分频,即500KHz,相应的计数脉冲宽度为2us。因此计算出从上升沿和下降沿之间总的计数脉冲个数,除以500个脉冲(为1ms)即得到以毫秒为单位的被测脉冲宽度了。 
  可以看到,使用定时/计数器以及配合它的捕捉功能测量脉冲宽度,不仅节省系统的硬件资源,编写程序简单,而且精度也高,因为读到的上升沿和下降沿的时间就是其实际发生的时间。 
关键字:AVR  定时  计数器 引用地址:AVR定时/计数器应用设计

上一篇:AVR使用范例--AVR外部中断范例
下一篇:看了看ICCAVR的库文件,谈几点感想

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

可设定10~100秒的长时间C-MOS定时电路
电路的功能 若要用555芯片组成长时间定时电路,R用高阻值,便可加长CR时间常数,但是,由于内部比较器的输入偏流较大,难以充电到门限电压,比较器无法驱动,为此,本电路采用了偏流非常小的C-MOS定时器芯片,选用高阻值电阻,使定时间达到10~100秒。 电路工作原理 本电路工作过程与555定时器基本相同,但它的工作电流很小,为了用微分脉冲触冲,采用了C耦合,只要引脚2的电压低于VOO/3,触发器就能被触发。 定时时间由电容器C3和R4+VR1的合成电阻来确定,即T=C3(R4+VR1)。C-MOS定时器芯片允许采用大定时电阻,但是如果C3的绝缘电阻较小,有可能达不到(2/3)VDD的门限电压,所以不要使用铝电解
[工业控制]
可设定10~100秒的长时间C-MOS<font color='red'>定时</font>电路
STM32F030 systick滴答定时
void Delay_Init(void) { SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//systick时钟= HCLK/8 fac_us = SystemCoreClock/8000000; fac_ms = fac_us*1000; } void Delay_Us(uint32_t nus) { uint32_t temp; SysTick- LOAD = nus*fac_us; //时间加载 SysTick- VAL = 0x00; //清除计数器 S
[单片机]
时间继电器 倒计时控制 定时通断开关模块程序包
#include reg52.h //用52的头文件 里面加的引脚再定义 #include intrins.h //延时 sfr AUXR = 0x8e; sfr P5 = 0xc8; //p5定义 是加的 sfr P5M0 = 0xc9; sfr P5M1 = 0XCA; sfr P3M0 = 0xb2; //p3口设置强推完的定义 sfr P3M1 = 0Xb1; sfr P1M0 = 0x92; //p0口设置强推完的定义 这样设置数码管就亮 sfr P1M1 = 0X91; /**********************
[单片机]
时间继电器 倒计时控制 <font color='red'>定时</font>通断开关模块程序包
STM32 Systick定时
Q:什么是SYSTick定时器? SysTick 是一个24 位的倒计数定时器,当计到0 时,将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息。 Q:为什么要设置SysTick定时器? (1)产生操作系统的时钟节拍 SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15)。在以前,大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心跳”的节律。 (2)便于不同处理器之间程序移植。 Cortex‐M3处理器内部包
[单片机]
单片机MSP430入门理论⑧--定时器模块-定时器A③
上期大概给大家汇总介绍了,定时器模块中定时器A的TACTL控制寄存器,TACTL是用来设置时钟,定时器模式,清除,定时器中断等基础功能的 本期将继续介绍定时器A,这次将整理一些关于定时器A的,其他寄存器的用法以及功能 1.0 下面要说的是TAR寄存器,这个寄存器很简单,就是定时器A用来计数的,也可以读写,只不过要注意当计数时钟不是MCLK时,写入前应停止计数,因为他与CPU时钟不同步,可能引起时间竞争 2.0 相对应的TACCRx寄存器,当比较模式时,TACCRx保存着你设置的用来跟定时器A实际计数值TAR比较的值,而当捕获模式时,TACCRx的就会被TAR的值覆盖 3.0 捕获/比较寄存器TACCTLx
[单片机]
单片机MSP430入门理论⑧--<font color='red'>定时</font>器模块-<font color='red'>定时</font>器A③
6位LED显示单片机控制电子钟/计数器
这是我们设计的单片机电子钟/计时器学习板,它采用6位LED数码管显示时、分、秒,以24小时计时方式。可以通过按键实现时分调整、秒表/时钟功能转换、省电(关闭显示)等功能。我们能提供的完整的汇编语言源程序清单及电路原理设计图有助于学习者进行分析和进行实验验证 产品1:6位LED显示单片机控制电子钟/计数器成品板 成品每套84元 硬件参数板上资源:MCU STC89C52、6位Led显示、3位按键。电源部分为5V直流电压,需要稳压、滤波电路,不能接反! 51单片机做的电子钟在很多地方都有介绍, 对于单片机学习者来说这个程序基本上是一道门槛,掌握了电子钟程序, 基本上可以说51单片机就掌握了80%。常见的电子钟程序由显
[单片机]
6位LED显示单片机控制电子钟/<font color='red'>计数器</font>
基于AVR的微功耗电刺激器
  运动障碍性疾病源于不同神经递质之间的失衡,而不同部位神经细胞的变形坏死是导致神经递质失衡的神经生物学基础。既往对运动性疾病的治疗主要通过药物治疗或苍白球手术破坏两种方法。第一种治疗途径或者是疗效差,或者是因药物副作用大患者不能耐受;而第二种途径即手术破坏的副作用也特别大。如果能够刺激脑内某一特定的核团,以改变核团的功能活动,就有可能在一定程度上纠正神经递质之间的失衡,从而达到治疗运动性疾病的目的。自1960年以来,神经病学家和神经外科学家通过研究发现,深部脑刺激(Deep Brain Stimulation, DBS)能够改善神经系统疾病如特发性震颤和帕金森氏病的某些症状。研究人员预测,DBS还可能用于治疗癫痫、疼痛、多发性硬
[单片机]
基于<font color='red'>AVR</font>的微功耗电刺激器
轻触式开关电路在AVR单片机中的应用
引 言: 单键开关电路已经广泛应用于PDA、手机和电子词典等数码产品中,其实现方式多种多样。一般可采用RS触发器、计数器以及采用555集成电路等等。在单片机的一些实际应用中,以上的实现方式会增加整个电路的复杂度,不能达到简洁、实用的效果。本文将介绍一种可以在单片机应用中实现的,简易、稳定的轻触式单键开关电路。 1 电路原理 如图1所示,DC-DC为一个带有关断控制端的直流稳压电源芯片,MCU是一个单片机。当按下S1时,Q1和D1导通,稳压芯片工作,为单片机供电。单片机马上将相应的I/O引脚置为输出高,这时Q1和Q2导通,整个电路进入工作状态。而后单片机再将这个I/O引脚设置为输入,由于上拉电阻R4的存在,Q1和Q2一直导通。
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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