/******************************************************************************
// MSP430F20xx Demo - Timer_A, Toggle P1.0, CCR0 Cont. Mode ISR, DCO SMCLK
//
// Description: Toggle P1.0 using software and TA_0 ISR. Toggles every
// 50000 SMCLK cycles. SMCLK provides clock source for TACLK.
// During the TA_0 ISR, P1.0 is toggled and 50000 clock cycles are added to
// CCR0. TA_0 ISR is triggered every 50000 cycles. CPU is normally off and
// used only during TA_ISR.
// ACLK = n/a, MCLK = SMCLK = TACLK = default DCO
//
// MSP430F20xx
// ---------------
// /|\| XIN|-
// | | |
// --|RST XOUT|-
// | |
// | P1.0|-->LED
//
// M. Buccini / L. Westlund
// Texas Instruments Inc.
// October 2005
// Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.40A
******************************************************************************/
/****************************************************************************
* 定时器A翻转P1.0LED,CCR0计数模式,中断服务程序。捕获比较模式
* 软件设置翻转P1.0端口的LED,翻转周期是50000个时钟周期,SMCLK(外设时钟) 为定时器A时钟(TACLK)提供时钟源 .
* 在定时器A的中断服务程序中,P1.0被翻转,5000个时钟周期被加在CCR0上。
* 定时器A的中断服务程序每50000次被触发一次,在定时器A中断服务程序中,CPU正常的时候是关闭的,只有定时器A在运行。
*****************************************************************************/
#include
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 禁止看门狗
P1DIR |= 0x01; // P1.0 设置为输出方向
CCTL0 = CCIE; // CCR0 中断使能
CCR0 = 50000;
TACTL = TASSEL_2 + MC_2; // TA外设时钟计数模式
_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt 进入LPM0中断模式
}
// 定时器中断服务程序
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
P1OUT ^= 0x01; // P1.0翻转
CCR0 += 50000; // CCR0增加计数(根据实际这句话去掉也可以)
} |