这两天来我一直在看《MCU工程师炼成记》,拿着LaunchPad做实验。
先谈谈这两天来的收获:
知道了G2553有几个定时器Timer(不知道这样表述有没有错误准不准确)。
首先Timer0_A有两个捕获比较模块: Timer0_A0,Timer0_A1.这两个模块不是完全一样的。具体执行结果是怎么样的,还要看代码是怎么写的。
我写了两段代码,用两个不同的模块,执行结果完全不同。
TEST1:
#include
/*
* main.c
*/
typedef unsigned char u8;
typedef unsigned int u16;
u8 i;
void main(void)
{
//关闭看门狗
WDTCTL = WDTPW + WDTHOLD;
//设置P1.0为输出
P1DIR |= BIT0;
//设置定时器中断使能
CCTL0 = CCIE;
//设置中断间隔
CCR0 = 0xc350;
//设置Timer_A的时钟源为SMCLK,工作模式为UP模式
TACTL = TASSEL_2 + MC_1;
//MSP430进入低功耗模式LPM0,并使能全局中断
_BIS_SR(LPM0_bits + GIE);
i = 0;
}
//Timer_A0中断服务程序
#pragma vector = TIMER0_A0_VECTOR
__interrupt void Timer_A0(void)
{
i++;
if(i == 20)
{
//翻转P1.3管脚输出电平
P1OUT ^= BIT0;
i = 0;
}
}
TEST2:
#include
/*
* main.c
*/
typedef unsigned char u8;
typedef unsigned int u16;
u8 i;
void main(void)
{
//关闭看门狗
WDTCTL = WDTPW + WDTHOLD;
//设置P1.0为输出
P1DIR |= BIT0;
//设置定时器中断使能
CCTL1 = CCIE;
//设置中断间隔
CCR1 = 0xc350;
//设置Timer_A的时钟源为SMCLK,工作模式为UP模式
TACTL = TASSEL_2 + MC_1;
//MSP430进入低功耗模式LPM0,并使能全局中断
_BIS_SR(LPM0_bits + GIE);
i = 0;
}
//Timer_A1中断服务程序
#pragma vector = TIMER0_A1_VECTOR
__interrupt void Timer_A1(void)
{
i++;
if(i == 20)
{
//翻转P1.3管脚输出电平
P1OUT ^= BIT0;
i = 0;
}
}
在CCS中看到的结果如下:本文含有来自论坛的附件或图片点击查看原帖附件。
本文来自论坛,点击查看完整帖子内容。