(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