PIC24HJ系列的单片机提供三种类型的定时器:
A型:定时器1
B型:定时器2,4,6,8
C型:定时器3,5,7,9
每一种都含有如下的寄存器:
1、16位定时计数寄存器:TMRx
2、16位周期寄存器:PRx
3、16位控制寄存器:TxCON
每一个定时器都含有跟中断有关的如下位:
中断使能,标志,优先级
A型定时器:能够操作在32K的内部时钟,可以通过外部时钟工作在异步模式,外部时钟可以在内部进行分频同步。
BC两种可以组成一个32位的计数器,C还可以触发一个AD转换。
A型:控制寄存器有如下控制位:
使能,在闲置模式下继续,定时器的GATED TIME累加位,输入时钟预分频位,外部时钟同步选择位,时钟选择(外部还是内部分频)。
B型:使能,在闲置模式下继续,定时器的GATED TIME累加位,输入时钟预分频位,32位模式选择,外部时钟同步选择位。
C型:……32位模式选择这个位没有,其余同B型
操作模式:
定时器模块可以工作在下面的几种模式下:
定时器模式
gated time模式
同步计数模式
异步技术模式(仅用于A型)
上面两种的时钟来自内部指令周期,后面两种用外部的时钟。
定时器模式的配置:
TCS:时钟源配置
TSYNC:同步配置位(仅用于A型)
TGATE:定时器GATE控制位
几种模式可以通过如下的设置来实现:
工作在定时器模式下的编程如下:
配置定时器去使能,先配置
选择内部时钟
关掉Tgate
选择分频
清定时器值
写入周期值(TIMER和TR做比较)
设置中断优先级
清中断标志
使能中断
开启定时器
编写中断服务程序
Tgate模式下,程序编写方法和上面相同,时序有一点不同,如下:
外部时钟为Gate输入,一个上升沿时,定时器开启,下降沿时,发生一次中断,定时器暂停。下一次上升沿时,计数器继续走……
同步模式:
同步模式下,外部的时钟通过分频得到一个内部时钟,配置时:
A模式配置为同步,BC的外部时钟本来就是同步的。
选择TCS来设置外部时钟源
这里注意,睡眠模式下,外部时钟源不可用。
这里,只是时钟源采用外部,编程基本上和上面的流程是一样的。
异步模式:
异步模式下,可以使用辅时钟来计时。
定时器在睡眠模式下,仍然可用。
中断:
中断通过中断使能,标志位和优先级来设置,中断标志在中断程序中记得要清空。
可以通过如下的程序来进行配置,这个程序在编译器中已经自带:
void ConfigIntTimer1(unsigned int config);
此函数中,清空了标志,使能中断和配置输出参数的优先级。
如何配置成32位定时器:
32位的定时器通过如下组成:
这里注意,这种情况下的配置,通过C型来配置,B型进行的配置无效。
还有一个值得注意的是读写顺序,如下:
具体的程序编写流程可以参照下面的示范程序:
另外还有Tgate和同步模式,跟16位的使用是一样的。
还有一种情况,就是定时器在节能模式下的应用。
很显然,在睡眠模式下,系统时钟停止工作,所以基于内部时钟的同步也同时工作,只有A模式的异步时钟可用,此时选用辅助时钟的话,A型还可以继续使用。
在IDLE 模式下,如果设置了在idle模式下继续可用的位使能,则模块可以继续工作。
外设需要使用定时器的情况:
-
输入捕捉和输出比较可以用定时器作为时钟源,具体在具体的外设介绍中进行设置。
-
C型的定时器可以作为AD转换的触发信号
-
用外部时钟作为定时器的时钟,可以做为一个外部中断
-
设置为外部时钟或者Tgate模式时,引脚需要配置方向,而作为定时器时无需配置方向
在异步模式下,使用定时器1的资料,可以参考如下的官方文档:
http://ww1.microchip.com/downloads/en/DeviceDoc/70244B.pdf
用户403664 2013-12-18 17:16
用户1714690 2013-12-18 17:01
用户403664 2013-12-17 11:52