新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > MSP430F149 定时器

MSP430F149 定时器

作者:时间:2016-12-02来源:网络收藏
(1)利用定时器A的模式2(连续)实现的定时资料

利用定时器A的模式2(连续)实现的定时资料 在程序中对TACTL的控制,当TACTL为如下的赋值时

TACTL = TASSEL_2 + MC_2 + TAIE; // SMCLK, contmode, interrupt

可以改变TASSEL_X来实现不同的定时,

当为TASSEL_1时选ACLK为定时时钟,可以实现最短2S的定时,其次为2S的倍数的定时。

当为TASSEL_2时选 SMCLK为定时时钟,定时取决于SMCLK的时钟源,

1、SMCLK选 DCO = 800KHZ为时钟源,最短定时时间 为 0.08S 的定时,其次为其倍数。
2、SMCLK选 XT2也即外部高频晶振,此时定时取决于晶振频率,及其对分频的设置上。主要是设置BCSCTL1及 BCSCTS2.

BCSCTL1 &= ~XT2OFF;
BCSCTL2 |= SELS + DIVS_3;

通过对上面两句的不同设置,可实现不同的延时。



/******************************************************************************
// MSP-FET430P140 Demo - Timer_A, Toggle P3.4, Overflow ISR, DCO SMCLK
//
// Description: Toggle P3.4 using software and Timer_A overflow ISR.
// In this example an ISR triggers when TA overflows. Inside the TA
// overflow ISR P3.4 is toggled. Toggle rate is approximatlely 12Hz.
// Proper use of the TAIV interrupt vector generator is demonstrated.
// ACLK = n/a, MCLK = SMCLK = TACLK = default DCO ~800kHz
//
//MSP430F149
// ---------------
// /|| XIN|-
// | | |
// --|RST XOUT|-
// | |
// | P3.4|-->LED
//
// Dasheng
// LiTian Electronic Inc.
// Feb 2008
// Built with IAR Embedded Workbench Version: 3.42A
功 能: 由定时器A,采用800KHz的DCO,来实现近一秒的定时中断;
计算方法: T = 1/800,000 = 1.25uS so 根据连续计数模式,当计到0XFFFF时,发生溢出中断
因此溢出一次的时间是: 65536*1.25 = 0.0819S,所以计时1秒需12次溢出。
******************************************************************************/

#include

typedef unsigned char uchar;
typedef unsigned int uint;
uchar flag=0;

void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
BCSCTL1 &= ~XT2OFF;
BCSCTL2 |= SELS + DIVS_3;

3DIR|= BIT4;

TACTL = TASSEL_2 + MC_2 + TAIE; // SMCLK, contmode, interrupt
_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt

}
// Timer_A3 Interrupt Vector (TAIV) handler
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A(void)
{
switch( TAIV )
{
case 2: break; // CCR1 not used
case 4: break; // CCR2 not used
case 10: P4OUT ^= BIT5; // overflow
break;
}
}

/*

// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
P4OUT ^= BIT5; // Toggle P3.4
}

*/

(2)利用定时器A的模式1(上升)实现的定时资料

此时要用到TACCTL0 及 TACCR0 ,根据设定的不同的TACCR0及不同的TASSEL_X即可实现不同的定时。

但此时的中断程序要改变。

对定时器A的中断的说明:

1、TIMERA1_VECTOR 的中断地址为 0XFFEA, 此中断入口地址包含3个中断源,属于多源中断,通过TAIV的值,可以知道是哪个源的中断,当TAIV 为0X02H时 中断源为 TACCR1 CCR1IFG

当TAIV 为0X04H时,中断源为 TACCR2 CCR2IFG

当TAIV 为0X0AH时,中断源为 TA OVERFLOW TAIFG

2、TIMERA0_VECTOR 的中断地址为 0XFFEC 为单源中断,中断源为TACCR0 CCR0IFG


上一页 1 2 下一页

关键词: MSP430F149定时

评论


技术专区

关闭