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】和编写中断入口函数。
普通模式
最简单的模式ÿ