AVR133使用AVR单片机产生长延时.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
AVR133使用AVR单片机产生长延时

AVR133: 使用AVR单片机产生长延时 翻译:邵子扬 2006年12月14日 shaoziyang@ 背景 当使用单片机的应用需要执行一个长延时时,设计者可以选择多种解决方法。 一个解决方法是使用硬件定时器。因为典型定时器只有16位或24位,这个方法需要系统时钟足够低来产生长延时。例如,一个运行在1 MHz系统时钟的24位定时器可以产生数十秒的延时。这对于很多应用来说还不够,此外这个方法对于系统性能有影响。 另外一个方法使用软件计数一定数目的定时器溢出。但是它使软件变得复杂,同时在等待长延时时不能进入低功耗模式。 第三种方法是使用一个很低频率的外部振荡器,定时器设置成外部触发的计数器,这可以产生很长的延时。但是这也增加了系统的成本,因为还需要使用其他的器件。 这里介绍的方法显示了怎样用AVR AT90系列单片机(AT90S2313、AT90S4414和AT90S8515)产生和处理长延时。只使用片内定时器而无需软件处理,这样在延时期间单片机内核可以进入低功耗模式。因为定时器使用系统时钟来计时,所以无需其他外部器件。 因为有长延时的能力,例如,运行在20MIPS的AVR单片机可以产生长达半小时的延时。 应用 下面列出了一些需要使用到长延时的应用: 人机接口的超时 环境测量(噪声等级、污染) 管理和过程控制 AVR单片机的定时器/计数器 下面小节简要的说明了AVR单片机定时器的用法。更多详细资料请参考相关的单片机数据手册。 定时器/计数器 AT90系列单片机提供了两个通用定时器/计数器,一个8位和一个16位。每个定时器/计数器有独立的10位预分频器,可以用做基于内部时钟的定时器或基于外部触发的计数器。 定时器/计数器预分频 图1显示了定时器/计数器的预分频器,可以选择4个不同的预分频:CK/8、CK/64、CK/256、CK/1024,这里CK是振荡器时钟。对于两个定时器/计数器,可以选择CK或者外部信号作为时钟源。 图1. 定时器/计数器预分频器 8位定时器/计数器0 图2显示了定时器/计数器0的结构图。 8位定时器/计数器0可以选择CK、预分频CK和外部信号作为时钟源,此外也可以通过设置TCCR0寄存器停止它。溢出状态标志位在TIFR(Time/Counter Interrupt Flag Register)寄存器中,控制在TCCR0(Time/Counter0 Control Register)寄存器中,而中断允许/禁止在TIMSK(Timer/Counter Interrupt Mask Register)寄存器。 当定时器/计数器使用外部时钟时,外部信号要和CPU的时钟频率同步。为了保证对外部时钟正确采样,两个外部时钟信号之间必须大于1个CPU时钟周期。外部时钟信号在CPU的内部时钟上升沿采样。 8位定时器/计数器0在使用低预分频时同时有高精度和高速特性。同样,在高预分频时有低速和准确定时功能。 图2. 定时器/计数器0的结构图 16位定时器/计数器1 图3显示了定时器/计数器1的结构框图。 16位的定时器/计数器1可以从CK、CK预分频和外部获取时钟源。此外,它还可以通过设置寄存器(TCCR1A和TCCR1B)来停止。不同的标志位(溢出、比较匹配和捕捉)和控制信号也在控制寄存器(TCCR1A和TCCR1B)中设置,中断控制在寄存器TIMSK。 当定时器/计数器1使用外部时钟,外部信号要和CPU的时钟频率同步。这和定时器0相同(参考3.3小节)。 16位的定时器/计数器1在低分频时有高精度和高速特性。同样,在高预分频时有低速和准确定时功能。定时器/计数器1还支持输出比较功能。 图3. 定时器/计数器1结构图 硬件设置 为了从快速时钟获取长延时,系统的预分频器和两个定时器需要比例化。硬件的配置如图4。 定时器/计数器1配置为一个定时器,它被设置为由系统时钟的预分频驱动。在计数达到输出比较寄存器OCR1A后翻转OC1A引脚的输出。这时,由硬件重载定时器/计数器1的寄存器TCNT1为0并重新开始计数。 OC1A引脚的输出又连接到T0引脚的输入,OC1A引脚的翻转可以触发定时器/计数器0。定时器/计数器0被配置为一个计数器,它在T0的每个上升沿计数。当定时器/计数器0溢出后,TIFR寄存器就会被置位,并触发中断,这可以用来指示延时的时间。 最长的延时可以用下面公式计算: T = 2 / Fs * T1P * OCR1A * (256 – TCNT0) 这里: Fs = 系统时钟 T1P = TCCR1B定义的预分频 定时器1最大预分频比是:1024 定时器1最大计数:65536 OC1A引脚的翻转会额外乘以2 定时器0最大

您可能关注的文档

文档评论(0)

kakaxi + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档