Atmage16中断学习—定时器/计数器
来源:互联网 发布:php传递参数调用python 编辑:程序博客网 时间:2024/05/16 04:55
(1)定时器/计数器的工实质是什么?
它的实质其实就是一个加1计数器,通过对其内部寄存器的操作来实现计数、定时的功能。
(2)什么是分频器?为什么要用到分频器?
分频器就是将一种频率通过它可以根据具体的需要转换成另一种频率的一种装置。
单片机的系统时钟频率越高,单片机运行的越快,如果其外设的性能不高跟不上单片机运行的速度,就很容易造成程序跑飞。因此,需要将系统时钟降低,所采用的策略就是分频。这样,当系统时钟过高时,就可以利用分频器转化出适合的时钟频率。
上图为Atmage16中T/C0与T/C1共用的预分频器。可以操作CSnn将系统时钟转化为不同的时钟源。可以操作一个单片机的寄存器来实现系统时钟的转化。
T/C0是操作TCCR0寄存器(TC控制寄存器)
T/C1是操作TCCR1B寄存器
(3)Atmage16定时器/计数器介绍
Atmage16共有三个定时器/计数器,分别为:T/C0,T/C1,T/C2 。其中T/C0,T/C2 为8位定时器/计数器;T/C1为16为定时器/计数器。8位计数器的最大值为:2^8-1即255;
16位计数器的最大值为:2^16-1即65535
与定时器相关的寄存器有:
1、AVR中断寄存器SREG:
BIT7—I为全局中断是能位,如果I清零,怎无论其他中断标志是否置位,都不会产生中断。
2、T/C中断屏蔽寄存器TIMSK
Bit7——T/C2 输入比较匹配中断使能
Bit6——T/C2 溢出中断使能
Bit5——T/C1 输入捕捉中断使能
Bit4——T/C1 输入比较A匹配中断使能
Bit3——T/C1 输入比较B匹配中断
Bit2——T/C1 溢出中断使能
Bit1——T/C0 输出比较匹配中断使能
Bit0——T/C0 溢出中断使能
(4)T/C普通模式
由上图可以很清楚的看出T/C普通模式工作的一般步骤:可以通过外部振荡直接到计数器然后到中断系统;还可以通过熔丝配置然后通过TCCRn控制寄存器操作分频器,然后再通过计数器,然后通过中断屏蔽寄存器TIMSK使能相应的中断,最后通过SREG开启总中断。
所以,如果利用内部RC振荡器做系统时钟,对T/C进行初始化的步骤:
1、操作控制寄存器TCCRn;
2、操作计数寄存器TCNTn(如果是T/C1则TCNT1H、TCNT1L)
3、操作中断屏蔽寄存器TIMSK
4、操作总中断SERG
codeblock编译器下,定时器初始化
定时器0:
void timer0_init(){ SREG |= 0x80; TIMSK |= 0x01;//T/C0溢出中断使能 TCCR0 |= (1<<2); TCNT0 = 0;}ISR(TIMER0_OVF_vect){ TCNT0 = 0; count++; if(count == 255) { count = 0; }}定时器1:
void timer1_init(){ SREG |= 0x80;//开通总中断 TIMSK |= 0x04;//T/C1溢出中断使能 TCCR1B |= (1<<0);//无预分频 TCCR1B |= 0x01; TCNT1H = 0; TCNT1L = 0;}ISR(TIMER1_OVF_vect){ TCNT1H = 0; TCNT1L = 0; count ++; if(count == 9999) { count = 0; }}定时器2:
void timer2_init(){ SREG |= 0x80; TIMSK |= 0x40;//T/C2溢出中断使能 TCCR2 |= (1 << 2); TCNT2 = 0;}ISR(TIMER2_OVF_vect){ TCNT2 = 0; count ++; if(count == 255) { count = 0; }}
- Atmage16中断学习—定时器/计数器
- Atmage16 中断学习—了解中断
- Atmage16中断学习—外部中断
- 51中断-定时器/计数器中断
- 关于51单片机学习中计数器/定时器中断的理解
- 51单片机定时器计数器中断总结
- 51单片机定时器计数器中断总结
- 51单片机中断系统(定时器、计数器)
- 实验二:外部中断与定时器/计数器中断实验
- 创龙TMS320C6748开发板———定时器/计数器学习
- Linux驱动学习——中断、定时器
- 单片机C语言编程-定时器/计数器(中断方式)
- 单片机定时器/计数器、中断和串口控制位
- 定时器/计数器
- 定时器/计数器
- STM32学习-定时器中断实验
- STM32学习之:定时器中断
- stm32学习笔记——入门定时器中断
- 简单的Nginx+Squid+Tomcat架构
- 黑马程序员_03JAVA基础(2)
- 不要轻易和少妇上床
- 进程间的通信(互斥锁、条件变量、读写锁、文件锁、信号灯)
- uva 1398 - Meteor(贪心)
- Atmage16中断学习—定时器/计数器
- bzoj2038莫队算法
- 原型设计第一波:八大指导原则
- 第8天 数组
- 异常处理总结
- Cannot refer to a non-final variable * inside an inner class defined in a different method"错误解析
- HDU 1754 I Hate It(树状数组求区间最值)
- 定义与声明的区别--学习笔记
- socket 10053 错误之路