5、定时器

这里主要编写定时器0和1的定时功能,通过数码管显示。

定时器T0

首先T0是一个8位定时器,其主要由TCNT0(初值寄存器)、TCCR0(控制寄存器)。

TCCR0:FOC0,WGM00,COM01,COM00,WGM01,CS02,CS01,CS00。

如图,第5和6位是用来设置T/C的4种工作模式,这里主要是一般的定时器功能,所以WGM01和WGM00=0,即可。

其次,低3位是用来设置分频,程序里面设置1024分频,而时钟是11.0592MHz,所以定时时间=1024*(255-初值TCNT0)/11059200=10ms,所以初值寄存器TCNT0=147。T0是向上计数,溢出后清零,触发中断。

除了以上设置定时器0的基本初值和分频外,还有定时器0的使能位在寄存器TIMSK中,它包括3个定时器的使能以及比较中断的使能。

TIMSK:OCIE2,TOIE2,TICIE1,OCIE1A,OCIE1B,TOIE1,OCIE0,TOIE0

其中TOIE0=1,使能定时器0;OCIE0=1,是使能比较匹配中断,类似51单片机的TR0。其余是定时器1和2的使能位。

总中断-SREG:I,T,H,S,V,N,Z,C。总中断的最高位I=1即可,类似于51单片机的EA。

具体编程讲解如下图:

定时器0中断服务函数——按照格式写,更改向量名称即可

与51单片机类似,TCNT0在中断函数中重新赋值。

定时器T1

首先T1是一个16位定时器,其初值由TCNT1H、TCNT1L(初值寄存器)控制、工作模式由TCCR1A和TCCR1B控制。

TCNT1H和TCNT1L的初值设置与T0类似,根据分频设置来计算所得,如本例中定时器10ms,分频256,所以10ms=256*(65535- TCNT1)/11059200,得到TCNT1= 65535-432,然后将其分为2个8位字节,与51单片机类似的做法:TCNT1H =(65535-432)/ 256;TCNT1L= (65535-432)% 256。

TCCR1A:COM1A1,COM1A0,COM1B1,COM1B0,FOC1A,FOC1B,WGM11,WGM10

TCCR1B:ICNC1,ICES1,Dummy5,WGM13,WGM12,CS12,CS11,CS10

工作模式寄存器与T0类似,TCCR1B的低3位是设置分频,所以设置为100,即256分频,TCCR1B = 0x04。

如图,其中WGM13/WGM12/WGM11/WGM10是用来设置定时计数器的工作模式,这里是普通模式,所以TCCR1A = 0x00。

定时器1的使能位也在TIMSK中,TICIE1,OCIE1A,OCIE1B,TOIE1第2-5位都是设置定时器1的,其中TOIE1 = 1即可使能。

具体编程讲解如下图:

设置分频、计算初值、开启定时器即可完成所有配置。

与T0类似,定时器1的中断向量设置完毕后,重新赋初值。最后通过数码管显示定时器定时效果。

仿真视频

/**
******************************************************************************
*   @file      main.c
*   @author    Alex——小白
*   @version   V1.0
*   @date      2021.1.20
*   @brief     定时器定时,数码管显示
*   @store     Proteus仿真店子
*   @Link      https://shop484534014.taobao.com/
*   @Email     844545015@qq.com
******************************************************************************
*   @attention  All Rights Reserved
**/
​
#include <main.h>
​
/*定义驱动数码管显示段和位,此处为共阴极数码管编码,共阳极可直接取反即可*/
uint8_t table_duan[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x77,0x7c,0x39,0x5e,0x79,0x71
};
​
uint8_t table_wei[8]={         0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f
};
​
void main(void)
{SEG.SEG_Init();TIMER.Timer0_Init();TIMER.Timer1_Init();while(1){SEG.SEG_Display(table_wei[0],table_duan[TIMER.Timer0_Sec%10]);SEG.SEG_Display(table_wei[1],table_duan[TIMER.Timer0_Sec/10]);SEG.SEG_Display(table_wei[6],table_duan[TIMER.Timer1_Sec%10]);SEG.SEG_Display(table_wei[7],table_duan[TIMER.Timer1_Sec/10]);        }
}

如需Proteus和IAR安装包以及AVR编程参考手册,请关注公众号:

Proteus仿真店子

可通过查看历史记录,查看源码和仿真工程

(若需Proteus和IAR安装包以及AVR编程参考手册,后台回复:AVR;若需其它设计,后台回复:AVR设计

ATmega16开发板教程(4)——定时器相关推荐

  1. ATmega16开发板教程(8)——ADC

    ​9.ADC 在将ADC之前,先聊聊其前因后果--由于计算机在自动控制.检测以及其他领域广泛应用数字电子技术,而大自然的信号全是模拟信号,如果通过计算机保存自然信号呢?那么就需要ADC(模数转换器An ...

  2. ATmega16开发板教程(2)——KEY点灯

    ​3.KEY点灯 KEY引脚的寄存器定义与LED相同,还是3个寄存器:DDRx.PORTx.PINx(具体介绍可参见LED点灯部分). DDRx:1-输出,0-输入.当配置为输入时,PORTx=1,上 ...

  3. ATmega16开发板教程(5)——外部中断

    ​6.外部中断 这里主要编写外部中断0和1的边沿触发,通过LED状态显示. 外部中断0 外部中断我们要知道的是:①如何触发?上升沿.下降沿还是高低电平:②外部中断使能:③中断服务函数的编写. AVR提 ...

  4. ATmega16开发板教程(1)——LED点灯

    ​2.LED点灯 作为通用数字IO使用时,AVR单片机的IO具备读.写.修改功能.每个端口具有3个寄存器:DDRx.PORTx.PINx. DDRx:1-输出,0-输入.当配置为输入时,PORTx=1 ...

  5. ATmega16开发板教程(7)——LCD1602

    ​8.LCD1602 LCD1602作为最基础的字符型液晶显示屏,能过显示16x02=32个字符.那么时序的操作--读写是最主要的内容,今天就带大家一起读读时序. 在看时序图前,对LCD的引脚功能要了 ...

  6. ATmega16开发板教程(6)——串口通信

    7.串口通信 串口通信的基本概念就是用一根线收RX和另外一根线发TX数据,那么什么时候发?什么时候开始收呢?例如,古时候的暗号--天王盖地虎.小鸡炖蘑菇,说完就开始交易. 串口通信最重要的参数就是波特 ...

  7. ATmega16开发板仿真教程——前言

    1.基础知识 简单介绍单片机ATmega16的硬件资源,以及IAR软件使用,Proteus8.9仿真软件的基本操作. AVR单片机分类: ATtiny系列:tiny13/15/26属于低档,适合功能相 ...

  8. 厦门理工嵌入式开发LPC1768开发板教程

    LPC1768开发板教程 注意:本文档基于LPC1768.h头文件和EZ1768.h头文件(在文档结尾附出) 文章目录 LPC1768开发板教程 1.GPIO 1.1 设置GPIO 1.2 设置输入输 ...

  9. LIVE MINI ESP32开发板教程系列(三)drv2605L模块+手机常用振动器实现117种震动效果

    LIVE MINI ESP32开发板教程系列(三)drv2605L模块+手机常用振动器实现117种震动效果 LIVE MINI ESP32引脚图 手机振动器介绍 DRV2605L模块 硬件连线图 DR ...

最新文章

  1. 重磅!CSDN 发布「AI开源贡献奖Top5」「AI新锐公司奖Top10」「AI优秀案例奖Top30」三大榜单...
  2. 2020最大赢家!马斯克身家达1600亿美元,2张图拆解他的巨额财富
  3. 新发现:高速下载Eclipse
  4. 计算机内存知识txt,计算机新手必备内存实用知识.docx
  5. python编程思维导图_用来梳理 Python 编程核心知识15张思维导图
  6. tensorflow2 神经网络模型构建4种方法
  7. MyEclipse6.0 安装axis2插件, 调用加密的SAP webservice
  8. python自动获取邮件数据_Python 获取测试报告内容并发送邮件
  9. SQL Server存储过程基本语法
  10. python错误和调试
  11. EDEM基础操作步骤
  12. 多个版本的BIND DNS软件都存在一个严重漏洞
  13. 线性代数笔记12——列空间和零空间
  14. 自动驾驶两大路线对决,渐进式玩家为何更容易得人心?
  15. D社创始人 苟方韬:当二次元恋上区块链,如何引爆流量
  16. 9月20-21日,十位阿里技术大牛带你玩转大流量与高并发
  17. Unixbench服务器综合性能测试方法及工具下载
  18. 原型模式-广告邮件推送
  19. maven 多模块项目,打包其中一个项目,Could not find artifact org.javaboy:commons:pom:1.0-SNAPSHOT
  20. 同里古镇百年古建筑深夜被毁

热门文章

  1. LeetCode知识点总结 - 977
  2. KanBan系统WeKan安装和使用
  3. 面经分享:美团面试也太难了!4面美团终成Offer
  4. SQL手工注入漏洞测试(Db2数据库)
  5. Python安装和运行
  6. 信息安全管理体系认证
  7. 仿苹果手机闹钟_高仿iOS系统闹钟 UserNotifications
  8. 闹钟Android实验报告,闹钟实验报告.doc
  9. 互联网医疗以线下诊所为基地掀起共享医疗风潮
  10. Linux内核读文件处理过程浅析