16位定时/计数器T/C1的应用

December 6, 2018 · AVR单片机 · 79次阅读

P81206-141542(1).jpg
ATmega16的T/C1是一个16位多功能定时/计数器,上图为该16位定时/计数器的结构框图。主要特点如下:

  • 真正的16位设计
  • 2个独立的输出比较匹配单元
  • 双缓冲输出比较寄存器
  • 1个输入捕捉单元
  • 输入捕捉噪声抑制
  • 比较匹配清0计数器(自动重装特性)
  • 可产生无输出抖动(Glitch-free)的、相位可调的脉宽调制(PWM)信号输出
  • 周期可调的PWM波形输出
  • 频率发生器
  • 外部事件计数器
  • 10位时钟预分频
  • 4个独立的中断源(TOV1、OCF1A、OCF1B和ICF1)

图中给出了MCU可操作的寄存器及相关的标志位,其中计数器寄存器TCNT1、输出比较寄存器OCR1A、OCR1B和输入捕捉寄存器ICR1都是16位寄存器。T/C1所有的中断请求信号TOV1、OCF1A、OCF1B和ICF1都可以在定时/计数器T/C1所有的中断标志寄存器TIFR找到,而在定时器中断屏蔽寄存器TIMSK中,可以找到与它们相对应的4个相互独立的中断屏蔽控制位TOIE1、OCIE1A、OCIE1B和TICIE1。TCCR1A和TCCR1B为2个8位寄存器,是T/C1的控制寄存器。
T/C1时钟源的选择由T/C1的控制寄存器TCCR1B中的3个标志位CS1[2:0]确定,共有8种选择。其中包括无时钟源(停止计数),外部引脚T1的上升沿或下降沿,以及内部系统时钟经过一个10位预定比例分频器分频的5种频率的时钟信号(1/1、1/8、1/64、1/256、1/1024)。
T/C1的基本工作原理和功能与8位定时/计数器相同,常规的使用方法也是类同的。但与8位的T/C0、T/C2相比,T/C1不仅位数增加到16位,而且功能也更加强大。

16位T/C1增强功能介绍

16计数器

由于T/C1是16计数器,因此它的计数器宽度、计时长度大大增加。配合一个独立的10位预定比例分频器,在系统时钟为4MHz条件下,16位T/C1最高计时精度为0.25μs,而最长的时宽可达到16.777216s(精度为256μs),这是其他8位单片机所做不到的。

16位寄存器的读/写操作步骤

由于AVR内部数据总线为8位,因此读/写16位寄存器需要分两次操作。为了能够同步读/写16位寄存器,每一个16位寄存器分别配有一个8位临时辅助寄存器,读/写操作应遵循以下步骤:

  1. 16位寄存器的读操作:当MCU读取16位寄存器的低字节(低8位)时,16位寄存器低字节内容被送到MCU,而高位字节(高8位)内容在读低字节操作的同时被置于临时辅助寄存器(TEMP)中。当MCU读取高字节时,读到的是TEMP寄存器中的内容。因此,要同步读取16位寄存器,应先读取寄存器的低位字节,再立即读取其高位字节。
  2. 16位寄存器的写入操作:当MCU写入数据到16位寄存器的高位字节时,数据是写入到TEMP寄存器中。当MCU写入数据到16位寄存器的低位字节时,写入的8位数据与TEMP寄存器中的8位数据组合成一个16位数据,同步写入到16位寄存器中。因此,要同步写16位寄存器,应先写入该寄存器的高位字节,再立即写入它的低位字节。

用户编写汇编程序时,如果要对16位寄存器进行读/写操作,则应遵循以上特定的步骤。此外,再对16位寄存器操作时,最好将中断响应屏蔽,防止在主程序读/写16位寄存器的两条指令之间插入一个含有对该寄存器操作的中断服务。如果这种情况发生,那么中断返回后,寄存器中的内容已经发生改变,会造成主程序中对16位寄存器的读写失/误。

更加强大和完善的PWM功能

输入捕捉功能

标签:none

最后编辑于:2018/12/06 07:01

添加新评论