ATMAGE16定时器0初始值计算总结
定时器0是8位的故可计数的范围是0-255这些数,我们在设置初始值时就就应该告诉计数器我们开始计数的位置,这也就是TCNT0的初始值,当计数到255时,有硬件在TIFR的bit0位TOV0置位触发中断,如果要使用比较匹配中断时就要告诉OCR0定时器计数的数值(也就是256-m,m为TCNT0的初始值),定时器记了多少数到达TOP值,当发生比较匹配值相同时在TIFR的bit1位OCF0置位从而触发中断!
以上是我学习过程的一点小总结,我会慢慢的将他弥补上的,如果说对了,有看到的网友有什么意见和建议给我留一下言我好肯定一下,如果说错了,给为大虾小虾也不要笑话我,请您也给我留下言,好给我指正我的错误和建议!在这里也谢谢你们了!!
首先依照AVR使用范例--定时器应用范例
http://www.avrvi.com/avr_examples/timer.html,使用ICC application bulider快速配置定时器生成代码如下:
//ICC-AVR application builder : 2007-8-28 0:55:55
// Target : M16
// Crystal: 7.3728Mhz
#include
#include
void
{
}
TIMER0 initialize - prescale:1024
// WGM: Normal
// desired value: 20mSec
// actual value: 19.861mSec (0.7%)
void
{
这三位设置为1 0 1 :定时器的时钟为外部时钟频率的1024分频*/
}
#pragma interrupt_handler timer0_comp_isr:20
void
{
}
#pragma interrupt_handler timer0_ovf_isr:10
void
{
}
//call this routine to initialize all peripherals
void
{
}
这里将以上程序用到的Time0寄存器如下所示:
T/C0控制寄存器
/FOC0/WGM00/COM01/COM00/WGM01/CS02/CS01/CS00
Bit 7 – FOC0: 强制输出比较
Bit 6, 3 – WGM01:0: 波形产生模式
Bit 5:4 – COM01:0: 比较匹配输出模式
Bit 2:0 – CS02:0: 时钟选择
MCU 控制寄存器- MCUCR
MCU 控制寄存器包含了电源管理的控制位
SM2/SE/SM1/SM0/ISC11/ISC10/ISC01/ISC00
Bits 7, 5, 4 – SM2..0: 休眠模式选择位 2、1 和0
SM2 SM1 SM0
0
0
0
0
1
1
1
1
Bit 6 – SE: 休眠使能
Bit 3, 2 – ISC11, ISC10: 中断1 触发方式控制
Bit 1, 0 – ISC01, ISC00: 中断0 触发方式控制
通用中断控制寄存器- GICR
INT1 INT0 INT2
Bit 7 – INT1: 使能外部中断请求 1
Bit 6 – INT0: 使能外部中断请求 0
Bit 5 – INT2: 使能外部中断请求 2
Bit 1 – IVSEL: 中断向量选择
Bit 0 – IVCE: 中断向量修改使能
T/C 中断屏蔽寄存器- TIMSK
OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 OCIE0 TOIE0
Bit 1 – OCIE0: T/C0 输出比较匹配中断使能
Bit 0 – TOIE0: T/C0 溢出中断使能
其余的未定义可参考ATMEGA16 datasheet!
上面啰嗦了很多,以后看的时候不用到处去翻datasheet,这里说TCNT0的初始值
如何得到这两个值呢?
现假设最大计数值为M,timer0为8位,那M=256。(这是我看51的定时器/计数器的基本结构及工作原理,AVR应该差不多的吧,反正我后来用计算器算了一下,符合就得)
计数器初值X的计算式为:
X=M-比较值(计数值)
定时工作方式的计数初值X等于:
X = M -
为T/C0
ATMAGE16定时器0初始值计 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)