关于定时器本章就不详解了,大家可以参考之前的文章或者直接查阅用户手册进行学习
关于定时器何时选用溢出中断还是比较捕获中断请参考以下博客
中断解惑
定时器A捕获模式以F149为例请参考以下博客
捕获模式参考定时器A
接下来介绍本人使用的定时器B,定时器B和A基本差不多定时器B具有7个比较捕获单元儿定时器A只有三个
定时器基本原理本章就不细讲了可参考之前的定时器A
定时器A详解
本章着重讲解定时器的捕获模式
定时器B的比较捕获模块使用CAP这位来进行选择
当CAP=1选择捕获模块也就是本章介绍的模式
当CAP=0选择比较模块
使用CCISX位选择外部信号CCIA或CCIB或者内部信号
CMX位选择上升沿捕获下降沿捕获或者上升沿下降沿都捕获,如果发生了捕获事件时间值会被记录在TBCCRX寄存器中,同时CCIFG会被置一,输入的电平信号可以通过CCI位被任意时刻进行读取。
捕获事件对于对于时钟来说可能是同步捕获或者异步捕获,通过SCS位设置是同步捕获或者异步捕获!
定时器B捕获模式包含了逻辑溢出模块,(COV)用来指示在进行读取第一次捕获值之前是否进行了第二次捕获,所以在退出中断函数之前需要判断COV位并在最后进行复位
定时器B还有一个比较有特点的是可以进行分组,将7个定时器分成几组
<>
<>
<>
<>
<>
部分代码(完整工程下方有百度网盘链接)
#include "msp430x16x.h"
#include "System_clock.h"
#include "GPIO.h"
#include "timerb.h"
#include "delay.h"
/*
芯片:MSP430F169
功能:使用定时器B捕捉外部信号
端口:
P42 P44 作为触发信号 P42以1.2S一个周期发送100MS高电平公1500次
P44按键触发 发送1.2S周期100MS高电平
P41 P43 P45复用为定时器B捕获模式捕获外部反馈信号
P41捕获外部按键的低电平
P43 P45捕获反馈信号高电平
P64 作为反馈信号指示灯
捕获到反馈信号上升LED闪烁
*/
unsigned int i;
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
System_clock();
GPIO_init();
timerb_init