ATmega有四个定时器,2个8位的:T / C0 和 T / C2;2个16位的:T / C1 和 T / C3。
以T / C0 为例。
其核心是初值寄存器【TCNT0】、比较寄存器【OR0】以及计数方向的控制。使用定时器:

  • 首先要明确用作什么功能:是定时中断还是产生PWM波形。
  • 用作定时中断要用那种模式:是溢出中断(普通模式)还是比较匹配中断(CTC模式)。
  • 产生PWM波形又要用哪种模式:快速PWM模式还是相位修正PWM模式,正向波形还是反向波形(COM0【0:1】控制)。

这些设置都在一个寄存器里设置 TCCR0 【T / C0控制寄存器】。控制它就控制半个定时 / 计数器。
要产生中断,必须还要配置两个中断相关的寄存器:定时计数器中断屏蔽寄存器【TIMSK】和定时计数器中断标志寄出去你【TIFR】。定时器用的就这5个寄存器。

  • 【TCCR0】控制寄存器:确定T0的基本功能和工作模式。
  • 【TCNT0】定时器初值(8位);
  • 【OCR0】比较值;
  • 【TIMSK】决定是否打开定时中断;
  • 【TIFR】中断标志寄存器:检测【TIFR】是否产生了中断标志【TOV0】(溢出中断标志,普通模式) 和 【OCF0】(比较匹配中断标志,CTC模式)。

要顺利进入中断,还必须要开放总中断SREG【I】和编写中断入口函数。

普通模式
最简单的模式,计数器不停的以 0 累加到 256,然后又从 0 开始循环计数器。当计数器记到 256 转回到 0 的同时,溢出中断标志【TOIE0】置位。如果有中断函数且溢出中断和总中断开放了就会转去执行中断服务子程序。在中断服务子程序中应该重新把初值退到【TCNT0】中去,也可以改变初值,从而改变定时时长。
CTC模式
比较匹配中断,【TCNT0】中存放定时器初值,【OCR0】中存放比较值,计数器每加一次就会同【OCR0】中的值进行比较,一旦相等就会置位比较匹配中断标志【OCIE0】,且把计数器清零,即【TCNT0 = 0】,同样进入中断服务子程序。CTC模式也可以输出PWM波形,此时TCNT0 = 0,COM0【0:1】 = 1,每次比较匹配时OC0取反。
快速PWM模式
PWM的波形其实是靠两次匹配产生的;第一次是 TCNT0 = OCR0,第二次 TCNT0 = 0xFF。至于是那次为高电平则由 COM0【1:0】决定,为2时,TCNT0 = OCR0 时输出低电平,TCNT0 = 0xFF时输出高电平。COM0【1:0】= 3时相反,TCNT0 = OCR0时输出高电平,TCNT0 = 0xFF时输出低电平。高低电平交替变化就产生了PWM波形。【OCR0】的作用是调节占空比。
相位可调PWM模式
其实也是比较两次比较匹配产生波形:计数器从 0 记到 0xFF,然后降序计数又到 0,因此【TCNT0】会有两次和【OCR0】相等,同样【COM0(1:0)】的值决定那次输出高电平,那次输出低电平。当【COM0(1:0)】= 2,升序技术匹配时输出低电平,降序计数匹配时输出高电平;当【COM0(1:0)】 = 3,升序计数匹配时输出高电平,降序计数匹配时输出低电平。【TCNT0】固定等于 0。

ATmega128定时器相关推荐

  1. AVR mega 128 开发板方案 avr开发板 ATmega128 学习板

    详细介绍: http://shop.avrvi.com/goods-160.html 最新消息:我公司独创的四合一开发板自2008年上市以来,取得了不错的销售业绩,得到广大客户的青睐和信任,为了更好的 ...

  2. Atmega128 控制直流伺服电机

    电机型号是DCM50205D  带1000分辨率增量式光电编码器. 驱动器型号是DCS810 这两款产品都是雷赛公司的产品(去他们公司的网站上可以找到这两款产品具体的参数), 这是当时实验室想研究伺服 ...

  3. 一文吃透JAVA定时器格式

    JAVA 定时器时间格式 ​ 基本格式: [秒]  [分]  [小时]  [日]  [月]  [周]   [年] 序号 说明 是否必填 允许填写的值 允许使用的通配符 1 秒 是 0-59 ,   - ...

  4. Timer定时器开发

    Timer定时器开发 定时器的作用是不占线程的等待一个确定时间,同样通过callback来通知定时器到期. 参考:https://github.com/sogou/workflow 定时器的创建 同样 ...

  5. linux定时器(crontab)实例

    linux实验示例----实现每2分钟将"/etc"下面的文件打包存储到"/usr/lobal"目录下 ·Step1:编辑当前用户的crontab并保存 终端输 ...

  6. c语言程序设计分段定时器,单片机C语言编程定时器的几种表达方式

    原标题:单片机C语言编程定时器的几种表达方式 吴鉴鹰单片机开发板地址 店铺:[吴鉴鹰的小铺] 地址:[https://item.taobao.com/item.htm?_u=ukgdp5a7629&a ...

  7. linux 内核按键抖动,Tiny4412 Linux驱动之按键(定时器防抖动) | 技术部落

    按键抖动示意图 我们平常所用的按键为机械弹性开关,由于触点的弹性作用,按键在闭合时不会马上稳定的接通,而是有一段时间的抖动,在断开时也不会立即断开.抖动时间由按键的机械特性所决定,一般为5ms~10m ...

  8. mysql 定时器不能持续循环执行_定时器,不循环执行指定方法?如何解决?

    ⁽⁽ଘ你管我管你疯啊ଓ⁾⁾ 01-22 加粗 标红 插入代码 插入链接 插入图片 上传视频 请 登录 后发表内容 关闭 新增或编辑超链接 链接地址 关闭 插入视频 视频链接 messageScroll ...

  9. oracle定时器怎么开启,Oracle的定时器使用示例

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. --Oracle定时job --数据库执行此脚本时时,请确保只执行一次,否则会引发错误! ...

  10. java 定时器获得外部参数_JMeter定时器使用小结

    一.定时器的作用域 1.无论定时器位置在Sampler之前还是下面,定时器是在每个sampler(采样器)之前执行的,而不是之后: 2.当执行一个Sampler之前时,所有当前作用域内的定时器都会被执 ...

最新文章

  1. python找不到tushare_python tushare
  2. Windows锁定计算机C代码编程实现
  3. java集群_Kafka多节点分布式集群搭建实现过程详解_java
  4. 数据类型,隐式类型转换
  5. Spring------自动化装配Bean(一)
  6. 15分钟从零开始搭建支持10w+用户的生产环境(一)
  7. unbuntu cmake安装mysql_ubuntu下编译安装mysql5.5
  8. jquery 加载中_在 vue 中使用 ztree
  9. 分支程序设计05 - 零基础入门学习C语言14
  10. 20191126_2_英文情感分析
  11. 微信 及支付宝 支付接口 功能
  12. 从零搭建SSM框架及所遇到问题
  13. 低成本2.4G+MCU的SOC芯片,极其适合做低成本玩具灯控等方案
  14. Java缓存知识汇总
  15. 广西大学oj1042(小西的数据结构作业)
  16. MySQL DBA技术难度低为什么工资比Oracle高?
  17. F(w)的模是偶函数,相位角是奇函数
  18. vue PC端微信扫码登录
  19. 数据结构-链表及相关算法
  20. LeetCode #416 分割等和子集

热门文章

  1. navision系统和sap区别_MES与EPR进行系统集成的实际案例-系统接口、交互数据分析...
  2. 系统篇-在linux上用deb包安装steam。
  3. 电力IEC104规约协议解读(含源码下载)
  4. 三角形外接圆圆心 算法 删改版
  5. jsZip将多个文件压缩成一个压缩包
  6. 关于Terra和Aqua的轨道问题整理
  7. 我的Ubuntu软件清单
  8. oracle去除字段值的所有英文
  9. html+js实现注册页面及信息验证
  10. 6.郝斌C语言笔记——流程控制