第九章定时单片机.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第九章定时单片机

第九章 定时/计数器 9.1 定时/计数器是什么?能做什么? 定时/计数器长度:计数单元的长度,ATmega16有三个定时/计数器,2个8位的,他的计数范围是0~28(0~255),1个16位的,他的计数范围是0~216(0~65536)。 脉冲信号源:计数的脉冲信号源。可以是单片机内部提供的信号源,也可以说外部的信号源,通过对信号源频率的分频设置,就可以获得不同的计数频率。 计数器类型:可以是加1或者减1计数器,单向、双向计数器 计数初值和溢出值:计数初值就是计数器从什么值开始计数,计数溢出值就是计数到什么值的时候产生中断请求。这两个值都是可以由用户通过配置相应的控制寄存器来设定的,当然其范围应该在计数器长度之内。 计数器事件:是指计数器在某个状态下,向CPU发送中断申请。比如说,当8位计数器的计数值达到上限255时,向CPU发送中断申请。 9.2 快速上手引例,让定时器跑起来…… 在第四章快速引例中,利用软件延时的方法实现发光二极管的闪烁功能,然而,软件延时的方法CPU一直在执行空指令,CPU将没有时间来处理其他实时的工作了。然而有了定时器,就可以在极少CPU参与的情况下更加轻松地让发光二极管闪烁起来……这里依然使用第四章快速引例的硬件电路,电路连接原理图如图9-1所示。 图9-1 发光二极管硬件连接原理 将MEGA16的主频设置为1MHz,使用利用定时/计数器T/C0对预分频器进行1/1024预分频产生后的约1000Hz时钟进行定时产生中断来获取0.2048秒的控制间隔来驱动发光二极管轮流点亮。代码如下: #include iom16v.h #define unsigned char byte #define unsigned int word #define fosc 1000000 byte disptmp; /*********************************************/ /* 定时/计数器0中断服务程序 */ /*********************************************/ #pragma interrupt_handler timer0_overflow_isr:iv_TIMER0_OVF void timer0_overflow_isr(void) { byte SREG_tmp; SREG_tmp=SREG; TCNT0 = 55; if(disptmp = = 0x7f) disptmp = 0xfe; else disptmp = 1; SREG=SREG_tmp; } void main(void) { DDRA = 0xff; disptmp = 0xfe; TCNT0 = 55; //预置T0的计数器值 TIMSK = 0x01; //开启T0溢出中断使能 SEI(); //开启全局中断 TCCRO = 0x05; //预分频1/1024,启动定时器 while(1) { PORTA = disptmp; //…… 加入需要处理的代码 } } 9.3 如何操作定时/计数器? 9.3.1 具有 PWM 功能的8位定时器/计时器0: T/C0 是一个通用的单通道8位定时器/计数器模块。其主要特点如下: ? 单通道计数器 ? 比较匹配发生时清除定时器( 自动加载) ? 无干扰脉冲,相位正确的PWM ? 频率发生器 ? 外部事件计数器 ? 10 位的时钟预分频器 ? 溢出和比较匹配中断源 (TOV0 和 OCF0) (1)普通模式 普通模式(WGM01:0 = 0) 为最简单的工作模式。在此模式下计数器不停地累加(即寄存器TCNT0的值不断累加)。当计数寄存器TCNT0的值达到最大值后(0xFF),由于数值溢出,计数器简单地返回到最小值0x00 重新开始。在计数寄存器TCNT0 为零的同时,溢出标志TOV0 置位,发送中断申请。 此时TOV0 有点象第9 位,只是只能置位,不会清零。但由于定时器中断服务程序能够自动清零TOV0,因此可以通过软件得到一个9位的计数器。 在普通模式下没有什么需要特殊考虑的,用户可以随时写入新的计数器数值。 利用输出比较单元也可以用来产生中断。但是不推荐在普通模式下利用输出比较来产生波形,因为这会占用太多的CPU 时间。 9.3.4 8 位有PWM 与异步操作的定时器/ 计数器2 T/C2是一个通用单通道8位定时/计数器,其主要特点如下: ? 单通道计数器 ? 比较匹配时清零定时器 ( 自动重载) ? 无干扰脉冲, 相位正确的脉宽调制器 (PWM) ? 频率发生器 ? 10 位时钟预分频器 ? 溢出与比较匹配中

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档