文章转载自网络-----------------感谢原作者的辛勤奉献
MSP430的定时器中有比较捕获
比较模式:
这是定时器的默认模式,当在比较模式下的时候,与捕获模式相关的硬件停止工作,如果这个时候开启定时器中断,然后设置定时器终值(Rx),开启定时器,Rx的时候,IFGx置一,同时产生中断。IFGx置一。
例子:比较模式就像51单片机一样,要能够软件设置定时间隔来产生中断处理一些事情,如键盘扫描,也可以结合信号输出产生时序脉冲发生器,PWM信号发生器。如:Rx,启动定时器,Rx比较产生中断处理。
捕获模式:
利用外部信号的上升沿、下降沿或上升下降沿触发来测量外部或内部事件,也可以由软件停止。IxB,GND,VCC。IFGx置一
捕获模式的应用:
利用捕获源的来触发捕获TAR的值,Rx中,Rx的值,Rx是个16位的寄存器,捕获模式用于事件的精确定位。如测量时间、频率、速度等
例子:利用两次捕获的值来测量脉冲的宽度。ISx=”11“(),与GND发生切换时产生捕获条件
结合利用:异步通讯
同时应用比较模式和捕获模式来实现UART异步通信。即利用定时器的比较模式来模拟通讯时序的波特率来发送数据,同时采用捕获模式来接收数据,并及时转换比较模式来选定调整通信的接受波特率,达到几首一个字节的目的
----------------------------------------
利用MSP430单片机定时器A和捕获/比较功能模块结合使用,实现脉冲宽度的测量。
I1A端口()作捕获外部输入的脉冲电平跳变,同时结合简单的软件算法就能实现脉冲宽度的测量。在实际应用中可根据例程中的start,end,overflow三个变量来计算脉冲宽度。此功能模块在实际产品应用中体现出有较高的应用价值。
2-例程
#include <>
unsigned int start,end;
unsigned char overflow;
void main (void)
{
WDTCTL = WDTPW+WDTHOLD; //关闭看门狗定时器
P1DIR = BIT0+BIT4; //
P1SEL = BIT2; //
TACTL = TASSEL0+TACLR+TAIE+MC1; //定时器A时钟信号选择ACLK,同时设置定时器A计数模式为连续增计模式
CCTL1 = MC0+SCS+IE; //I0A为捕获信号源
_EINT(); //中断允许
while(1); //LOOP
}
#pragma vector=TIMERA1_VECTOR //定时器A中断处理
__interrupt void timer_a(void)
{
switch(TAIV) //向量查询
{ case 2: //捕获中断
TL1&CM0) //上升沿
{
CCTL1=(CCTL1&(~CM0))|CM1; //更变设置为下降沿触发
start=TAR; //记录初始时间
overflow=0; //溢出计数变量复位
}
else if (CCTL1&CM1) //下降沿
{
CCTL1=(CCTL1&(~CM1))|CM0; //更变设置为上升沿触发
end=TAR; //用start,end,overflow计算脉冲宽度
}
break;
case 10: //定时器溢出中断
overflow++;
break; //溢出计数加1
default:break;
}
}
//例程结束
-----------------------------------
-----------------------------------
msp430单片机定时器Timer_A
Timer_A定时器:
注:。
主要有TACTL,R2,TAIV几个寄存器。其中最主要的是TACTL寄存器,它决定Timer_A的输入时钟信号,Timer_A的工作模式,Timer_A的开启与停止,中断的申请等。
定时器A大致可分为四个功能模块:计数器、比较/捕获寄存器0、比较/捕获寄存器1、比较/捕获寄存器2。计数器是主体它是一个开启和关闭的定时器,如果开启它就是一直在循环计数,只会有一个溢出中断,也就是当计数由0xffff到0时会产生一个中断。那怎么实现定时功能呢?这就要靠三个比较/R0比较特殊,通过他可以改变计数器的最大计数值,R0的值时自动会将计数
【精品】MSP430定时器A中文超级详解 来自淘豆网www.taodocs.com转载请标明出处.