我在调试一个map430f149单片机的程序,有两个疑问,请求高手解惑啊
麻烦大家帮忙看看这个程序我用的是msp430f149单片机,在一个简单的点亮LED的程序中,为什么在进入低功耗模式后,cpu被禁止了,LED等还能被循环点亮,不是cpu已...
麻烦大家帮忙看看这个程序 我用的是msp430f149单片机,在一个简单的点亮LED的程序中,为什么在进入低功耗模式后,cpu被禁止了,LED等还能被循环点亮,不是cpu已经休眠了吗?控制信号是哪里来的啊?还有msp430f149默认的时钟不是DCOCTK吗?为什么可以对ACLK直接进行分频,难道默认的是ACLK? #include <msp430x14x.h>
#include "BoardConfig.h"int i;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
BoardConfig(0xf0); //关闭数码管和电平转换,打开流水灯
BCSCTL1 |=DIVA_1; //系统默认的不是DCCTL吗?为什么没有对时钟进行设置就可以直接分频
CCTL0 = CCIE; //使能CCR0中断
CCR0 = 2047; //设定周期0.5S
TACTL = TASSEL_1 + ID_3 + MC_1; //定时器A的时钟源选择ACLK,增计数模式
P2DIR = 0xff; //设置P2口方向为输出
P2OUT = 0xff;
_EINT(); //使能全局中断
LPM3; //CPU进入LPM3模式
}#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
P2OUT = ~P2OUT; //P2口输出取反
}
嗯 很感谢 还想问一下 如果我想要使LED循环点亮10次侯熄灭, 在主程序中设置一个变量进行计数 那么有哪些方式可以在计数完后退出中断?可以通过让计数器工作在停止模式或者是设置标志位,都行吗? 展开
#include "BoardConfig.h"int i;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
BoardConfig(0xf0); //关闭数码管和电平转换,打开流水灯
BCSCTL1 |=DIVA_1; //系统默认的不是DCCTL吗?为什么没有对时钟进行设置就可以直接分频
CCTL0 = CCIE; //使能CCR0中断
CCR0 = 2047; //设定周期0.5S
TACTL = TASSEL_1 + ID_3 + MC_1; //定时器A的时钟源选择ACLK,增计数模式
P2DIR = 0xff; //设置P2口方向为输出
P2OUT = 0xff;
_EINT(); //使能全局中断
LPM3; //CPU进入LPM3模式
}#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
P2OUT = ~P2OUT; //P2口输出取反
}
嗯 很感谢 还想问一下 如果我想要使LED循环点亮10次侯熄灭, 在主程序中设置一个变量进行计数 那么有哪些方式可以在计数完后退出中断?可以通过让计数器工作在停止模式或者是设置标志位,都行吗? 展开
3个回答
展开全部
需要说明的是该程序的功能是用定时器A的定时功能,对LED周期性的循环点亮。定时器A与CPU用的时钟源可以说是相互独立的(定时器A的时钟源选择MCLK时除外)。所以,当CPU进入休眠时,只要定时器A的时钟正常,他就能正常计数,产生定时间隔,也就能产生中断。
你的程序中TACTL = TASSEL_1 + ID_3 + MC_1; 定时器A的时钟源选择是ACLK,而CPU默认的是DCOCLK,两者并不冲突。这样写BCSCTL1 |=DIVA_1; 当然可以了(个人觉得这里没必要分频)。至于LPM3; 这句可要可不要。要的话,只要保证CPU进入低功耗时,你的定时器A的时钟ACLK正常工作就行。
不知道,这样说能明白不?
你的程序中TACTL = TASSEL_1 + ID_3 + MC_1; 定时器A的时钟源选择是ACLK,而CPU默认的是DCOCLK,两者并不冲突。这样写BCSCTL1 |=DIVA_1; 当然可以了(个人觉得这里没必要分频)。至于LPM3; 这句可要可不要。要的话,只要保证CPU进入低功耗时,你的定时器A的时钟ACLK正常工作就行。
不知道,这样说能明白不?
展开全部
TACTL = TASSEL_1 + ID_3 + MC_1;
选定定时器时钟源为ACLK
LPM3 下ACLK一直在活动的
选定定时器时钟源为ACLK
LPM3 下ACLK一直在活动的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把LPM3改成while(1){}
追问
为什么LPM模式下主程序能像while(1)一样进入死循环而不跳出主程序?如果没有这两句话是不是CPU在执行完主程序以后就停止工作了?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询